@skodaflow/web-library 8.1.0 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/cjs/components/advancedTable/agGrid.js +1 -1
  2. package/cjs/components/advancedTable/agGrid.js.map +1 -1
  3. package/cjs/components/banner/Banner.js +1 -1
  4. package/cjs/components/banner/Banner.js.map +1 -1
  5. package/cjs/components/bottomSheet/BottomSheet.js +1 -1
  6. package/cjs/components/bottomSheet/BottomSheet.js.map +1 -1
  7. package/cjs/components/bypassBlock/BypassBlock.js +1 -1
  8. package/cjs/components/bypassBlock/BypassBlock.js.map +1 -1
  9. package/cjs/components/carousel/Autoplay.js +1 -1
  10. package/cjs/components/carousel/Autoplay.js.map +1 -1
  11. package/cjs/components/carousel/Carousel.js +1 -1
  12. package/cjs/components/carousel/Carousel.js.map +1 -1
  13. package/cjs/components/carousel/Navigation.js +1 -1
  14. package/cjs/components/carousel/Navigation.js.map +1 -1
  15. package/cjs/components/carousel/Pagination.d.ts +6 -6
  16. package/cjs/components/carousel/Pagination.js +1 -1
  17. package/cjs/components/carousel/Pagination.js.map +1 -1
  18. package/cjs/components/carousel/Slide.js +1 -1
  19. package/cjs/components/carousel/Slide.js.map +1 -1
  20. package/cjs/components/errorContent/ErrorContent.js +1 -1
  21. package/cjs/components/errorContent/ErrorContent.js.map +1 -1
  22. package/cjs/components/flag/FlowFlag.js +1 -1
  23. package/cjs/components/flag/FlowFlag.js.map +1 -1
  24. package/cjs/components/footer/Footer.js +1 -1
  25. package/cjs/components/footer/Footer.js.map +1 -1
  26. package/cjs/components/footer/FooterAccordion.js +1 -1
  27. package/cjs/components/footer/FooterAccordion.js.map +1 -1
  28. package/cjs/components/footer/FooterLink.js +1 -1
  29. package/cjs/components/footer/FooterLink.js.map +1 -1
  30. package/cjs/components/footer/FooterMenu.js +1 -1
  31. package/cjs/components/footer/FooterMenu.js.map +1 -1
  32. package/cjs/components/footer/FooterSectionContact.js +1 -1
  33. package/cjs/components/footer/FooterSectionContact.js.map +1 -1
  34. package/cjs/components/footer/FooterSectionLinks.js +1 -1
  35. package/cjs/components/footer/FooterSectionLinks.js.map +1 -1
  36. package/cjs/components/footer/FooterSectionMenu.js +1 -1
  37. package/cjs/components/footer/FooterSectionMenu.js.map +1 -1
  38. package/cjs/components/formMessage/FormMessage.js +1 -1
  39. package/cjs/components/formMessage/FormMessage.js.map +1 -1
  40. package/cjs/components/header/Header.js +1 -1
  41. package/cjs/components/header/Header.js.map +1 -1
  42. package/cjs/components/header/HeaderButton.js +1 -1
  43. package/cjs/components/header/HeaderButton.js.map +1 -1
  44. package/cjs/components/header/HeaderLanguageSelect.d.ts +6 -6
  45. package/cjs/components/header/HeaderLanguageSelect.js +1 -1
  46. package/cjs/components/header/HeaderLanguageSelect.js.map +1 -1
  47. package/cjs/components/header/HeaderLogo.d.ts +2 -2
  48. package/cjs/components/header/HeaderLogo.js +1 -1
  49. package/cjs/components/header/HeaderLogo.js.map +1 -1
  50. package/cjs/components/header/HeaderNavigationHero.js +1 -1
  51. package/cjs/components/header/HeaderNavigationHero.js.map +1 -1
  52. package/cjs/components/header/HeaderNavigationLink.js +1 -1
  53. package/cjs/components/header/HeaderNavigationLink.js.map +1 -1
  54. package/cjs/components/header/HeaderNavigationMenu.js +1 -1
  55. package/cjs/components/header/HeaderNavigationMenu.js.map +1 -1
  56. package/cjs/components/hotspotCard/HotspotCard.js +1 -1
  57. package/cjs/components/hotspotCard/HotspotCard.js.map +1 -1
  58. package/cjs/components/icon/stroke/SoundwaveIcon.js +1 -1
  59. package/cjs/components/icon/stroke/SoundwaveIcon.js.map +1 -1
  60. package/cjs/components/image/Image.d.ts +5 -1
  61. package/cjs/components/image/Image.js +1 -1
  62. package/cjs/components/image/Image.js.map +1 -1
  63. package/cjs/components/index.d.ts +1 -0
  64. package/cjs/components/label/Label.js +1 -1
  65. package/cjs/components/label/Label.js.map +1 -1
  66. package/cjs/components/logo/Logo.js +1 -1
  67. package/cjs/components/logo/Logo.js.map +1 -1
  68. package/cjs/components/notification/Notification.d.ts +2 -2
  69. package/cjs/components/notification/Notification.js +1 -1
  70. package/cjs/components/notification/Notification.js.map +1 -1
  71. package/cjs/components/notification/NotificationCenter.js +1 -1
  72. package/cjs/components/notification/NotificationCenter.js.map +1 -1
  73. package/cjs/components/notification/NotificationCenterCategory.js +1 -1
  74. package/cjs/components/notification/NotificationCenterCategory.js.map +1 -1
  75. package/cjs/components/notification/NotificationCenterHeaderButton.js +1 -1
  76. package/cjs/components/notification/NotificationCenterHeaderButton.js.map +1 -1
  77. package/cjs/components/overlay/Overlay.js +1 -1
  78. package/cjs/components/overlay/Overlay.js.map +1 -1
  79. package/cjs/components/pageLayout/PageLayout.js +1 -1
  80. package/cjs/components/pageLayout/PageLayout.js.map +1 -1
  81. package/cjs/components/playPauseButton/PlayPauseButton.js +1 -1
  82. package/cjs/components/playPauseButton/PlayPauseButton.js.map +1 -1
  83. package/cjs/components/progress/Loader.js +1 -1
  84. package/cjs/components/progress/Loader.js.map +1 -1
  85. package/cjs/components/progress/LoadingText.js +1 -1
  86. package/cjs/components/progress/LoadingText.js.map +1 -1
  87. package/cjs/components/progress/ProgressState.js +1 -1
  88. package/cjs/components/progress/ProgressState.js.map +1 -1
  89. package/cjs/components/progress/Spinner.js +1 -1
  90. package/cjs/components/progress/Spinner.js.map +1 -1
  91. package/cjs/components/promptBar/PromptAttachments.d.ts +58 -0
  92. package/cjs/components/promptBar/PromptAttachments.js +2 -0
  93. package/cjs/components/promptBar/PromptAttachments.js.map +1 -0
  94. package/cjs/components/promptBar/PromptBar.d.ts +71 -0
  95. package/cjs/components/promptBar/PromptBar.js +2 -0
  96. package/cjs/components/promptBar/PromptBar.js.map +1 -0
  97. package/cjs/components/promptBar/PromptSubmitIconButton.d.ts +54 -0
  98. package/cjs/components/promptBar/PromptSubmitIconButton.js +2 -0
  99. package/cjs/components/promptBar/PromptSubmitIconButton.js.map +1 -0
  100. package/cjs/components/promptBar/index.d.ts +3 -0
  101. package/cjs/components/quickLink/QuickLink.d.ts +3 -3
  102. package/cjs/components/quickLink/QuickLink.js +1 -1
  103. package/cjs/components/quickLink/QuickLink.js.map +1 -1
  104. package/cjs/components/search/CollapsableSearch.js +1 -1
  105. package/cjs/components/search/CollapsableSearch.js.map +1 -1
  106. package/cjs/components/search/Search.d.ts +9 -1
  107. package/cjs/components/search/Search.js +1 -1
  108. package/cjs/components/search/Search.js.map +1 -1
  109. package/cjs/components/secondaryNavigation/SecondaryNavigation.js +1 -1
  110. package/cjs/components/secondaryNavigation/SecondaryNavigation.js.map +1 -1
  111. package/cjs/components/shortcut/Shortcut.js +1 -1
  112. package/cjs/components/shortcut/Shortcut.js.map +1 -1
  113. package/cjs/components/skodaThemeProvider/SkodaThemeProvider.js +1 -1
  114. package/cjs/components/skodaThemeProvider/SkodaThemeProvider.js.map +1 -1
  115. package/cjs/components/spacing/Spacing.js +1 -1
  116. package/cjs/components/spacing/Spacing.js.map +1 -1
  117. package/cjs/components/textAndCta/AppStoreButton.js +1 -1
  118. package/cjs/components/textAndCta/AppStoreButton.js.map +1 -1
  119. package/cjs/components/textAndCta/TextAndCta.js +1 -1
  120. package/cjs/components/textAndCta/TextAndCta.js.map +1 -1
  121. package/cjs/components/tooltipHeader/TooltipHeader.js +1 -1
  122. package/cjs/components/tooltipHeader/TooltipHeader.js.map +1 -1
  123. package/cjs/components/upload/components/uploadList/UploadList.js +1 -1
  124. package/cjs/components/upload/components/uploadList/UploadList.js.map +1 -1
  125. package/cjs/components/upload/components/uploadList/UploadListItem.js +1 -1
  126. package/cjs/components/upload/components/uploadList/UploadListItem.js.map +1 -1
  127. package/cjs/components/upload/components/uploadPreview/UploadPreview.js +1 -1
  128. package/cjs/components/upload/components/uploadPreview/UploadPreview.js.map +1 -1
  129. package/cjs/components/upload/components/uploadPreview/UploadPreviewImage.js +1 -1
  130. package/cjs/components/upload/components/uploadPreview/UploadPreviewImage.js.map +1 -1
  131. package/cjs/components/upload/components/uploadWrapper/UploadContent.js +1 -1
  132. package/cjs/components/upload/components/uploadWrapper/UploadContent.js.map +1 -1
  133. package/cjs/components/upload/components/uploadWrapper/UploadWrapper.js +1 -1
  134. package/cjs/components/upload/components/uploadWrapper/UploadWrapper.js.map +1 -1
  135. package/cjs/components/video/Video.js +1 -1
  136. package/cjs/components/video/Video.js.map +1 -1
  137. package/cjs/index.js +1 -1
  138. package/cjs/materialui/accordion/AccordionSummaryExpandWrapper.js +1 -1
  139. package/cjs/materialui/accordion/AccordionSummaryExpandWrapper.js.map +1 -1
  140. package/cjs/materialui/autocomplete/autocomplete.theme.js +1 -1
  141. package/cjs/materialui/autocomplete/autocomplete.theme.js.map +1 -1
  142. package/cjs/materialui/card/Card.js +1 -1
  143. package/cjs/materialui/card/Card.js.map +1 -1
  144. package/cjs/materialui/datepicker/datecalendar.theme.d.ts +150 -150
  145. package/cjs/materialui/datepicker/digitalclock.theme.d.ts +149 -149
  146. package/cjs/materialui/datepicker/pickersday.theme.d.ts +1 -1
  147. package/cjs/materialui/datepicker/pickersday.theme.js +1 -1
  148. package/cjs/materialui/datepicker/pickersday.theme.js.map +1 -1
  149. package/cjs/materialui/dialog/DialogTitle.js +1 -1
  150. package/cjs/materialui/dialog/DialogTitle.js.map +1 -1
  151. package/cjs/materialui/dialog/dialogTitle.theme.js +1 -1
  152. package/cjs/materialui/dialog/dialogTitle.theme.js.map +1 -1
  153. package/cjs/materialui/drawer/DrawerContent.d.ts +39 -0
  154. package/cjs/materialui/drawer/DrawerContent.js +2 -0
  155. package/cjs/materialui/drawer/DrawerContent.js.map +1 -0
  156. package/cjs/materialui/drawer/drawer.theme.js +1 -1
  157. package/cjs/materialui/drawer/drawer.theme.js.map +1 -1
  158. package/cjs/materialui/drawer/index.d.ts +2 -0
  159. package/cjs/materialui/iconButton/iconButton.theme.js +1 -1
  160. package/cjs/materialui/iconButton/iconButton.theme.js.map +1 -1
  161. package/cjs/materialui/list/listItemText.theme.js +1 -1
  162. package/cjs/materialui/list/listItemText.theme.js.map +1 -1
  163. package/cjs/materialui/slider/SliderContainer.js +1 -1
  164. package/cjs/materialui/slider/SliderContainer.js.map +1 -1
  165. package/cjs/materialui/slider/SliderValues.js +1 -1
  166. package/cjs/materialui/slider/SliderValues.js.map +1 -1
  167. package/cjs/materialui/stepper/stepConnector.theme.js +1 -1
  168. package/cjs/materialui/stepper/stepConnector.theme.js.map +1 -1
  169. package/cjs/materialui/stepper/stepper.theme.js +1 -1
  170. package/cjs/materialui/stepper/stepper.theme.js.map +1 -1
  171. package/cjs/materialui/tabs/tabs.theme.js +1 -1
  172. package/cjs/materialui/tabs/tabs.theme.js.map +1 -1
  173. package/cjs/materialui/textfield/FormHelperText.js +1 -1
  174. package/cjs/materialui/textfield/FormHelperText.js.map +1 -1
  175. package/cjs/materialui/textfield/HelperTextContent.js +1 -1
  176. package/cjs/materialui/textfield/HelperTextContent.js.map +1 -1
  177. package/cjs/materialui/textfield/filledInput.theme.js +1 -1
  178. package/cjs/materialui/textfield/filledInput.theme.js.map +1 -1
  179. package/cjs/materialui/textfield/inputAdornment.theme.js +1 -1
  180. package/cjs/materialui/textfield/inputAdornment.theme.js.map +1 -1
  181. package/cjs/materialui/textfield/inputBase.theme.js +1 -1
  182. package/cjs/materialui/textfield/inputBase.theme.js.map +1 -1
  183. package/cjs/materialui/textfield/inputLabel.theme.js +1 -1
  184. package/cjs/materialui/textfield/inputLabel.theme.js.map +1 -1
  185. package/cjs/materialui/textfield/textField.theme.js +1 -1
  186. package/cjs/materialui/textfield/textField.theme.js.map +1 -1
  187. package/cjs/materialui/theme/sxConfig.d.ts +2 -0
  188. package/cjs/materialui/theme/sxConfig.js +2 -0
  189. package/cjs/materialui/theme/sxConfig.js.map +1 -0
  190. package/cjs/materialui/theme/theme.extensions.d.ts +9 -0
  191. package/cjs/materialui/theme/theme.js +1 -1
  192. package/cjs/materialui/theme/theme.js.map +1 -1
  193. package/cjs/node_modules/swiper/shared/swiper-core.js +1 -1
  194. package/cjs/node_modules/swiper/shared/swiper-core.js.map +1 -1
  195. package/cjs/node_modules/swiper/swiper-react.js.map +1 -1
  196. package/cjs/utils/index.d.ts +1 -0
  197. package/cjs/utils/sxOverride/index.d.ts +1 -0
  198. package/cjs/utils/sxOverride/sxOverride.d.ts +10 -0
  199. package/cjs/utils/sxOverride/sxOverride.js +2 -0
  200. package/cjs/utils/sxOverride/sxOverride.js.map +1 -0
  201. package/components/advancedTable/agGrid.js +1 -1
  202. package/components/advancedTable/agGrid.js.map +1 -1
  203. package/components/banner/Banner.js +1 -1
  204. package/components/banner/Banner.js.map +1 -1
  205. package/components/bottomSheet/BottomSheet.js +1 -1
  206. package/components/bottomSheet/BottomSheet.js.map +1 -1
  207. package/components/bypassBlock/BypassBlock.js +1 -1
  208. package/components/bypassBlock/BypassBlock.js.map +1 -1
  209. package/components/carousel/Autoplay.js +1 -1
  210. package/components/carousel/Autoplay.js.map +1 -1
  211. package/components/carousel/Carousel.js +1 -1
  212. package/components/carousel/Carousel.js.map +1 -1
  213. package/components/carousel/Navigation.js +1 -1
  214. package/components/carousel/Navigation.js.map +1 -1
  215. package/components/carousel/Pagination.d.ts +6 -6
  216. package/components/carousel/Pagination.js +1 -1
  217. package/components/carousel/Pagination.js.map +1 -1
  218. package/components/carousel/Slide.js +1 -1
  219. package/components/carousel/Slide.js.map +1 -1
  220. package/components/errorContent/ErrorContent.js +1 -1
  221. package/components/errorContent/ErrorContent.js.map +1 -1
  222. package/components/flag/FlowFlag.js +1 -1
  223. package/components/flag/FlowFlag.js.map +1 -1
  224. package/components/footer/Footer.js +1 -1
  225. package/components/footer/Footer.js.map +1 -1
  226. package/components/footer/FooterAccordion.js +1 -1
  227. package/components/footer/FooterAccordion.js.map +1 -1
  228. package/components/footer/FooterLink.js +1 -1
  229. package/components/footer/FooterLink.js.map +1 -1
  230. package/components/footer/FooterMenu.js +1 -1
  231. package/components/footer/FooterMenu.js.map +1 -1
  232. package/components/footer/FooterSectionContact.js +1 -1
  233. package/components/footer/FooterSectionContact.js.map +1 -1
  234. package/components/footer/FooterSectionLinks.js +1 -1
  235. package/components/footer/FooterSectionLinks.js.map +1 -1
  236. package/components/footer/FooterSectionMenu.js +1 -1
  237. package/components/footer/FooterSectionMenu.js.map +1 -1
  238. package/components/formMessage/FormMessage.js +1 -1
  239. package/components/formMessage/FormMessage.js.map +1 -1
  240. package/components/header/Header.js +1 -1
  241. package/components/header/Header.js.map +1 -1
  242. package/components/header/HeaderButton.js +1 -1
  243. package/components/header/HeaderButton.js.map +1 -1
  244. package/components/header/HeaderLanguageSelect.d.ts +6 -6
  245. package/components/header/HeaderLanguageSelect.js +1 -1
  246. package/components/header/HeaderLanguageSelect.js.map +1 -1
  247. package/components/header/HeaderLogo.d.ts +2 -2
  248. package/components/header/HeaderLogo.js +1 -1
  249. package/components/header/HeaderLogo.js.map +1 -1
  250. package/components/header/HeaderNavigationHero.js +1 -1
  251. package/components/header/HeaderNavigationHero.js.map +1 -1
  252. package/components/header/HeaderNavigationLink.js +1 -1
  253. package/components/header/HeaderNavigationLink.js.map +1 -1
  254. package/components/header/HeaderNavigationMenu.js +1 -1
  255. package/components/header/HeaderNavigationMenu.js.map +1 -1
  256. package/components/hotspotCard/HotspotCard.js +1 -1
  257. package/components/hotspotCard/HotspotCard.js.map +1 -1
  258. package/components/icon/stroke/SoundwaveIcon.js +1 -1
  259. package/components/icon/stroke/SoundwaveIcon.js.map +1 -1
  260. package/components/image/Image.d.ts +5 -1
  261. package/components/image/Image.js +1 -1
  262. package/components/image/Image.js.map +1 -1
  263. package/components/index.d.ts +1 -0
  264. package/components/label/Label.js +1 -1
  265. package/components/label/Label.js.map +1 -1
  266. package/components/logo/Logo.js +1 -1
  267. package/components/logo/Logo.js.map +1 -1
  268. package/components/notification/Notification.d.ts +2 -2
  269. package/components/notification/Notification.js +1 -1
  270. package/components/notification/Notification.js.map +1 -1
  271. package/components/notification/NotificationCenter.js +1 -1
  272. package/components/notification/NotificationCenter.js.map +1 -1
  273. package/components/notification/NotificationCenterCategory.js +1 -1
  274. package/components/notification/NotificationCenterCategory.js.map +1 -1
  275. package/components/notification/NotificationCenterHeaderButton.js +1 -1
  276. package/components/notification/NotificationCenterHeaderButton.js.map +1 -1
  277. package/components/overlay/Overlay.js +1 -1
  278. package/components/overlay/Overlay.js.map +1 -1
  279. package/components/pageLayout/PageLayout.js +1 -1
  280. package/components/pageLayout/PageLayout.js.map +1 -1
  281. package/components/playPauseButton/PlayPauseButton.js +1 -1
  282. package/components/playPauseButton/PlayPauseButton.js.map +1 -1
  283. package/components/progress/Loader.js +1 -1
  284. package/components/progress/Loader.js.map +1 -1
  285. package/components/progress/LoadingText.js +1 -1
  286. package/components/progress/LoadingText.js.map +1 -1
  287. package/components/progress/ProgressState.js +1 -1
  288. package/components/progress/ProgressState.js.map +1 -1
  289. package/components/progress/Spinner.js +1 -1
  290. package/components/progress/Spinner.js.map +1 -1
  291. package/components/promptBar/PromptAttachments.d.ts +58 -0
  292. package/components/promptBar/PromptAttachments.js +2 -0
  293. package/components/promptBar/PromptAttachments.js.map +1 -0
  294. package/components/promptBar/PromptBar.d.ts +71 -0
  295. package/components/promptBar/PromptBar.js +2 -0
  296. package/components/promptBar/PromptBar.js.map +1 -0
  297. package/components/promptBar/PromptSubmitIconButton.d.ts +54 -0
  298. package/components/promptBar/PromptSubmitIconButton.js +2 -0
  299. package/components/promptBar/PromptSubmitIconButton.js.map +1 -0
  300. package/components/promptBar/index.d.ts +3 -0
  301. package/components/quickLink/QuickLink.d.ts +3 -3
  302. package/components/quickLink/QuickLink.js +1 -1
  303. package/components/quickLink/QuickLink.js.map +1 -1
  304. package/components/search/CollapsableSearch.js +1 -1
  305. package/components/search/CollapsableSearch.js.map +1 -1
  306. package/components/search/Search.d.ts +9 -1
  307. package/components/search/Search.js +1 -1
  308. package/components/search/Search.js.map +1 -1
  309. package/components/secondaryNavigation/SecondaryNavigation.js +1 -1
  310. package/components/secondaryNavigation/SecondaryNavigation.js.map +1 -1
  311. package/components/shortcut/Shortcut.js +1 -1
  312. package/components/shortcut/Shortcut.js.map +1 -1
  313. package/components/skodaThemeProvider/SkodaThemeProvider.js +1 -1
  314. package/components/skodaThemeProvider/SkodaThemeProvider.js.map +1 -1
  315. package/components/spacing/Spacing.js +1 -1
  316. package/components/spacing/Spacing.js.map +1 -1
  317. package/components/textAndCta/AppStoreButton.js +1 -1
  318. package/components/textAndCta/AppStoreButton.js.map +1 -1
  319. package/components/textAndCta/TextAndCta.js +1 -1
  320. package/components/textAndCta/TextAndCta.js.map +1 -1
  321. package/components/tooltipHeader/TooltipHeader.js +1 -1
  322. package/components/tooltipHeader/TooltipHeader.js.map +1 -1
  323. package/components/upload/components/uploadList/UploadList.js +1 -1
  324. package/components/upload/components/uploadList/UploadList.js.map +1 -1
  325. package/components/upload/components/uploadList/UploadListItem.js +1 -1
  326. package/components/upload/components/uploadList/UploadListItem.js.map +1 -1
  327. package/components/upload/components/uploadPreview/UploadPreview.js +1 -1
  328. package/components/upload/components/uploadPreview/UploadPreview.js.map +1 -1
  329. package/components/upload/components/uploadPreview/UploadPreviewImage.js +1 -1
  330. package/components/upload/components/uploadPreview/UploadPreviewImage.js.map +1 -1
  331. package/components/upload/components/uploadWrapper/UploadContent.js +1 -1
  332. package/components/upload/components/uploadWrapper/UploadContent.js.map +1 -1
  333. package/components/upload/components/uploadWrapper/UploadWrapper.js +1 -1
  334. package/components/upload/components/uploadWrapper/UploadWrapper.js.map +1 -1
  335. package/components/video/Video.js +1 -1
  336. package/components/video/Video.js.map +1 -1
  337. package/index.js +1 -1
  338. package/materialui/accordion/AccordionSummaryExpandWrapper.js +1 -1
  339. package/materialui/accordion/AccordionSummaryExpandWrapper.js.map +1 -1
  340. package/materialui/autocomplete/autocomplete.theme.js +1 -1
  341. package/materialui/autocomplete/autocomplete.theme.js.map +1 -1
  342. package/materialui/card/Card.js +1 -1
  343. package/materialui/card/Card.js.map +1 -1
  344. package/materialui/datepicker/datecalendar.theme.d.ts +150 -150
  345. package/materialui/datepicker/digitalclock.theme.d.ts +149 -149
  346. package/materialui/datepicker/pickersday.theme.d.ts +1 -1
  347. package/materialui/datepicker/pickersday.theme.js +1 -1
  348. package/materialui/datepicker/pickersday.theme.js.map +1 -1
  349. package/materialui/dialog/DialogTitle.js +1 -1
  350. package/materialui/dialog/DialogTitle.js.map +1 -1
  351. package/materialui/dialog/dialogTitle.theme.js +1 -1
  352. package/materialui/dialog/dialogTitle.theme.js.map +1 -1
  353. package/materialui/drawer/DrawerContent.d.ts +39 -0
  354. package/materialui/drawer/DrawerContent.js +2 -0
  355. package/materialui/drawer/DrawerContent.js.map +1 -0
  356. package/materialui/drawer/drawer.theme.js +1 -1
  357. package/materialui/drawer/drawer.theme.js.map +1 -1
  358. package/materialui/drawer/index.d.ts +2 -0
  359. package/materialui/iconButton/iconButton.theme.js +1 -1
  360. package/materialui/iconButton/iconButton.theme.js.map +1 -1
  361. package/materialui/list/listItemText.theme.js +1 -1
  362. package/materialui/list/listItemText.theme.js.map +1 -1
  363. package/materialui/slider/SliderContainer.js +1 -1
  364. package/materialui/slider/SliderContainer.js.map +1 -1
  365. package/materialui/slider/SliderValues.js +1 -1
  366. package/materialui/slider/SliderValues.js.map +1 -1
  367. package/materialui/stepper/stepConnector.theme.js +1 -1
  368. package/materialui/stepper/stepConnector.theme.js.map +1 -1
  369. package/materialui/stepper/stepper.theme.js +1 -1
  370. package/materialui/stepper/stepper.theme.js.map +1 -1
  371. package/materialui/tabs/tabs.theme.js +1 -1
  372. package/materialui/tabs/tabs.theme.js.map +1 -1
  373. package/materialui/textfield/FormHelperText.js +1 -1
  374. package/materialui/textfield/FormHelperText.js.map +1 -1
  375. package/materialui/textfield/HelperTextContent.js +1 -1
  376. package/materialui/textfield/HelperTextContent.js.map +1 -1
  377. package/materialui/textfield/filledInput.theme.js +1 -1
  378. package/materialui/textfield/filledInput.theme.js.map +1 -1
  379. package/materialui/textfield/inputAdornment.theme.js +1 -1
  380. package/materialui/textfield/inputAdornment.theme.js.map +1 -1
  381. package/materialui/textfield/inputBase.theme.js +1 -1
  382. package/materialui/textfield/inputBase.theme.js.map +1 -1
  383. package/materialui/textfield/inputLabel.theme.js +1 -1
  384. package/materialui/textfield/inputLabel.theme.js.map +1 -1
  385. package/materialui/textfield/textField.theme.js +1 -1
  386. package/materialui/textfield/textField.theme.js.map +1 -1
  387. package/materialui/theme/sxConfig.d.ts +2 -0
  388. package/materialui/theme/sxConfig.js +2 -0
  389. package/materialui/theme/sxConfig.js.map +1 -0
  390. package/materialui/theme/theme.extensions.d.ts +9 -0
  391. package/materialui/theme/theme.js +1 -1
  392. package/materialui/theme/theme.js.map +1 -1
  393. package/package.json +1 -1
  394. package/utils/index.d.ts +1 -0
  395. package/utils/sxOverride/index.d.ts +1 -0
  396. package/utils/sxOverride/sxOverride.d.ts +10 -0
  397. package/utils/sxOverride/sxOverride.js +2 -0
  398. package/utils/sxOverride/sxOverride.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressState.js","sources":["../../../src/components/progress/ProgressState.tsx"],"sourcesContent":["import React, { ElementType, ReactNode, forwardRef, useMemo, ComponentType } from 'react';\nimport { Box, BoxProps, SvgIconProps } from '@mui/material';\nimport { CheckIcon } from '@/src/components/icon/stroke/CheckIcon';\nimport { CloseIcon } from '@/src/components/icon/stroke/CloseIcon';\nimport { LoadingText, LoadingTextProps } from './LoadingText';\n\nexport interface ProgressStateProps extends BoxProps<ElementType> {\n /**\n * Affects component size\n * @default medium\n */\n size?: 'small' | 'medium' | number;\n /**\n * State to display\n */\n state?: 'error' | 'success';\n /**\n * Message when success appears\n */\n successMessage?: ReactNode;\n /**\n * Message when error appears\n */\n errorMessage?: ReactNode;\n /**\n * Properties applied to message wrapper\n */\n messageProps?: LoadingTextProps;\n /**\n * Overwrites state message (successMessage or errorMessage)\n */\n message?: ReactNode;\n /**\n * Properties applied to icon component\n */\n iconProps?: SvgIconProps;\n /**\n * Overwrites state icon\n */\n IconComponent?: ComponentType<SvgIconProps>;\n /**\n * Properties applied to wrapper of icon\n */\n iconWrapperProps?: BoxProps<ElementType>;\n}\n\n/**\n * Component displaying current state of loading\n */\nexport const ProgressState: React.FC<ProgressStateProps> = forwardRef(\n (\n {\n children,\n sx,\n size = 'medium',\n state,\n message,\n messageProps,\n successMessage,\n errorMessage,\n IconComponent,\n iconProps,\n iconWrapperProps,\n ...rest\n },\n ref,\n ) => {\n const { sx: iconWrapperSx, ...restIconWrapper } = iconWrapperProps ?? {};\n const [IconStateComponent, stateMessage] = useMemo(() => {\n switch (state) {\n case 'error':\n return [CloseIcon, errorMessage];\n case 'success':\n default:\n return [CheckIcon, successMessage];\n }\n }, [state, successMessage, errorMessage]);\n const ProgressStateIcon = IconComponent ?? IconStateComponent;\n\n return (\n <Box\n data-testid=\"ProgressMessageWrapper\"\n ref={ref}\n sx={{\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 1,\n ...sx,\n }}\n {...rest}\n >\n <Box\n key={state}\n sx={{\n '@keyframes flow-progressstate-finished': {\n '0%': {\n transform: 'scale(.8)',\n opacity: '0.8',\n },\n '100%': {\n transform: 'scale(1)',\n opacity: '1',\n },\n },\n animation: 'flow-progressstate-finished 0.4s',\n backgroundColor: (theme) => (theme.palette.mode === 'dark' ? 'brand.secondary' : 'brand.primary'),\n ...(state === 'error' && {\n backgroundColor: 'error.main',\n }),\n color: 'common.white',\n borderRadius: '50%',\n lineHeight: '0',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...(size === 'medium' && {\n // 24px\n p: 0.5,\n '& .MuiSvgIcon-root': {\n fontSize: '16px',\n },\n }),\n ...(size === 'small' && {\n // 16px\n p: 0.25,\n '& .MuiSvgIcon-root': {\n fontSize: '12px',\n },\n }),\n ...(typeof size === 'number' && {\n height: `${size}px`,\n width: `${size}px`,\n }),\n ...iconWrapperSx,\n }}\n {...restIconWrapper}\n >\n <ProgressStateIcon data-testid=\"Icon\" {...iconProps} />\n </Box>\n {(children || stateMessage || message) && (\n <LoadingText\n data-testid=\"ProgressMessage\"\n {...(typeof size !== 'number' && { size: size })}\n {...messageProps}\n >\n {children || stateMessage || message}\n </LoadingText>\n )}\n </Box>\n );\n },\n);\n"],"names":["ProgressState","forwardRef","children","sx","size","state","message","messageProps","successMessage","errorMessage","IconComponent","iconProps","iconWrapperProps","rest","ref","iconWrapperSx","restIconWrapper","IconStateComponent","stateMessage","useMemo","CloseIcon","CheckIcon","_jsxs","Box","display","justifyContent","alignItems","gap","_jsx","transform","opacity","animation","backgroundColor","theme","palette","mode","color","borderRadius","lineHeight","p","fontSize","height","width","LoadingText"],"mappings":"qSAiDO,MAAMA,EAA8CC,EACzD,EAEIC,WACAC,KACAC,OAAO,SACPC,QACAC,UACAC,eACAC,iBACAC,eACAC,gBACAC,YACAC,sBACGC,GAELC,KAEA,MAAQX,GAAIY,KAAkBC,GAAoBJ,GAAoB,CAAA,GAC/DK,EAAoBC,GAAgBC,EAAQ,IAE1C,UADCd,EAEG,CAACe,EAAWX,GAGZ,CAACY,EAAWb,GAEtB,CAACH,EAAOG,EAAgBC,IAG3B,OACEa,EAACC,EAAG,CAAA,cACU,yBACZT,IAAKA,EACLX,GAAI,CACFqB,QAAS,cACTC,eAAgB,SAChBC,WAAY,SACZC,IAAK,KACFxB,MAEDU,EAAIX,SAAA,CAER0B,EAACL,EAAG,CAEFpB,GAAI,CACF,yCAA0C,CACxC,KAAM,CACJ0B,UAAW,YACXC,QAAS,OAEX,OAAQ,CACND,UAAW,WACXC,QAAS,MAGbC,UAAW,mCACXC,gBAAkBC,GAAkC,SAAvBA,EAAMC,QAAQC,KAAkB,kBAAoB,mBACnE,UAAV9B,GAAqB,CACvB2B,gBAAiB,cAEnBI,MAAO,eACPC,aAAc,MACdC,WAAY,IACZd,QAAS,cACTE,WAAY,SACZD,eAAgB,YACH,WAATrB,GAAqB,CAEvBmC,EAAG,GACH,qBAAsB,CACpBC,SAAU,YAGD,UAATpC,GAAoB,CAEtBmC,EAAG,IACH,qBAAsB,CACpBC,SAAU,YAGM,iBAATpC,GAAqB,CAC9BqC,OAAQ,GAAGrC,MACXsC,MAAO,GAAGtC,UAETW,MAEDC,WAEJY,EA7DoBlB,GAAiBO,iBA6DN,UAAWN,KA7CrCN,IA+CLH,GAAYgB,GAAgBZ,IAC5BsB,EAACe,EAAW,CAAA,cACE,qBACS,iBAATvC,GAAqB,CAAEA,KAAMA,MACrCG,EAAYL,SAEfA,GAAYgB,GAAgBZ"}
1
+ {"version":3,"file":"ProgressState.js","sources":["../../../src/components/progress/ProgressState.tsx"],"sourcesContent":["import React, { ElementType, ReactNode, forwardRef, useMemo, ComponentType } from 'react';\nimport { Box, BoxProps, SvgIconProps } from '@mui/material';\nimport { sxOverride } from '@/src/utils/sxOverride';\nimport { CheckIcon } from '@/src/components/icon/stroke/CheckIcon';\nimport { CloseIcon } from '@/src/components/icon/stroke/CloseIcon';\nimport { LoadingText, LoadingTextProps } from './LoadingText';\n\nexport interface ProgressStateProps extends BoxProps<ElementType> {\n /**\n * Affects component size\n * @default medium\n */\n size?: 'small' | 'medium' | number;\n /**\n * State to display\n */\n state?: 'error' | 'success';\n /**\n * Message when success appears\n */\n successMessage?: ReactNode;\n /**\n * Message when error appears\n */\n errorMessage?: ReactNode;\n /**\n * Properties applied to message wrapper\n */\n messageProps?: LoadingTextProps;\n /**\n * Overwrites state message (successMessage or errorMessage)\n */\n message?: ReactNode;\n /**\n * Properties applied to icon component\n */\n iconProps?: SvgIconProps;\n /**\n * Overwrites state icon\n */\n IconComponent?: ComponentType<SvgIconProps>;\n /**\n * Properties applied to wrapper of icon\n */\n iconWrapperProps?: BoxProps<ElementType>;\n}\n\n/**\n * Component displaying current state of loading\n */\nexport const ProgressState: React.FC<ProgressStateProps> = forwardRef(\n (\n {\n children,\n sx,\n size = 'medium',\n state,\n message,\n messageProps,\n successMessage,\n errorMessage,\n IconComponent,\n iconProps,\n iconWrapperProps,\n ...rest\n },\n ref,\n ) => {\n const { sx: iconWrapperSx, ...restIconWrapper } = iconWrapperProps ?? {};\n const [IconStateComponent, stateMessage] = useMemo(() => {\n switch (state) {\n case 'error':\n return [CloseIcon, errorMessage];\n case 'success':\n default:\n return [CheckIcon, successMessage];\n }\n }, [state, successMessage, errorMessage]);\n const ProgressStateIcon = IconComponent ?? IconStateComponent;\n\n return (\n <Box\n data-testid=\"ProgressMessageWrapper\"\n ref={ref}\n sx={sxOverride(\n {\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 1,\n },\n sx,\n )}\n {...rest}\n >\n <Box\n key={state}\n sx={sxOverride(\n {\n '@keyframes flow-progressstate-finished': {\n '0%': {\n transform: 'scale(.8)',\n opacity: '0.8',\n },\n '100%': {\n transform: 'scale(1)',\n opacity: '1',\n },\n },\n animation: 'flow-progressstate-finished 0.4s',\n backgroundColor: (theme) => (theme.palette.mode === 'dark' ? 'brand.secondary' : 'brand.primary'),\n ...(state === 'error' && {\n backgroundColor: 'error.main',\n }),\n color: 'common.white',\n borderRadius: '50%',\n lineHeight: '0',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...(size === 'medium' && {\n // 24px\n p: 0.5,\n '& .MuiSvgIcon-root': {\n fontSize: '16px',\n },\n }),\n ...(size === 'small' && {\n // 16px\n p: 0.25,\n '& .MuiSvgIcon-root': {\n fontSize: '12px',\n },\n }),\n ...(typeof size === 'number' && {\n height: `${size}px`,\n width: `${size}px`,\n }),\n },\n iconWrapperSx,\n )}\n {...restIconWrapper}\n >\n <ProgressStateIcon data-testid=\"Icon\" {...iconProps} />\n </Box>\n {(children || stateMessage || message) && (\n <LoadingText\n data-testid=\"ProgressMessage\"\n {...(typeof size !== 'number' && { size: size })}\n {...messageProps}\n >\n {children || stateMessage || message}\n </LoadingText>\n )}\n </Box>\n );\n },\n);\n"],"names":["ProgressState","forwardRef","children","sx","size","state","message","messageProps","successMessage","errorMessage","IconComponent","iconProps","iconWrapperProps","rest","ref","iconWrapperSx","restIconWrapper","IconStateComponent","stateMessage","useMemo","CloseIcon","CheckIcon","ProgressStateIcon","_jsxs","Box","sxOverride","display","justifyContent","alignItems","gap","_jsx","transform","opacity","animation","backgroundColor","theme","palette","mode","color","borderRadius","lineHeight","p","fontSize","height","width","LoadingText"],"mappings":"uWAkDO,MAAMA,EAA8CC,EACzD,EAEIC,WACAC,KACAC,OAAO,SACPC,QACAC,UACAC,eACAC,iBACAC,eACAC,gBACAC,YACAC,sBACGC,GAELC,KAEA,MAAQX,GAAIY,KAAkBC,GAAoBJ,GAAoB,CAAA,GAC/DK,EAAoBC,GAAgBC,EAAQ,IAE1C,UADCd,EAEG,CAACe,EAAWX,GAGZ,CAACY,EAAWb,GAEtB,CAACH,EAAOG,EAAgBC,IACrBa,EAAoBZ,GAAiBO,EAE3C,OACEM,EAACC,EAAG,CAAA,cACU,yBACZV,IAAKA,EACLX,GAAIsB,EACF,CACEC,QAAS,cACTC,eAAgB,SAChBC,WAAY,SACZC,IAAK,GAEP1B,MAEEU,EAAIX,SAAA,CAER4B,EAACN,EAAG,CAEFrB,GAAIsB,EACF,CACE,yCAA0C,CACxC,KAAM,CACJM,UAAW,YACXC,QAAS,OAEX,OAAQ,CACND,UAAW,WACXC,QAAS,MAGbC,UAAW,mCACXC,gBAAkBC,GAAkC,SAAvBA,EAAMC,QAAQC,KAAkB,kBAAoB,mBACnE,UAAVhC,GAAqB,CACvB6B,gBAAiB,cAEnBI,MAAO,eACPC,aAAc,MACdC,WAAY,IACZd,QAAS,cACTE,WAAY,SACZD,eAAgB,YACH,WAATvB,GAAqB,CAEvBqC,EAAG,GACH,qBAAsB,CACpBC,SAAU,YAGD,UAATtC,GAAoB,CAEtBqC,EAAG,IACH,qBAAsB,CACpBC,SAAU,YAGM,iBAATtC,GAAqB,CAC9BuC,OAAQ,GAAGvC,MACXwC,MAAO,GAAGxC,QAGdW,MAEEC,EAAed,SAEnB4B,EAACR,EAAiB,CAAA,cAAa,UAAWX,KA/CrCN,IAiDLH,GAAYgB,GAAgBZ,IAC5BwB,EAACe,iBACa,qBACS,iBAATzC,GAAqB,CAAEA,KAAMA,MACrCG,EAAYL,SAEfA,GAAYgB,GAAgBZ"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r}from"react/jsx-runtime";import{forwardRef as t,useState as a,useRef as n,useEffect as s,useMemo as i,useCallback as o}from"react";import{useTheme as c,Box as m,SvgIcon as d}from"@mui/material";import{LoadingText as l}from"./LoadingText.js";import{ProgressState as f}from"./ProgressState.js";const h=t(({sx:t,className:h,children:p,size:u="medium",thickness:g=16,value:k,svgIconProps:y,loadingTextProps:v,label:x,state:D="loading",successMessage:w,errorMessage:$,progressStateProps:L,...O},b)=>{const M=c(),{sx:F,...N}=y??{},[S,P]=a(Number.isNaN(k)?0:k??15),j=n(null),Z=n(null);s(()=>{j.current=Number.isNaN(k)?0:k??15;const e=()=>{P(r=>{const t=j.current-r,a=r+.5*t;return Math.abs(t)<.1||0===j.current?j.current:(Z.current=requestAnimationFrame(e),a)})};return Z.current=requestAnimationFrame(e),()=>cancelAnimationFrame(Z.current)},[k]);const{radius:C,circumference:R,lineCap:z,gap:A,minSegmentPercentForFullGap:I}=i(()=>{const e=50-g/2,r=2*Math.PI*e,t=g/2;return{radius:e,circumference:r,lineCap:t,gap:t,minSegmentPercentForFullGap:(g+t)/r*100}},[g]),q=o(e=>{const r=100-e,t=e/100*360,a=A*Math.max(0,Math.min(1,Math.min(e,r)/I));return{reversedRotation:t,dashLength:Math.max(e/100*R-g-a,0),dashOffset:-(z+a/2),reversedDashLength:Math.max(r/100*R-g-a,0)}},[g]),B=q(S),[G,T]=void 0===k?[q(15),q(75)]:[B,B];return"loading"!==D?e(f,{ref:b,size:u,state:D,successMessage:w,errorMessage:$,...L}):r(m,{"data-testid":"Spinner",role:"progressbar",className:["FlowSpinner-root",h].filter(Boolean).join(" "),ref:b,sx:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:1,...t},...void 0!==k&&{"aria-valuenow":k,"aria-valuemin":0,"aria-valuemax":100},...O,children:[e(d,{"aria-live":"polite",viewBox:"0 0 100 100",sx:{..."small"===u&&{width:"16px",height:"16px"},..."medium"===u&&{width:"24px",height:"24px"},..."number"==typeof u&&{width:`${u}px`,height:`${u}px`},color:"dark"===M.palette.mode?"brand.secondary":"brand.primary",...void 0===k&&{"@keyframes flow-spinner-indeterminate":{"0%":{transform:"rotateZ(0)"},"100%":{transform:"rotateZ(360deg)"}},"@keyframes flow-spinner-indeterminate-group":{"0%, 25%":{transform:"rotateZ(0)"},"70%":{transform:"rotateZ(45deg)"},"100%":{transform:"rotateZ(360deg)"}},"@keyframes flow-spinner-indeterminate-circle-primary":{"0%, 25%, 100%":{strokeDasharray:`${G.dashLength} ${R}`,strokeDashOffset:G.dashOffset},"70%":{strokeDasharray:`${T.dashLength} ${R}`,strokeDashOffset:T.dashOffset}},"@keyframes flow-spinner-indeterminate-circle-secondary":{"0%, 25%, 100%":{strokeDasharray:`${G.reversedDashLength} ${R}`,strokeDashOffset:G.dashOffset},"70%":{strokeDasharray:`${T.reversedDashLength} ${R}`,strokeDashOffset:T.dashOffset}},"@keyframes flow-spinner-indeterminate-group-secondary":{"0%, 25%, 100%":{transform:`rotate(${G.reversedRotation}deg)`},"70%":{transform:`rotate(${T.reversedRotation}deg)`}},animation:"2s linear infinite flow-spinner-indeterminate","& > g":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-group",transformOrigin:"50% 50%","& circle":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-circle-primary"},"& g":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-group-secondary","& circle":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-circle-secondary"}}}},...F},...N,children:r("g",{children:[(B.reversedDashLength>0||0===S)&&e("g",{style:{transform:`rotate(${B.reversedRotation}deg)`,transformOrigin:"50% 50%"},children:e("circle",{className:"FlowSpinner-circle-secondary",cx:"50",cy:"50",r:C,fill:"none",stroke:"dark"===M.palette.mode?M.palette.onSurface.os700:M.palette.transparent.secondary,strokeWidth:g,strokeLinecap:"round",strokeDasharray:`${B.reversedDashLength} ${R}`,strokeDashoffset:B.dashOffset,...0===S&&{strokeLinecap:"butt",strokeDasharray:"none",strokeDashoffset:"none"}})}),(B.dashLength>0||100===S)&&e("circle",{className:"FlowSpinner-circle-primary",cx:"50",cy:"50",r:C,fill:"none",stroke:"currentColor",strokeWidth:g,strokeLinecap:"round",strokeDasharray:`${B.dashLength} ${R}`,strokeDashoffset:B.dashOffset,...100===S&&{strokeLinecap:"butt",strokeDasharray:"none",strokeDashoffset:"none"}})]})}),x&&void 0!==k&&e(l,{"data-testid":"Spinner.percentage",..."number"!=typeof u&&{size:u},value:k,label:!0!==x?x:void 0,...v})]})});export{h as Spinner};
1
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{forwardRef as t,useState as a,useRef as n,useEffect as s,useMemo as i,useCallback as o}from"react";import{useTheme as m,Box as c,SvgIcon as d}from"@mui/material";import{sxOverride as l}from"../../utils/sxOverride/sxOverride.js";import{LoadingText as f}from"./LoadingText.js";import{ProgressState as h}from"./ProgressState.js";const p=t(({sx:t,className:p,children:u,size:g="medium",thickness:k=16,value:y,svgIconProps:v,loadingTextProps:x,label:D,state:w="loading",successMessage:$,errorMessage:L,progressStateProps:O,...b},M)=>{const F=m(),{sx:N,...S}=v??{},[P,j]=a(Number.isNaN(y)?0:y??15),Z=n(null),C=n(null);s(()=>{Z.current=Number.isNaN(y)?0:y??15;const e=()=>{j(r=>{const t=Z.current-r,a=r+.5*t;return Math.abs(t)<.1||0===Z.current?Z.current:(C.current=requestAnimationFrame(e),a)})};return C.current=requestAnimationFrame(e),()=>cancelAnimationFrame(C.current)},[y]);const{radius:R,circumference:z,lineCap:A,gap:I,minSegmentPercentForFullGap:q}=i(()=>{const e=50-k/2,r=2*Math.PI*e,t=k/2;return{radius:e,circumference:r,lineCap:t,gap:t,minSegmentPercentForFullGap:(k+t)/r*100}},[k]),B=o(e=>{const r=100-e,t=e/100*360,a=I*Math.max(0,Math.min(1,Math.min(e,r)/q));return{reversedRotation:t,dashLength:Math.max(e/100*z-k-a,0),dashOffset:-(A+a/2),reversedDashLength:Math.max(r/100*z-k-a,0)}},[k]),G=B(P),[T,W]=void 0===y?[B(15),B(75)]:[G,G];return"loading"!==w?e(h,{ref:M,size:g,state:w,successMessage:$,errorMessage:L,...O}):r(c,{"data-testid":"Spinner",role:"progressbar",className:["FlowSpinner-root",p].filter(Boolean).join(" "),ref:M,sx:l({display:"inline-flex",alignItems:"center",justifyContent:"center",gap:1},t),...void 0!==y&&{"aria-valuenow":y,"aria-valuemin":0,"aria-valuemax":100},...b,children:[e(d,{"aria-live":"polite",viewBox:"0 0 100 100",sx:l({..."small"===g&&{width:"16px",height:"16px"},..."medium"===g&&{width:"24px",height:"24px"},..."number"==typeof g&&{width:`${g}px`,height:`${g}px`},color:"dark"===F.palette.mode?"brand.secondary":"brand.primary",...void 0===y&&{"@keyframes flow-spinner-indeterminate":{"0%":{transform:"rotateZ(0)"},"100%":{transform:"rotateZ(360deg)"}},"@keyframes flow-spinner-indeterminate-group":{"0%, 25%":{transform:"rotateZ(0)"},"70%":{transform:"rotateZ(45deg)"},"100%":{transform:"rotateZ(360deg)"}},"@keyframes flow-spinner-indeterminate-circle-primary":{"0%, 25%, 100%":{strokeDasharray:`${T.dashLength} ${z}`,strokeDashOffset:T.dashOffset},"70%":{strokeDasharray:`${W.dashLength} ${z}`,strokeDashOffset:W.dashOffset}},"@keyframes flow-spinner-indeterminate-circle-secondary":{"0%, 25%, 100%":{strokeDasharray:`${T.reversedDashLength} ${z}`,strokeDashOffset:T.dashOffset},"70%":{strokeDasharray:`${W.reversedDashLength} ${z}`,strokeDashOffset:W.dashOffset}},"@keyframes flow-spinner-indeterminate-group-secondary":{"0%, 25%, 100%":{transform:`rotate(${T.reversedRotation}deg)`},"70%":{transform:`rotate(${W.reversedRotation}deg)`}},animation:"2s linear infinite flow-spinner-indeterminate","& > g":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-group",transformOrigin:"50% 50%","& circle":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-circle-primary"},"& g":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-group-secondary","& circle":{animation:"2s ease-in-out infinite flow-spinner-indeterminate-circle-secondary"}}}}},N),...S,children:r("g",{children:[(G.reversedDashLength>0||0===P)&&e("g",{style:{transform:`rotate(${G.reversedRotation}deg)`,transformOrigin:"50% 50%"},children:e("circle",{className:"FlowSpinner-circle-secondary",cx:"50",cy:"50",r:R,fill:"none",stroke:"dark"===F.palette.mode?F.palette.onSurface.os700:F.palette.transparent.secondary,strokeWidth:k,strokeLinecap:"round",strokeDasharray:`${G.reversedDashLength} ${z}`,strokeDashoffset:G.dashOffset,...0===P&&{strokeLinecap:"butt",strokeDasharray:"none",strokeDashoffset:"none"}})}),(G.dashLength>0||100===P)&&e("circle",{className:"FlowSpinner-circle-primary",cx:"50",cy:"50",r:R,fill:"none",stroke:"currentColor",strokeWidth:k,strokeLinecap:"round",strokeDasharray:`${G.dashLength} ${z}`,strokeDashoffset:G.dashOffset,...100===P&&{strokeLinecap:"butt",strokeDasharray:"none",strokeDashoffset:"none"}})]})}),D&&void 0!==y&&e(f,{"data-testid":"Spinner.percentage",..."number"!=typeof g&&{size:g},value:y,label:!0!==D?D:void 0,...x})]})});export{p as Spinner};
2
2
  //# sourceMappingURL=Spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","sources":["../../../src/components/progress/Spinner.tsx"],"sourcesContent":["import React, { ElementType, ReactNode, forwardRef, useMemo, useState, useEffect, useRef, useCallback } from 'react';\nimport { Box, BoxProps, SvgIcon, SvgIconProps, useTheme } from '@mui/material';\nimport { LoadingText, LoadingTextProps } from './LoadingText';\nimport { ProgressState, ProgressStateProps } from './ProgressState';\n\nexport interface SpinnerProps extends BoxProps<ElementType> {\n /**\n * Value of progress\n */\n value?: number;\n /**\n * Affects component size\n * @default medium\n */\n size?: 'small' | 'medium' | number;\n /**\n * Stroke width of circle\n * @default 16\n */\n thickness?: number;\n /**\n * State indicates whether the component should display loader or spinner for the loading state or message with a icon\n * @default loading\n */\n state?: 'loading' | ProgressStateProps['state'];\n /**\n * Message when success appears\n */\n successMessage?: ProgressStateProps['successMessage'];\n /**\n * Message when error appears\n */\n errorMessage?: ProgressStateProps['errorMessage'];\n /**\n * Properties applied to ProgressState\n */\n progressStateProps?: Omit<ProgressStateProps, 'successMessage' | 'errorMessage' | 'state'>;\n /**\n * Properties applied to SVG\n */\n svgIconProps?: SvgIconProps;\n /**\n * Additional label before LoadingText\n */\n label?: ReactNode;\n /**\n * Properties applied to LoadingText\n */\n loadingTextProps?: LoadingTextProps;\n}\n\n/**\n * A styled loader component that displays animated svg circle\n */\nexport const Spinner: React.FC<SpinnerProps> = forwardRef(\n (\n {\n sx,\n className,\n children,\n size = 'medium',\n thickness = 16,\n value,\n svgIconProps,\n loadingTextProps,\n label,\n state = 'loading',\n successMessage,\n errorMessage,\n progressStateProps,\n ...rest\n },\n ref,\n ) => {\n const theme = useTheme();\n const { sx: svgIconSx, ...restSvgIcon } = svgIconProps ?? {};\n\n // smooth js transition between values\n const [displayValue, setDisplayValue] = useState(Number.isNaN(value) ? 0 : (value ?? 15));\n const targetValueRef = useRef<number>(null);\n const rafRef = useRef<number>(null);\n useEffect(() => {\n targetValueRef.current = Number.isNaN(value) ? 0 : (value ?? 15);\n\n const animate = () => {\n setDisplayValue((prev) => {\n const diff = targetValueRef.current - prev;\n const step = diff * 0.5;\n const next = prev + step;\n\n // small diff or reset happens immediately\n if (Math.abs(diff) < 0.1 || targetValueRef.current === 0) {\n return targetValueRef.current;\n } else {\n rafRef.current = requestAnimationFrame(animate);\n return next;\n }\n });\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => cancelAnimationFrame(rafRef.current!);\n }, [value]);\n\n const { radius, circumference, lineCap, gap, minSegmentPercentForFullGap } = useMemo(() => {\n const _radius = 50 - thickness / 2;\n const _circumference = 2 * Math.PI * _radius;\n const _lineCap = thickness / 2;\n const _gap = _lineCap;\n const _minSegmentPercentForFullGap = ((thickness + _gap) / _circumference) * 100;\n\n return {\n radius: _radius,\n circumference: _circumference,\n lineCap: _lineCap,\n gap: _gap,\n minSegmentPercentForFullGap: _minSegmentPercentForFullGap,\n };\n }, [thickness]);\n const obtainValues = useCallback(\n (v: number) => {\n const _reversedValue = 100 - v;\n const _reversedRotation = 360 * (v / 100);\n const _effectiveGap = gap * Math.max(0, Math.min(1, Math.min(v, _reversedValue) / minSegmentPercentForFullGap));\n const _dashLength = Math.max((v / 100) * circumference - thickness - _effectiveGap, 0);\n const _dashOffset = -(lineCap + _effectiveGap / 2);\n const _reversedDashLength = Math.max((_reversedValue / 100) * circumference - thickness - _effectiveGap, 0);\n\n return {\n reversedRotation: _reversedRotation,\n dashLength: _dashLength,\n dashOffset: _dashOffset,\n reversedDashLength: _reversedDashLength,\n };\n },\n [thickness],\n );\n const values = obtainValues(displayValue);\n const [valuesSmall, valuesLarge] = value === undefined ? [obtainValues(15), obtainValues(75)] : [values, values];\n\n if (state !== 'loading') {\n return (\n <ProgressState\n ref={ref}\n size={size}\n state={state}\n successMessage={successMessage}\n errorMessage={errorMessage}\n {...progressStateProps}\n />\n );\n }\n\n return (\n <Box\n data-testid=\"Spinner\"\n role=\"progressbar\"\n className={['FlowSpinner-root', className].filter(Boolean).join(' ')}\n ref={ref}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1,\n ...sx,\n }}\n {...(value !== undefined && {\n ['aria-valuenow']: value,\n ['aria-valuemin']: 0,\n ['aria-valuemax']: 100,\n })}\n {...rest}\n >\n <SvgIcon\n aria-live=\"polite\"\n viewBox=\"0 0 100 100\"\n sx={{\n // size is also applied in ProgressState and LoadingText\n ...(size === 'small' && {\n width: `16px`,\n height: `16px`,\n }),\n ...(size === 'medium' && {\n width: `24px`,\n height: `24px`,\n }),\n ...(typeof size === 'number' && {\n width: `${size}px`,\n height: `${size}px`,\n }),\n color: theme.palette.mode === 'dark' ? 'brand.secondary' : 'brand.primary',\n // extra animation if value is not provided\n ...(value === undefined && {\n '@keyframes flow-spinner-indeterminate': {\n '0%': { transform: 'rotateZ(0)' },\n '100%': { transform: 'rotateZ(360deg)' },\n },\n '@keyframes flow-spinner-indeterminate-group': {\n '0%, 25%': { transform: 'rotateZ(0)' },\n '70%': { transform: 'rotateZ(45deg)' },\n '100%': { transform: 'rotateZ(360deg)' },\n },\n '@keyframes flow-spinner-indeterminate-circle-primary': {\n '0%, 25%, 100%': {\n strokeDasharray: `${valuesSmall.dashLength} ${circumference}`,\n strokeDashOffset: valuesSmall.dashOffset,\n },\n '70%': {\n strokeDasharray: `${valuesLarge.dashLength} ${circumference}`,\n strokeDashOffset: valuesLarge.dashOffset,\n },\n },\n '@keyframes flow-spinner-indeterminate-circle-secondary': {\n '0%, 25%, 100%': {\n strokeDasharray: `${valuesSmall.reversedDashLength} ${circumference}`,\n strokeDashOffset: valuesSmall.dashOffset,\n },\n '70%': {\n strokeDasharray: `${valuesLarge.reversedDashLength} ${circumference}`,\n strokeDashOffset: valuesLarge.dashOffset,\n },\n },\n '@keyframes flow-spinner-indeterminate-group-secondary': {\n '0%, 25%, 100%': { transform: `rotate(${valuesSmall.reversedRotation}deg)` },\n '70%': { transform: `rotate(${valuesLarge.reversedRotation}deg)` },\n },\n // assign animation to elements\n animation: '2s linear infinite flow-spinner-indeterminate',\n '& > g': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-group',\n transformOrigin: '50% 50%',\n '& circle': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-circle-primary',\n },\n '& g': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-group-secondary',\n '& circle': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-circle-secondary',\n },\n },\n },\n }),\n ...svgIconSx,\n }}\n {...restSvgIcon}\n >\n <g>\n {(values.reversedDashLength > 0 || displayValue === 0) && (\n <g style={{ transform: `rotate(${values.reversedRotation}deg)`, transformOrigin: '50% 50%' }}>\n <circle\n className=\"FlowSpinner-circle-secondary\"\n cx=\"50\"\n cy=\"50\"\n r={radius}\n fill=\"none\"\n stroke={\n theme.palette.mode === 'dark' ? theme.palette.onSurface.os700 : theme.palette.transparent.secondary\n }\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={`${values.reversedDashLength} ${circumference}`}\n strokeDashoffset={values.dashOffset}\n {...(displayValue === 0 && {\n strokeLinecap: 'butt',\n strokeDasharray: 'none',\n strokeDashoffset: 'none',\n })}\n />\n </g>\n )}\n {(values.dashLength > 0 || displayValue === 100) && (\n <circle\n className=\"FlowSpinner-circle-primary\"\n cx=\"50\"\n cy=\"50\"\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={`${values.dashLength} ${circumference}`}\n strokeDashoffset={values.dashOffset}\n {...(displayValue === 100 && {\n strokeLinecap: 'butt',\n strokeDasharray: 'none',\n strokeDashoffset: 'none',\n })}\n />\n )}\n </g>\n </SvgIcon>\n {label && value !== undefined && (\n <LoadingText\n data-testid=\"Spinner.percentage\"\n {...(typeof size !== 'number' && { size: size })}\n value={value}\n label={label !== true ? label : undefined}\n {...loadingTextProps}\n />\n )}\n </Box>\n );\n },\n);\n"],"names":["Spinner","forwardRef","sx","className","children","size","thickness","value","svgIconProps","loadingTextProps","label","state","successMessage","errorMessage","progressStateProps","rest","ref","theme","useTheme","svgIconSx","restSvgIcon","displayValue","setDisplayValue","useState","Number","isNaN","targetValueRef","useRef","rafRef","useEffect","current","animate","prev","diff","next","Math","abs","requestAnimationFrame","cancelAnimationFrame","radius","circumference","lineCap","gap","minSegmentPercentForFullGap","useMemo","_radius","_circumference","PI","_lineCap","obtainValues","useCallback","v","_reversedValue","_reversedRotation","_effectiveGap","max","min","reversedRotation","dashLength","dashOffset","reversedDashLength","values","valuesSmall","valuesLarge","undefined","_jsx","ProgressState","_jsxs","Box","role","filter","Boolean","join","display","alignItems","justifyContent","SvgIcon","viewBox","width","height","color","palette","mode","transform","strokeDasharray","strokeDashOffset","animation","transformOrigin","style","cx","cy","r","fill","stroke","onSurface","os700","transparent","secondary","strokeWidth","strokeLinecap","strokeDashoffset","LoadingText"],"mappings":"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"}
1
+ {"version":3,"file":"Spinner.js","sources":["../../../src/components/progress/Spinner.tsx"],"sourcesContent":["import React, { ElementType, ReactNode, forwardRef, useMemo, useState, useEffect, useRef, useCallback } from 'react';\nimport { Box, BoxProps, SvgIcon, SvgIconProps, useTheme } from '@mui/material';\nimport { sxOverride } from '@/src/utils/sxOverride';\nimport { LoadingText, LoadingTextProps } from './LoadingText';\nimport { ProgressState, ProgressStateProps } from './ProgressState';\n\nexport interface SpinnerProps extends BoxProps<ElementType> {\n /**\n * Value of progress\n */\n value?: number;\n /**\n * Affects component size\n * @default medium\n */\n size?: 'small' | 'medium' | number;\n /**\n * Stroke width of circle\n * @default 16\n */\n thickness?: number;\n /**\n * State indicates whether the component should display loader or spinner for the loading state or message with a icon\n * @default loading\n */\n state?: 'loading' | ProgressStateProps['state'];\n /**\n * Message when success appears\n */\n successMessage?: ProgressStateProps['successMessage'];\n /**\n * Message when error appears\n */\n errorMessage?: ProgressStateProps['errorMessage'];\n /**\n * Properties applied to ProgressState\n */\n progressStateProps?: Omit<ProgressStateProps, 'successMessage' | 'errorMessage' | 'state'>;\n /**\n * Properties applied to SVG\n */\n svgIconProps?: SvgIconProps;\n /**\n * Additional label before LoadingText\n */\n label?: ReactNode;\n /**\n * Properties applied to LoadingText\n */\n loadingTextProps?: LoadingTextProps;\n}\n\n/**\n * A styled loader component that displays animated svg circle\n */\nexport const Spinner: React.FC<SpinnerProps> = forwardRef(\n (\n {\n sx,\n className,\n children,\n size = 'medium',\n thickness = 16,\n value,\n svgIconProps,\n loadingTextProps,\n label,\n state = 'loading',\n successMessage,\n errorMessage,\n progressStateProps,\n ...rest\n },\n ref,\n ) => {\n const theme = useTheme();\n const { sx: svgIconSx, ...restSvgIcon } = svgIconProps ?? {};\n\n // smooth js transition between values\n const [displayValue, setDisplayValue] = useState(Number.isNaN(value) ? 0 : (value ?? 15));\n const targetValueRef = useRef<number>(null);\n const rafRef = useRef<number>(null);\n useEffect(() => {\n targetValueRef.current = Number.isNaN(value) ? 0 : (value ?? 15);\n\n const animate = () => {\n setDisplayValue((prev) => {\n const diff = targetValueRef.current - prev;\n const step = diff * 0.5;\n const next = prev + step;\n\n // small diff or reset happens immediately\n if (Math.abs(diff) < 0.1 || targetValueRef.current === 0) {\n return targetValueRef.current;\n } else {\n rafRef.current = requestAnimationFrame(animate);\n return next;\n }\n });\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => cancelAnimationFrame(rafRef.current!);\n }, [value]);\n\n const { radius, circumference, lineCap, gap, minSegmentPercentForFullGap } = useMemo(() => {\n const _radius = 50 - thickness / 2;\n const _circumference = 2 * Math.PI * _radius;\n const _lineCap = thickness / 2;\n const _gap = _lineCap;\n const _minSegmentPercentForFullGap = ((thickness + _gap) / _circumference) * 100;\n\n return {\n radius: _radius,\n circumference: _circumference,\n lineCap: _lineCap,\n gap: _gap,\n minSegmentPercentForFullGap: _minSegmentPercentForFullGap,\n };\n }, [thickness]);\n const obtainValues = useCallback(\n (v: number) => {\n const _reversedValue = 100 - v;\n const _reversedRotation = 360 * (v / 100);\n const _effectiveGap = gap * Math.max(0, Math.min(1, Math.min(v, _reversedValue) / minSegmentPercentForFullGap));\n const _dashLength = Math.max((v / 100) * circumference - thickness - _effectiveGap, 0);\n const _dashOffset = -(lineCap + _effectiveGap / 2);\n const _reversedDashLength = Math.max((_reversedValue / 100) * circumference - thickness - _effectiveGap, 0);\n\n return {\n reversedRotation: _reversedRotation,\n dashLength: _dashLength,\n dashOffset: _dashOffset,\n reversedDashLength: _reversedDashLength,\n };\n },\n [thickness],\n );\n const values = obtainValues(displayValue);\n const [valuesSmall, valuesLarge] = value === undefined ? [obtainValues(15), obtainValues(75)] : [values, values];\n\n if (state !== 'loading') {\n return (\n <ProgressState\n ref={ref}\n size={size}\n state={state}\n successMessage={successMessage}\n errorMessage={errorMessage}\n {...progressStateProps}\n />\n );\n }\n\n return (\n <Box\n data-testid=\"Spinner\"\n role=\"progressbar\"\n className={['FlowSpinner-root', className].filter(Boolean).join(' ')}\n ref={ref}\n sx={sxOverride(\n {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1,\n },\n sx,\n )}\n {...(value !== undefined && {\n ['aria-valuenow']: value,\n ['aria-valuemin']: 0,\n ['aria-valuemax']: 100,\n })}\n {...rest}\n >\n <SvgIcon\n aria-live=\"polite\"\n viewBox=\"0 0 100 100\"\n sx={sxOverride(\n {\n // size is also applied in ProgressState and LoadingText\n ...(size === 'small' && {\n width: `16px`,\n height: `16px`,\n }),\n ...(size === 'medium' && {\n width: `24px`,\n height: `24px`,\n }),\n ...(typeof size === 'number' && {\n width: `${size}px`,\n height: `${size}px`,\n }),\n color: theme.palette.mode === 'dark' ? 'brand.secondary' : 'brand.primary',\n // extra animation if value is not provided\n ...(value === undefined && {\n '@keyframes flow-spinner-indeterminate': {\n '0%': { transform: 'rotateZ(0)' },\n '100%': { transform: 'rotateZ(360deg)' },\n },\n '@keyframes flow-spinner-indeterminate-group': {\n '0%, 25%': { transform: 'rotateZ(0)' },\n '70%': { transform: 'rotateZ(45deg)' },\n '100%': { transform: 'rotateZ(360deg)' },\n },\n '@keyframes flow-spinner-indeterminate-circle-primary': {\n '0%, 25%, 100%': {\n strokeDasharray: `${valuesSmall.dashLength} ${circumference}`,\n strokeDashOffset: valuesSmall.dashOffset,\n },\n '70%': {\n strokeDasharray: `${valuesLarge.dashLength} ${circumference}`,\n strokeDashOffset: valuesLarge.dashOffset,\n },\n },\n '@keyframes flow-spinner-indeterminate-circle-secondary': {\n '0%, 25%, 100%': {\n strokeDasharray: `${valuesSmall.reversedDashLength} ${circumference}`,\n strokeDashOffset: valuesSmall.dashOffset,\n },\n '70%': {\n strokeDasharray: `${valuesLarge.reversedDashLength} ${circumference}`,\n strokeDashOffset: valuesLarge.dashOffset,\n },\n },\n '@keyframes flow-spinner-indeterminate-group-secondary': {\n '0%, 25%, 100%': { transform: `rotate(${valuesSmall.reversedRotation}deg)` },\n '70%': { transform: `rotate(${valuesLarge.reversedRotation}deg)` },\n },\n // assign animation to elements\n animation: '2s linear infinite flow-spinner-indeterminate',\n '& > g': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-group',\n transformOrigin: '50% 50%',\n '& circle': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-circle-primary',\n },\n '& g': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-group-secondary',\n '& circle': {\n animation: '2s ease-in-out infinite flow-spinner-indeterminate-circle-secondary',\n },\n },\n },\n }),\n },\n svgIconSx,\n )}\n {...restSvgIcon}\n >\n <g>\n {(values.reversedDashLength > 0 || displayValue === 0) && (\n <g style={{ transform: `rotate(${values.reversedRotation}deg)`, transformOrigin: '50% 50%' }}>\n <circle\n className=\"FlowSpinner-circle-secondary\"\n cx=\"50\"\n cy=\"50\"\n r={radius}\n fill=\"none\"\n stroke={\n theme.palette.mode === 'dark' ? theme.palette.onSurface.os700 : theme.palette.transparent.secondary\n }\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={`${values.reversedDashLength} ${circumference}`}\n strokeDashoffset={values.dashOffset}\n {...(displayValue === 0 && {\n strokeLinecap: 'butt',\n strokeDasharray: 'none',\n strokeDashoffset: 'none',\n })}\n />\n </g>\n )}\n {(values.dashLength > 0 || displayValue === 100) && (\n <circle\n className=\"FlowSpinner-circle-primary\"\n cx=\"50\"\n cy=\"50\"\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={`${values.dashLength} ${circumference}`}\n strokeDashoffset={values.dashOffset}\n {...(displayValue === 100 && {\n strokeLinecap: 'butt',\n strokeDasharray: 'none',\n strokeDashoffset: 'none',\n })}\n />\n )}\n </g>\n </SvgIcon>\n {label && value !== undefined && (\n <LoadingText\n data-testid=\"Spinner.percentage\"\n {...(typeof size !== 'number' && { size: size })}\n value={value}\n label={label !== true ? label : undefined}\n {...loadingTextProps}\n />\n )}\n </Box>\n );\n },\n);\n"],"names":["Spinner","forwardRef","sx","className","children","size","thickness","value","svgIconProps","loadingTextProps","label","state","successMessage","errorMessage","progressStateProps","rest","ref","theme","useTheme","svgIconSx","restSvgIcon","displayValue","setDisplayValue","useState","Number","isNaN","targetValueRef","useRef","rafRef","useEffect","current","animate","prev","diff","next","Math","abs","requestAnimationFrame","cancelAnimationFrame","radius","circumference","lineCap","gap","minSegmentPercentForFullGap","useMemo","_radius","_circumference","PI","_lineCap","obtainValues","useCallback","v","_reversedValue","_reversedRotation","_effectiveGap","max","min","reversedRotation","dashLength","dashOffset","reversedDashLength","values","valuesSmall","valuesLarge","undefined","_jsx","ProgressState","_jsxs","Box","role","filter","Boolean","join","sxOverride","display","alignItems","justifyContent","SvgIcon","viewBox","width","height","color","palette","mode","transform","strokeDasharray","strokeDashOffset","animation","transformOrigin","style","cx","cy","r","fill","stroke","onSurface","os700","transparent","secondary","strokeWidth","strokeLinecap","strokeDashoffset","LoadingText"],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import React, { ComponentType, ElementType } from 'react';
2
+ import { BoxProps, ButtonBaseProps, SvgIconProps } from '@mui/material';
3
+ export interface PromptAttachment {
4
+ /**
5
+ * Display name of the attachment.
6
+ */
7
+ name: string;
8
+ /**
9
+ * URL of the attachment image.
10
+ */
11
+ src?: string;
12
+ }
13
+ export interface PromptAttachmentsProps extends BoxProps<ElementType> {
14
+ /**
15
+ * List of attachments to display.
16
+ */
17
+ attachments: PromptAttachment[];
18
+ /**
19
+ * Callback to update the attachments list.
20
+ */
21
+ setAttachments?: (attachments: PromptAttachment[]) => void;
22
+ /**
23
+ * Custom component to be used for the file icon.
24
+ */
25
+ IconComponent?: ComponentType<SvgIconProps>;
26
+ /**
27
+ * Properties applied to the icon wrapper Box.
28
+ */
29
+ iconWrapperProps?: BoxProps<ElementType>;
30
+ /**
31
+ * Properties applied to the file icon.
32
+ */
33
+ iconProps?: SvgIconProps;
34
+ /**
35
+ * Properties applied to the text wrapper Box.
36
+ */
37
+ textProps?: BoxProps<ElementType>;
38
+ /**
39
+ * Properties applied to the remove icon.
40
+ */
41
+ removeIconProps?: SvgIconProps;
42
+ /**
43
+ * Properties applied to the remove icon wrapper Box.
44
+ */
45
+ removeIconWrapperProps?: BoxProps<ElementType>;
46
+ /**
47
+ * Properties applied to the image preview Box (rendered when attachment has src).
48
+ */
49
+ imageProps?: BoxProps<ElementType>;
50
+ /**
51
+ * Properties applied to the ButtonBase wrapping each attachment item.
52
+ */
53
+ buttonBaseProps?: ButtonBaseProps;
54
+ }
55
+ /**
56
+ * Shows list of attachments in PromptBar
57
+ */
58
+ export declare const PromptAttachments: React.FC<PromptAttachmentsProps>;
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as r,Fragment as o}from"react/jsx-runtime";import{forwardRef as t}from"react";import{Box as i,ButtonBase as n,Typography as s}from"@mui/material";import{sxOverride as a}from"../../utils/sxOverride/sxOverride.js";import{getFocusRingStyle as p}from"../focusring/focusring.js";import{CircleCloseFilledIcon as c}from"../icon/filled/CircleCloseFilledIcon.js";import{FileIcon as l}from"../icon/stroke/FileIcon.js";import{getInteractiveStyle as x}from"../../materialui/button/interactive.js";const d=t(({attachments:t,setAttachments:d,IconComponent:m,iconWrapperProps:u,iconProps:f,textProps:g,removeIconProps:b,removeIconWrapperProps:h,imageProps:y,buttonBaseProps:I,sx:k,...v},C)=>{const{sx:S,...j}=u??{},{sx:z,...w}=g??{},{sx:P,...R}=b??{},{sx:W,...O}=h??{},{sx:F,...M}=y??{},{sx:A,...B}=I??{},E=m??l;return e(i,{ref:C,sx:a({display:"flex",alignItems:"center",justifyContent:"flex-start",overflow:"auto",gap:.5,mb:1},k),...v,children:t.map((l,m)=>r(n,{"aria-label":l.name,disabled:!d,sx:a(e=>({position:"relative",borderRadius:"8px","&.Mui-disabled":{pointerEvents:"all",cursor:"text",userSelect:"text"},...l.src?{":after":{display:"block",content:'""',position:"absolute",inset:"0",borderRadius:"inherit",backgroundColor:e.palette.transparent.primary,transition:"opacity 0.3s ease-out",opacity:"0",zIndex:"10"}}:{padding:"6px 8px",gap:1,display:"flex",alignItems:"center",justifyContent:"flex-start"},backgroundColor:"surface.primary",...p(e,!0,"2px"),"&&:before":{zIndex:"20"},...d&&{...x({...l.src?{"&:after":{opacity:"0"}}:{backgroundColor:"surface.primary"}},{...l.src?{"&:after":{opacity:"1"}}:{backgroundColor:"surface.secondary"}})}}),A),onClick:()=>d?.(t.filter((e,r)=>r!==m)),...B,children:[l.src?e(i,{sx:a({borderRadius:"inherit",backgroundImage:`url(${l.src})`,backgroundSize:"cover",backgroundRepeat:"no-repeat",backgroundPosition:"center",width:"40px",height:"40px",...1===t.length&&{width:"72px",height:"72px"}},F),...M}):r(o,{children:[e(i,{sx:a({display:"flex",borderRadius:"4px",padding:"6px",backgroundColor:"transparent.primary",color:"onSurface.os700","& .MuiSvgIcon-root":{fontSize:"16px"}},S),...j,children:e(E,{...f})}),e(s,{component:"span",sx:a({fontWeight:{xs:"400"},fontSize:{xs:"14px"},lineHeight:{xs:"20px"},letterSpacing:{xs:"0.02em"},color:"#000",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"120px"},z),...w,children:l.name})]}),d&&e(i,{component:"span",sx:a({display:"flex",alignItems:"center",justifyContent:"center",color:"onSurface.os900",zIndex:"30",...l.src?{position:"absolute",top:"3px",right:"3px"}:{position:"relative",top:"-10px",right:"-7px",mr:"2px"},"&:after":{position:"absolute",zIndex:"10",inset:"0",margin:"2px",display:"block",content:'""',borderRadius:"50%",backgroundColor:"common.white"}},W),...O,children:e(c,{sx:a({position:"relative",zIndex:"20",fontSize:"14px"},P),...R})})]},m))})});export{d as PromptAttachments};
2
+ //# sourceMappingURL=PromptAttachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptAttachments.js","sources":["../../../src/components/promptBar/PromptAttachments.tsx"],"sourcesContent":["import React, { ComponentType, ElementType, forwardRef } from 'react';\nimport { Box, BoxProps, ButtonBase, ButtonBaseProps, SvgIconProps, Typography } from '@mui/material';\nimport { sxOverride } from '@/src/utils/sxOverride';\nimport { getFocusRingStyle } from '@/src/components/focusring/focusring';\nimport { CircleCloseFilledIcon } from '@/src/components/icon/filled/CircleCloseFilledIcon';\nimport { FileIcon } from '@/src/components/icon/stroke/FileIcon';\nimport { getInteractiveStyle } from '@/src/materialui/button/interactive';\n\nexport interface PromptAttachment {\n /**\n * Display name of the attachment.\n */\n name: string;\n /**\n * URL of the attachment image.\n */\n src?: string;\n}\n\nexport interface PromptAttachmentsProps extends BoxProps<ElementType> {\n /**\n * List of attachments to display.\n */\n attachments: PromptAttachment[];\n /**\n * Callback to update the attachments list.\n */\n setAttachments?: (attachments: PromptAttachment[]) => void;\n /**\n * Custom component to be used for the file icon.\n */\n IconComponent?: ComponentType<SvgIconProps>;\n /**\n * Properties applied to the icon wrapper Box.\n */\n iconWrapperProps?: BoxProps<ElementType>;\n /**\n * Properties applied to the file icon.\n */\n iconProps?: SvgIconProps;\n /**\n * Properties applied to the text wrapper Box.\n */\n textProps?: BoxProps<ElementType>;\n /**\n * Properties applied to the remove icon.\n */\n removeIconProps?: SvgIconProps;\n /**\n * Properties applied to the remove icon wrapper Box.\n */\n removeIconWrapperProps?: BoxProps<ElementType>;\n /**\n * Properties applied to the image preview Box (rendered when attachment has src).\n */\n imageProps?: BoxProps<ElementType>;\n /**\n * Properties applied to the ButtonBase wrapping each attachment item.\n */\n buttonBaseProps?: ButtonBaseProps;\n}\n\n/**\n * Shows list of attachments in PromptBar\n */\nexport const PromptAttachments: React.FC<PromptAttachmentsProps> = forwardRef(\n (\n {\n attachments,\n setAttachments,\n IconComponent,\n iconWrapperProps,\n iconProps,\n textProps,\n removeIconProps,\n removeIconWrapperProps,\n imageProps,\n buttonBaseProps,\n sx,\n ...rest\n },\n ref,\n ) => {\n const { sx: iconWrapperSx, ...restIconWrapper } = iconWrapperProps ?? {};\n const { sx: textSx, ...restText } = textProps ?? {};\n const { sx: removeIconSx, ...restRemoveIcon } = removeIconProps ?? {};\n const { sx: removeIconWrapperSx, ...restRemoveIconWrapper } = removeIconWrapperProps ?? {};\n const { sx: imageSx, ...restImage } = imageProps ?? {};\n const { sx: buttonBaseSx, ...restButtonBase } = buttonBaseProps ?? {};\n const AttachmentFileIcon = IconComponent ?? FileIcon;\n\n return (\n <Box\n ref={ref}\n sx={sxOverride(\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n overflow: 'auto',\n gap: 0.5,\n mb: 1,\n },\n sx,\n )}\n {...rest}\n >\n {attachments.map((attachment: PromptAttachment, idx: number) => (\n <ButtonBase\n aria-label={attachment.name}\n key={idx}\n disabled={!setAttachments}\n sx={sxOverride(\n (theme) => ({\n position: 'relative',\n borderRadius: '8px',\n '&.Mui-disabled': {\n pointerEvents: 'all',\n cursor: 'text',\n userSelect: 'text',\n },\n ...(attachment.src\n ? {\n // pseudo background for hover\n ':after': {\n display: 'block',\n content: '\"\"',\n position: 'absolute',\n inset: '0',\n borderRadius: 'inherit',\n backgroundColor: theme.palette.transparent.primary,\n transition: 'opacity 0.3s ease-out',\n opacity: '0',\n zIndex: '10',\n },\n }\n : {\n padding: '6px 8px',\n gap: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n }),\n backgroundColor: 'surface.primary',\n ...getFocusRingStyle(theme, true, '2px'),\n '&&:before': {\n zIndex: '20',\n },\n ...(setAttachments && {\n ...getInteractiveStyle(\n {\n ...(attachment.src\n ? {\n '&:after': {\n opacity: '0',\n },\n }\n : {\n backgroundColor: 'surface.primary',\n }),\n },\n {\n ...(attachment.src\n ? {\n '&:after': {\n opacity: '1',\n },\n }\n : {\n backgroundColor: 'surface.secondary',\n }),\n },\n ),\n }),\n }),\n buttonBaseSx,\n )}\n onClick={() => setAttachments?.(attachments.filter((_: PromptAttachment, i: number) => i !== idx))}\n {...restButtonBase}\n >\n {attachment.src ? (\n <Box\n sx={sxOverride(\n {\n borderRadius: 'inherit',\n backgroundImage: `url(${attachment.src})`,\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n width: '40px',\n height: '40px',\n ...(attachments.length === 1 && {\n width: '72px',\n height: '72px',\n }),\n },\n imageSx,\n )}\n {...restImage}\n />\n ) : (\n <>\n <Box\n sx={sxOverride(\n {\n display: 'flex',\n borderRadius: '4px',\n padding: '6px',\n backgroundColor: 'transparent.primary',\n color: 'onSurface.os700',\n '& .MuiSvgIcon-root': {\n fontSize: '16px',\n },\n },\n iconWrapperSx,\n )}\n {...restIconWrapper}\n >\n <AttachmentFileIcon {...iconProps} />\n </Box>\n <Typography\n component=\"span\"\n sx={sxOverride(\n {\n fontWeight: { xs: '400' },\n fontSize: { xs: '14px' },\n lineHeight: { xs: '20px' },\n letterSpacing: { xs: '0.02em' },\n color: '#000',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '120px',\n },\n textSx,\n )}\n {...restText}\n >\n {attachment.name}\n </Typography>\n </>\n )}\n {setAttachments && (\n <Box\n component=\"span\"\n sx={sxOverride(\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'onSurface.os900',\n zIndex: '30',\n ...(attachment.src\n ? {\n position: 'absolute',\n top: '3px',\n right: '3px',\n }\n : {\n position: 'relative',\n top: '-10px',\n right: '-7px',\n mr: '2px',\n }),\n // fill of the 'x' inside the icon\n '&:after': {\n position: 'absolute',\n zIndex: '10',\n inset: '0',\n margin: '2px',\n display: 'block',\n content: '\"\"',\n borderRadius: '50%',\n backgroundColor: 'common.white',\n },\n },\n removeIconWrapperSx,\n )}\n {...restRemoveIconWrapper}\n >\n <CircleCloseFilledIcon\n sx={sxOverride(\n {\n position: 'relative',\n zIndex: '20',\n fontSize: '14px',\n },\n removeIconSx,\n )}\n {...restRemoveIcon}\n />\n </Box>\n )}\n </ButtonBase>\n ))}\n </Box>\n );\n },\n);\n"],"names":["PromptAttachments","forwardRef","attachments","setAttachments","IconComponent","iconWrapperProps","iconProps","textProps","removeIconProps","removeIconWrapperProps","imageProps","buttonBaseProps","sx","rest","ref","iconWrapperSx","restIconWrapper","textSx","restText","removeIconSx","restRemoveIcon","removeIconWrapperSx","restRemoveIconWrapper","imageSx","restImage","buttonBaseSx","restButtonBase","AttachmentFileIcon","FileIcon","_jsx","Box","sxOverride","display","alignItems","justifyContent","overflow","gap","mb","children","map","attachment","idx","_jsxs","ButtonBase","name","disabled","theme","position","borderRadius","pointerEvents","cursor","userSelect","src","content","inset","backgroundColor","palette","transparent","primary","transition","opacity","zIndex","padding","getFocusRingStyle","getInteractiveStyle","onClick","filter","_","i","backgroundImage","backgroundSize","backgroundRepeat","backgroundPosition","width","height","length","color","fontSize","Typography","component","fontWeight","xs","lineHeight","letterSpacing","whiteSpace","textOverflow","maxWidth","top","right","mr","margin","CircleCloseFilledIcon"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { ComponentType, FC, ReactNode } from 'react';
2
+ import { IconButtonProps, InputAdornmentProps, OutlinedTextFieldProps, SvgIconProps } from '@mui/material';
3
+ import { PromptSubmitIconButtonProps } from './PromptSubmitIconButton';
4
+ import { PromptAttachment, PromptAttachmentsProps } from './PromptAttachments';
5
+ export interface PromptBarProps extends Omit<OutlinedTextFieldProps, 'label' | 'variant' | 'size'> {
6
+ /**
7
+ * Forces a specific layout variant. `small` uses the compact mobile style, `medium` uses the
8
+ * spacious desktop style. When omitted the layout switches automatically.
9
+ */
10
+ size?: 'auto' | 'small' | 'medium';
11
+ /**
12
+ * Indicates that a request is being processed. Changes the submit button icon to a stop icon.
13
+ */
14
+ processing?: boolean;
15
+ /**
16
+ * Indicates that voice recording is in progress.
17
+ */
18
+ recording?: boolean;
19
+ /**
20
+ * List of attachments displayed above the text input.
21
+ */
22
+ attachments?: PromptAttachment[];
23
+ /**
24
+ * Callback to update the attachments list.
25
+ */
26
+ setAttachments?: (attachments: PromptAttachment[]) => void;
27
+ /**
28
+ * Properties passed to the PromptAttachments component.
29
+ */
30
+ promptAttachmentsProps?: Omit<PromptAttachmentsProps, 'attachments' | 'setAttachments'>;
31
+ /**
32
+ * Hides the add button for attachments
33
+ */
34
+ disableAdd?: boolean;
35
+ /**
36
+ * Properties passed to the add icon button at the start of the input
37
+ */
38
+ addIconButtonProps?: IconButtonProps;
39
+ /**
40
+ * Custom component to be used for the add icon
41
+ */
42
+ AddIconComponent?: ComponentType<SvgIconProps>;
43
+ /**
44
+ * Extra buttons rendered inside the start adornment, after the add button.
45
+ */
46
+ startAdornmentButtons?: ReactNode;
47
+ /**
48
+ * Properties applied to the start InputAdornment wrapper
49
+ */
50
+ startAdornmentProps?: Omit<InputAdornmentProps, 'position'>;
51
+ /**
52
+ * Do not show voice button, use when speech input is not available or not supported.
53
+ */
54
+ disableVoice?: boolean;
55
+ /**
56
+ * Properties passed to the submit icon button
57
+ */
58
+ submitIconButtonProps?: PromptSubmitIconButtonProps;
59
+ /**
60
+ * Extra buttons rendered inside the end adornment, alongside the submit button.
61
+ */
62
+ endAdornmentButtons?: ReactNode;
63
+ /**
64
+ * Properties applied to the toolbar InputAdornment wrapper
65
+ */
66
+ endAdornmentProps?: Omit<InputAdornmentProps, 'position'>;
67
+ }
68
+ /**
69
+ * Input field for natural language AI-powered requests
70
+ */
71
+ export declare const PromptBar: FC<PromptBarProps>;
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{forwardRef as o,useState as n,useCallback as i,useRef as s,useEffect as l}from"react";import{TextField as a,Box as d,InputAdornment as p,IconButton as u}from"@mui/material";import{PlusIcon as m}from"../icon/stroke/PlusIcon.js";import{sxOverride as c}from"../../utils/sxOverride/sxOverride.js";import{PromptSubmitIconButton as h}from"./PromptSubmitIconButton.js";import{PromptAttachments as x}from"./PromptAttachments.js";const g=o(({sx:o,disabled:g,value:f,onChange:b,slotProps:v,addIconButtonProps:w,AddIconComponent:A,startAdornmentProps:M,submitIconButtonProps:S,processing:I,recording:B,endAdornmentProps:C,disableAdd:P,disableVoice:R,placeholder:F,attachments:y,setAttachments:O,promptAttachmentsProps:N,startAdornmentButtons:W,endAdornmentButtons:j,size:k,...z},H)=>{const{sx:E,...V}=w??{},{sx:G,...L}=N??{},{sx:$,...T}=M??{},{sx:q,...D}=C??{},{input:J,...K}=v??{},{sx:Q,startAdornment:U,...X}=J??{},Y=(e,t)=>({xs:"medium"===k?t:e,md:"small"===k?e:t}),[Z,_]=n(""),ee=void 0===f?Z:f,te=i(e=>{_(e.target.value),b?.(e)},[b]),re=i(e=>{te({target:{value:e}})},[te]),oe=A||m,[ne,ie]=n(!1),se=ne||ee.includes("\n"),le=s(null),ae=s(null),de=s(null),[pe,ue]=n(0),[me,ce]=n(0);return l(()=>{const e=le.current,t=ae.current,r=de.current,o=new ResizeObserver(()=>{if(e){const t=Number.parseFloat(getComputedStyle(e).lineHeight);ie(e.clientHeight>t)}if(t){const e=getComputedStyle(t.parentElement),r=getComputedStyle(t);ue(t.offsetWidth+Number.parseFloat(r.marginRight)+Number.parseFloat(e.paddingLeft))}if(r){const e=getComputedStyle(r.parentElement),t=getComputedStyle(r);ce(r.offsetWidth+Number.parseFloat(t.marginLeft)+Number.parseFloat(e.paddingRight))}});return e&&o.observe(e),t&&o.observe(t),r&&o.observe(r),()=>o.disconnect()},[]),e(a,{ref:H,minRows:1,maxRows:4,multiline:!0,disabled:g,fullWidth:!0,value:ee,placeholder:F,onChange:te,sx:c({borderRadius:Y(se||y?.length?"16px":"1000px","16px"),"&:not(.Flow-NoFocusRing):has(.Mui-focused):has(.MuiFormHelperText-root)":{"&&:before":{borderRadius:"16px"}}},o),slotProps:{input:{sx:c({borderRadius:"inherit",padding:Y("6px 8px","12px"),flexWrap:Y(se||y?.length?"wrap":"nowrap","wrap"),"&, &.Mui-focused":{"& .MuiOutlinedInput-notchedOutline":{"&, &:not(.Mui-error)":{borderColor:"onSurface.os500",borderWidth:"1px"}},"&.Mui-error:not(.Mui-focused) .MuiOutlinedInput-notchedOutline":{borderColor:"error.main"}},"& textarea":{pl:Y(se||y?.length?1:0,0),...P&&!U&&!W&&{pl:1},pr:Y(se||y?.length?1:0,0)}},Q),startAdornment:t(r,{children:[!!y?.length&&e(x,{attachments:y,setAttachments:O,sx:c({order:-1,flexBasis:"100%",...1===y?.length&&y[0].src&&{ml:1}},G),...L}),U??(!P&&t(p,{ref:ae,position:"start",sx:c({order:Y(se||y?.length?"1":"0","1"),mt:Y(se||y?.length?1:0,1),mr:1,"& .MuiSvgIcon-root, & .MuiIconButton-root .MuiSvgIcon-root":{fontSize:"17px"}},$),...T,children:[e(u,{"aria-label":"Add attachment",size:"small",disabled:g,sx:c({},E),...V,children:e(oe,{})}),W]})),e(d,{ref:le,component:"span","aria-hidden":!0,sx:{display:Y("block","none"),position:"absolute",left:"0",visibility:"hidden",pointerEvents:"none",whiteSpace:"pre-wrap",wordBreak:"break-word",overflowWrap:"break-word",pl:`${pe||16}px`,pr:`${me+1}px`,flexGrow:"1",maxHeight:"3em",overflow:"hidden"},children:ee||F||""})]}),endAdornment:t(r,{children:[e(d,{sx:{order:"2",flexGrow:"1",flexBasis:"1px"}}),t(p,{ref:de,position:"end",sx:c({order:"3",gap:Y(.5,1),mt:Y(se||y?.length?1:0,1),ml:1,"& .MuiSvgIcon-root, & .MuiIconButton-root .MuiSvgIcon-root":{fontSize:"17px"}},q),...D,children:[j,e(h,{value:ee,setValue:re,attachments:y,disabled:g,processing:I,recording:B,disableVoice:R,...S})]})]}),...X},...K},...z,variant:"outlined",label:null})});export{g as PromptBar};
2
+ //# sourceMappingURL=PromptBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptBar.js","sources":["../../../src/components/promptBar/PromptBar.tsx"],"sourcesContent":["import { ComponentType, ChangeEvent, FC, ReactNode, forwardRef, useCallback, useEffect, useRef, useState } from 'react';\nimport { ResponsiveStyleValue } from '@mui/system';\nimport {\n Box,\n IconButton,\n IconButtonProps,\n InputAdornment,\n InputAdornmentProps,\n OutlinedInputProps,\n OutlinedTextFieldProps,\n SvgIconProps,\n TextField,\n} from '@mui/material';\nimport { PlusIcon } from '@/src/components/icon/stroke/PlusIcon';\nimport { sxOverride } from '@/src/utils/sxOverride';\nimport { PromptSubmitIconButton, PromptSubmitIconButtonProps } from './PromptSubmitIconButton';\nimport { PromptAttachment, PromptAttachments, PromptAttachmentsProps } from './PromptAttachments';\n\nexport interface PromptBarProps extends Omit<OutlinedTextFieldProps, 'label' | 'variant' | 'size'> {\n /**\n * Forces a specific layout variant. `small` uses the compact mobile style, `medium` uses the\n * spacious desktop style. When omitted the layout switches automatically.\n */\n size?: 'auto' | 'small' | 'medium';\n /**\n * Indicates that a request is being processed. Changes the submit button icon to a stop icon.\n */\n processing?: boolean;\n /**\n * Indicates that voice recording is in progress.\n */\n recording?: boolean;\n /**\n * List of attachments displayed above the text input.\n */\n attachments?: PromptAttachment[];\n /**\n * Callback to update the attachments list.\n */\n setAttachments?: (attachments: PromptAttachment[]) => void;\n /**\n * Properties passed to the PromptAttachments component.\n */\n promptAttachmentsProps?: Omit<PromptAttachmentsProps, 'attachments' | 'setAttachments'>;\n /**\n * Hides the add button for attachments\n */\n disableAdd?: boolean;\n /**\n * Properties passed to the add icon button at the start of the input\n */\n addIconButtonProps?: IconButtonProps;\n /**\n * Custom component to be used for the add icon\n */\n AddIconComponent?: ComponentType<SvgIconProps>;\n /**\n * Extra buttons rendered inside the start adornment, after the add button.\n */\n startAdornmentButtons?: ReactNode;\n /**\n * Properties applied to the start InputAdornment wrapper\n */\n startAdornmentProps?: Omit<InputAdornmentProps, 'position'>;\n /**\n * Do not show voice button, use when speech input is not available or not supported.\n */\n disableVoice?: boolean;\n /**\n * Properties passed to the submit icon button\n */\n submitIconButtonProps?: PromptSubmitIconButtonProps;\n /**\n * Extra buttons rendered inside the end adornment, alongside the submit button.\n */\n endAdornmentButtons?: ReactNode;\n /**\n * Properties applied to the toolbar InputAdornment wrapper\n */\n endAdornmentProps?: Omit<InputAdornmentProps, 'position'>;\n}\n\n/**\n * Input field for natural language AI-powered requests\n */\nexport const PromptBar: FC<PromptBarProps> = forwardRef(\n (\n {\n sx,\n disabled,\n value,\n onChange,\n slotProps,\n addIconButtonProps,\n AddIconComponent,\n startAdornmentProps,\n submitIconButtonProps,\n processing,\n recording,\n endAdornmentProps,\n disableAdd,\n disableVoice,\n placeholder,\n attachments,\n setAttachments,\n promptAttachmentsProps,\n startAdornmentButtons,\n endAdornmentButtons,\n size,\n ...rest\n },\n ref,\n ) => {\n const { sx: addIconButtonSx, ...restAddIconButton } = addIconButtonProps ?? {};\n const { sx: promptAttachmentsSx, ...restPromptAttachments } = promptAttachmentsProps ?? {};\n const { sx: startAdornmentSx, ...restStartAdornment } = startAdornmentProps ?? {};\n const { sx: endAdornmentSx, ...restEndAdornment } = endAdornmentProps ?? {};\n const { input: inputSlotProps, ...restSlotProps } = (slotProps ?? {}) as PromptBarProps['slotProps'];\n const {\n sx: inputSx,\n startAdornment: startAdornmentOverride,\n ...restInputSlotProps\n } = (inputSlotProps ?? {}) as OutlinedInputProps;\n\n // handle responsive styling of compact and desktop variants\n const responsive = <T,>(xs: T, md: T): ResponsiveStyleValue<T> => ({\n xs: size === 'medium' ? md : xs,\n md: size === 'small' ? xs : md,\n });\n\n // manage internal and provided value, determines which icon will be shown\n const [internalValue, setInternalValue] = useState('');\n const currentValue = (value === undefined ? internalValue : value) as string;\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setInternalValue(e.target.value);\n onChange?.(e);\n },\n [onChange],\n );\n const handleSetValue = useCallback(\n (v: string) => {\n handleChange({ target: { value: v } } as ChangeEvent<HTMLInputElement>);\n },\n [handleChange],\n );\n\n const AddIcon = AddIconComponent || PlusIcon;\n\n // detect multirow to update style\n const [isWrapped, setIsWrapped] = useState(false);\n const isMultirow = isWrapped || currentValue.includes('\\n');\n const shadowRef = useRef<HTMLSpanElement>(null);\n const internalStartRef = useRef<HTMLDivElement>(null);\n const internalEndRef = useRef<HTMLDivElement>(null);\n const [startWidth, setStartWidth] = useState(0);\n const [endWidth, setEndWidth] = useState(0);\n useEffect(() => {\n const shadowEl = shadowRef.current;\n const startEl = internalStartRef.current;\n const endEl = internalEndRef.current;\n\n const observer = new ResizeObserver(() => {\n if (shadowEl) {\n const lineHeight = Number.parseFloat(getComputedStyle(shadowEl).lineHeight);\n setIsWrapped(shadowEl.clientHeight > lineHeight);\n }\n if (startEl) {\n const containerStyle = getComputedStyle(startEl.parentElement);\n const adornmentStyle = getComputedStyle(startEl);\n setStartWidth(\n startEl.offsetWidth +\n Number.parseFloat(adornmentStyle.marginRight) +\n Number.parseFloat(containerStyle.paddingLeft),\n );\n }\n if (endEl) {\n const containerStyle = getComputedStyle(endEl.parentElement);\n const adornmentStyle = getComputedStyle(endEl);\n setEndWidth(\n endEl.offsetWidth +\n Number.parseFloat(adornmentStyle.marginLeft) +\n Number.parseFloat(containerStyle.paddingRight),\n );\n }\n });\n\n if (shadowEl) observer.observe(shadowEl);\n if (startEl) observer.observe(startEl);\n if (endEl) observer.observe(endEl);\n return () => observer.disconnect();\n }, []);\n\n return (\n <TextField\n ref={ref}\n minRows={1}\n maxRows={4}\n multiline\n disabled={disabled}\n fullWidth\n value={currentValue}\n placeholder={placeholder}\n onChange={handleChange}\n sx={sxOverride(\n {\n borderRadius: responsive(isMultirow || attachments?.length ? '16px' : '1000px', '16px'),\n // correct focus ring for small variant with helperText\n '&:not(.Flow-NoFocusRing):has(.Mui-focused):has(.MuiFormHelperText-root)': {\n '&&:before': {\n borderRadius: '16px',\n },\n },\n },\n sx,\n )}\n slotProps={{\n input: {\n sx: sxOverride(\n {\n borderRadius: 'inherit',\n padding: responsive('6px 8px', '12px'),\n // allow placing toolbar on the second row\n flexWrap: responsive(isMultirow || attachments?.length ? 'wrap' : 'nowrap', 'wrap'),\n '&, &.Mui-focused': {\n '& .MuiOutlinedInput-notchedOutline': {\n '&, &:not(.Mui-error)': {\n borderColor: 'onSurface.os500',\n borderWidth: '1px',\n },\n },\n '&.Mui-error:not(.Mui-focused) .MuiOutlinedInput-notchedOutline': {\n borderColor: 'error.main',\n },\n },\n '& textarea': {\n pl: responsive(isMultirow || attachments?.length ? 1 : 0, 0),\n ...(disableAdd &&\n !startAdornmentOverride &&\n !startAdornmentButtons && {\n pl: 1,\n }),\n pr: responsive(isMultirow || attachments?.length ? 1 : 0, 0),\n },\n },\n inputSx,\n ),\n startAdornment: (\n <>\n {!!attachments?.length && (\n <PromptAttachments\n attachments={attachments}\n setAttachments={setAttachments}\n sx={sxOverride(\n {\n order: -1,\n flexBasis: '100%',\n ...(attachments?.length === 1 && attachments[0].src && { ml: 1 }),\n },\n promptAttachmentsSx,\n )}\n {...restPromptAttachments}\n />\n )}\n {startAdornmentOverride ??\n (!disableAdd && (\n <InputAdornment\n ref={internalStartRef}\n position=\"start\"\n sx={sxOverride(\n {\n // move to second row, start\n order: responsive(isMultirow || attachments?.length ? '1' : '0', '1'),\n // space between text and input in large variant\n mt: responsive(isMultirow || attachments?.length ? 1 : 0, 1),\n // space between text and buttons in compact variant\n mr: 1,\n // style of icon buttons\n '& .MuiSvgIcon-root, & .MuiIconButton-root .MuiSvgIcon-root': {\n fontSize: '17px',\n },\n },\n startAdornmentSx,\n )}\n {...restStartAdornment}\n >\n <IconButton\n aria-label=\"Add attachment\"\n size=\"small\"\n disabled={disabled}\n sx={sxOverride({}, addIconButtonSx)}\n {...restAddIconButton}\n >\n <AddIcon />\n </IconButton>\n {startAdornmentButtons}\n </InputAdornment>\n ))}\n <Box\n ref={shadowRef}\n component=\"span\"\n aria-hidden\n sx={{\n display: responsive('block', 'none'),\n position: 'absolute',\n left: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n // correctly wrap as in textarea\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n pl: `${startWidth || 16}px`,\n pr: `${endWidth + 1}px`, // 1px to fix possible rounding error\n flexGrow: '1',\n maxHeight: '3em',\n overflow: 'hidden',\n }}\n >\n {currentValue || placeholder || ''}\n </Box>\n </>\n ),\n endAdornment: (\n <>\n <Box sx={{ order: '2', flexGrow: '1', flexBasis: '1px' }} />\n <InputAdornment\n ref={internalEndRef}\n position=\"end\"\n sx={sxOverride(\n {\n // move to second row, end\n order: '3',\n // space between multiple buttons\n gap: responsive(0.5, 1),\n // space between text and input in large variant\n mt: responsive(isMultirow || attachments?.length ? 1 : 0, 1),\n // space between text and buttons in compact variant\n ml: 1,\n // style of icon buttons\n '& .MuiSvgIcon-root, & .MuiIconButton-root .MuiSvgIcon-root': {\n fontSize: '17px',\n },\n },\n endAdornmentSx,\n )}\n {...restEndAdornment}\n >\n {endAdornmentButtons}\n <PromptSubmitIconButton\n value={currentValue}\n setValue={handleSetValue}\n attachments={attachments}\n disabled={disabled}\n processing={processing}\n recording={recording}\n disableVoice={disableVoice}\n {...submitIconButtonProps}\n />\n </InputAdornment>\n </>\n ),\n ...restInputSlotProps,\n },\n ...restSlotProps,\n }}\n {...rest}\n variant=\"outlined\"\n label={null}\n />\n );\n },\n);\n"],"names":["PromptBar","forwardRef","sx","disabled","value","onChange","slotProps","addIconButtonProps","AddIconComponent","startAdornmentProps","submitIconButtonProps","processing","recording","endAdornmentProps","disableAdd","disableVoice","placeholder","attachments","setAttachments","promptAttachmentsProps","startAdornmentButtons","endAdornmentButtons","size","rest","ref","addIconButtonSx","restAddIconButton","promptAttachmentsSx","restPromptAttachments","startAdornmentSx","restStartAdornment","endAdornmentSx","restEndAdornment","input","inputSlotProps","restSlotProps","inputSx","startAdornment","startAdornmentOverride","restInputSlotProps","responsive","xs","md","internalValue","setInternalValue","useState","currentValue","undefined","handleChange","useCallback","e","target","handleSetValue","v","AddIcon","PlusIcon","isWrapped","setIsWrapped","isMultirow","includes","shadowRef","useRef","internalStartRef","internalEndRef","startWidth","setStartWidth","endWidth","setEndWidth","useEffect","shadowEl","current","startEl","endEl","observer","ResizeObserver","lineHeight","Number","parseFloat","getComputedStyle","clientHeight","containerStyle","parentElement","adornmentStyle","offsetWidth","marginRight","paddingLeft","marginLeft","paddingRight","observe","disconnect","_jsx","TextField","minRows","maxRows","multiline","fullWidth","sxOverride","borderRadius","length","padding","flexWrap","borderColor","borderWidth","pl","pr","_jsxs","_Fragment","children","PromptAttachments","order","flexBasis","src","ml","InputAdornment","position","mt","mr","fontSize","IconButton","Box","component","display","left","visibility","pointerEvents","whiteSpace","wordBreak","overflowWrap","flexGrow","maxHeight","overflow","endAdornment","gap","PromptSubmitIconButton","setValue","variant","label"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { FC, ComponentType, ReactNode } from 'react';
2
+ import { IconButtonProps, SvgIconProps } from '@mui/material';
3
+ import { PromptAttachment } from '@/src';
4
+ export interface PromptSubmitIconButtonProps extends Omit<IconButtonProps, 'value'> {
5
+ /**
6
+ * Current input value. Switches the button from voice to submit variant.
7
+ */
8
+ value?: string;
9
+ /**
10
+ * Setter for the input value.
11
+ */
12
+ setValue?: (value: string) => void;
13
+ /**
14
+ * List of attachments displayed above the text input.
15
+ */
16
+ attachments?: PromptAttachment[];
17
+ /**
18
+ * Indicates that a request is being processed. Shows the processing (stop) icon.
19
+ */
20
+ processing?: boolean;
21
+ /**
22
+ * Indicates that voice recording is in progress.
23
+ */
24
+ recording?: boolean;
25
+ /**
26
+ * Label that changes IconButton to Button.
27
+ */
28
+ label?: ReactNode;
29
+ /**
30
+ * Do not show voice button. Use when speech input is unavailable or unsupported.
31
+ */
32
+ disableVoice?: boolean;
33
+ /**
34
+ * Custom component for the send icon, shown in submit state.
35
+ */
36
+ SendIconComponent?: ComponentType<SvgIconProps>;
37
+ /**
38
+ * Custom component for the voice icon, shown when input is empty and not recording.
39
+ */
40
+ VoiceIconComponent?: ComponentType<SvgIconProps>;
41
+ /**
42
+ * Custom component for the processing icon, shown while a request is processing.
43
+ */
44
+ ProcessingIconComponent?: ComponentType<SvgIconProps>;
45
+ /**
46
+ * Custom component for the recording icon, shown as startIcon on the recording stop button.
47
+ */
48
+ RecordingIconComponent?: ComponentType<SvgIconProps>;
49
+ }
50
+ /**
51
+ * Submit button for the PromptBar. Switches between voice and submit variants
52
+ * depending on the current state.
53
+ */
54
+ export declare const PromptSubmitIconButton: FC<PromptSubmitIconButtonProps>;
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{forwardRef as e,useMemo as o}from"react";import{Button as n,IconButton as a}from"@mui/material";import{SendIcon as i}from"../icon/stroke/SendIcon.js";import{SoundwaveIcon as t}from"../icon/stroke/SoundwaveIcon.js";import{ShapeSquareFilledIcon as s}from"../icon/filled/ShapeSquareFilledIcon.js";import{sxOverride as l}from"../../utils/sxOverride/sxOverride.js";const c=e(({value:e,setValue:c,attachments:m,processing:f,recording:d,label:u,disableVoice:p,SendIconComponent:g,VoiceIconComponent:b,ProcessingIconComponent:h,RecordingIconComponent:v,sx:I,disabled:S,...y},w)=>{const Y=b||t,x=g||i,j=v||t,k=h||s,C=o(()=>f?"processing":d?"recording":p||e||m?.length?"submit":"voice",[f,d,e,p,m?.length]),V=o(()=>u?n:a,[u]),O=o(()=>{switch(C){case"processing":return k;case"recording":return j;case"submit":return x;default:return Y}},[C,k,j,x,Y]);return r(V,{ref:w,color:"primary",size:"small",disabled:S,...u?{variant:"contained",startIcon:r(O,{})}:{variant:"filled"},..."voice"===C&&{"aria-label":"Voice input",color:"surface"},..."submit"===C&&{"aria-label":"Submit",...p&&!e&&!m?.length&&{disabled:!0}},..."recording"===C&&{"aria-label":"Stop recording"},..."processing"===C&&{"aria-label":"Stop"},...y,sx:l({..."recording"===C&&!v&&{"@keyframes flow-soundbar-small":{"0%":{transform:"scaleY(1)"},"25%":{transform:"scaleY(3.15)"},"50%, 100%":{transform:"scaleY(1)"}},"@keyframes flow-soundbar-large":{"0%":{transform:"scaleY(0.35)"},"25%":{transform:"scaleY(1)"},"50%, 100%":{transform:"scaleY(0.35)"}},"& .MuiSvgIcon-root":{path:{transformOrigin:"center 60%",transition:"transform 0.3s ease-out","&:nth-of-type(1)":{animation:"1.2s linear infinite flow-soundbar-small"},"&:nth-of-type(2)":{transform:"scaleY(0.35)",animation:"1.2s linear infinite flow-soundbar-large",animationDelay:"0.2s"},"&:nth-of-type(3)":{animation:"1.2s linear infinite flow-soundbar-small",animationDelay:"0.4s"}}}}},I),children:u||r(O,{})},C)});export{c as PromptSubmitIconButton};
2
+ //# sourceMappingURL=PromptSubmitIconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptSubmitIconButton.js","sources":["../../../src/components/promptBar/PromptSubmitIconButton.tsx"],"sourcesContent":["import { FC, ComponentType, forwardRef, useMemo, ReactNode } from 'react';\nimport { Button, ButtonBaseProps, IconButton, IconButtonProps, SvgIconProps } from '@mui/material';\nimport { SendIcon } from '@/src/components/icon/stroke/SendIcon';\nimport { SoundwaveIcon } from '@/src/components/icon/stroke/SoundwaveIcon';\nimport { ShapeSquareFilledIcon } from '@/src/components/icon/filled/ShapeSquareFilledIcon';\nimport { sxOverride } from '@/src/utils/sxOverride';\nimport { PromptAttachment } from '@/src';\n\nexport interface PromptSubmitIconButtonProps extends Omit<IconButtonProps, 'value'> {\n /**\n * Current input value. Switches the button from voice to submit variant.\n */\n value?: string;\n /**\n * Setter for the input value.\n */\n setValue?: (value: string) => void;\n /**\n * List of attachments displayed above the text input.\n */\n attachments?: PromptAttachment[];\n /**\n * Indicates that a request is being processed. Shows the processing (stop) icon.\n */\n processing?: boolean;\n /**\n * Indicates that voice recording is in progress.\n */\n recording?: boolean;\n /**\n * Label that changes IconButton to Button.\n */\n label?: ReactNode;\n /**\n * Do not show voice button. Use when speech input is unavailable or unsupported.\n */\n disableVoice?: boolean;\n /**\n * Custom component for the send icon, shown in submit state.\n */\n SendIconComponent?: ComponentType<SvgIconProps>;\n /**\n * Custom component for the voice icon, shown when input is empty and not recording.\n */\n VoiceIconComponent?: ComponentType<SvgIconProps>;\n /**\n * Custom component for the processing icon, shown while a request is processing.\n */\n ProcessingIconComponent?: ComponentType<SvgIconProps>;\n /**\n * Custom component for the recording icon, shown as startIcon on the recording stop button.\n */\n RecordingIconComponent?: ComponentType<SvgIconProps>;\n}\n\n/**\n * Submit button for the PromptBar. Switches between voice and submit variants\n * depending on the current state.\n */\nexport const PromptSubmitIconButton: FC<PromptSubmitIconButtonProps> = forwardRef(\n (\n {\n value,\n setValue,\n attachments,\n processing,\n recording,\n label,\n disableVoice,\n SendIconComponent,\n VoiceIconComponent,\n ProcessingIconComponent,\n RecordingIconComponent,\n sx,\n disabled,\n ...rest\n },\n ref,\n ) => {\n const VoiceIcon = VoiceIconComponent || SoundwaveIcon;\n const SubmitIcon = SendIconComponent || SendIcon;\n const RecordingIcon = RecordingIconComponent || SoundwaveIcon;\n const ProcessingIcon = ProcessingIconComponent || ShapeSquareFilledIcon;\n\n const state = useMemo<'voice' | 'recording' | 'submit' | 'processing'>(() => {\n if (processing) return 'processing';\n if (recording) return 'recording';\n if (disableVoice || value || attachments?.length) return 'submit';\n return 'voice';\n }, [processing, recording, value, disableVoice, attachments?.length]);\n\n const Component = useMemo<ComponentType<ButtonBaseProps>>(() => {\n if (label) {\n return Button;\n }\n return IconButton;\n }, [label]);\n\n const Icon = useMemo(() => {\n switch (state) {\n case 'processing':\n return ProcessingIcon;\n case 'recording':\n return RecordingIcon;\n case 'submit':\n return SubmitIcon;\n case 'voice':\n default:\n return VoiceIcon;\n }\n }, [state, ProcessingIcon, RecordingIcon, SubmitIcon, VoiceIcon]);\n\n return (\n <Component\n ref={ref}\n key={state}\n color=\"primary\"\n size=\"small\"\n disabled={disabled}\n {...(label ? { variant: 'contained', startIcon: <Icon /> } : { variant: 'filled' })}\n {...(state === 'voice' && { 'aria-label': 'Voice input', color: 'surface' })}\n {...(state === 'submit' && {\n 'aria-label': 'Submit',\n ...(disableVoice && !value && !attachments?.length && { disabled: true }),\n })}\n {...(state === 'recording' && { 'aria-label': 'Stop recording' })}\n {...(state === 'processing' && { 'aria-label': 'Stop' })}\n {...rest}\n sx={sxOverride(\n {\n // soundwave animation during voice recordin\n ...(state === 'recording' &&\n !RecordingIconComponent && {\n '@keyframes flow-soundbar-small': {\n '0%': { transform: 'scaleY(1)' },\n '25%': { transform: 'scaleY(3.15)' },\n '50%, 100%': { transform: 'scaleY(1)' },\n },\n '@keyframes flow-soundbar-large': {\n '0%': { transform: 'scaleY(0.35)' },\n '25%': { transform: 'scaleY(1)' },\n '50%, 100%': { transform: 'scaleY(0.35)' },\n },\n '& .MuiSvgIcon-root': {\n path: {\n transformOrigin: 'center 60%',\n transition: 'transform 0.3s ease-out',\n '&:nth-of-type(1)': { animation: '1.2s linear infinite flow-soundbar-small' },\n '&:nth-of-type(2)': {\n transform: 'scaleY(0.35)',\n animation: '1.2s linear infinite flow-soundbar-large',\n animationDelay: '0.2s',\n },\n '&:nth-of-type(3)': {\n animation: '1.2s linear infinite flow-soundbar-small',\n animationDelay: '0.4s',\n },\n },\n },\n }),\n },\n sx,\n )}\n >\n {label ? label : <Icon />}\n </Component>\n );\n },\n);\n"],"names":["PromptSubmitIconButton","forwardRef","value","setValue","attachments","processing","recording","label","disableVoice","SendIconComponent","VoiceIconComponent","ProcessingIconComponent","RecordingIconComponent","sx","disabled","rest","ref","VoiceIcon","SoundwaveIcon","SubmitIcon","SendIcon","RecordingIcon","ProcessingIcon","ShapeSquareFilledIcon","state","useMemo","length","Component","Button","IconButton","Icon","_jsx","color","size","variant","startIcon","sxOverride","transform","path","transformOrigin","transition","animation","animationDelay","children"],"mappings":"uZA2DO,MAAMA,EAA0DC,EACrE,EAEIC,QACAC,WACAC,cACAC,aACAC,YACAC,QACAC,eACAC,oBACAC,qBACAC,0BACAC,yBACAC,KACAC,cACGC,GAELC,KAEA,MAAMC,EAAYP,GAAsBQ,EAClCC,EAAaV,GAAqBW,EAClCC,EAAgBT,GAA0BM,EAC1CI,EAAiBX,GAA2BY,EAE5CC,EAAQC,EAAyD,IACjEpB,EAAmB,aACnBC,EAAkB,YAClBE,GAAgBN,GAASE,GAAasB,OAAe,SAClD,QACN,CAACrB,EAAYC,EAAWJ,EAAOM,EAAcJ,GAAasB,SAEvDC,EAAYF,EAAwC,IACpDlB,EACKqB,EAEFC,EACN,CAACtB,IAEEuB,EAAOL,EAAQ,KACnB,OAAQD,GACN,IAAK,aACH,OAAOF,EACT,IAAK,YACH,OAAOD,EACT,IAAK,SACH,OAAOF,EAET,QACE,OAAOF,IAEV,CAACO,EAAOF,EAAgBD,EAAeF,EAAYF,IAEtD,OACEc,EAACJ,EAAS,CACRX,IAAKA,EAELgB,MAAM,UACNC,KAAK,QACLnB,SAAUA,KACLP,EAAQ,CAAE2B,QAAS,YAAaC,UAAWJ,EAACD,EAAI,CAAA,IAAQ,CAAEI,QAAS,aACzD,UAAVV,GAAqB,CAAE,aAAc,cAAeQ,MAAO,cACjD,WAAVR,GAAsB,CACzB,aAAc,YACVhB,IAAiBN,IAAUE,GAAasB,QAAU,CAAEZ,UAAU,OAErD,cAAVU,GAAyB,CAAE,aAAc,qBAC/B,eAAVA,GAA0B,CAAE,aAAc,WAC3CT,EACJF,GAAIuB,EACF,IAEgB,cAAVZ,IACDZ,GAA0B,CACzB,iCAAkC,CAChC,KAAM,CAAEyB,UAAW,aACnB,MAAO,CAAEA,UAAW,gBACpB,YAAa,CAAEA,UAAW,cAE5B,iCAAkC,CAChC,KAAM,CAAEA,UAAW,gBACnB,MAAO,CAAEA,UAAW,aACpB,YAAa,CAAEA,UAAW,iBAE5B,qBAAsB,CACpBC,KAAM,CACJC,gBAAiB,aACjBC,WAAY,0BACZ,mBAAoB,CAAEC,UAAW,4CACjC,mBAAoB,CAClBJ,UAAW,eACXI,UAAW,2CACXC,eAAgB,QAElB,mBAAoB,CAClBD,UAAW,2CACXC,eAAgB,YAM5B7B,GACD8B,SAEApC,GAAgBwB,EAACD,EAAI,CAAA,IAjDjBN"}
@@ -0,0 +1,3 @@
1
+ export * from './PromptBar';
2
+ export * from './PromptSubmitIconButton';
3
+ export * from './PromptAttachments';
@@ -1,6 +1,6 @@
1
1
  import React, { ReactNode, ElementType, ComponentType } from 'react';
2
- import { StackProps, TypographyProps, ButtonProps, BoxProps, SvgIconProps } from '@mui/material';
3
- export interface QuickLinkProps extends Omit<StackProps<ElementType>, 'title'> {
2
+ import { TypographyProps, ButtonProps, BoxProps, SvgIconProps } from '@mui/material';
3
+ export interface QuickLinkProps extends Omit<BoxProps<ElementType>, 'title'> {
4
4
  /**
5
5
  * Icon node to be used
6
6
  */
@@ -40,7 +40,7 @@ export interface QuickLinkProps extends Omit<StackProps<ElementType>, 'title'> {
40
40
  /**
41
41
  * Icon and Title wrapper that changes on the mobile
42
42
  */
43
- titleWrapperProps?: StackProps<ElementType>;
43
+ titleWrapperProps?: BoxProps<ElementType>;
44
44
  /**
45
45
  * Button text
46
46
  */
@@ -1,2 +1,2 @@
1
- import{jsxs as t,jsx as r}from"react/jsx-runtime";import{forwardRef as o}from"react";import{Stack as i,Box as n,Typography as e,Button as a}from"@mui/material";import{ArrowRightIcon as s}from"../icon/stroke/ArrowRightIcon.js";import{getInteractiveStyle as p}from"../../materialui/button/interactive.js";const d=o(({IconComponent:o,iconProps:d,title:c,titleTypographyProps:x,subtitle:l,subtitleTypographyProps:m,dividerWrapperProps:u,dividerProps:h,contentWrapperProps:k,titleWrapperProps:b,buttonTitle:f,buttonProps:g,buttonIconProps:y,onClick:I,sx:v,...P},C)=>{const{sx:B,...L}=d||{},{sx:M,...Q}=u||{},{sx:w,...S}=h||{},{sx:W,...T}=k||{},{sx:X,...j}=b||{};return t(i,{direction:"column",alignItems:"flex-start",sx:{minWidth:"0",cursor:"pointer",color:"inherit",textDecoration:"unset",gap:{xs:"8px",md:"16px"},...p({hr:{backgroundColor:"text.primary",height:"1px"},".MuiButton-navigation":{backgroundColor:"transparent",color:t=>"dark"===t.palette.mode?"onSurface.os0":"onSurface.os900","& .MuiButton-startIcon":{transform:"translateX(0px)"},"& .MuiButton-endIcon":{transform:"translateX(0px)"}}},{hr:{backgroundColor:t=>"dark"===t.palette.mode?"brand.secondary":"brand.primary",height:"2px"},".MuiButton-navigation":{backgroundColor:"transparent",color:t=>"dark"===t.palette.mode?"onSurface.os300":"onSurface.os700",".MuiButton-startIcon":{transform:"translateX(-8px)"},".MuiButton-endIcon":{transform:"translateX(8px)"}}}),...v},"data-testid":"QuickLink",ref:C,...I&&{onClick:I,role:"button"},tabIndex:-1,...P,children:[r(n,{sx:{position:"relative",width:"100%",height:"2px","&&":{mb:{xs:0,md:o?0:2}},...M},...Q,children:r(n,{component:"hr",sx:{border:"none",position:"absolute",inset:"0",m:0,...w},...S})}),t(n,{sx:{width:"480px",maxWidth:"100%",pr:3,pt:{xs:"8px",md:"0px"},...W},...T,children:[t(i,{sx:{flexDirection:{xs:"row",md:"column"},alignItems:{xs:"center",md:"flex-start"},gap:{xs:"4px",md:"18px"},mb:{xs:"4px",md:0},...X},...j,children:[o&&r(o,{sx:{display:"block",fontSize:{xs:"20px",md:"35px"},mx:{xs:"2px",md:"0px"},my:{xs:"0px",md:"2px"},...B},"data-testid":"QuickLink.icon",...L}),c&&r(e,{variant:"h4",display:"block","data-testid":"QuickLink.title",sx:{mb:{xs:0,md:.5}},...x,children:c})]}),l&&r(e,{variant:"disclaimer1",display:"block","data-testid":"QuickLink.subtitle",...m,children:l})]}),f&&r(a,{variant:"navigation",color:"secondary",endIcon:r(s,{}),"data-testid":"QuickLink.button",...g,children:f})]})}),c=o(({sx:t,children:o,...i},e)=>r(n,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",lg:"repeat(3, 1fr)"},gap:3,...t},ref:e,"data-testid":"QuickLink.wrapper",...i,children:o}));export{d as QuickLink,c as QuickLinkWrapper};
1
+ import{jsxs as t,jsx as r}from"react/jsx-runtime";import{forwardRef as o}from"react";import{Box as i,Typography as e,Button as n}from"@mui/material";import{sxOverride as a}from"../../utils/sxOverride/sxOverride.js";import{ArrowRightIcon as s}from"../icon/stroke/ArrowRightIcon.js";import{getInteractiveStyle as p}from"../../materialui/button/interactive.js";const d=o(({IconComponent:o,iconProps:d,title:x,titleTypographyProps:l,subtitle:c,subtitleTypographyProps:m,dividerWrapperProps:u,dividerProps:h,contentWrapperProps:f,titleWrapperProps:k,buttonTitle:b,buttonProps:g,buttonIconProps:y,onClick:v,sx:I,...P},C)=>{const{sx:B,...L}=d||{},{sx:M,...Q}=u||{},{sx:w,...S}=h||{},{sx:W,...j}=f||{},{sx:T,...X}=k||{},{sx:D,...O}=l||{},{sx:z,...A}=m||{};return t(i,{sx:a({display:"flex",flexDirection:"column",alignItems:"flex-start",minWidth:"0",cursor:"pointer",color:"inherit",textDecoration:"unset",gap:{xs:"8px",md:"16px"},...p({hr:{backgroundColor:"text.primary",height:"1px"},".MuiButton-navigation":{backgroundColor:"transparent",color:t=>"dark"===t.palette.mode?"onSurface.os0":"onSurface.os900","& .MuiButton-startIcon":{transform:"translateX(0px)"},"& .MuiButton-endIcon":{transform:"translateX(0px)"}}},{hr:{backgroundColor:t=>"dark"===t.palette.mode?"brand.secondary":"brand.primary",height:"2px"},".MuiButton-navigation":{backgroundColor:"transparent",color:t=>"dark"===t.palette.mode?"onSurface.os300":"onSurface.os700",".MuiButton-startIcon":{transform:"translateX(-8px)"},".MuiButton-endIcon":{transform:"translateX(8px)"}}})},I),"data-testid":"QuickLink",ref:C,...v&&{onClick:v,role:"button"},tabIndex:-1,...P,children:[r(i,{sx:a({position:"relative",width:"100%",height:"2px","&&":{mb:{xs:0,md:o?0:2}}},M),...Q,children:r(i,{component:"hr",sx:a({border:"none",position:"absolute",inset:"0",m:0},w),...S})}),t(i,{sx:a({width:"480px",maxWidth:"100%",pr:3,pt:{xs:"8px",md:"0px"}},W),...j,children:[t(i,{sx:a({display:"flex",flexDirection:{xs:"row",md:"column"},alignItems:{xs:"center",md:"flex-start"},gap:{xs:"4px",md:"18px"},mb:{xs:"4px",md:0}},T),...X,children:[o&&r(o,{sx:a({display:"block",fontSize:{xs:"20px",md:"35px"},mx:{xs:"2px",md:"0px"},my:{xs:"0px",md:"2px"}},B),"data-testid":"QuickLink.icon",...L}),x&&r(e,{variant:"h4","data-testid":"QuickLink.title",sx:a({display:"block",mb:{xs:0,md:.5}},D),...O,children:x})]}),c&&r(e,{variant:"disclaimer1","data-testid":"QuickLink.subtitle",sx:a({display:"block"},z),...A,children:c})]}),b&&r(n,{variant:"navigation",color:"secondary",endIcon:r(s,{}),"data-testid":"QuickLink.button",...g,children:b})]})}),x=o(({sx:t,children:o,...e},n)=>r(i,{sx:a({display:"grid",gridTemplateColumns:{xs:"1fr",lg:"repeat(3, 1fr)"},gap:3},t),ref:n,"data-testid":"QuickLink.wrapper",...e,children:o}));export{d as QuickLink,x as QuickLinkWrapper};
2
2
  //# sourceMappingURL=QuickLink.js.map