uikit-react-public 0.25.5 → 0.26.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 (476) hide show
  1. package/dist/components/Alert/Alert.d.ts +3 -3
  2. package/dist/components/Alert/Alert.stories.d.ts +3 -3
  3. package/dist/components/Alert/AlertMessage.d.ts +1 -1
  4. package/dist/components/Alert/AlertTitle.d.ts +1 -1
  5. package/dist/components/AppHeader/AppHeader.d.ts +1 -1
  6. package/dist/components/AppHeader/AppHeader.stories.d.ts +1 -1
  7. package/dist/components/AppHeader/AppHeaderBottom.d.ts +1 -1
  8. package/dist/components/AppHeader/AppHeaderNav.d.ts +1 -1
  9. package/dist/components/AppHeader/AppHeaderTop.d.ts +1 -1
  10. package/dist/components/AppMenu/AppMenu.context.d.ts +1 -1
  11. package/dist/components/AppMenu/AppMenu.d.ts +1 -1
  12. package/dist/components/AppMenu/AppMenu.stories.d.ts +1 -1
  13. package/dist/components/Badge/Badge.d.ts +1 -1
  14. package/dist/components/Badge/Badge.stories.d.ts +1 -1
  15. package/dist/components/Breadcrumbs/Breadcrumb.d.ts +1 -1
  16. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +2 -2
  17. package/dist/components/Breadcrumbs/Breadcrumbs.stories.d.ts +2 -2
  18. package/dist/components/Button/Button.d.ts +1 -1
  19. package/dist/components/Button/Button.stories.d.ts +1 -1
  20. package/dist/components/Calendar/Calendar.d.ts +1 -1
  21. package/dist/components/Calendar/Calendar.stories.d.ts +1 -1
  22. package/dist/components/Calendar/subcomponents/AcademicWeek.d.ts +1 -1
  23. package/dist/components/Calendar/subcomponents/AcademicWeeks.d.ts +1 -1
  24. package/dist/components/Calendar/subcomponents/ColumnHeading.d.ts +1 -1
  25. package/dist/components/Calendar/subcomponents/Controls.d.ts +1 -1
  26. package/dist/components/Calendar/subcomponents/Day.d.ts +1 -1
  27. package/dist/components/Calendar/subcomponents/Day.stories.d.ts +1 -1
  28. package/dist/components/Calendar/subcomponents/EventDot.d.ts +1 -1
  29. package/dist/components/Calendar/subcomponents/Grid.d.ts +1 -1
  30. package/dist/components/CookieNotice/CookieNotice.d.ts +1 -1
  31. package/dist/components/Datepicker/Datepicker.d.ts +1 -1
  32. package/dist/components/Datepicker/Datepicker.stories.d.ts +1 -1
  33. package/dist/components/Datepicker/subcomponents/CustomDatepicker.d.ts +1 -1
  34. package/dist/components/Datepicker/subcomponents/DatepickerInput.d.ts +1 -1
  35. package/dist/components/Datepicker/subcomponents/Panel.d.ts +1 -1
  36. package/dist/components/Datepicker/subcomponents/VisibleField.d.ts +1 -1
  37. package/dist/components/Dialog/BaseDialog.d.ts +1 -1
  38. package/dist/components/Dialog/Dialog.d.ts +1 -1
  39. package/dist/components/Dialog/Dialog.stories.d.ts +1 -1
  40. package/dist/components/Dialog/DialogBody.d.ts +1 -1
  41. package/dist/components/Dialog/DialogFooter.d.ts +1 -1
  42. package/dist/components/Dialog/DialogHeader.d.ts +1 -1
  43. package/dist/components/Divider/Divider.d.ts +1 -1
  44. package/dist/components/Divider/Divider.stories.d.ts +1 -1
  45. package/dist/components/DrawerMenu/DrawerMenu.d.ts +28 -0
  46. package/dist/components/DrawerMenu/DrawerMenuTrigger.d.ts +4 -0
  47. package/dist/components/DrawerMenu/__tests__/DrawerMenu.test.d.ts +1 -0
  48. package/dist/components/DrawerMenu/index.d.ts +2 -0
  49. package/dist/components/Dropdown/Dropdown.context.d.ts +1 -1
  50. package/dist/components/Dropdown/Dropdown.d.ts +1 -1
  51. package/dist/components/Dropdown/Dropdown.stories.d.ts +1 -1
  52. package/dist/components/Dropdown/DropdownContent.d.ts +9 -3
  53. package/dist/components/DropdownMenu/DropdownMenu.d.ts +1 -1
  54. package/dist/components/DropdownMenu/DropdownMenuTrigger.d.ts +1 -1
  55. package/dist/components/DropdownUserMenu/DropdownUserMenu.d.ts +1 -1
  56. package/dist/components/FeedbackDialog/FeedbackDialog.d.ts +1 -1
  57. package/dist/components/FeedbackDialog/FeedbackDialog.stories.d.ts +1 -1
  58. package/dist/components/Field/CharacterCount.d.ts +1 -1
  59. package/dist/components/Field/ErrorText.d.ts +1 -1
  60. package/dist/components/Field/Field.d.ts +1 -1
  61. package/dist/components/Field/Field.stories.d.ts +1 -1
  62. package/dist/components/Field/HelperText.d.ts +1 -1
  63. package/dist/components/FileInput/FileInput.d.ts +1 -1
  64. package/dist/components/FileInput/FileInput.stories.d.ts +1 -1
  65. package/dist/components/Footer/Footer.d.ts +1 -1
  66. package/dist/components/Footer/Footer.stories.d.ts +1 -1
  67. package/dist/components/Footer/FooterColumn.d.ts +1 -1
  68. package/dist/components/Footer/FooterNavLink.d.ts +1 -1
  69. package/dist/components/Footer/SocialLink.d.ts +1 -1
  70. package/dist/components/FooterNew/BackToTop.d.ts +1 -1
  71. package/dist/components/FooterNew/Footer.d.ts +1 -1
  72. package/dist/components/FooterNew/FooterColumn.d.ts +1 -1
  73. package/dist/components/FooterNew/FooterLinks.d.ts +1 -1
  74. package/dist/components/FooterNew/FooterNavLink.d.ts +1 -1
  75. package/dist/components/FooterNew/LegalAndCopyright.d.ts +1 -1
  76. package/dist/components/FooterNew/LogoAddressAndSocial.d.ts +1 -1
  77. package/dist/components/FooterNew/SocialLink.d.ts +1 -1
  78. package/dist/components/Header/Header.d.ts +1 -1
  79. package/dist/components/Header/Header.stories.d.ts +1 -1
  80. package/dist/components/HeaderDraft/HeaderBottomBreadcrumbs.d.ts +1 -1
  81. package/dist/components/HeaderDraft/HeaderBottomHeadingAndAvatar.d.ts +1 -1
  82. package/dist/components/HeaderDraft/HeaderBreadcrumb.d.ts +1 -1
  83. package/dist/components/HeaderDraft/HeaderDraft.d.ts +1 -1
  84. package/dist/components/HeaderNew/Header.d.ts +1 -1
  85. package/dist/components/HeaderNew/HeaderBorder.d.ts +1 -1
  86. package/dist/components/HeaderNew/HeaderItem.d.ts +1 -1
  87. package/dist/components/HeaderNew/HeaderLogo.d.ts +1 -1
  88. package/dist/components/HeaderNew/HeaderTitle.d.ts +1 -1
  89. package/dist/components/HeaderNew/constants.d.ts +1 -1
  90. package/dist/components/Heading/Heading.d.ts +2 -2
  91. package/dist/components/Heading/Heading.stories.d.ts +1 -1
  92. package/dist/components/Icon/BaseIcon.d.ts +1 -1
  93. package/dist/components/Icon/Icon.d.ts +1 -1
  94. package/dist/components/Icon/svgs/ActivitySvg.d.ts +1 -1
  95. package/dist/components/Icon/svgs/AirplaySvg.d.ts +1 -1
  96. package/dist/components/Icon/svgs/AlertCircleSvg.d.ts +1 -1
  97. package/dist/components/Icon/svgs/AlertOctagonSvg.d.ts +1 -1
  98. package/dist/components/Icon/svgs/AlertTriangleSvg.d.ts +1 -1
  99. package/dist/components/Icon/svgs/AlignCenterSvg.d.ts +1 -1
  100. package/dist/components/Icon/svgs/AlignJustifySvg.d.ts +1 -1
  101. package/dist/components/Icon/svgs/AlignLeftSvg.d.ts +1 -1
  102. package/dist/components/Icon/svgs/AlignRightSvg.d.ts +1 -1
  103. package/dist/components/Icon/svgs/AnchorSvg.d.ts +1 -1
  104. package/dist/components/Icon/svgs/ApertureSvg.d.ts +1 -1
  105. package/dist/components/Icon/svgs/ArchiveSvg.d.ts +1 -1
  106. package/dist/components/Icon/svgs/ArrowDownCircleSvg.d.ts +1 -1
  107. package/dist/components/Icon/svgs/ArrowDownLeftSvg.d.ts +1 -1
  108. package/dist/components/Icon/svgs/ArrowDownRightSvg.d.ts +1 -1
  109. package/dist/components/Icon/svgs/ArrowDownSvg.d.ts +1 -1
  110. package/dist/components/Icon/svgs/ArrowLeftCircleSvg.d.ts +1 -1
  111. package/dist/components/Icon/svgs/ArrowLeftSvg.d.ts +1 -1
  112. package/dist/components/Icon/svgs/ArrowRightCircleSvg.d.ts +1 -1
  113. package/dist/components/Icon/svgs/ArrowRightSvg.d.ts +1 -1
  114. package/dist/components/Icon/svgs/ArrowUpCircleSvg.d.ts +1 -1
  115. package/dist/components/Icon/svgs/ArrowUpLeftSvg.d.ts +1 -1
  116. package/dist/components/Icon/svgs/ArrowUpRightSvg.d.ts +1 -1
  117. package/dist/components/Icon/svgs/ArrowUpSvg.d.ts +1 -1
  118. package/dist/components/Icon/svgs/AtSignSvg.d.ts +1 -1
  119. package/dist/components/Icon/svgs/AvatarSvg.d.ts +1 -1
  120. package/dist/components/Icon/svgs/AwardSvg.d.ts +1 -1
  121. package/dist/components/Icon/svgs/BarChart2Svg.d.ts +1 -1
  122. package/dist/components/Icon/svgs/BarChartSvg.d.ts +1 -1
  123. package/dist/components/Icon/svgs/BatteryChargingSvg.d.ts +1 -1
  124. package/dist/components/Icon/svgs/BatterySvg.d.ts +1 -1
  125. package/dist/components/Icon/svgs/BellOffSvg.d.ts +1 -1
  126. package/dist/components/Icon/svgs/BellSvg.d.ts +1 -1
  127. package/dist/components/Icon/svgs/BluetoothSvg.d.ts +1 -1
  128. package/dist/components/Icon/svgs/BoldSvg.d.ts +1 -1
  129. package/dist/components/Icon/svgs/BookOpenSvg.d.ts +1 -1
  130. package/dist/components/Icon/svgs/BookSvg.d.ts +1 -1
  131. package/dist/components/Icon/svgs/BookmarkSvg.d.ts +1 -1
  132. package/dist/components/Icon/svgs/BoxSvg.d.ts +1 -1
  133. package/dist/components/Icon/svgs/BriefcaseSvg.d.ts +1 -1
  134. package/dist/components/Icon/svgs/CalendarSvg.d.ts +1 -1
  135. package/dist/components/Icon/svgs/CameraOffSvg.d.ts +1 -1
  136. package/dist/components/Icon/svgs/CameraSvg.d.ts +1 -1
  137. package/dist/components/Icon/svgs/CastSvg.d.ts +1 -1
  138. package/dist/components/Icon/svgs/CheckCircleSvg.d.ts +1 -1
  139. package/dist/components/Icon/svgs/CheckSquareSvg.d.ts +1 -1
  140. package/dist/components/Icon/svgs/CheckSvg.d.ts +1 -1
  141. package/dist/components/Icon/svgs/ChevronDownSvg.d.ts +1 -1
  142. package/dist/components/Icon/svgs/ChevronLeftSvg.d.ts +1 -1
  143. package/dist/components/Icon/svgs/ChevronRightSvg.d.ts +1 -1
  144. package/dist/components/Icon/svgs/ChevronUpSvg.d.ts +1 -1
  145. package/dist/components/Icon/svgs/ChevronsDownSvg.d.ts +1 -1
  146. package/dist/components/Icon/svgs/ChevronsLeftSvg.d.ts +1 -1
  147. package/dist/components/Icon/svgs/ChevronsRightSvg.d.ts +1 -1
  148. package/dist/components/Icon/svgs/ChevronsUpSvg.d.ts +1 -1
  149. package/dist/components/Icon/svgs/ChromeSvg.d.ts +1 -1
  150. package/dist/components/Icon/svgs/CircleSvg.d.ts +1 -1
  151. package/dist/components/Icon/svgs/ClipboardSvg.d.ts +1 -1
  152. package/dist/components/Icon/svgs/ClockSvg.d.ts +1 -1
  153. package/dist/components/Icon/svgs/CloudDrizzleSvg.d.ts +1 -1
  154. package/dist/components/Icon/svgs/CloudLightningSvg.d.ts +1 -1
  155. package/dist/components/Icon/svgs/CloudOffSvg.d.ts +1 -1
  156. package/dist/components/Icon/svgs/CloudRainSvg.d.ts +1 -1
  157. package/dist/components/Icon/svgs/CloudSnowSvg.d.ts +1 -1
  158. package/dist/components/Icon/svgs/CloudSvg.d.ts +1 -1
  159. package/dist/components/Icon/svgs/CodeSvg.d.ts +1 -1
  160. package/dist/components/Icon/svgs/CodepenSvg.d.ts +1 -1
  161. package/dist/components/Icon/svgs/CodesandboxSvg.d.ts +1 -1
  162. package/dist/components/Icon/svgs/CoffeeSvg.d.ts +1 -1
  163. package/dist/components/Icon/svgs/ColumnsSvg.d.ts +1 -1
  164. package/dist/components/Icon/svgs/CommandSvg.d.ts +1 -1
  165. package/dist/components/Icon/svgs/CompassSvg.d.ts +1 -1
  166. package/dist/components/Icon/svgs/CopySvg.d.ts +1 -1
  167. package/dist/components/Icon/svgs/CornerDownLeftSvg.d.ts +1 -1
  168. package/dist/components/Icon/svgs/CornerDownRightSvg.d.ts +1 -1
  169. package/dist/components/Icon/svgs/CornerLeftDownSvg.d.ts +1 -1
  170. package/dist/components/Icon/svgs/CornerLeftUpSvg.d.ts +1 -1
  171. package/dist/components/Icon/svgs/CornerRightDownSvg.d.ts +1 -1
  172. package/dist/components/Icon/svgs/CornerRightUpSvg.d.ts +1 -1
  173. package/dist/components/Icon/svgs/CornerUpLeftSvg.d.ts +1 -1
  174. package/dist/components/Icon/svgs/CornerUpRightSvg.d.ts +1 -1
  175. package/dist/components/Icon/svgs/CpuSvg.d.ts +1 -1
  176. package/dist/components/Icon/svgs/CreditCardSvg.d.ts +1 -1
  177. package/dist/components/Icon/svgs/CropSvg.d.ts +1 -1
  178. package/dist/components/Icon/svgs/CrosshairSvg.d.ts +1 -1
  179. package/dist/components/Icon/svgs/DatabaseSvg.d.ts +1 -1
  180. package/dist/components/Icon/svgs/DeleteSvg.d.ts +1 -1
  181. package/dist/components/Icon/svgs/DiscSvg.d.ts +1 -1
  182. package/dist/components/Icon/svgs/DivideCircleSvg.d.ts +1 -1
  183. package/dist/components/Icon/svgs/DivideSquareSvg.d.ts +1 -1
  184. package/dist/components/Icon/svgs/DivideSvg.d.ts +1 -1
  185. package/dist/components/Icon/svgs/DollarSignSvg.d.ts +1 -1
  186. package/dist/components/Icon/svgs/DownloadCloudSvg.d.ts +1 -1
  187. package/dist/components/Icon/svgs/DownloadSvg.d.ts +1 -1
  188. package/dist/components/Icon/svgs/DribbbleSvg.d.ts +1 -1
  189. package/dist/components/Icon/svgs/DropletSvg.d.ts +1 -1
  190. package/dist/components/Icon/svgs/Edit2Svg.d.ts +1 -1
  191. package/dist/components/Icon/svgs/Edit3Svg.d.ts +1 -1
  192. package/dist/components/Icon/svgs/EditSvg.d.ts +1 -1
  193. package/dist/components/Icon/svgs/ExternalLinkSvg.d.ts +1 -1
  194. package/dist/components/Icon/svgs/EyeOffSvg.d.ts +1 -1
  195. package/dist/components/Icon/svgs/EyeSvg.d.ts +1 -1
  196. package/dist/components/Icon/svgs/FastForwardSvg.d.ts +1 -1
  197. package/dist/components/Icon/svgs/FeatherSvg.d.ts +1 -1
  198. package/dist/components/Icon/svgs/FigmaSvg.d.ts +1 -1
  199. package/dist/components/Icon/svgs/FileMinusSvg.d.ts +1 -1
  200. package/dist/components/Icon/svgs/FilePlusSvg.d.ts +1 -1
  201. package/dist/components/Icon/svgs/FileSvg.d.ts +1 -1
  202. package/dist/components/Icon/svgs/FileTextSvg.d.ts +1 -1
  203. package/dist/components/Icon/svgs/FilmSvg.d.ts +1 -1
  204. package/dist/components/Icon/svgs/FilterSvg.d.ts +1 -1
  205. package/dist/components/Icon/svgs/FlagSvg.d.ts +1 -1
  206. package/dist/components/Icon/svgs/FolderMinusSvg.d.ts +1 -1
  207. package/dist/components/Icon/svgs/FolderPlusSvg.d.ts +1 -1
  208. package/dist/components/Icon/svgs/FolderSvg.d.ts +1 -1
  209. package/dist/components/Icon/svgs/FramerSvg.d.ts +1 -1
  210. package/dist/components/Icon/svgs/FrownSvg.d.ts +1 -1
  211. package/dist/components/Icon/svgs/GiftSvg.d.ts +1 -1
  212. package/dist/components/Icon/svgs/GitBranchSvg.d.ts +1 -1
  213. package/dist/components/Icon/svgs/GitCommitSvg.d.ts +1 -1
  214. package/dist/components/Icon/svgs/GitMergeSvg.d.ts +1 -1
  215. package/dist/components/Icon/svgs/GitPullRequestSvg.d.ts +1 -1
  216. package/dist/components/Icon/svgs/GithubSvg.d.ts +1 -1
  217. package/dist/components/Icon/svgs/GitlabSvg.d.ts +1 -1
  218. package/dist/components/Icon/svgs/GlobeSvg.d.ts +1 -1
  219. package/dist/components/Icon/svgs/GridSvg.d.ts +1 -1
  220. package/dist/components/Icon/svgs/HardDriveSvg.d.ts +1 -1
  221. package/dist/components/Icon/svgs/HashSvg.d.ts +1 -1
  222. package/dist/components/Icon/svgs/HeadphonesSvg.d.ts +1 -1
  223. package/dist/components/Icon/svgs/HeartSvg.d.ts +1 -1
  224. package/dist/components/Icon/svgs/HelpCircleSvg.d.ts +1 -1
  225. package/dist/components/Icon/svgs/HexagonSvg.d.ts +1 -1
  226. package/dist/components/Icon/svgs/HomeSvg.d.ts +1 -1
  227. package/dist/components/Icon/svgs/ImageSvg.d.ts +1 -1
  228. package/dist/components/Icon/svgs/InboxSvg.d.ts +1 -1
  229. package/dist/components/Icon/svgs/InfoSvg.d.ts +1 -1
  230. package/dist/components/Icon/svgs/ItalicSvg.d.ts +1 -1
  231. package/dist/components/Icon/svgs/KeySvg.d.ts +1 -1
  232. package/dist/components/Icon/svgs/LayersSvg.d.ts +1 -1
  233. package/dist/components/Icon/svgs/LayoutSvg.d.ts +1 -1
  234. package/dist/components/Icon/svgs/LifeBuoySvg.d.ts +1 -1
  235. package/dist/components/Icon/svgs/Link2Svg.d.ts +1 -1
  236. package/dist/components/Icon/svgs/LinkSvg.d.ts +1 -1
  237. package/dist/components/Icon/svgs/LinkedinSvg.d.ts +1 -1
  238. package/dist/components/Icon/svgs/ListSvg.d.ts +1 -1
  239. package/dist/components/Icon/svgs/LoaderSvg.d.ts +1 -1
  240. package/dist/components/Icon/svgs/LockSvg.d.ts +1 -1
  241. package/dist/components/Icon/svgs/LogInSvg.d.ts +1 -1
  242. package/dist/components/Icon/svgs/LogOutSvg.d.ts +1 -1
  243. package/dist/components/Icon/svgs/MailSvg.d.ts +1 -1
  244. package/dist/components/Icon/svgs/MapPinSvg.d.ts +1 -1
  245. package/dist/components/Icon/svgs/MapSvg.d.ts +1 -1
  246. package/dist/components/Icon/svgs/Maximize2Svg.d.ts +1 -1
  247. package/dist/components/Icon/svgs/MaximizeSvg.d.ts +1 -1
  248. package/dist/components/Icon/svgs/MehSvg.d.ts +1 -1
  249. package/dist/components/Icon/svgs/MenuSvg.d.ts +1 -1
  250. package/dist/components/Icon/svgs/MessageCircleSvg.d.ts +1 -1
  251. package/dist/components/Icon/svgs/MessageSquareSvg.d.ts +1 -1
  252. package/dist/components/Icon/svgs/MicOffSvg.d.ts +1 -1
  253. package/dist/components/Icon/svgs/MicSvg.d.ts +1 -1
  254. package/dist/components/Icon/svgs/Minimize2Svg.d.ts +1 -1
  255. package/dist/components/Icon/svgs/MinimizeSvg.d.ts +1 -1
  256. package/dist/components/Icon/svgs/MinusCircleSvg.d.ts +1 -1
  257. package/dist/components/Icon/svgs/MinusSquareSvg.d.ts +1 -1
  258. package/dist/components/Icon/svgs/MinusSvg.d.ts +1 -1
  259. package/dist/components/Icon/svgs/MonitorSvg.d.ts +1 -1
  260. package/dist/components/Icon/svgs/MoonSvg.d.ts +1 -1
  261. package/dist/components/Icon/svgs/MoreHorizontalSvg.d.ts +1 -1
  262. package/dist/components/Icon/svgs/MoreVerticalSvg.d.ts +1 -1
  263. package/dist/components/Icon/svgs/MousePointerSvg.d.ts +1 -1
  264. package/dist/components/Icon/svgs/MoveSvg.d.ts +1 -1
  265. package/dist/components/Icon/svgs/MusicSvg.d.ts +1 -1
  266. package/dist/components/Icon/svgs/Navigation2Svg.d.ts +1 -1
  267. package/dist/components/Icon/svgs/NavigationSvg.d.ts +1 -1
  268. package/dist/components/Icon/svgs/OctagonSvg.d.ts +1 -1
  269. package/dist/components/Icon/svgs/PackageSvg.d.ts +1 -1
  270. package/dist/components/Icon/svgs/PaperclipSvg.d.ts +1 -1
  271. package/dist/components/Icon/svgs/PauseCircleSvg.d.ts +1 -1
  272. package/dist/components/Icon/svgs/PauseSvg.d.ts +1 -1
  273. package/dist/components/Icon/svgs/PenToolSvg.d.ts +1 -1
  274. package/dist/components/Icon/svgs/PercentSvg.d.ts +1 -1
  275. package/dist/components/Icon/svgs/PhoneCallSvg.d.ts +1 -1
  276. package/dist/components/Icon/svgs/PhoneForwardedSvg.d.ts +1 -1
  277. package/dist/components/Icon/svgs/PhoneIncomingSvg.d.ts +1 -1
  278. package/dist/components/Icon/svgs/PhoneMissedSvg.d.ts +1 -1
  279. package/dist/components/Icon/svgs/PhoneOffSvg.d.ts +1 -1
  280. package/dist/components/Icon/svgs/PhoneOutgoingSvg.d.ts +1 -1
  281. package/dist/components/Icon/svgs/PhoneSvg.d.ts +1 -1
  282. package/dist/components/Icon/svgs/PieChartSvg.d.ts +1 -1
  283. package/dist/components/Icon/svgs/PlayCircleSvg.d.ts +1 -1
  284. package/dist/components/Icon/svgs/PlaySvg.d.ts +1 -1
  285. package/dist/components/Icon/svgs/PlusCircleSvg.d.ts +1 -1
  286. package/dist/components/Icon/svgs/PlusSquareSvg.d.ts +1 -1
  287. package/dist/components/Icon/svgs/PlusSvg.d.ts +1 -1
  288. package/dist/components/Icon/svgs/PocketSvg.d.ts +1 -1
  289. package/dist/components/Icon/svgs/PowerSvg.d.ts +1 -1
  290. package/dist/components/Icon/svgs/PrinterSvg.d.ts +1 -1
  291. package/dist/components/Icon/svgs/RadioSvg.d.ts +1 -1
  292. package/dist/components/Icon/svgs/RefreshCcwSvg.d.ts +1 -1
  293. package/dist/components/Icon/svgs/RefreshCwSvg.d.ts +1 -1
  294. package/dist/components/Icon/svgs/RepeatSvg.d.ts +1 -1
  295. package/dist/components/Icon/svgs/RewindSvg.d.ts +1 -1
  296. package/dist/components/Icon/svgs/RotateCcwSvg.d.ts +1 -1
  297. package/dist/components/Icon/svgs/RotateCwSvg.d.ts +1 -1
  298. package/dist/components/Icon/svgs/RssSvg.d.ts +1 -1
  299. package/dist/components/Icon/svgs/SaveSvg.d.ts +1 -1
  300. package/dist/components/Icon/svgs/ScissorsSvg.d.ts +1 -1
  301. package/dist/components/Icon/svgs/SearchSvg.d.ts +1 -1
  302. package/dist/components/Icon/svgs/SendSvg.d.ts +1 -1
  303. package/dist/components/Icon/svgs/ServerSvg.d.ts +1 -1
  304. package/dist/components/Icon/svgs/SettingsSvg.d.ts +1 -1
  305. package/dist/components/Icon/svgs/Share2Svg.d.ts +1 -1
  306. package/dist/components/Icon/svgs/ShareSvg.d.ts +1 -1
  307. package/dist/components/Icon/svgs/ShieldOffSvg.d.ts +1 -1
  308. package/dist/components/Icon/svgs/ShieldSvg.d.ts +1 -1
  309. package/dist/components/Icon/svgs/ShoppingBagSvg.d.ts +1 -1
  310. package/dist/components/Icon/svgs/ShoppingCartSvg.d.ts +1 -1
  311. package/dist/components/Icon/svgs/ShuffleSvg.d.ts +1 -1
  312. package/dist/components/Icon/svgs/SidebarSvg.d.ts +1 -1
  313. package/dist/components/Icon/svgs/SkipBackSvg.d.ts +1 -1
  314. package/dist/components/Icon/svgs/SkipForwardSvg.d.ts +1 -1
  315. package/dist/components/Icon/svgs/SlackSvg.d.ts +1 -1
  316. package/dist/components/Icon/svgs/SlashSvg.d.ts +1 -1
  317. package/dist/components/Icon/svgs/SlidersSvg.d.ts +1 -1
  318. package/dist/components/Icon/svgs/SmartphoneSvg.d.ts +1 -1
  319. package/dist/components/Icon/svgs/SmileSvg.d.ts +1 -1
  320. package/dist/components/Icon/svgs/SpeakerSvg.d.ts +1 -1
  321. package/dist/components/Icon/svgs/SquareSvg.d.ts +1 -1
  322. package/dist/components/Icon/svgs/StarSvg.d.ts +1 -1
  323. package/dist/components/Icon/svgs/StopCircleSvg.d.ts +1 -1
  324. package/dist/components/Icon/svgs/SunSvg.d.ts +1 -1
  325. package/dist/components/Icon/svgs/SunriseSvg.d.ts +1 -1
  326. package/dist/components/Icon/svgs/SunsetSvg.d.ts +1 -1
  327. package/dist/components/Icon/svgs/TableSvg.d.ts +1 -1
  328. package/dist/components/Icon/svgs/TabletSvg.d.ts +1 -1
  329. package/dist/components/Icon/svgs/TagSvg.d.ts +1 -1
  330. package/dist/components/Icon/svgs/TargetSvg.d.ts +1 -1
  331. package/dist/components/Icon/svgs/TerminalSvg.d.ts +1 -1
  332. package/dist/components/Icon/svgs/ThermometerSvg.d.ts +1 -1
  333. package/dist/components/Icon/svgs/ThumbsDownSvg.d.ts +1 -1
  334. package/dist/components/Icon/svgs/ThumbsUpSvg.d.ts +1 -1
  335. package/dist/components/Icon/svgs/ToggleLeftSvg.d.ts +1 -1
  336. package/dist/components/Icon/svgs/ToggleRightSvg.d.ts +1 -1
  337. package/dist/components/Icon/svgs/ToolSvg.d.ts +1 -1
  338. package/dist/components/Icon/svgs/Trash2Svg.d.ts +1 -1
  339. package/dist/components/Icon/svgs/TrashSvg.d.ts +1 -1
  340. package/dist/components/Icon/svgs/TrelloSvg.d.ts +1 -1
  341. package/dist/components/Icon/svgs/TrendingDownSvg.d.ts +1 -1
  342. package/dist/components/Icon/svgs/TrendingUpSvg.d.ts +1 -1
  343. package/dist/components/Icon/svgs/TriangleSvg.d.ts +1 -1
  344. package/dist/components/Icon/svgs/TruckSvg.d.ts +1 -1
  345. package/dist/components/Icon/svgs/TvSvg.d.ts +1 -1
  346. package/dist/components/Icon/svgs/TwitchSvg.d.ts +1 -1
  347. package/dist/components/Icon/svgs/TwitterSvg.d.ts +1 -1
  348. package/dist/components/Icon/svgs/TypeSvg.d.ts +1 -1
  349. package/dist/components/Icon/svgs/UmbrellaSvg.d.ts +1 -1
  350. package/dist/components/Icon/svgs/UnderlineSvg.d.ts +1 -1
  351. package/dist/components/Icon/svgs/UnlockSvg.d.ts +1 -1
  352. package/dist/components/Icon/svgs/UploadCloudSvg.d.ts +1 -1
  353. package/dist/components/Icon/svgs/UploadSvg.d.ts +1 -1
  354. package/dist/components/Icon/svgs/UserCheckSvg.d.ts +1 -1
  355. package/dist/components/Icon/svgs/UserMinusSvg.d.ts +1 -1
  356. package/dist/components/Icon/svgs/UserPlusSvg.d.ts +1 -1
  357. package/dist/components/Icon/svgs/UserSvg.d.ts +1 -1
  358. package/dist/components/Icon/svgs/UserXSvg.d.ts +1 -1
  359. package/dist/components/Icon/svgs/UsersSvg.d.ts +1 -1
  360. package/dist/components/Icon/svgs/VideoOffSvg.d.ts +1 -1
  361. package/dist/components/Icon/svgs/VideoSvg.d.ts +1 -1
  362. package/dist/components/Icon/svgs/VoicemailSvg.d.ts +1 -1
  363. package/dist/components/Icon/svgs/Volume1Svg.d.ts +1 -1
  364. package/dist/components/Icon/svgs/Volume2Svg.d.ts +1 -1
  365. package/dist/components/Icon/svgs/VolumeSvg.d.ts +1 -1
  366. package/dist/components/Icon/svgs/VolumeXSvg.d.ts +1 -1
  367. package/dist/components/Icon/svgs/WatchSvg.d.ts +1 -1
  368. package/dist/components/Icon/svgs/WifiOffSvg.d.ts +1 -1
  369. package/dist/components/Icon/svgs/WifiSvg.d.ts +1 -1
  370. package/dist/components/Icon/svgs/WindSvg.d.ts +1 -1
  371. package/dist/components/Icon/svgs/XCircleSvg.d.ts +1 -1
  372. package/dist/components/Icon/svgs/XOctagonSvg.d.ts +1 -1
  373. package/dist/components/Icon/svgs/XSquareSvg.d.ts +1 -1
  374. package/dist/components/Icon/svgs/XSvg.d.ts +1 -1
  375. package/dist/components/Icon/svgs/ZapOffSvg.d.ts +1 -1
  376. package/dist/components/Icon/svgs/ZapSvg.d.ts +1 -1
  377. package/dist/components/Icon/svgs/ZoomInSvg.d.ts +1 -1
  378. package/dist/components/Icon/svgs/ZoomOutSvg.d.ts +1 -1
  379. package/dist/components/Icon/svgs/internal/EmptySvg.d.ts +1 -1
  380. package/dist/components/Icon/svgs/social/FacebookSvg.d.ts +1 -1
  381. package/dist/components/Icon/svgs/social/FlickrSvg.d.ts +1 -1
  382. package/dist/components/Icon/svgs/social/InstagramSvg.d.ts +1 -1
  383. package/dist/components/Icon/svgs/social/SoundcloudSvg.d.ts +1 -1
  384. package/dist/components/Icon/svgs/social/TiktokSvg.d.ts +1 -1
  385. package/dist/components/Icon/svgs/social/XSvg.d.ts +1 -1
  386. package/dist/components/Icon/svgs/social/YoutubeSvg.d.ts +1 -1
  387. package/dist/components/Layout/Layout.d.ts +1 -1
  388. package/dist/components/Layout/Layout.stories.d.ts +1 -1
  389. package/dist/components/Main/Main.d.ts +1 -1
  390. package/dist/components/Main/Main.stories.d.ts +1 -1
  391. package/dist/components/Menu/Menu.context.d.ts +1 -1
  392. package/dist/components/Menu/Menu.d.ts +1 -1
  393. package/dist/components/Menu/MenuTrigger.d.ts +1 -1
  394. package/dist/components/MenuNew/ActionMenuButton.d.ts +1 -1
  395. package/dist/components/MenuNew/MenuAccordion/MenuAccordionChevron.d.ts +1 -1
  396. package/dist/components/MenuNew/MenuAccordion/MenuAccordionItem.d.ts +1 -1
  397. package/dist/components/MenuNew/MenuBaseItem.d.ts +1 -1
  398. package/dist/components/MenuNew/MenuDivider.d.ts +1 -1
  399. package/dist/components/MenuNew/MenuHead.d.ts +1 -1
  400. package/dist/components/MenuNew/MenuHeading.d.ts +1 -1
  401. package/dist/components/MenuNew/MenuItemText.d.ts +1 -1
  402. package/dist/components/MenuNew/MenuSection.d.ts +1 -1
  403. package/dist/components/MenuNew/PrimaryMenuItem.d.ts +1 -1
  404. package/dist/components/MenuNew/SecondaryMenuItem.d.ts +1 -1
  405. package/dist/components/NativeDatepicker/NativeDatepicker.d.ts +1 -1
  406. package/dist/components/NativeDatepicker/NativeDatepicker.stories.d.ts +1 -1
  407. package/dist/components/Overlay/Overlay.stories.d.ts +1 -1
  408. package/dist/components/Pagination/Pagination.d.ts +18 -4
  409. package/dist/components/Pagination/Pagination.stories.d.ts +1 -1
  410. package/dist/components/Pagination/PaginationControls.d.ts +1 -1
  411. package/dist/components/Pagination/PaginationInfo.d.ts +1 -1
  412. package/dist/components/Pagination/index.d.ts +2 -2
  413. package/dist/components/Paragraph/Paragraph.d.ts +2 -2
  414. package/dist/components/Paragraph/Paragraph.stories.d.ts +1 -1
  415. package/dist/components/Search/Search.d.ts +2 -1
  416. package/dist/components/Search/Search.stories.d.ts +1 -1
  417. package/dist/components/Select/subcomponents/CustomOption.d.ts +1 -1
  418. package/dist/components/Select/subcomponents/CustomSelect.d.ts +1 -1
  419. package/dist/components/Select/subcomponents/FilterInput.d.ts +1 -1
  420. package/dist/components/Select/subcomponents/NativeSelect.d.ts +1 -1
  421. package/dist/components/Select/subcomponents/Panel.d.ts +1 -1
  422. package/dist/components/Select/subcomponents/VisibleField.d.ts +1 -1
  423. package/dist/components/Spinner/Spinner.d.ts +1 -1
  424. package/dist/components/Spinner/Spinner.stories.d.ts +1 -1
  425. package/dist/components/Table/Table.d.ts +6 -6
  426. package/dist/components/Table/Table.stories.d.ts +6 -6
  427. package/dist/components/Table/subcomponents/Body.d.ts +1 -1
  428. package/dist/components/Table/subcomponents/Cell/Cell.d.ts +1 -1
  429. package/dist/components/Table/subcomponents/Cell/Cell.stories.d.ts +2 -2
  430. package/dist/components/Table/subcomponents/Cell/CellContent.d.ts +1 -1
  431. package/dist/components/Table/subcomponents/Head.d.ts +1 -1
  432. package/dist/components/Table/subcomponents/HeadCell/HeadCell.d.ts +1 -1
  433. package/dist/components/Table/subcomponents/HeadCell/HeadCell.stories.d.ts +2 -2
  434. package/dist/components/Table/subcomponents/HeadCell/HeadCellContent.d.ts +1 -1
  435. package/dist/components/Table/subcomponents/Row.d.ts +1 -1
  436. package/dist/components/Table/subcomponents/SortIcon.d.ts +1 -1
  437. package/dist/components/Tabs/Tab.d.ts +1 -1
  438. package/dist/components/Text/Text.d.ts +1 -1
  439. package/dist/components/Timepicker/Timepicker.d.ts +1 -1
  440. package/dist/components/Toggle/ToggleHandle.d.ts +1 -1
  441. package/dist/components/UclLogo/UclLogo.d.ts +1 -1
  442. package/dist/components/UclLogo/UclLogoNegativeSpace.d.ts +1 -1
  443. package/dist/components/UclLogoNew/UclLogo.d.ts +1 -1
  444. package/dist/components/WeekPicker/WeekPicker.d.ts +1 -1
  445. package/dist/components/WeekPicker/WeekPicker.stories.d.ts +1 -1
  446. package/dist/components/WeekPicker/subcomponents/CustomDatepicker.d.ts +1 -1
  447. package/dist/components/WeekPicker/subcomponents/DatepickerInput.d.ts +1 -1
  448. package/dist/components/WeekPicker/subcomponents/VisibleField.d.ts +1 -1
  449. package/dist/components/index.d.ts +2 -0
  450. package/dist/index.js +5525 -5290
  451. package/dist/theme/__tests__/useTheme.test.d.ts +1 -0
  452. package/dist/theme/index.d.ts +2 -1
  453. package/dist/theme/useTheme.d.ts +15 -0
  454. package/lib/components/DrawerMenu/DrawerMenu.tsx +129 -0
  455. package/lib/components/DrawerMenu/DrawerMenuTrigger.tsx +9 -0
  456. package/lib/components/DrawerMenu/__tests__/DrawerMenu.test.tsx +126 -0
  457. package/lib/components/DrawerMenu/index.ts +2 -0
  458. package/lib/components/Dropdown/DropdownContent.tsx +166 -14
  459. package/lib/components/Dropdown/__tests__/Dropdown.test.tsx +20 -0
  460. package/lib/components/DropdownMenu/DropdownMenu.tsx +3 -0
  461. package/lib/components/DropdownMenu/__tests__/DropdownMenu.test.tsx +21 -0
  462. package/lib/components/DropdownUserMenu/DropdownUserMenu.tsx +12 -1
  463. package/lib/components/DropdownUserMenu/__tests__/DropdownUserMenu.test.tsx +3 -3
  464. package/lib/components/HeaderNew/__tests__/__snapshots__/Header.test.tsx.snap +2 -2
  465. package/lib/components/HeaderNew/constants.ts +1 -1
  466. package/lib/components/Pagination/Pagination.tsx +46 -4
  467. package/lib/components/Pagination/PaginationControls.tsx +65 -14
  468. package/lib/components/Pagination/PaginationInfo.tsx +15 -6
  469. package/lib/components/Pagination/index.tsx +2 -2
  470. package/lib/components/Search/Search.tsx +19 -1
  471. package/lib/components/Search/__tests__/Search.test.tsx +53 -0
  472. package/lib/components/index.ts +3 -0
  473. package/lib/theme/__tests__/useTheme.test.tsx +92 -0
  474. package/lib/theme/index.ts +8 -1
  475. package/lib/theme/useTheme.tsx +41 -3
  476. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,7 @@
1
1
  export { default as theme } from './original/defaultTheme';
2
2
  export { default as lightTheme } from './light/lightTheme';
3
3
  export type { ThemeType, DisplayColoursType, BlackAndWhiteColoursType, } from './original/defaultTheme';
4
- export { default as useTheme, ThemeContextProvider } from './useTheme';
4
+ export { default as useTheme, ThemeContextProvider, ThemeContextConsumer, ThemeConsumer, themes, } from './useTheme';
5
+ export type { ThemeName } from './useTheme';
5
6
  export { uikitFontUrls, uikitFonts } from './fonts';
6
7
  export type { FontSource, FontStyle } from './fonts';
@@ -1,7 +1,13 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ThemeType } from './original/defaultTheme';
3
+ export declare const themes: {
4
+ readonly default: ThemeType;
5
+ readonly light: ThemeType;
6
+ };
7
+ export type ThemeName = keyof typeof themes;
3
8
  export declare const ThemeContextProvider: React.FC<{
4
9
  children: ReactNode;
10
+ theme?: ThemeType | ThemeName;
5
11
  initialTheme?: ThemeType;
6
12
  }>;
7
13
  declare const useTheme: () => [{
@@ -2673,4 +2679,13 @@ declare const useTheme: () => [{
2673
2679
  custom: (breakpoint: number) => string;
2674
2680
  };
2675
2681
  }>>];
2682
+ export declare const ThemeContextConsumer: React.FC<{
2683
+ children: (themeState: ReturnType<typeof useTheme>) => ReactNode;
2684
+ }>;
2685
+ export declare const ThemeConsumer: React.FC<{
2686
+ children: (context: {
2687
+ theme: ThemeType;
2688
+ setTheme: (theme: ThemeType) => void;
2689
+ }) => ReactNode;
2690
+ }>;
2676
2691
  export default useTheme;
@@ -0,0 +1,129 @@
1
+ import { HTMLAttributes, ReactNode, RefObject } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import Dropdown, { DropdownProps } from '../Dropdown';
4
+ import useTheme from '../../theme/useTheme';
5
+ import useMediaQuery from '../../hooks/useMediaQuery';
6
+ import DrawerMenuTrigger from './DrawerMenuTrigger';
7
+ import { useDropdownContext } from '../Dropdown/Dropdown.context';
8
+
9
+ export const NAME = 'ucl-uikit-drawer-menu';
10
+
11
+ export interface DrawerMenuChildrenApi {
12
+ close: () => void;
13
+ }
14
+
15
+ type DrawerMenuChildren =
16
+ | ReactNode
17
+ | ((api: DrawerMenuChildrenApi) => ReactNode);
18
+
19
+ export interface DrawerMenuProps
20
+ extends
21
+ Omit<DropdownProps, 'children'>,
22
+ Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
23
+ /**
24
+ * @deprecated Prefer boundaryRef or boundarySelector so the drawer can
25
+ * calculate its vertical bounds from the containing layout.
26
+ */
27
+ topPx?: number;
28
+ bottomPx?: number;
29
+ contentHeight?: number | string;
30
+ boundaryRef?: RefObject<HTMLElement | null>;
31
+ boundarySelector?: string;
32
+ align?: 'left' | 'right';
33
+ children: DrawerMenuChildren;
34
+ label?: string;
35
+ triggerAriaLabelCollapsed?: string;
36
+ triggerAriaLabelExpanded?: string;
37
+ dropdownClassName?: string;
38
+ triggerClassName?: string;
39
+ contentClassName?: string;
40
+ }
41
+
42
+ const DrawerMenuContent = ({ children }: { children: DrawerMenuChildren }) => {
43
+ const { setIsOpen } = useDropdownContext();
44
+
45
+ if (typeof children === 'function') {
46
+ return children({ close: () => setIsOpen(false) });
47
+ }
48
+
49
+ return children;
50
+ };
51
+
52
+ const DrawerMenu = ({
53
+ topPx,
54
+ bottomPx,
55
+ contentHeight,
56
+ boundaryRef,
57
+ boundarySelector,
58
+ align = 'right',
59
+ children,
60
+ label = 'MENU',
61
+ triggerAriaLabelCollapsed = 'Open menu',
62
+ triggerAriaLabelExpanded = 'Close menu',
63
+ dropdownClassName,
64
+ triggerClassName,
65
+ contentClassName,
66
+ className,
67
+ ...props
68
+ }: DrawerMenuProps) => {
69
+ const [theme] = useTheme();
70
+ const isDesktop = useMediaQuery(
71
+ `(min-width: ${theme.breakpoints.desktop}px)`
72
+ );
73
+
74
+ const triggerStyle = css`
75
+ color: ${theme.colour.text.brandPrimary};
76
+ font-family: ${theme.typography.body.mdNumeric.fontFamily};
77
+ font-weight: ${theme.typography.body.mdNumeric.fontWeight};
78
+ font-size: 14px;
79
+ `;
80
+
81
+ const dropdownStyle = cx(NAME, dropdownClassName);
82
+ const resolvedTriggerClassName = cx(
83
+ triggerStyle,
84
+ className,
85
+ triggerClassName
86
+ );
87
+
88
+ const contentBaseStyle = css`
89
+ background-color: ${theme.colour.surface.primary};
90
+
91
+ @media (min-width: ${theme.breakpoints.tablet}px) {
92
+ width: 460px;
93
+ border-left: ${theme.border.b1} solid ${theme.colour.border.default};
94
+ }
95
+ `;
96
+
97
+ const contentStyle = cx(contentBaseStyle, contentClassName);
98
+
99
+ return (
100
+ <Dropdown
101
+ className={dropdownStyle}
102
+ {...props}
103
+ >
104
+ <Dropdown.Trigger>
105
+ <DrawerMenuTrigger
106
+ isDesktop={isDesktop}
107
+ label={label}
108
+ triggerAriaLabelCollapsed={triggerAriaLabelCollapsed}
109
+ triggerAriaLabelExpanded={triggerAriaLabelExpanded}
110
+ className={resolvedTriggerClassName}
111
+ />
112
+ </Dropdown.Trigger>
113
+ <Dropdown.Content
114
+ className={contentStyle}
115
+ align={align}
116
+ variant='drawer'
117
+ topPx={topPx}
118
+ bottomPx={bottomPx}
119
+ contentHeight={contentHeight}
120
+ drawerBoundaryRef={boundaryRef}
121
+ drawerBoundarySelector={boundarySelector}
122
+ >
123
+ <DrawerMenuContent>{children}</DrawerMenuContent>
124
+ </Dropdown.Content>
125
+ </Dropdown>
126
+ );
127
+ };
128
+
129
+ export default DrawerMenu;
@@ -0,0 +1,9 @@
1
+ import DropdownMenuTrigger, {
2
+ DropdownMenuTriggerProps,
3
+ } from '../DropdownMenu/DropdownMenuTrigger';
4
+
5
+ export type DrawerMenuTriggerProps = DropdownMenuTriggerProps;
6
+
7
+ const DrawerMenuTrigger = DropdownMenuTrigger;
8
+
9
+ export default DrawerMenuTrigger;
@@ -0,0 +1,126 @@
1
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import DrawerMenu from '../DrawerMenu';
4
+ import Button from '../../Button';
5
+ import { ThemeContextProvider } from '../../../theme/useTheme';
6
+
7
+ const mockMatchMedia = (matchesDesktop: boolean) => {
8
+ globalThis.matchMedia = vi.fn().mockImplementation((query) => ({
9
+ matches: query.includes('min-width') ? matchesDesktop : false,
10
+ media: query,
11
+ addListener: vi.fn(),
12
+ removeListener: vi.fn(),
13
+ addEventListener: vi.fn(),
14
+ removeEventListener: vi.fn(),
15
+ dispatchEvent: vi.fn(),
16
+ }));
17
+ };
18
+
19
+ const createRect = (bottom: number) =>
20
+ ({
21
+ bottom,
22
+ height: bottom,
23
+ left: 0,
24
+ right: 0,
25
+ top: 0,
26
+ width: 0,
27
+ x: 0,
28
+ y: 0,
29
+ toJSON: () => ({}),
30
+ }) as DOMRect;
31
+
32
+ describe('DrawerMenu', () => {
33
+ beforeEach(() => {
34
+ mockMatchMedia(true);
35
+ vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockImplementation(
36
+ function getBoundingClientRect(this: HTMLElement) {
37
+ if (this.tagName === 'HEADER') {
38
+ return createRect(78);
39
+ }
40
+
41
+ return createRect(0);
42
+ }
43
+ );
44
+ });
45
+
46
+ afterEach(() => {
47
+ vi.restoreAllMocks();
48
+ });
49
+
50
+ test('measures the containing header and renders the drawer content', () => {
51
+ render(
52
+ <ThemeContextProvider>
53
+ <header>
54
+ <DrawerMenu
55
+ defaultOpen
56
+ bottomPx={12}
57
+ >
58
+ <div>Menu content</div>
59
+ </DrawerMenu>
60
+ </header>
61
+ </ThemeContextProvider>
62
+ );
63
+
64
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
65
+ const drawer = content.parentElement;
66
+
67
+ expect(drawer).not.toBeNull();
68
+ expect(drawer).toBeVisible();
69
+ expect(content).toBeVisible();
70
+ });
71
+
72
+ test('slides closed and open from the right', () => {
73
+ render(
74
+ <ThemeContextProvider>
75
+ <header>
76
+ <DrawerMenu>
77
+ {({ close }) => (
78
+ <Button
79
+ aria-label='Close from content'
80
+ onClick={close}
81
+ >
82
+ Close
83
+ </Button>
84
+ )}
85
+ </DrawerMenu>
86
+ </header>
87
+ </ThemeContextProvider>
88
+ );
89
+
90
+ const trigger = screen.getByRole('button', { name: 'Open menu' });
91
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
92
+ const drawer = content.parentElement;
93
+
94
+ expect(drawer).not.toBeVisible();
95
+
96
+ fireEvent.click(trigger);
97
+ expect(drawer).toBeVisible();
98
+ expect(window.getComputedStyle(drawer as Element).transform).toBe(
99
+ 'translateX(0)'
100
+ );
101
+
102
+ fireEvent.click(screen.getByRole('button', { name: 'Close from content' }));
103
+ expect(drawer).not.toBeVisible();
104
+ });
105
+
106
+ test('covers the full window below tablet', () => {
107
+ mockMatchMedia(false);
108
+
109
+ render(
110
+ <ThemeContextProvider>
111
+ <header>
112
+ <DrawerMenu defaultOpen>
113
+ <div>Menu content</div>
114
+ </DrawerMenu>
115
+ </header>
116
+ </ThemeContextProvider>
117
+ );
118
+
119
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
120
+ const drawer = content.parentElement;
121
+
122
+ expect(drawer).not.toBeNull();
123
+ expect(window.getComputedStyle(drawer as Element).top).toBe('0px');
124
+ expect(window.getComputedStyle(drawer as Element).height).toBe('100dvh');
125
+ });
126
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './DrawerMenu';
2
+ export type { DrawerMenuProps } from './DrawerMenu';
@@ -1,4 +1,4 @@
1
- import { HTMLAttributes, memo, useEffect, useState } from 'react';
1
+ import { HTMLAttributes, memo, RefObject, useEffect, useState } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
  import { css, cx } from '@emotion/css';
4
4
  import { useTheme } from '../../theme';
@@ -7,29 +7,51 @@ import { useDropdownContext } from './Dropdown.context';
7
7
 
8
8
  export const NAME = 'ucl-uikit-dropdown__content';
9
9
 
10
- export interface DropdownContentProps extends HTMLAttributes<HTMLDivElement> {
10
+ export interface DropdownContentProps extends Omit<
11
+ HTMLAttributes<HTMLDivElement>,
12
+ 'style'
13
+ > {
11
14
  testId?: string;
15
+ topPx?: number;
16
+ bottomPx?: number;
17
+ contentHeight?: number | string;
12
18
  align?: 'left' | 'right';
19
+ variant?: 'dropdown' | 'drawer';
20
+ drawerBoundaryRef?: RefObject<HTMLElement | null>;
21
+ drawerBoundarySelector?: string;
13
22
  }
14
23
 
15
24
  const TABLET_BOTTOM_GAP_PX = 32;
25
+ const DEFAULT_DRAWER_BOUNDARY_SELECTOR =
26
+ 'header,[role="banner"],[data-drawer-menu-boundary]';
27
+
28
+ const getCssLength = (value: number | string) =>
29
+ typeof value === 'number' ? `${value}px` : value;
16
30
 
17
31
  const DropdownContent = ({
18
32
  testId = NAME,
33
+ topPx,
34
+ bottomPx = 0,
35
+ contentHeight,
19
36
  align = 'right',
37
+ variant = 'dropdown',
38
+ drawerBoundaryRef,
39
+ drawerBoundarySelector = DEFAULT_DRAWER_BOUNDARY_SELECTOR,
20
40
  className,
21
41
  children,
22
42
  id,
23
43
  ...props
24
44
  }: DropdownContentProps) => {
25
45
  const [theme] = useTheme();
26
- const { isOpen, contentRef, contentId } = useDropdownContext();
46
+ const { isOpen, contentRef, contentId, triggerRef } = useDropdownContext();
27
47
  const [tabletMaxHeight, setTabletMaxHeight] = useState<number | undefined>(
28
48
  undefined
29
49
  );
50
+ const [drawerTopPx, setDrawerTopPx] = useState(0);
30
51
  const isTabletAndUp = useMediaQuery(
31
52
  `(min-width: ${theme.breakpoints.tablet}px)`
32
53
  );
54
+ const isDrawer = variant === 'drawer';
33
55
 
34
56
  useEffect(() => {
35
57
  if (typeof document === 'undefined') return;
@@ -111,7 +133,7 @@ const DropdownContent = ({
111
133
 
112
134
  useEffect(() => {
113
135
  if (typeof window === 'undefined') return;
114
- if (!isTabletAndUp || !isOpen) {
136
+ if (!isTabletAndUp || !isOpen || isDrawer) {
115
137
  setTabletMaxHeight(undefined);
116
138
  return;
117
139
  }
@@ -129,7 +151,69 @@ const DropdownContent = ({
129
151
  return () => {
130
152
  window.removeEventListener('resize', updateMaxHeight);
131
153
  };
132
- }, [contentRef, isOpen, isTabletAndUp]);
154
+ }, [contentRef, isDrawer, isOpen, isTabletAndUp]);
155
+
156
+ useEffect(() => {
157
+ if (typeof window === 'undefined') return;
158
+ if (!isDrawer || !isOpen || topPx !== undefined) return;
159
+
160
+ const getBoundaryElement = () => {
161
+ if (drawerBoundaryRef?.current) {
162
+ return drawerBoundaryRef.current;
163
+ }
164
+
165
+ const triggerElement = triggerRef.current;
166
+ const closestBoundary = triggerElement?.closest<HTMLElement>(
167
+ drawerBoundarySelector
168
+ );
169
+
170
+ return (
171
+ closestBoundary ??
172
+ document.querySelector<HTMLElement>(drawerBoundarySelector)
173
+ );
174
+ };
175
+
176
+ const boundaryElement = getBoundaryElement();
177
+
178
+ const updateDrawerTop = () => {
179
+ const nextTop = boundaryElement?.getBoundingClientRect().bottom ?? 0;
180
+ setDrawerTopPx(Math.max(nextTop, 0));
181
+ };
182
+
183
+ updateDrawerTop();
184
+ window.addEventListener('resize', updateDrawerTop);
185
+ window.addEventListener('scroll', updateDrawerTop, true);
186
+
187
+ const resizeObserver =
188
+ typeof ResizeObserver === 'undefined'
189
+ ? undefined
190
+ : new ResizeObserver(updateDrawerTop);
191
+
192
+ if (boundaryElement) {
193
+ resizeObserver?.observe(boundaryElement);
194
+ }
195
+
196
+ return () => {
197
+ window.removeEventListener('resize', updateDrawerTop);
198
+ window.removeEventListener('scroll', updateDrawerTop, true);
199
+ resizeObserver?.disconnect();
200
+ };
201
+ }, [
202
+ drawerBoundaryRef,
203
+ drawerBoundarySelector,
204
+ isDrawer,
205
+ isOpen,
206
+ topPx,
207
+ triggerRef,
208
+ ]);
209
+
210
+ const drawerTop =
211
+ topPx === undefined ? `${drawerTopPx}px` : getCssLength(topPx);
212
+ const drawerBottom = getCssLength(bottomPx);
213
+ const drawerHeight =
214
+ contentHeight === undefined
215
+ ? `calc(100dvh - ${drawerTop} - ${drawerBottom})`
216
+ : getCssLength(contentHeight);
133
217
 
134
218
  const baseStyle = css`
135
219
  display: none;
@@ -148,18 +232,58 @@ const DropdownContent = ({
148
232
  @media (min-width: ${theme.breakpoints.tablet}px) {
149
233
  z-index: 100;
150
234
  position: absolute;
235
+ box-sizing: border-box;
151
236
  inset: auto;
152
237
  top: calc(100% + ${theme.margin.m8});
153
238
  width: auto;
154
239
  max-width: none;
155
240
  height: auto;
156
- overflow-y: auto;
241
+ overflow-y: visible;
157
242
  overflow-x: visible;
158
243
  background-color: ${theme.colour.surface.default};
159
244
  color: ${theme.colour.text.default};
160
- border: ${theme.border.b1} solid ${theme.colour.border.default};
161
- box-shadow: ${theme.boxShadow.y1};
162
- border-radius: ${theme.radius.r4};
245
+ }
246
+ `;
247
+
248
+ const drawerStyle = css`
249
+ display: block;
250
+ position: fixed;
251
+ inset: auto;
252
+ top: 0;
253
+ bottom: auto;
254
+ width: 100vw;
255
+ max-width: 100vw;
256
+ height: 100dvh;
257
+ max-height: 100dvh;
258
+ overflow-y: auto;
259
+ overflow-x: hidden;
260
+ visibility: hidden;
261
+ pointer-events: none;
262
+ transform: translateX(100%);
263
+ transition:
264
+ transform 180ms ease-in-out,
265
+ visibility 0ms linear 180ms;
266
+ will-change: transform;
267
+
268
+ @media (min-width: ${theme.breakpoints.tablet}px) {
269
+ z-index: 100;
270
+ position: fixed;
271
+ top: ${drawerTop};
272
+ bottom: auto;
273
+ height: ${drawerHeight};
274
+ max-height: ${drawerHeight};
275
+ width: auto;
276
+ max-width: none;
277
+ overflow-y: auto;
278
+ overflow-x: hidden;
279
+ }
280
+ `;
281
+
282
+ const topStyle = css`
283
+ @media (min-width: ${theme.breakpoints.tablet}px) {
284
+ position: fixed;
285
+ top: ${topPx}px;
286
+ height: calc(100vh - ${topPx}px);
163
287
  }
164
288
  `;
165
289
 
@@ -169,6 +293,14 @@ const DropdownContent = ({
169
293
  }
170
294
  `;
171
295
 
296
+ const drawerAlignLeftStyle = css`
297
+ transform: translateX(-100%);
298
+
299
+ @media (min-width: ${theme.breakpoints.tablet}px) {
300
+ left: 0;
301
+ }
302
+ `;
303
+
172
304
  const alignRightStyle = css`
173
305
  @media (min-width: ${theme.breakpoints.tablet}px) {
174
306
  right: 0;
@@ -179,15 +311,24 @@ const DropdownContent = ({
179
311
  display: block;
180
312
  `;
181
313
 
314
+ const drawerOpenStyle = css`
315
+ visibility: visible;
316
+ pointer-events: auto;
317
+ transform: translateX(0);
318
+ transition: transform 180ms ease;
319
+ `;
320
+
182
321
  const style = cx(
183
322
  NAME,
184
323
  baseStyle,
185
- align === 'left' && alignLeftStyle,
324
+ isDrawer && drawerStyle,
325
+ !isDrawer && topPx !== undefined && topStyle,
326
+ align === 'left' && (isDrawer ? drawerAlignLeftStyle : alignLeftStyle),
186
327
  align === 'right' && alignRightStyle,
187
- isOpen && openStyle
328
+ isOpen && (isDrawer ? drawerOpenStyle : openStyle)
188
329
  );
189
330
 
190
- const panelStyle = css`
331
+ const panelBaseStyle = css`
191
332
  box-sizing: border-box;
192
333
  width: 100%;
193
334
  max-width: 100%;
@@ -204,17 +345,28 @@ const DropdownContent = ({
204
345
  }
205
346
  `;
206
347
 
348
+ const panelMaxHeightStyle = css`
349
+ max-height: ${tabletMaxHeight}px;
350
+ `;
351
+ const hasPanelMaxHeight =
352
+ !isDrawer && isTabletAndUp && tabletMaxHeight !== undefined;
353
+ const panelStyle = cx(
354
+ panelBaseStyle,
355
+ hasPanelMaxHeight && panelMaxHeightStyle,
356
+ className
357
+ );
358
+
207
359
  const content = (
208
360
  <div
209
361
  ref={contentRef}
210
362
  className={style}
211
- style={isTabletAndUp ? { maxHeight: tabletMaxHeight } : undefined}
212
363
  tabIndex={isTabletAndUp ? undefined : -1}
213
364
  role={isTabletAndUp ? undefined : 'dialog'}
214
365
  aria-modal={isTabletAndUp ? undefined : true}
366
+ aria-hidden={!isOpen}
215
367
  >
216
368
  <div
217
- className={cx(panelStyle, className)}
369
+ className={panelStyle}
218
370
  id={id ?? contentId}
219
371
  data-testid={testId}
220
372
  {...props}
@@ -60,4 +60,24 @@ describe('Dropdown', () => {
60
60
  fireEvent.mouseDown(screen.getByText('Outside'));
61
61
  expect(content).not.toBeVisible();
62
62
  });
63
+
64
+ test('left aligned dropdown does not use drawer slide transform', () => {
65
+ render(
66
+ <ThemeContextProvider>
67
+ <Dropdown defaultOpen>
68
+ <Dropdown.Trigger>
69
+ <Button aria-label='Open dropdown'>Open</Button>
70
+ </Dropdown.Trigger>
71
+ <Dropdown.Content align='left'>
72
+ <div>Content</div>
73
+ </Dropdown.Content>
74
+ </Dropdown>
75
+ </ThemeContextProvider>
76
+ );
77
+
78
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
79
+ const shell = content.parentElement;
80
+
81
+ expect(shell).not.toHaveStyle({ transform: 'translateX(-100%)' });
82
+ });
63
83
  });
@@ -80,6 +80,9 @@ const DropdownMenu = ({
80
80
 
81
81
  @media (min-width: ${theme.breakpoints.tablet}px) {
82
82
  width: 460px;
83
+ border: ${theme.border.b1} solid ${theme.colour.border.default};
84
+ box-shadow: ${theme.boxShadow.y1};
85
+ border-radius: ${theme.radius.r4};
83
86
  }
84
87
  `;
85
88
 
@@ -199,4 +199,25 @@ describe('DropdownMenu', () => {
199
199
  fireEvent.click(screen.getByTestId('ucl-uikit-menu__head__close-button'));
200
200
  expect(content).not.toBeVisible();
201
201
  });
202
+
203
+ test('keeps tablet scroll bounds on the bordered content panel', async () => {
204
+ render(
205
+ <ThemeContextProvider>
206
+ <DropdownMenu
207
+ defaultOpen
208
+ contentClassName='bordered-panel'
209
+ >
210
+ <div>Menu content</div>
211
+ </DropdownMenu>
212
+ </ThemeContextProvider>
213
+ );
214
+
215
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
216
+ const shell = content.parentElement;
217
+
218
+ expect(shell).not.toBeNull();
219
+ expect((shell as HTMLElement).style.maxHeight).toBe('');
220
+ expect(shell).not.toHaveClass('bordered-panel');
221
+ expect(content).toHaveClass('bordered-panel');
222
+ });
202
223
  });
@@ -78,6 +78,16 @@ const DropdownUserMenu = ({
78
78
  pointer-events: none;
79
79
  `;
80
80
 
81
+ const contentBaseStyle = css`
82
+ background-color: ${theme.colour.surface.primary};
83
+
84
+ @media (min-width: ${theme.breakpoints.tablet}px) {
85
+ border: ${theme.border.b1} solid ${theme.colour.border.default};
86
+ box-shadow: ${theme.boxShadow.y1};
87
+ border-radius: ${theme.radius.r4};
88
+ }
89
+ `;
90
+
81
91
  const dropdownStyle = cx(NAME, dropdownClassName);
82
92
  const resolvedTriggerClassName = cx(
83
93
  triggerStyle,
@@ -86,6 +96,7 @@ const DropdownUserMenu = ({
86
96
  );
87
97
  const resolvedUserNameClassName = cx(userNameStyle, userNameClassName);
88
98
  const resolvedAvatarClassName = cx(avatarStyle, avatarClassName);
99
+ const resolvedContentClassName = cx(contentBaseStyle, contentClassName);
89
100
 
90
101
  return (
91
102
  <Dropdown
@@ -114,7 +125,7 @@ const DropdownUserMenu = ({
114
125
  <Icon.ChevronDown size={20} />
115
126
  </div>
116
127
  </Dropdown.Trigger>
117
- <Dropdown.Content className={contentClassName}>
128
+ <Dropdown.Content className={resolvedContentClassName}>
118
129
  {children}
119
130
  </Dropdown.Content>
120
131
  </Dropdown>
@@ -65,9 +65,9 @@ describe('DropdownUserMenu', () => {
65
65
  expect(screen.getByRole('button', { name: 'Open user menu' })).toHaveClass(
66
66
  'trigger-override'
67
67
  );
68
- expect(screen.getByTestId('ucl-uikit-dropdown__content')).toHaveClass(
69
- 'content-override'
70
- );
68
+ const content = screen.getByTestId('ucl-uikit-dropdown__content');
69
+ expect(content).toHaveClass('content-override');
70
+ expect(content.className.split(' ').length).toBeGreaterThan(1);
71
71
  expect(screen.getByTestId('ucl-uikit-avatar')).toHaveClass(
72
72
  'avatar-override'
73
73
  );