@mattermost/compass-ui 0.1.0-alpha.1 → 0.1.0-alpha.3

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 (1623) hide show
  1. package/README.md +13 -9
  2. package/dist/compass-ui-standalone.css +207 -0
  3. package/dist/compass-ui.css +0 -206
  4. package/dist/components/action-button/ActionButton.cjs +2 -0
  5. package/dist/components/action-button/ActionButton.cjs.map +1 -0
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -0
  7. package/dist/components/action-button/ActionButton.js +25 -0
  8. package/dist/components/action-button/ActionButton.js.map +1 -0
  9. package/dist/components/action-button/ActionButton.module.css +1 -0
  10. package/dist/components/action-button/ActionButton.module.scss.cjs +2 -0
  11. package/dist/components/action-button/ActionButton.module.scss.cjs.map +1 -0
  12. package/dist/components/action-button/ActionButton.module.scss.js +11 -0
  13. package/dist/components/action-button/ActionButton.module.scss.js.map +1 -0
  14. package/dist/components/action-button/index.cjs +2 -0
  15. package/dist/components/action-button/index.cjs.map +1 -0
  16. package/dist/components/action-button/index.d.ts.map +1 -0
  17. package/dist/components/action-button/index.js +5 -0
  18. package/dist/components/action-button/index.js.map +1 -0
  19. package/dist/components/admin-console-header/AdminConsoleHeader.cjs +2 -0
  20. package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -0
  21. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -0
  22. package/dist/components/admin-console-header/AdminConsoleHeader.js +57 -0
  23. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -0
  24. package/dist/components/admin-console-header/AdminConsoleHeader.module.css +1 -0
  25. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.cjs +2 -0
  26. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.cjs.map +1 -0
  27. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.js +14 -0
  28. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.js.map +1 -0
  29. package/dist/components/admin-console-header/index.cjs +2 -0
  30. package/dist/components/admin-console-header/index.cjs.map +1 -0
  31. package/dist/components/admin-console-header/index.d.ts.map +1 -0
  32. package/dist/components/admin-console-header/index.js +5 -0
  33. package/dist/components/admin-console-header/index.js.map +1 -0
  34. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs +2 -0
  35. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs.map +1 -0
  36. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.d.ts.map +1 -0
  37. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js +122 -0
  38. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js.map +1 -0
  39. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.css +1 -0
  40. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs +2 -0
  41. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs.map +1 -0
  42. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js +20 -0
  43. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js.map +1 -0
  44. package/dist/components/admin-console-sidebar/adminConsoleSidebarModel.d.ts.map +1 -0
  45. package/dist/components/admin-console-sidebar/index.cjs +2 -0
  46. package/dist/components/admin-console-sidebar/index.cjs.map +1 -0
  47. package/dist/components/admin-console-sidebar/index.d.ts.map +1 -0
  48. package/dist/components/admin-console-sidebar/index.js +5 -0
  49. package/dist/components/admin-console-sidebar/index.js.map +1 -0
  50. package/dist/components/admin-panel/AdminPanel.cjs +2 -0
  51. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -0
  52. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -0
  53. package/dist/components/admin-panel/AdminPanel.js +88 -0
  54. package/dist/components/admin-panel/AdminPanel.js.map +1 -0
  55. package/dist/components/admin-panel/AdminPanel.module.css +1 -0
  56. package/dist/components/admin-panel/AdminPanel.module.scss.cjs +2 -0
  57. package/dist/components/admin-panel/AdminPanel.module.scss.cjs.map +1 -0
  58. package/dist/components/admin-panel/AdminPanel.module.scss.js +11 -0
  59. package/dist/components/admin-panel/AdminPanel.module.scss.js.map +1 -0
  60. package/dist/components/admin-panel/index.cjs +2 -0
  61. package/dist/components/admin-panel/index.cjs.map +1 -0
  62. package/dist/components/admin-panel/index.d.ts.map +1 -0
  63. package/dist/components/admin-panel/index.js +5 -0
  64. package/dist/components/admin-panel/index.js.map +1 -0
  65. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs +2 -0
  66. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -0
  67. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -0
  68. package/dist/components/admin-panel-footer/AdminPanelFooter.js +77 -0
  69. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -0
  70. package/dist/components/admin-panel-footer/AdminPanelFooter.module.css +1 -0
  71. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.cjs +2 -0
  72. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.cjs.map +1 -0
  73. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.js +13 -0
  74. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.js.map +1 -0
  75. package/dist/components/admin-panel-footer/index.cjs +2 -0
  76. package/dist/components/admin-panel-footer/index.cjs.map +1 -0
  77. package/dist/components/admin-panel-footer/index.d.ts.map +1 -0
  78. package/dist/components/admin-panel-footer/index.js +5 -0
  79. package/dist/components/admin-panel-footer/index.js.map +1 -0
  80. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +2 -0
  81. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -0
  82. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -0
  83. package/dist/components/admin-panel-header/AdminPanelHeader.js +132 -0
  84. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -0
  85. package/dist/components/admin-panel-header/AdminPanelHeader.module.css +1 -0
  86. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +2 -0
  87. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs.map +1 -0
  88. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +16 -0
  89. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js.map +1 -0
  90. package/dist/components/admin-panel-header/index.cjs +2 -0
  91. package/dist/components/admin-panel-header/index.cjs.map +1 -0
  92. package/dist/components/admin-panel-header/index.d.ts.map +1 -0
  93. package/dist/components/admin-panel-header/index.js +5 -0
  94. package/dist/components/admin-panel-header/index.js.map +1 -0
  95. package/dist/components/app-bar-item/AppBarItem.cjs +2 -0
  96. package/dist/components/app-bar-item/AppBarItem.cjs.map +1 -0
  97. package/dist/components/app-bar-item/AppBarItem.d.ts.map +1 -0
  98. package/dist/components/app-bar-item/AppBarItem.js +49 -0
  99. package/dist/components/app-bar-item/AppBarItem.js.map +1 -0
  100. package/dist/components/app-bar-item/AppBarItem.module.css +1 -0
  101. package/dist/components/app-bar-item/AppBarItem.module.scss.cjs +2 -0
  102. package/dist/components/app-bar-item/AppBarItem.module.scss.cjs.map +1 -0
  103. package/dist/components/app-bar-item/AppBarItem.module.scss.js +11 -0
  104. package/dist/components/app-bar-item/AppBarItem.module.scss.js.map +1 -0
  105. package/dist/components/app-bar-item/index.cjs +2 -0
  106. package/dist/components/app-bar-item/index.cjs.map +1 -0
  107. package/dist/components/app-bar-item/index.d.ts.map +1 -0
  108. package/dist/components/app-bar-item/index.js +5 -0
  109. package/dist/components/app-bar-item/index.js.map +1 -0
  110. package/dist/components/attachment-card/AttachmentCard.cjs +2 -0
  111. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -0
  112. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -0
  113. package/dist/components/attachment-card/AttachmentCard.js +139 -0
  114. package/dist/components/attachment-card/AttachmentCard.js.map +1 -0
  115. package/dist/components/attachment-card/AttachmentCard.module.css +1 -0
  116. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +2 -0
  117. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs.map +1 -0
  118. package/dist/components/attachment-card/AttachmentCard.module.scss.js +24 -0
  119. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -0
  120. package/dist/components/attachment-card/index.cjs +2 -0
  121. package/dist/components/attachment-card/index.cjs.map +1 -0
  122. package/dist/components/attachment-card/index.d.ts.map +1 -0
  123. package/dist/components/attachment-card/index.js +5 -0
  124. package/dist/components/attachment-card/index.js.map +1 -0
  125. package/dist/components/button/Button.cjs +2 -0
  126. package/dist/components/button/Button.cjs.map +1 -0
  127. package/dist/components/button/Button.d.ts.map +1 -0
  128. package/dist/components/button/Button.js +41 -0
  129. package/dist/components/button/Button.js.map +1 -0
  130. package/dist/components/button/Button.module.css +1 -0
  131. package/dist/components/button/Button.module.scss.cjs +2 -0
  132. package/dist/components/button/Button.module.scss.cjs.map +1 -0
  133. package/dist/components/button/Button.module.scss.js +21 -0
  134. package/dist/components/button/Button.module.scss.js.map +1 -0
  135. package/dist/components/button/index.cjs +2 -0
  136. package/dist/components/button/index.cjs.map +1 -0
  137. package/dist/components/button/index.d.ts +4 -0
  138. package/dist/components/button/index.d.ts.map +1 -0
  139. package/dist/components/button/index.js +7 -0
  140. package/dist/components/button/index.js.map +1 -0
  141. package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs +2 -0
  142. package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs.map +1 -0
  143. package/dist/components/channel-category-menu/ChannelCategoryMenu.d.ts.map +1 -0
  144. package/dist/components/channel-category-menu/ChannelCategoryMenu.js +103 -0
  145. package/dist/components/channel-category-menu/ChannelCategoryMenu.js.map +1 -0
  146. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.css +1 -0
  147. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs +2 -0
  148. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs.map +1 -0
  149. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js +8 -0
  150. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js.map +1 -0
  151. package/dist/components/channel-category-menu/index.cjs +2 -0
  152. package/dist/components/channel-category-menu/index.cjs.map +1 -0
  153. package/dist/components/channel-category-menu/index.d.ts.map +1 -0
  154. package/dist/components/channel-category-menu/index.js +5 -0
  155. package/dist/components/channel-category-menu/index.js.map +1 -0
  156. package/dist/components/channel-header/ChannelHeader.cjs +2 -0
  157. package/dist/components/channel-header/ChannelHeader.cjs.map +1 -0
  158. package/dist/components/channel-header/ChannelHeader.d.ts.map +1 -0
  159. package/dist/components/channel-header/ChannelHeader.js +174 -0
  160. package/dist/components/channel-header/ChannelHeader.js.map +1 -0
  161. package/dist/components/channel-header/ChannelHeader.module.css +1 -0
  162. package/dist/components/channel-header/ChannelHeader.module.scss.cjs +2 -0
  163. package/dist/components/channel-header/ChannelHeader.module.scss.cjs.map +1 -0
  164. package/dist/components/channel-header/ChannelHeader.module.scss.js +20 -0
  165. package/dist/components/channel-header/ChannelHeader.module.scss.js.map +1 -0
  166. package/dist/components/channel-header/index.cjs +2 -0
  167. package/dist/components/channel-header/index.cjs.map +1 -0
  168. package/dist/components/channel-header/index.d.ts.map +1 -0
  169. package/dist/components/channel-header/index.js +5 -0
  170. package/dist/components/channel-header/index.js.map +1 -0
  171. package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs +2 -0
  172. package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs.map +1 -0
  173. package/dist/components/channel-header-menu/ChannelHeaderMenu.d.ts.map +1 -0
  174. package/dist/components/channel-header-menu/ChannelHeaderMenu.js +115 -0
  175. package/dist/components/channel-header-menu/ChannelHeaderMenu.js.map +1 -0
  176. package/dist/components/channel-header-menu/index.cjs +2 -0
  177. package/dist/components/channel-header-menu/index.cjs.map +1 -0
  178. package/dist/components/channel-header-menu/index.d.ts.map +1 -0
  179. package/dist/components/channel-header-menu/index.js +5 -0
  180. package/dist/components/channel-header-menu/index.js.map +1 -0
  181. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +2 -0
  182. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -0
  183. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -0
  184. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +40 -0
  185. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -0
  186. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.css +1 -0
  187. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.cjs +2 -0
  188. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.cjs.map +1 -0
  189. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.js +14 -0
  190. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.js.map +1 -0
  191. package/dist/components/channel-info-msg-header/index.cjs +2 -0
  192. package/dist/components/channel-info-msg-header/index.cjs.map +1 -0
  193. package/dist/components/channel-info-msg-header/index.d.ts.map +1 -0
  194. package/dist/components/channel-info-msg-header/index.js +5 -0
  195. package/dist/components/channel-info-msg-header/index.js.map +1 -0
  196. package/dist/components/channel-menu/ChannelMenu.cjs +2 -0
  197. package/dist/components/channel-menu/ChannelMenu.cjs.map +1 -0
  198. package/dist/components/channel-menu/ChannelMenu.d.ts.map +1 -0
  199. package/dist/components/channel-menu/ChannelMenu.js +91 -0
  200. package/dist/components/channel-menu/ChannelMenu.js.map +1 -0
  201. package/dist/components/channel-menu/index.cjs +2 -0
  202. package/dist/components/channel-menu/index.cjs.map +1 -0
  203. package/dist/components/channel-menu/index.d.ts.map +1 -0
  204. package/dist/components/channel-menu/index.js +5 -0
  205. package/dist/components/channel-menu/index.js.map +1 -0
  206. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +2 -0
  207. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -0
  208. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -0
  209. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +139 -0
  210. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -0
  211. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -0
  212. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +2 -0
  213. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs.map +1 -0
  214. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +26 -0
  215. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -0
  216. package/dist/components/channel-sidebar-item/index.cjs +2 -0
  217. package/dist/components/channel-sidebar-item/index.cjs.map +1 -0
  218. package/dist/components/channel-sidebar-item/index.d.ts.map +1 -0
  219. package/dist/components/channel-sidebar-item/index.js +5 -0
  220. package/dist/components/channel-sidebar-item/index.js.map +1 -0
  221. package/dist/components/channels-sidebar/ChannelsSidebar.cjs +2 -0
  222. package/dist/components/channels-sidebar/ChannelsSidebar.cjs.map +1 -0
  223. package/dist/components/channels-sidebar/ChannelsSidebar.d.ts.map +1 -0
  224. package/dist/components/channels-sidebar/ChannelsSidebar.js +177 -0
  225. package/dist/components/channels-sidebar/ChannelsSidebar.js.map +1 -0
  226. package/dist/components/channels-sidebar/ChannelsSidebar.module.css +1 -0
  227. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs +2 -0
  228. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs.map +1 -0
  229. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js +35 -0
  230. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js.map +1 -0
  231. package/dist/components/channels-sidebar/channelsSidebarModel.cjs +2 -0
  232. package/dist/components/channels-sidebar/channelsSidebarModel.cjs.map +1 -0
  233. package/dist/components/channels-sidebar/channelsSidebarModel.d.ts.map +1 -0
  234. package/dist/components/channels-sidebar/channelsSidebarModel.js +20 -0
  235. package/dist/components/channels-sidebar/channelsSidebarModel.js.map +1 -0
  236. package/dist/components/channels-sidebar/index.cjs +2 -0
  237. package/dist/components/channels-sidebar/index.cjs.map +1 -0
  238. package/dist/components/channels-sidebar/index.d.ts +6 -0
  239. package/dist/components/channels-sidebar/index.d.ts.map +1 -0
  240. package/dist/components/channels-sidebar/index.js +12 -0
  241. package/dist/components/channels-sidebar/index.js.map +1 -0
  242. package/dist/components/checkbox/Checkbox.cjs +2 -0
  243. package/dist/components/checkbox/Checkbox.cjs.map +1 -0
  244. package/dist/components/checkbox/Checkbox.d.ts.map +1 -0
  245. package/dist/components/checkbox/Checkbox.js +72 -0
  246. package/dist/components/checkbox/Checkbox.js.map +1 -0
  247. package/dist/components/checkbox/Checkbox.module.css +1 -0
  248. package/dist/components/checkbox/Checkbox.module.scss.cjs +2 -0
  249. package/dist/components/checkbox/Checkbox.module.scss.cjs.map +1 -0
  250. package/dist/components/checkbox/Checkbox.module.scss.js +22 -0
  251. package/dist/components/checkbox/Checkbox.module.scss.js.map +1 -0
  252. package/dist/components/checkbox/index.cjs +2 -0
  253. package/dist/components/checkbox/index.cjs.map +1 -0
  254. package/dist/components/checkbox/index.d.ts.map +1 -0
  255. package/dist/components/checkbox/index.js +5 -0
  256. package/dist/components/checkbox/index.js.map +1 -0
  257. package/dist/components/chip/Chip.cjs +2 -0
  258. package/dist/components/chip/Chip.cjs.map +1 -0
  259. package/dist/components/chip/Chip.d.ts.map +1 -0
  260. package/dist/components/chip/Chip.js +62 -0
  261. package/dist/components/chip/Chip.js.map +1 -0
  262. package/dist/components/chip/Chip.module.css +1 -0
  263. package/dist/components/chip/Chip.module.scss.cjs +2 -0
  264. package/dist/components/chip/Chip.module.scss.cjs.map +1 -0
  265. package/dist/components/chip/Chip.module.scss.js +20 -0
  266. package/dist/components/chip/Chip.module.scss.js.map +1 -0
  267. package/dist/components/chip/index.cjs +2 -0
  268. package/dist/components/chip/index.cjs.map +1 -0
  269. package/dist/components/chip/index.d.ts.map +1 -0
  270. package/dist/components/chip/index.js +5 -0
  271. package/dist/components/chip/index.js.map +1 -0
  272. package/dist/components/combobox/Combobox.cjs +2 -0
  273. package/dist/components/combobox/Combobox.cjs.map +1 -0
  274. package/dist/components/combobox/Combobox.d.ts.map +1 -0
  275. package/dist/components/combobox/Combobox.js +352 -0
  276. package/dist/components/combobox/Combobox.js.map +1 -0
  277. package/dist/components/combobox/Combobox.module.css +1 -0
  278. package/dist/components/combobox/Combobox.module.scss.cjs +2 -0
  279. package/dist/components/combobox/Combobox.module.scss.cjs.map +1 -0
  280. package/dist/components/combobox/Combobox.module.scss.js +43 -0
  281. package/dist/components/combobox/Combobox.module.scss.js.map +1 -0
  282. package/dist/components/combobox/index.cjs +2 -0
  283. package/dist/components/combobox/index.cjs.map +1 -0
  284. package/dist/components/combobox/index.d.ts.map +1 -0
  285. package/dist/components/combobox/index.js +5 -0
  286. package/dist/components/combobox/index.js.map +1 -0
  287. package/dist/components/date-range-picker/DateRangePicker.cjs +2 -0
  288. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -0
  289. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -0
  290. package/dist/components/date-range-picker/DateRangePicker.js +416 -0
  291. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -0
  292. package/dist/components/date-range-picker/DateRangePicker.module.css +1 -0
  293. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +2 -0
  294. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs.map +1 -0
  295. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +49 -0
  296. package/dist/components/date-range-picker/DateRangePicker.module.scss.js.map +1 -0
  297. package/dist/components/date-range-picker/index.cjs +2 -0
  298. package/dist/components/date-range-picker/index.cjs.map +1 -0
  299. package/dist/components/date-range-picker/index.d.ts.map +1 -0
  300. package/dist/components/date-range-picker/index.js +5 -0
  301. package/dist/components/date-range-picker/index.js.map +1 -0
  302. package/dist/components/divider/Divider.cjs +2 -0
  303. package/dist/components/divider/Divider.cjs.map +1 -0
  304. package/dist/components/divider/Divider.d.ts.map +1 -0
  305. package/dist/components/divider/Divider.js +9 -0
  306. package/dist/components/divider/Divider.js.map +1 -0
  307. package/dist/components/divider/Divider.module.css +1 -0
  308. package/dist/components/divider/Divider.module.scss.cjs +2 -0
  309. package/dist/components/divider/Divider.module.scss.cjs.map +1 -0
  310. package/dist/components/divider/Divider.module.scss.js +10 -0
  311. package/dist/components/divider/Divider.module.scss.js.map +1 -0
  312. package/dist/components/divider/index.cjs +2 -0
  313. package/dist/components/divider/index.cjs.map +1 -0
  314. package/dist/components/divider/index.d.ts.map +1 -0
  315. package/dist/components/divider/index.js +5 -0
  316. package/dist/components/divider/index.js.map +1 -0
  317. package/dist/components/dropdown/Dropdown.cjs +2 -0
  318. package/dist/components/dropdown/Dropdown.cjs.map +1 -0
  319. package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
  320. package/dist/components/dropdown/Dropdown.js +51 -0
  321. package/dist/components/dropdown/Dropdown.js.map +1 -0
  322. package/dist/components/dropdown/Dropdown.module.css +1 -0
  323. package/dist/components/dropdown/Dropdown.module.scss.cjs +2 -0
  324. package/dist/components/dropdown/Dropdown.module.scss.cjs.map +1 -0
  325. package/dist/components/dropdown/Dropdown.module.scss.js +26 -0
  326. package/dist/components/dropdown/Dropdown.module.scss.js.map +1 -0
  327. package/dist/components/dropdown/index.cjs +2 -0
  328. package/dist/components/dropdown/index.cjs.map +1 -0
  329. package/dist/components/dropdown/index.d.ts.map +1 -0
  330. package/dist/components/dropdown/index.js +5 -0
  331. package/dist/components/dropdown/index.js.map +1 -0
  332. package/dist/components/emoji/Emoji.cjs +2 -0
  333. package/dist/components/emoji/Emoji.cjs.map +1 -0
  334. package/dist/components/emoji/Emoji.d.ts.map +1 -0
  335. package/dist/components/emoji/Emoji.js +31 -0
  336. package/dist/components/emoji/Emoji.js.map +1 -0
  337. package/dist/components/emoji/Emoji.module.css +1 -0
  338. package/dist/components/emoji/Emoji.module.scss.cjs +2 -0
  339. package/dist/components/emoji/Emoji.module.scss.cjs.map +1 -0
  340. package/dist/components/emoji/Emoji.module.scss.js +19 -0
  341. package/dist/components/emoji/Emoji.module.scss.js.map +1 -0
  342. package/dist/components/emoji/index.cjs +2 -0
  343. package/dist/components/emoji/index.cjs.map +1 -0
  344. package/dist/components/emoji/index.d.ts.map +1 -0
  345. package/dist/components/emoji/index.js +5 -0
  346. package/dist/components/emoji/index.js.map +1 -0
  347. package/dist/components/empty-state/EmptyState.cjs +2 -0
  348. package/dist/components/empty-state/EmptyState.cjs.map +1 -0
  349. package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
  350. package/dist/components/empty-state/EmptyState.js +31 -0
  351. package/dist/components/empty-state/EmptyState.js.map +1 -0
  352. package/dist/components/empty-state/EmptyState.module.css +1 -0
  353. package/dist/components/empty-state/EmptyState.module.scss.cjs +2 -0
  354. package/dist/components/empty-state/EmptyState.module.scss.cjs.map +1 -0
  355. package/dist/components/empty-state/EmptyState.module.scss.js +13 -0
  356. package/dist/components/empty-state/EmptyState.module.scss.js.map +1 -0
  357. package/dist/components/empty-state/index.cjs +2 -0
  358. package/dist/components/empty-state/index.cjs.map +1 -0
  359. package/dist/components/empty-state/index.d.ts.map +1 -0
  360. package/dist/components/empty-state/index.js +5 -0
  361. package/dist/components/empty-state/index.js.map +1 -0
  362. package/dist/components/error-message/ErrorMessage.cjs +2 -0
  363. package/dist/components/error-message/ErrorMessage.cjs.map +1 -0
  364. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -0
  365. package/dist/components/error-message/ErrorMessage.js +18 -0
  366. package/dist/components/error-message/ErrorMessage.js.map +1 -0
  367. package/dist/components/error-message/ErrorMessage.module.css +1 -0
  368. package/dist/components/error-message/ErrorMessage.module.scss.cjs +2 -0
  369. package/dist/components/error-message/ErrorMessage.module.scss.cjs.map +1 -0
  370. package/dist/components/error-message/ErrorMessage.module.scss.js +9 -0
  371. package/dist/components/error-message/ErrorMessage.module.scss.js.map +1 -0
  372. package/dist/components/error-message/index.cjs +2 -0
  373. package/dist/components/error-message/index.cjs.map +1 -0
  374. package/dist/components/error-message/index.d.ts.map +1 -0
  375. package/dist/components/error-message/index.js +5 -0
  376. package/dist/components/error-message/index.js.map +1 -0
  377. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs +2 -0
  378. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -0
  379. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -0
  380. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js +50 -0
  381. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -0
  382. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.css +1 -0
  383. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.cjs +2 -0
  384. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.cjs.map +1 -0
  385. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.js +15 -0
  386. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.js.map +1 -0
  387. package/dist/components/feature-discovery-panel/index.cjs +2 -0
  388. package/dist/components/feature-discovery-panel/index.cjs.map +1 -0
  389. package/dist/components/feature-discovery-panel/index.d.ts.map +1 -0
  390. package/dist/components/feature-discovery-panel/index.js +5 -0
  391. package/dist/components/feature-discovery-panel/index.js.map +1 -0
  392. package/dist/components/global-banner/GlobalBanner.cjs +2 -0
  393. package/dist/components/global-banner/GlobalBanner.cjs.map +1 -0
  394. package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -0
  395. package/dist/components/global-banner/GlobalBanner.js +48 -0
  396. package/dist/components/global-banner/GlobalBanner.js.map +1 -0
  397. package/dist/components/global-banner/GlobalBanner.module.css +1 -0
  398. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +2 -0
  399. package/dist/components/global-banner/GlobalBanner.module.scss.cjs.map +1 -0
  400. package/dist/components/global-banner/GlobalBanner.module.scss.js +16 -0
  401. package/dist/components/global-banner/GlobalBanner.module.scss.js.map +1 -0
  402. package/dist/components/global-banner/index.cjs +2 -0
  403. package/dist/components/global-banner/index.cjs.map +1 -0
  404. package/dist/components/global-banner/index.d.ts.map +1 -0
  405. package/dist/components/global-banner/index.js +5 -0
  406. package/dist/components/global-banner/index.js.map +1 -0
  407. package/dist/components/global-header/GlobalHeader.cjs +2 -0
  408. package/dist/components/global-header/GlobalHeader.cjs.map +1 -0
  409. package/dist/components/global-header/GlobalHeader.d.ts.map +1 -0
  410. package/dist/components/global-header/GlobalHeader.js +157 -0
  411. package/dist/components/global-header/GlobalHeader.js.map +1 -0
  412. package/dist/components/global-header/GlobalHeader.module.css +1 -0
  413. package/dist/components/global-header/GlobalHeader.module.scss.cjs +2 -0
  414. package/dist/components/global-header/GlobalHeader.module.scss.cjs.map +1 -0
  415. package/dist/components/global-header/GlobalHeader.module.scss.js +20 -0
  416. package/dist/components/global-header/GlobalHeader.module.scss.js.map +1 -0
  417. package/dist/components/global-header/index.cjs +2 -0
  418. package/dist/components/global-header/index.cjs.map +1 -0
  419. package/dist/components/global-header/index.d.ts.map +1 -0
  420. package/dist/components/global-header/index.js +5 -0
  421. package/dist/components/global-header/index.js.map +1 -0
  422. package/dist/components/help-menu/HelpMenu.cjs +2 -0
  423. package/dist/components/help-menu/HelpMenu.cjs.map +1 -0
  424. package/dist/components/help-menu/HelpMenu.d.ts.map +1 -0
  425. package/dist/components/help-menu/HelpMenu.js +64 -0
  426. package/dist/components/help-menu/HelpMenu.js.map +1 -0
  427. package/dist/components/help-menu/index.cjs +2 -0
  428. package/dist/components/help-menu/index.cjs.map +1 -0
  429. package/dist/components/help-menu/index.d.ts.map +1 -0
  430. package/dist/components/help-menu/index.js +5 -0
  431. package/dist/components/help-menu/index.js.map +1 -0
  432. package/dist/components/icon/Icon.cjs +2 -0
  433. package/dist/components/icon/Icon.cjs.map +1 -0
  434. package/dist/components/icon/Icon.d.ts.map +1 -0
  435. package/dist/components/icon/Icon.js +47 -0
  436. package/dist/components/icon/Icon.js.map +1 -0
  437. package/dist/components/icon/Icon.module.css +1 -0
  438. package/dist/components/icon/Icon.module.scss.cjs +2 -0
  439. package/dist/components/icon/Icon.module.scss.cjs.map +1 -0
  440. package/dist/components/icon/Icon.module.scss.js +20 -0
  441. package/dist/components/icon/Icon.module.scss.js.map +1 -0
  442. package/dist/components/icon/index.cjs +2 -0
  443. package/dist/components/icon/index.cjs.map +1 -0
  444. package/dist/components/icon/index.d.ts.map +1 -0
  445. package/dist/components/icon/index.js +6 -0
  446. package/dist/components/icon/index.js.map +1 -0
  447. package/dist/components/icon-button/IconButton.cjs +2 -0
  448. package/dist/components/icon-button/IconButton.cjs.map +1 -0
  449. package/dist/components/icon-button/IconButton.d.ts.map +1 -0
  450. package/dist/components/icon-button/IconButton.js +63 -0
  451. package/dist/components/icon-button/IconButton.js.map +1 -0
  452. package/dist/components/icon-button/IconButton.module.css +1 -0
  453. package/dist/components/icon-button/IconButton.module.scss.cjs +2 -0
  454. package/dist/components/icon-button/IconButton.module.scss.cjs.map +1 -0
  455. package/dist/components/icon-button/IconButton.module.scss.js +21 -0
  456. package/dist/components/icon-button/IconButton.module.scss.js.map +1 -0
  457. package/dist/components/icon-button/index.cjs +2 -0
  458. package/dist/components/icon-button/index.cjs.map +1 -0
  459. package/dist/components/icon-button/index.d.ts.map +1 -0
  460. package/dist/components/icon-button/index.js +6 -0
  461. package/dist/components/icon-button/index.js.map +1 -0
  462. package/dist/components/illustration/Illustration.cjs +2 -0
  463. package/dist/components/illustration/Illustration.cjs.map +1 -0
  464. package/dist/components/illustration/Illustration.d.ts.map +1 -0
  465. package/dist/components/illustration/Illustration.js +26 -0
  466. package/dist/components/illustration/Illustration.js.map +1 -0
  467. package/dist/components/illustration/Illustration.module.css +1 -0
  468. package/dist/components/illustration/Illustration.module.scss.cjs +2 -0
  469. package/dist/components/illustration/Illustration.module.scss.cjs.map +1 -0
  470. package/dist/components/illustration/Illustration.module.scss.js +8 -0
  471. package/dist/components/illustration/Illustration.module.scss.js.map +1 -0
  472. package/dist/components/illustration/index.cjs +2 -0
  473. package/dist/components/illustration/index.cjs.map +1 -0
  474. package/dist/components/illustration/index.d.ts.map +1 -0
  475. package/dist/components/illustration/index.js +5 -0
  476. package/dist/components/illustration/index.js.map +1 -0
  477. package/dist/components/image-preview/ImagePreview.cjs +2 -0
  478. package/dist/components/image-preview/ImagePreview.cjs.map +1 -0
  479. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -0
  480. package/dist/components/image-preview/ImagePreview.js +100 -0
  481. package/dist/components/image-preview/ImagePreview.js.map +1 -0
  482. package/dist/components/image-preview/ImagePreview.module.css +1 -0
  483. package/dist/components/image-preview/ImagePreview.module.scss.cjs +2 -0
  484. package/dist/components/image-preview/ImagePreview.module.scss.cjs.map +1 -0
  485. package/dist/components/image-preview/ImagePreview.module.scss.js +21 -0
  486. package/dist/components/image-preview/ImagePreview.module.scss.js.map +1 -0
  487. package/dist/components/image-preview/index.cjs +2 -0
  488. package/dist/components/image-preview/index.cjs.map +1 -0
  489. package/dist/components/image-preview/index.d.ts.map +1 -0
  490. package/dist/components/image-preview/index.js +5 -0
  491. package/dist/components/image-preview/index.js.map +1 -0
  492. package/dist/components/link-preview/LinkPreview.cjs +2 -0
  493. package/dist/components/link-preview/LinkPreview.cjs.map +1 -0
  494. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -0
  495. package/dist/components/link-preview/LinkPreview.js +80 -0
  496. package/dist/components/link-preview/LinkPreview.js.map +1 -0
  497. package/dist/components/link-preview/LinkPreview.module.css +1 -0
  498. package/dist/components/link-preview/LinkPreview.module.scss.cjs +2 -0
  499. package/dist/components/link-preview/LinkPreview.module.scss.cjs.map +1 -0
  500. package/dist/components/link-preview/LinkPreview.module.scss.js +20 -0
  501. package/dist/components/link-preview/LinkPreview.module.scss.js.map +1 -0
  502. package/dist/components/link-preview/index.cjs +2 -0
  503. package/dist/components/link-preview/index.cjs.map +1 -0
  504. package/dist/components/link-preview/index.d.ts.map +1 -0
  505. package/dist/components/link-preview/index.js +5 -0
  506. package/dist/components/link-preview/index.js.map +1 -0
  507. package/dist/components/mention-badge/MentionBadge.cjs +2 -0
  508. package/dist/components/mention-badge/MentionBadge.cjs.map +1 -0
  509. package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -0
  510. package/dist/components/mention-badge/MentionBadge.js +29 -0
  511. package/dist/components/mention-badge/MentionBadge.js.map +1 -0
  512. package/dist/components/mention-badge/MentionBadge.module.css +1 -0
  513. package/dist/components/mention-badge/MentionBadge.module.scss.cjs +2 -0
  514. package/dist/components/mention-badge/MentionBadge.module.scss.cjs.map +1 -0
  515. package/dist/components/mention-badge/MentionBadge.module.scss.js +15 -0
  516. package/dist/components/mention-badge/MentionBadge.module.scss.js.map +1 -0
  517. package/dist/components/mention-badge/index.cjs +2 -0
  518. package/dist/components/mention-badge/index.cjs.map +1 -0
  519. package/dist/components/mention-badge/index.d.ts.map +1 -0
  520. package/dist/components/mention-badge/index.js +5 -0
  521. package/dist/components/mention-badge/index.js.map +1 -0
  522. package/dist/components/menu-item/MenuItem.cjs +2 -0
  523. package/dist/components/menu-item/MenuItem.cjs.map +1 -0
  524. package/dist/components/menu-item/MenuItem.d.ts.map +1 -0
  525. package/dist/components/menu-item/MenuItem.js +66 -0
  526. package/dist/components/menu-item/MenuItem.js.map +1 -0
  527. package/dist/components/menu-item/MenuItem.module.css +1 -0
  528. package/dist/components/menu-item/MenuItem.module.scss.cjs +2 -0
  529. package/dist/components/menu-item/MenuItem.module.scss.cjs.map +1 -0
  530. package/dist/components/menu-item/MenuItem.module.scss.js +22 -0
  531. package/dist/components/menu-item/MenuItem.module.scss.js.map +1 -0
  532. package/dist/components/menu-item/index.cjs +2 -0
  533. package/dist/components/menu-item/index.cjs.map +1 -0
  534. package/dist/components/menu-item/index.d.ts.map +1 -0
  535. package/dist/components/menu-item/index.js +5 -0
  536. package/dist/components/menu-item/index.js.map +1 -0
  537. package/dist/components/message/Message.cjs +2 -0
  538. package/dist/components/message/Message.cjs.map +1 -0
  539. package/dist/components/message/Message.d.ts.map +1 -0
  540. package/dist/components/message/Message.js +54 -0
  541. package/dist/components/message/Message.js.map +1 -0
  542. package/dist/components/message/Message.module.css +1 -0
  543. package/dist/components/message/Message.module.scss.cjs +2 -0
  544. package/dist/components/message/Message.module.scss.cjs.map +1 -0
  545. package/dist/components/message/Message.module.scss.js +26 -0
  546. package/dist/components/message/Message.module.scss.js.map +1 -0
  547. package/dist/components/message/index.cjs +2 -0
  548. package/dist/components/message/index.cjs.map +1 -0
  549. package/dist/components/message/index.d.ts +4 -0
  550. package/dist/components/message/index.d.ts.map +1 -0
  551. package/dist/components/message/index.js +7 -0
  552. package/dist/components/message/index.js.map +1 -0
  553. package/dist/components/message-actions/MessageActions.cjs +2 -0
  554. package/dist/components/message-actions/MessageActions.cjs.map +1 -0
  555. package/dist/components/message-actions/MessageActions.d.ts.map +1 -0
  556. package/dist/components/message-actions/MessageActions.js +171 -0
  557. package/dist/components/message-actions/MessageActions.js.map +1 -0
  558. package/dist/components/message-actions/MessageActions.module.css +1 -0
  559. package/dist/components/message-actions/MessageActions.module.scss.cjs +2 -0
  560. package/dist/components/message-actions/MessageActions.module.scss.cjs.map +1 -0
  561. package/dist/components/message-actions/MessageActions.module.scss.js +8 -0
  562. package/dist/components/message-actions/MessageActions.module.scss.js.map +1 -0
  563. package/dist/components/message-actions/index.cjs +2 -0
  564. package/dist/components/message-actions/index.cjs.map +1 -0
  565. package/dist/components/message-actions/index.d.ts.map +1 -0
  566. package/dist/components/message-actions/index.js +5 -0
  567. package/dist/components/message-actions/index.js.map +1 -0
  568. package/dist/components/message-header/MessageHeader.cjs +2 -0
  569. package/dist/components/message-header/MessageHeader.cjs.map +1 -0
  570. package/dist/components/message-header/MessageHeader.d.ts.map +1 -0
  571. package/dist/components/message-header/MessageHeader.js +19 -0
  572. package/dist/components/message-header/MessageHeader.js.map +1 -0
  573. package/dist/components/message-header/MessageHeader.module.css +1 -0
  574. package/dist/components/message-header/MessageHeader.module.scss.cjs +2 -0
  575. package/dist/components/message-header/MessageHeader.module.scss.cjs.map +1 -0
  576. package/dist/components/message-header/MessageHeader.module.scss.js +9 -0
  577. package/dist/components/message-header/MessageHeader.module.scss.js.map +1 -0
  578. package/dist/components/message-header/index.cjs +2 -0
  579. package/dist/components/message-header/index.cjs.map +1 -0
  580. package/dist/components/message-header/index.d.ts.map +1 -0
  581. package/dist/components/message-header/index.js +5 -0
  582. package/dist/components/message-header/index.js.map +1 -0
  583. package/dist/components/message-input/MessageInput.cjs +2 -0
  584. package/dist/components/message-input/MessageInput.cjs.map +1 -0
  585. package/dist/components/message-input/MessageInput.d.ts.map +1 -0
  586. package/dist/components/message-input/MessageInput.js +407 -0
  587. package/dist/components/message-input/MessageInput.js.map +1 -0
  588. package/dist/components/message-input/MessageInput.module.css +1 -0
  589. package/dist/components/message-input/MessageInput.module.scss.cjs +2 -0
  590. package/dist/components/message-input/MessageInput.module.scss.cjs.map +1 -0
  591. package/dist/components/message-input/MessageInput.module.scss.js +37 -0
  592. package/dist/components/message-input/MessageInput.module.scss.js.map +1 -0
  593. package/dist/components/message-input/index.cjs +2 -0
  594. package/dist/components/message-input/index.cjs.map +1 -0
  595. package/dist/components/message-input/index.d.ts.map +1 -0
  596. package/dist/components/message-input/index.js +5 -0
  597. package/dist/components/message-input/index.js.map +1 -0
  598. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs +2 -0
  599. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs.map +1 -0
  600. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.d.ts.map +1 -0
  601. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js +172 -0
  602. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js.map +1 -0
  603. package/dist/components/message-more-options-menu/index.cjs +2 -0
  604. package/dist/components/message-more-options-menu/index.cjs.map +1 -0
  605. package/dist/components/message-more-options-menu/index.d.ts.map +1 -0
  606. package/dist/components/message-more-options-menu/index.js +5 -0
  607. package/dist/components/message-more-options-menu/index.js.map +1 -0
  608. package/dist/components/message-reactions/MessageReactions.cjs +2 -0
  609. package/dist/components/message-reactions/MessageReactions.cjs.map +1 -0
  610. package/dist/components/message-reactions/MessageReactions.d.ts.map +1 -0
  611. package/dist/components/message-reactions/MessageReactions.js +85 -0
  612. package/dist/components/message-reactions/MessageReactions.js.map +1 -0
  613. package/dist/components/message-reactions/MessageReactions.module.css +1 -0
  614. package/dist/components/message-reactions/MessageReactions.module.scss.cjs +2 -0
  615. package/dist/components/message-reactions/MessageReactions.module.scss.cjs.map +1 -0
  616. package/dist/components/message-reactions/MessageReactions.module.scss.js +18 -0
  617. package/dist/components/message-reactions/MessageReactions.module.scss.js.map +1 -0
  618. package/dist/components/message-reactions/index.cjs +2 -0
  619. package/dist/components/message-reactions/index.cjs.map +1 -0
  620. package/dist/components/message-reactions/index.d.ts.map +1 -0
  621. package/dist/components/message-reactions/index.js +5 -0
  622. package/dist/components/message-reactions/index.js.map +1 -0
  623. package/dist/components/message-separator/MessageSeparator.cjs +2 -0
  624. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -0
  625. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -0
  626. package/dist/components/message-separator/MessageSeparator.js +58 -0
  627. package/dist/components/message-separator/MessageSeparator.js.map +1 -0
  628. package/dist/components/message-separator/MessageSeparator.module.css +1 -0
  629. package/dist/components/message-separator/MessageSeparator.module.scss.cjs +2 -0
  630. package/dist/components/message-separator/MessageSeparator.module.scss.cjs.map +1 -0
  631. package/dist/components/message-separator/MessageSeparator.module.scss.js +17 -0
  632. package/dist/components/message-separator/MessageSeparator.module.scss.js.map +1 -0
  633. package/dist/components/message-separator/index.cjs +2 -0
  634. package/dist/components/message-separator/index.cjs.map +1 -0
  635. package/dist/components/message-separator/index.d.ts.map +1 -0
  636. package/dist/components/message-separator/index.js +5 -0
  637. package/dist/components/message-separator/index.js.map +1 -0
  638. package/dist/components/modal/Modal.cjs +2 -0
  639. package/dist/components/modal/Modal.cjs.map +1 -0
  640. package/dist/components/modal/Modal.d.ts.map +1 -0
  641. package/dist/components/modal/Modal.js +83 -0
  642. package/dist/components/modal/Modal.js.map +1 -0
  643. package/dist/components/modal/Modal.module.css +1 -0
  644. package/dist/components/modal/Modal.module.scss.cjs +2 -0
  645. package/dist/components/modal/Modal.module.scss.cjs.map +1 -0
  646. package/dist/components/modal/Modal.module.scss.js +28 -0
  647. package/dist/components/modal/Modal.module.scss.js.map +1 -0
  648. package/dist/components/modal/index.cjs +2 -0
  649. package/dist/components/modal/index.cjs.map +1 -0
  650. package/dist/components/modal/index.d.ts.map +1 -0
  651. package/dist/components/modal/index.js +5 -0
  652. package/dist/components/modal/index.js.map +1 -0
  653. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +2 -0
  654. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -0
  655. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -0
  656. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +21 -0
  657. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -0
  658. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -0
  659. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +2 -0
  660. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs.map +1 -0
  661. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +11 -0
  662. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js.map +1 -0
  663. package/dist/components/more-unreads-banner/index.cjs +2 -0
  664. package/dist/components/more-unreads-banner/index.cjs.map +1 -0
  665. package/dist/components/more-unreads-banner/index.d.ts.map +1 -0
  666. package/dist/components/more-unreads-banner/index.js +5 -0
  667. package/dist/components/more-unreads-banner/index.js.map +1 -0
  668. package/dist/components/new-message-banner/NewMessageBanner.cjs +2 -0
  669. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -0
  670. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -0
  671. package/dist/components/new-message-banner/NewMessageBanner.js +48 -0
  672. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -0
  673. package/dist/components/new-message-banner/NewMessageBanner.module.css +1 -0
  674. package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs +2 -0
  675. package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs.map +1 -0
  676. package/dist/components/new-message-banner/NewMessageBanner.module.scss.js +15 -0
  677. package/dist/components/new-message-banner/NewMessageBanner.module.scss.js.map +1 -0
  678. package/dist/components/new-message-banner/index.cjs +2 -0
  679. package/dist/components/new-message-banner/index.cjs.map +1 -0
  680. package/dist/components/new-message-banner/index.d.ts.map +1 -0
  681. package/dist/components/new-message-banner/index.js +5 -0
  682. package/dist/components/new-message-banner/index.js.map +1 -0
  683. package/dist/components/pagination-dots/PaginationDots.cjs +2 -0
  684. package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -0
  685. package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -0
  686. package/dist/components/pagination-dots/PaginationDots.js +48 -0
  687. package/dist/components/pagination-dots/PaginationDots.js.map +1 -0
  688. package/dist/components/pagination-dots/PaginationDots.module.css +1 -0
  689. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +2 -0
  690. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs.map +1 -0
  691. package/dist/components/pagination-dots/PaginationDots.module.scss.js +14 -0
  692. package/dist/components/pagination-dots/PaginationDots.module.scss.js.map +1 -0
  693. package/dist/components/pagination-dots/index.cjs +2 -0
  694. package/dist/components/pagination-dots/index.cjs.map +1 -0
  695. package/dist/components/pagination-dots/index.d.ts.map +1 -0
  696. package/dist/components/pagination-dots/index.js +5 -0
  697. package/dist/components/pagination-dots/index.js.map +1 -0
  698. package/dist/components/permalink-preview/PermalinkPreview.cjs +2 -0
  699. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -0
  700. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -0
  701. package/dist/components/permalink-preview/PermalinkPreview.js +57 -0
  702. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -0
  703. package/dist/components/permalink-preview/PermalinkPreview.module.css +1 -0
  704. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +2 -0
  705. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs.map +1 -0
  706. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +15 -0
  707. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js.map +1 -0
  708. package/dist/components/permalink-preview/index.cjs +2 -0
  709. package/dist/components/permalink-preview/index.cjs.map +1 -0
  710. package/dist/components/permalink-preview/index.d.ts.map +1 -0
  711. package/dist/components/permalink-preview/index.js +5 -0
  712. package/dist/components/permalink-preview/index.js.map +1 -0
  713. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +2 -0
  714. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -0
  715. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -0
  716. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +25 -0
  717. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -0
  718. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.css +1 -0
  719. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs +2 -0
  720. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs.map +1 -0
  721. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js +11 -0
  722. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js.map +1 -0
  723. package/dist/components/pinned-saved-indicators/index.cjs +2 -0
  724. package/dist/components/pinned-saved-indicators/index.cjs.map +1 -0
  725. package/dist/components/pinned-saved-indicators/index.d.ts.map +1 -0
  726. package/dist/components/pinned-saved-indicators/index.js +5 -0
  727. package/dist/components/pinned-saved-indicators/index.js.map +1 -0
  728. package/dist/components/plus-menu/PlusMenu.cjs +2 -0
  729. package/dist/components/plus-menu/PlusMenu.cjs.map +1 -0
  730. package/dist/components/plus-menu/PlusMenu.d.ts.map +1 -0
  731. package/dist/components/plus-menu/PlusMenu.js +69 -0
  732. package/dist/components/plus-menu/PlusMenu.js.map +1 -0
  733. package/dist/components/plus-menu/index.cjs +2 -0
  734. package/dist/components/plus-menu/index.cjs.map +1 -0
  735. package/dist/components/plus-menu/index.d.ts.map +1 -0
  736. package/dist/components/plus-menu/index.js +5 -0
  737. package/dist/components/plus-menu/index.js.map +1 -0
  738. package/dist/components/popover-menu/PopoverMenu.cjs +2 -0
  739. package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -0
  740. package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -0
  741. package/dist/components/popover-menu/PopoverMenu.js +96 -0
  742. package/dist/components/popover-menu/PopoverMenu.js.map +1 -0
  743. package/dist/components/popover-menu/PopoverMenu.module.css +1 -0
  744. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +2 -0
  745. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs.map +1 -0
  746. package/dist/components/popover-menu/PopoverMenu.module.scss.js +14 -0
  747. package/dist/components/popover-menu/PopoverMenu.module.scss.js.map +1 -0
  748. package/dist/components/popover-menu/index.cjs +2 -0
  749. package/dist/components/popover-menu/index.cjs.map +1 -0
  750. package/dist/components/popover-menu/index.d.ts.map +1 -0
  751. package/dist/components/popover-menu/index.js +10 -0
  752. package/dist/components/popover-menu/index.js.map +1 -0
  753. package/dist/components/popover-notice/PopoverNotice.cjs +2 -0
  754. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -0
  755. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -0
  756. package/dist/components/popover-notice/PopoverNotice.js +76 -0
  757. package/dist/components/popover-notice/PopoverNotice.js.map +1 -0
  758. package/dist/components/popover-notice/PopoverNotice.module.css +1 -0
  759. package/dist/components/popover-notice/PopoverNotice.module.scss.cjs +2 -0
  760. package/dist/components/popover-notice/PopoverNotice.module.scss.cjs.map +1 -0
  761. package/dist/components/popover-notice/PopoverNotice.module.scss.js +19 -0
  762. package/dist/components/popover-notice/PopoverNotice.module.scss.js.map +1 -0
  763. package/dist/components/popover-notice/index.cjs +2 -0
  764. package/dist/components/popover-notice/index.cjs.map +1 -0
  765. package/dist/components/popover-notice/index.d.ts.map +1 -0
  766. package/dist/components/popover-notice/index.js +5 -0
  767. package/dist/components/popover-notice/index.js.map +1 -0
  768. package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs +2 -0
  769. package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs.map +1 -0
  770. package/dist/components/product-switcher-menu/ProductSwitcherMenu.d.ts.map +1 -0
  771. package/dist/components/product-switcher-menu/ProductSwitcherMenu.js +110 -0
  772. package/dist/components/product-switcher-menu/ProductSwitcherMenu.js.map +1 -0
  773. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.css +1 -0
  774. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs +2 -0
  775. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs.map +1 -0
  776. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js +8 -0
  777. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js.map +1 -0
  778. package/dist/components/product-switcher-menu/index.cjs +2 -0
  779. package/dist/components/product-switcher-menu/index.cjs.map +1 -0
  780. package/dist/components/product-switcher-menu/index.d.ts.map +1 -0
  781. package/dist/components/product-switcher-menu/index.js +6 -0
  782. package/dist/components/product-switcher-menu/index.js.map +1 -0
  783. package/dist/components/profile-popover/ProfilePopover.cjs +2 -0
  784. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -0
  785. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -0
  786. package/dist/components/profile-popover/ProfilePopover.js +243 -0
  787. package/dist/components/profile-popover/ProfilePopover.js.map +1 -0
  788. package/dist/components/profile-popover/ProfilePopover.module.css +1 -0
  789. package/dist/components/profile-popover/ProfilePopover.module.scss.cjs +2 -0
  790. package/dist/components/profile-popover/ProfilePopover.module.scss.cjs.map +1 -0
  791. package/dist/components/profile-popover/ProfilePopover.module.scss.js +39 -0
  792. package/dist/components/profile-popover/ProfilePopover.module.scss.js.map +1 -0
  793. package/dist/components/profile-popover/index.cjs +2 -0
  794. package/dist/components/profile-popover/index.cjs.map +1 -0
  795. package/dist/components/profile-popover/index.d.ts.map +1 -0
  796. package/dist/components/profile-popover/index.js +5 -0
  797. package/dist/components/profile-popover/index.js.map +1 -0
  798. package/dist/components/progress-bar/ProgressBar.cjs +2 -0
  799. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -0
  800. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -0
  801. package/dist/components/progress-bar/ProgressBar.js +36 -0
  802. package/dist/components/progress-bar/ProgressBar.js.map +1 -0
  803. package/dist/components/progress-bar/ProgressBar.module.css +1 -0
  804. package/dist/components/progress-bar/ProgressBar.module.scss.cjs +2 -0
  805. package/dist/components/progress-bar/ProgressBar.module.scss.cjs.map +1 -0
  806. package/dist/components/progress-bar/ProgressBar.module.scss.js +14 -0
  807. package/dist/components/progress-bar/ProgressBar.module.scss.js.map +1 -0
  808. package/dist/components/progress-bar/index.cjs +2 -0
  809. package/dist/components/progress-bar/index.cjs.map +1 -0
  810. package/dist/components/progress-bar/index.d.ts.map +1 -0
  811. package/dist/components/progress-bar/index.js +5 -0
  812. package/dist/components/progress-bar/index.js.map +1 -0
  813. package/dist/components/radio/Radio.cjs +2 -0
  814. package/dist/components/radio/Radio.cjs.map +1 -0
  815. package/dist/components/radio/Radio.d.ts.map +1 -0
  816. package/dist/components/radio/Radio.js +45 -0
  817. package/dist/components/radio/Radio.js.map +1 -0
  818. package/dist/components/radio/Radio.module.css +1 -0
  819. package/dist/components/radio/Radio.module.scss.cjs +2 -0
  820. package/dist/components/radio/Radio.module.scss.cjs.map +1 -0
  821. package/dist/components/radio/Radio.module.scss.js +20 -0
  822. package/dist/components/radio/Radio.module.scss.js.map +1 -0
  823. package/dist/components/radio/index.cjs +2 -0
  824. package/dist/components/radio/index.cjs.map +1 -0
  825. package/dist/components/radio/index.d.ts.map +1 -0
  826. package/dist/components/radio/index.js +5 -0
  827. package/dist/components/radio/index.js.map +1 -0
  828. package/dist/components/reaction-pill/ReactionPill.cjs +2 -0
  829. package/dist/components/reaction-pill/ReactionPill.cjs.map +1 -0
  830. package/dist/components/reaction-pill/ReactionPill.d.ts.map +1 -0
  831. package/dist/components/reaction-pill/ReactionPill.js +51 -0
  832. package/dist/components/reaction-pill/ReactionPill.js.map +1 -0
  833. package/dist/components/reaction-pill/ReactionPill.module.css +1 -0
  834. package/dist/components/reaction-pill/ReactionPill.module.scss.cjs +2 -0
  835. package/dist/components/reaction-pill/ReactionPill.module.scss.cjs.map +1 -0
  836. package/dist/components/reaction-pill/ReactionPill.module.scss.js +17 -0
  837. package/dist/components/reaction-pill/ReactionPill.module.scss.js.map +1 -0
  838. package/dist/components/reaction-pill/index.cjs +2 -0
  839. package/dist/components/reaction-pill/index.cjs.map +1 -0
  840. package/dist/components/reaction-pill/index.d.ts.map +1 -0
  841. package/dist/components/reaction-pill/index.js +5 -0
  842. package/dist/components/reaction-pill/index.js.map +1 -0
  843. package/dist/components/right-sidebar/RightSidebar.cjs +2 -0
  844. package/dist/components/right-sidebar/RightSidebar.cjs.map +1 -0
  845. package/dist/components/right-sidebar/RightSidebar.d.ts.map +1 -0
  846. package/dist/components/right-sidebar/RightSidebar.js +29 -0
  847. package/dist/components/right-sidebar/RightSidebar.js.map +1 -0
  848. package/dist/components/right-sidebar/RightSidebar.module.css +1 -0
  849. package/dist/components/right-sidebar/RightSidebar.module.scss.cjs +2 -0
  850. package/dist/components/right-sidebar/RightSidebar.module.scss.cjs.map +1 -0
  851. package/dist/components/right-sidebar/RightSidebar.module.scss.js +12 -0
  852. package/dist/components/right-sidebar/RightSidebar.module.scss.js.map +1 -0
  853. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.cjs +2 -0
  854. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.cjs.map +1 -0
  855. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.d.ts.map +1 -0
  856. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.js +89 -0
  857. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.js.map +1 -0
  858. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.module.css +1 -0
  859. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.module.scss.cjs +2 -0
  860. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.module.scss.cjs.map +1 -0
  861. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.module.scss.js +18 -0
  862. package/dist/components/right-sidebar/RightSidebarHeader/RightSidebarHeader.module.scss.js.map +1 -0
  863. package/dist/components/right-sidebar/RightSidebarHeader/index.d.ts.map +1 -0
  864. package/dist/components/right-sidebar/index.cjs +2 -0
  865. package/dist/components/right-sidebar/index.cjs.map +1 -0
  866. package/dist/components/right-sidebar/index.d.ts.map +1 -0
  867. package/dist/components/right-sidebar/index.js +7 -0
  868. package/dist/components/right-sidebar/index.js.map +1 -0
  869. package/dist/components/scrollbar/Scrollbar.cjs +2 -0
  870. package/dist/components/scrollbar/Scrollbar.cjs.map +1 -0
  871. package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -0
  872. package/dist/components/scrollbar/Scrollbar.js +32 -0
  873. package/dist/components/scrollbar/Scrollbar.js.map +1 -0
  874. package/dist/components/scrollbar/Scrollbar.module.css +1 -0
  875. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +2 -0
  876. package/dist/components/scrollbar/Scrollbar.module.scss.cjs.map +1 -0
  877. package/dist/components/scrollbar/Scrollbar.module.scss.js +8 -0
  878. package/dist/components/scrollbar/Scrollbar.module.scss.js.map +1 -0
  879. package/dist/components/scrollbar/index.cjs +2 -0
  880. package/dist/components/scrollbar/index.cjs.map +1 -0
  881. package/dist/components/scrollbar/index.d.ts.map +1 -0
  882. package/dist/components/scrollbar/index.js +5 -0
  883. package/dist/components/scrollbar/index.js.map +1 -0
  884. package/dist/components/search-input/SearchInput.cjs +2 -0
  885. package/dist/components/search-input/SearchInput.cjs.map +1 -0
  886. package/dist/components/search-input/SearchInput.d.ts.map +1 -0
  887. package/dist/components/search-input/SearchInput.js +109 -0
  888. package/dist/components/search-input/SearchInput.js.map +1 -0
  889. package/dist/components/search-input/SearchInput.module.css +1 -0
  890. package/dist/components/search-input/SearchInput.module.scss.cjs +2 -0
  891. package/dist/components/search-input/SearchInput.module.scss.cjs.map +1 -0
  892. package/dist/components/search-input/SearchInput.module.scss.js +27 -0
  893. package/dist/components/search-input/SearchInput.module.scss.js.map +1 -0
  894. package/dist/components/search-input/index.cjs +2 -0
  895. package/dist/components/search-input/index.cjs.map +1 -0
  896. package/dist/components/search-input/index.d.ts.map +1 -0
  897. package/dist/components/search-input/index.js +5 -0
  898. package/dist/components/search-input/index.js.map +1 -0
  899. package/dist/components/search-tip-banner/SearchTipBanner.cjs +2 -0
  900. package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -0
  901. package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -0
  902. package/dist/components/search-tip-banner/SearchTipBanner.js +47 -0
  903. package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -0
  904. package/dist/components/search-tip-banner/SearchTipBanner.module.css +1 -0
  905. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs +2 -0
  906. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs.map +1 -0
  907. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js +9 -0
  908. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js.map +1 -0
  909. package/dist/components/search-tip-banner/index.cjs +2 -0
  910. package/dist/components/search-tip-banner/index.cjs.map +1 -0
  911. package/dist/components/search-tip-banner/index.d.ts.map +1 -0
  912. package/dist/components/search-tip-banner/index.js +5 -0
  913. package/dist/components/search-tip-banner/index.js.map +1 -0
  914. package/dist/components/section-notice/SectionNotice.cjs +2 -0
  915. package/dist/components/section-notice/SectionNotice.cjs.map +1 -0
  916. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -0
  917. package/dist/components/section-notice/SectionNotice.js +74 -0
  918. package/dist/components/section-notice/SectionNotice.js.map +1 -0
  919. package/dist/components/section-notice/SectionNotice.module.css +1 -0
  920. package/dist/components/section-notice/SectionNotice.module.scss.cjs +2 -0
  921. package/dist/components/section-notice/SectionNotice.module.scss.cjs.map +1 -0
  922. package/dist/components/section-notice/SectionNotice.module.scss.js +18 -0
  923. package/dist/components/section-notice/SectionNotice.module.scss.js.map +1 -0
  924. package/dist/components/section-notice/index.cjs +2 -0
  925. package/dist/components/section-notice/index.cjs.map +1 -0
  926. package/dist/components/section-notice/index.d.ts.map +1 -0
  927. package/dist/components/section-notice/index.js +5 -0
  928. package/dist/components/section-notice/index.js.map +1 -0
  929. package/dist/components/select/Select.cjs +2 -0
  930. package/dist/components/select/Select.cjs.map +1 -0
  931. package/dist/components/select/Select.d.ts.map +1 -0
  932. package/dist/components/select/Select.js +277 -0
  933. package/dist/components/select/Select.js.map +1 -0
  934. package/dist/components/select/Select.module.css +1 -0
  935. package/dist/components/select/Select.module.scss.cjs +2 -0
  936. package/dist/components/select/Select.module.scss.cjs.map +1 -0
  937. package/dist/components/select/Select.module.scss.js +40 -0
  938. package/dist/components/select/Select.module.scss.js.map +1 -0
  939. package/dist/components/select/index.cjs +2 -0
  940. package/dist/components/select/index.cjs.map +1 -0
  941. package/dist/components/select/index.d.ts.map +1 -0
  942. package/dist/components/select/index.js +5 -0
  943. package/dist/components/select/index.js.map +1 -0
  944. package/dist/components/shortcut-tag/ShortcutTag.cjs +2 -0
  945. package/dist/components/shortcut-tag/ShortcutTag.cjs.map +1 -0
  946. package/dist/components/shortcut-tag/ShortcutTag.d.ts.map +1 -0
  947. package/dist/components/shortcut-tag/ShortcutTag.js +46 -0
  948. package/dist/components/shortcut-tag/ShortcutTag.js.map +1 -0
  949. package/dist/components/shortcut-tag/ShortcutTag.module.css +1 -0
  950. package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs +2 -0
  951. package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs.map +1 -0
  952. package/dist/components/shortcut-tag/ShortcutTag.module.scss.js +13 -0
  953. package/dist/components/shortcut-tag/ShortcutTag.module.scss.js.map +1 -0
  954. package/dist/components/shortcut-tag/index.cjs +2 -0
  955. package/dist/components/shortcut-tag/index.cjs.map +1 -0
  956. package/dist/components/shortcut-tag/index.d.ts.map +1 -0
  957. package/dist/components/shortcut-tag/index.js +6 -0
  958. package/dist/components/shortcut-tag/index.js.map +1 -0
  959. package/dist/components/spinner/Spinner.cjs +2 -0
  960. package/dist/components/spinner/Spinner.cjs.map +1 -0
  961. package/dist/components/spinner/Spinner.d.ts.map +1 -0
  962. package/dist/components/spinner/Spinner.js +35 -0
  963. package/dist/components/spinner/Spinner.js.map +1 -0
  964. package/dist/components/spinner/Spinner.module.css +1 -0
  965. package/dist/components/spinner/Spinner.module.scss.cjs +2 -0
  966. package/dist/components/spinner/Spinner.module.scss.cjs.map +1 -0
  967. package/dist/components/spinner/Spinner.module.scss.js +9 -0
  968. package/dist/components/spinner/Spinner.module.scss.js.map +1 -0
  969. package/dist/components/spinner/index.cjs +2 -0
  970. package/dist/components/spinner/index.cjs.map +1 -0
  971. package/dist/components/spinner/index.d.ts.map +1 -0
  972. package/dist/components/spinner/index.js +5 -0
  973. package/dist/components/spinner/index.js.map +1 -0
  974. package/dist/components/status-badge/StatusBadge.cjs +2 -0
  975. package/dist/components/status-badge/StatusBadge.cjs.map +1 -0
  976. package/dist/components/status-badge/StatusBadge.d.ts.map +1 -0
  977. package/dist/components/status-badge/StatusBadge.js +31 -0
  978. package/dist/components/status-badge/StatusBadge.js.map +1 -0
  979. package/dist/components/status-badge/StatusBadge.module.css +1 -0
  980. package/dist/components/status-badge/StatusBadge.module.scss.cjs +2 -0
  981. package/dist/components/status-badge/StatusBadge.module.scss.cjs.map +1 -0
  982. package/dist/components/status-badge/StatusBadge.module.scss.js +17 -0
  983. package/dist/components/status-badge/StatusBadge.module.scss.js.map +1 -0
  984. package/dist/components/status-badge/index.cjs +2 -0
  985. package/dist/components/status-badge/index.cjs.map +1 -0
  986. package/dist/components/status-badge/index.d.ts.map +1 -0
  987. package/dist/components/status-badge/index.js +5 -0
  988. package/dist/components/status-badge/index.js.map +1 -0
  989. package/dist/components/switch/Switch.cjs +2 -0
  990. package/dist/components/switch/Switch.cjs.map +1 -0
  991. package/dist/components/switch/Switch.d.ts.map +1 -0
  992. package/dist/components/switch/Switch.js +58 -0
  993. package/dist/components/switch/Switch.js.map +1 -0
  994. package/dist/components/switch/Switch.module.css +1 -0
  995. package/dist/components/switch/Switch.module.scss.cjs +2 -0
  996. package/dist/components/switch/Switch.module.scss.cjs.map +1 -0
  997. package/dist/components/switch/Switch.module.scss.js +23 -0
  998. package/dist/components/switch/Switch.module.scss.js.map +1 -0
  999. package/dist/components/switch/index.cjs +2 -0
  1000. package/dist/components/switch/index.cjs.map +1 -0
  1001. package/dist/components/switch/index.d.ts.map +1 -0
  1002. package/dist/components/switch/index.js +5 -0
  1003. package/dist/components/switch/index.js.map +1 -0
  1004. package/dist/components/tabs/Tabs.cjs +2 -0
  1005. package/dist/components/tabs/Tabs.cjs.map +1 -0
  1006. package/dist/components/tabs/Tabs.d.ts.map +1 -0
  1007. package/dist/components/tabs/Tabs.js +55 -0
  1008. package/dist/components/tabs/Tabs.js.map +1 -0
  1009. package/dist/components/tabs/Tabs.module.css +1 -0
  1010. package/dist/components/tabs/Tabs.module.scss.cjs +2 -0
  1011. package/dist/components/tabs/Tabs.module.scss.cjs.map +1 -0
  1012. package/dist/components/tabs/Tabs.module.scss.js +18 -0
  1013. package/dist/components/tabs/Tabs.module.scss.js.map +1 -0
  1014. package/dist/components/tabs/index.cjs +2 -0
  1015. package/dist/components/tabs/index.cjs.map +1 -0
  1016. package/dist/components/tabs/index.d.ts.map +1 -0
  1017. package/dist/components/tabs/index.js +5 -0
  1018. package/dist/components/tabs/index.js.map +1 -0
  1019. package/dist/components/tag/Tag.cjs +2 -0
  1020. package/dist/components/tag/Tag.cjs.map +1 -0
  1021. package/dist/components/tag/Tag.d.ts.map +1 -0
  1022. package/dist/components/tag/Tag.js +34 -0
  1023. package/dist/components/tag/Tag.js.map +1 -0
  1024. package/dist/components/tag/Tag.module.css +1 -0
  1025. package/dist/components/tag/Tag.module.scss.cjs +2 -0
  1026. package/dist/components/tag/Tag.module.scss.cjs.map +1 -0
  1027. package/dist/components/tag/Tag.module.scss.js +21 -0
  1028. package/dist/components/tag/Tag.module.scss.js.map +1 -0
  1029. package/dist/components/tag/index.cjs +2 -0
  1030. package/dist/components/tag/index.cjs.map +1 -0
  1031. package/dist/components/tag/index.d.ts.map +1 -0
  1032. package/dist/components/tag/index.js +5 -0
  1033. package/dist/components/tag/index.js.map +1 -0
  1034. package/dist/components/team-avatar/TeamAvatar.cjs +2 -0
  1035. package/dist/components/team-avatar/TeamAvatar.cjs.map +1 -0
  1036. package/dist/components/team-avatar/TeamAvatar.d.ts.map +1 -0
  1037. package/dist/components/team-avatar/TeamAvatar.js +41 -0
  1038. package/dist/components/team-avatar/TeamAvatar.js.map +1 -0
  1039. package/dist/components/team-avatar/TeamAvatar.module.css +1 -0
  1040. package/dist/components/team-avatar/TeamAvatar.module.scss.cjs +2 -0
  1041. package/dist/components/team-avatar/TeamAvatar.module.scss.cjs.map +1 -0
  1042. package/dist/components/team-avatar/TeamAvatar.module.scss.js +22 -0
  1043. package/dist/components/team-avatar/TeamAvatar.module.scss.js.map +1 -0
  1044. package/dist/components/team-avatar/index.cjs +2 -0
  1045. package/dist/components/team-avatar/index.cjs.map +1 -0
  1046. package/dist/components/team-avatar/index.d.ts.map +1 -0
  1047. package/dist/components/team-avatar/index.js +5 -0
  1048. package/dist/components/team-avatar/index.js.map +1 -0
  1049. package/dist/components/team-menu/TeamMenu.cjs +2 -0
  1050. package/dist/components/team-menu/TeamMenu.cjs.map +1 -0
  1051. package/dist/components/team-menu/TeamMenu.d.ts.map +1 -0
  1052. package/dist/components/team-menu/TeamMenu.js +107 -0
  1053. package/dist/components/team-menu/TeamMenu.js.map +1 -0
  1054. package/dist/components/team-menu/TeamMenu.module.css +1 -0
  1055. package/dist/components/team-menu/TeamMenu.module.scss.cjs +2 -0
  1056. package/dist/components/team-menu/TeamMenu.module.scss.cjs.map +1 -0
  1057. package/dist/components/team-menu/TeamMenu.module.scss.js +7 -0
  1058. package/dist/components/team-menu/TeamMenu.module.scss.js.map +1 -0
  1059. package/dist/components/team-menu/index.cjs +2 -0
  1060. package/dist/components/team-menu/index.cjs.map +1 -0
  1061. package/dist/components/team-menu/index.d.ts.map +1 -0
  1062. package/dist/components/team-menu/index.js +5 -0
  1063. package/dist/components/team-menu/index.js.map +1 -0
  1064. package/dist/components/team-sidebar/TeamSidebar.cjs +2 -0
  1065. package/dist/components/team-sidebar/TeamSidebar.cjs.map +1 -0
  1066. package/dist/components/team-sidebar/TeamSidebar.d.ts.map +1 -0
  1067. package/dist/components/team-sidebar/TeamSidebar.js +85 -0
  1068. package/dist/components/team-sidebar/TeamSidebar.js.map +1 -0
  1069. package/dist/components/team-sidebar/TeamSidebar.module.css +1 -0
  1070. package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs +2 -0
  1071. package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs.map +1 -0
  1072. package/dist/components/team-sidebar/TeamSidebar.module.scss.js +13 -0
  1073. package/dist/components/team-sidebar/TeamSidebar.module.scss.js.map +1 -0
  1074. package/dist/components/team-sidebar/index.cjs +2 -0
  1075. package/dist/components/team-sidebar/index.cjs.map +1 -0
  1076. package/dist/components/team-sidebar/index.d.ts.map +1 -0
  1077. package/dist/components/team-sidebar/index.js +5 -0
  1078. package/dist/components/team-sidebar/index.js.map +1 -0
  1079. package/dist/components/text-area/TextArea.cjs +2 -0
  1080. package/dist/components/text-area/TextArea.cjs.map +1 -0
  1081. package/dist/components/text-area/TextArea.d.ts.map +1 -0
  1082. package/dist/components/text-area/TextArea.js +93 -0
  1083. package/dist/components/text-area/TextArea.js.map +1 -0
  1084. package/dist/components/text-area/TextArea.module.css +1 -0
  1085. package/dist/components/text-area/TextArea.module.scss.cjs +2 -0
  1086. package/dist/components/text-area/TextArea.module.scss.cjs.map +1 -0
  1087. package/dist/components/text-area/TextArea.module.scss.js +21 -0
  1088. package/dist/components/text-area/TextArea.module.scss.js.map +1 -0
  1089. package/dist/components/text-area/index.cjs +2 -0
  1090. package/dist/components/text-area/index.cjs.map +1 -0
  1091. package/dist/components/text-area/index.d.ts.map +1 -0
  1092. package/dist/components/text-area/index.js +5 -0
  1093. package/dist/components/text-area/index.js.map +1 -0
  1094. package/dist/components/text-input/TextInput.cjs +2 -0
  1095. package/dist/components/text-input/TextInput.cjs.map +1 -0
  1096. package/dist/components/text-input/TextInput.d.ts.map +1 -0
  1097. package/dist/components/text-input/TextInput.js +108 -0
  1098. package/dist/components/text-input/TextInput.js.map +1 -0
  1099. package/dist/components/text-input/TextInput.module.css +1 -0
  1100. package/dist/components/text-input/TextInput.module.scss.cjs +2 -0
  1101. package/dist/components/text-input/TextInput.module.scss.cjs.map +1 -0
  1102. package/dist/components/text-input/TextInput.module.scss.js +28 -0
  1103. package/dist/components/text-input/TextInput.module.scss.js.map +1 -0
  1104. package/dist/components/text-input/index.cjs +2 -0
  1105. package/dist/components/text-input/index.cjs.map +1 -0
  1106. package/dist/components/text-input/index.d.ts.map +1 -0
  1107. package/dist/components/text-input/index.js +5 -0
  1108. package/dist/components/text-input/index.js.map +1 -0
  1109. package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs +2 -0
  1110. package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs.map +1 -0
  1111. package/dist/components/thread-actions-menu/ThreadActionsMenu.d.ts.map +1 -0
  1112. package/dist/components/thread-actions-menu/ThreadActionsMenu.js +77 -0
  1113. package/dist/components/thread-actions-menu/ThreadActionsMenu.js.map +1 -0
  1114. package/dist/components/thread-actions-menu/index.cjs +2 -0
  1115. package/dist/components/thread-actions-menu/index.cjs.map +1 -0
  1116. package/dist/components/thread-actions-menu/index.d.ts.map +1 -0
  1117. package/dist/components/thread-actions-menu/index.js +5 -0
  1118. package/dist/components/thread-actions-menu/index.js.map +1 -0
  1119. package/dist/components/thread-footer/ThreadFooter.cjs +2 -0
  1120. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -0
  1121. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -0
  1122. package/dist/components/thread-footer/ThreadFooter.js +103 -0
  1123. package/dist/components/thread-footer/ThreadFooter.js.map +1 -0
  1124. package/dist/components/thread-footer/ThreadFooter.module.css +1 -0
  1125. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +2 -0
  1126. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs.map +1 -0
  1127. package/dist/components/thread-footer/ThreadFooter.module.scss.js +23 -0
  1128. package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -0
  1129. package/dist/components/thread-footer/index.cjs +2 -0
  1130. package/dist/components/thread-footer/index.cjs.map +1 -0
  1131. package/dist/components/thread-footer/index.d.ts.map +1 -0
  1132. package/dist/components/thread-footer/index.js +5 -0
  1133. package/dist/components/thread-footer/index.js.map +1 -0
  1134. package/dist/components/thread-list-item/ThreadListItem.cjs +2 -0
  1135. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -0
  1136. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -0
  1137. package/dist/components/thread-list-item/ThreadListItem.js +123 -0
  1138. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -0
  1139. package/dist/components/thread-list-item/ThreadListItem.module.css +1 -0
  1140. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +2 -0
  1141. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs.map +1 -0
  1142. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +29 -0
  1143. package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -0
  1144. package/dist/components/thread-list-item/index.cjs +2 -0
  1145. package/dist/components/thread-list-item/index.cjs.map +1 -0
  1146. package/dist/components/thread-list-item/index.d.ts.map +1 -0
  1147. package/dist/components/thread-list-item/index.js +5 -0
  1148. package/dist/components/thread-list-item/index.js.map +1 -0
  1149. package/dist/components/toast/Toast.cjs +2 -0
  1150. package/dist/components/toast/Toast.cjs.map +1 -0
  1151. package/dist/components/toast/Toast.d.ts.map +1 -0
  1152. package/dist/components/toast/Toast.js +58 -0
  1153. package/dist/components/toast/Toast.js.map +1 -0
  1154. package/dist/components/toast/Toast.module.css +1 -0
  1155. package/dist/components/toast/Toast.module.scss.cjs +2 -0
  1156. package/dist/components/toast/Toast.module.scss.cjs.map +1 -0
  1157. package/dist/components/toast/Toast.module.scss.js +21 -0
  1158. package/dist/components/toast/Toast.module.scss.js.map +1 -0
  1159. package/dist/components/toast/index.cjs +2 -0
  1160. package/dist/components/toast/index.cjs.map +1 -0
  1161. package/dist/components/toast/index.d.ts.map +1 -0
  1162. package/dist/components/toast/index.js +5 -0
  1163. package/dist/components/toast/index.js.map +1 -0
  1164. package/dist/components/tooltip/Tooltip.cjs +2 -0
  1165. package/dist/components/tooltip/Tooltip.cjs.map +1 -0
  1166. package/dist/components/tooltip/Tooltip.d.ts.map +1 -0
  1167. package/dist/components/tooltip/Tooltip.js +35 -0
  1168. package/dist/components/tooltip/Tooltip.js.map +1 -0
  1169. package/dist/components/tooltip/Tooltip.module.css +1 -0
  1170. package/dist/components/tooltip/Tooltip.module.scss.cjs +2 -0
  1171. package/dist/components/tooltip/Tooltip.module.scss.cjs.map +1 -0
  1172. package/dist/components/tooltip/Tooltip.module.scss.js +26 -0
  1173. package/dist/components/tooltip/Tooltip.module.scss.js.map +1 -0
  1174. package/dist/components/tooltip/index.cjs +2 -0
  1175. package/dist/components/tooltip/index.cjs.map +1 -0
  1176. package/dist/components/tooltip/index.d.ts.map +1 -0
  1177. package/dist/components/tooltip/index.js +5 -0
  1178. package/dist/components/tooltip/index.js.map +1 -0
  1179. package/dist/components/tour-point/TourPoint.cjs +2 -0
  1180. package/dist/components/tour-point/TourPoint.cjs.map +1 -0
  1181. package/dist/components/tour-point/TourPoint.d.ts.map +1 -0
  1182. package/dist/components/tour-point/TourPoint.js +91 -0
  1183. package/dist/components/tour-point/TourPoint.js.map +1 -0
  1184. package/dist/components/tour-point/TourPoint.module.css +1 -0
  1185. package/dist/components/tour-point/TourPoint.module.scss.cjs +2 -0
  1186. package/dist/components/tour-point/TourPoint.module.scss.cjs.map +1 -0
  1187. package/dist/components/tour-point/TourPoint.module.scss.js +34 -0
  1188. package/dist/components/tour-point/TourPoint.module.scss.js.map +1 -0
  1189. package/dist/components/tour-point/index.cjs +2 -0
  1190. package/dist/components/tour-point/index.cjs.map +1 -0
  1191. package/dist/components/tour-point/index.d.ts.map +1 -0
  1192. package/dist/components/tour-point/index.js +5 -0
  1193. package/dist/components/tour-point/index.js.map +1 -0
  1194. package/dist/components/unread-badge/UnreadBadge.cjs +2 -0
  1195. package/dist/components/unread-badge/UnreadBadge.cjs.map +1 -0
  1196. package/dist/components/unread-badge/UnreadBadge.d.ts.map +1 -0
  1197. package/dist/components/unread-badge/UnreadBadge.js +16 -0
  1198. package/dist/components/unread-badge/UnreadBadge.js.map +1 -0
  1199. package/dist/components/unread-badge/UnreadBadge.module.css +1 -0
  1200. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +2 -0
  1201. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs.map +1 -0
  1202. package/dist/components/unread-badge/UnreadBadge.module.scss.js +11 -0
  1203. package/dist/components/unread-badge/UnreadBadge.module.scss.js.map +1 -0
  1204. package/dist/components/unread-badge/index.cjs +2 -0
  1205. package/dist/components/unread-badge/index.cjs.map +1 -0
  1206. package/dist/components/unread-badge/index.d.ts.map +1 -0
  1207. package/dist/components/unread-badge/index.js +5 -0
  1208. package/dist/components/unread-badge/index.js.map +1 -0
  1209. package/dist/components/user-avatar/UserAvatar.cjs +2 -0
  1210. package/dist/components/user-avatar/UserAvatar.cjs.map +1 -0
  1211. package/dist/components/user-avatar/UserAvatar.d.ts.map +1 -0
  1212. package/dist/components/user-avatar/UserAvatar.js +80 -0
  1213. package/dist/components/user-avatar/UserAvatar.js.map +1 -0
  1214. package/dist/components/user-avatar/UserAvatar.module.css +1 -0
  1215. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +2 -0
  1216. package/dist/components/user-avatar/UserAvatar.module.scss.cjs.map +1 -0
  1217. package/dist/components/user-avatar/UserAvatar.module.scss.js +32 -0
  1218. package/dist/components/user-avatar/UserAvatar.module.scss.js.map +1 -0
  1219. package/dist/components/user-avatar/index.cjs +2 -0
  1220. package/dist/components/user-avatar/index.cjs.map +1 -0
  1221. package/dist/components/user-avatar/index.d.ts.map +1 -0
  1222. package/dist/components/user-avatar/index.js +5 -0
  1223. package/dist/components/user-avatar/index.js.map +1 -0
  1224. package/dist/components/user-avatar-group/UserAvatarGroup.cjs +2 -0
  1225. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -0
  1226. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -0
  1227. package/dist/components/user-avatar-group/UserAvatarGroup.js +97 -0
  1228. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -0
  1229. package/dist/components/user-avatar-group/UserAvatarGroup.module.css +1 -0
  1230. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +2 -0
  1231. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs.map +1 -0
  1232. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +20 -0
  1233. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js.map +1 -0
  1234. package/dist/components/user-avatar-group/index.cjs +2 -0
  1235. package/dist/components/user-avatar-group/index.cjs.map +1 -0
  1236. package/dist/components/user-avatar-group/index.d.ts.map +1 -0
  1237. package/dist/components/user-avatar-group/index.js +5 -0
  1238. package/dist/components/user-avatar-group/index.js.map +1 -0
  1239. package/dist/hooks/use-anchored-popup-portal.cjs +2 -0
  1240. package/dist/hooks/use-anchored-popup-portal.js +97 -0
  1241. package/dist/hooks/use-controllable.cjs +2 -0
  1242. package/dist/hooks/use-controllable.js +11 -0
  1243. package/dist/hooks/use-exit-animation.cjs +2 -0
  1244. package/dist/hooks/use-exit-animation.js +20 -0
  1245. package/dist/hooks/use-outside-close.cjs +2 -0
  1246. package/dist/hooks/use-outside-close.js +16 -0
  1247. package/dist/hooks/use-popover-transition.cjs +2 -0
  1248. package/dist/hooks/use-popover-transition.js +25 -0
  1249. package/dist/hooks/useAnchoredPopupPortal.cjs.map +1 -0
  1250. package/dist/hooks/useAnchoredPopupPortal.d.ts.map +1 -1
  1251. package/dist/hooks/useAnchoredPopupPortal.js.map +1 -0
  1252. package/dist/hooks/useControllable.cjs.map +1 -0
  1253. package/dist/hooks/useControllable.d.ts.map +1 -1
  1254. package/dist/hooks/useControllable.js.map +1 -0
  1255. package/dist/hooks/useExitAnimation.cjs.map +1 -0
  1256. package/dist/hooks/useExitAnimation.d.ts.map +1 -1
  1257. package/dist/hooks/useExitAnimation.js.map +1 -0
  1258. package/dist/hooks/useOutsideClose.cjs.map +1 -0
  1259. package/dist/hooks/useOutsideClose.d.ts.map +1 -1
  1260. package/dist/hooks/useOutsideClose.js.map +1 -0
  1261. package/dist/hooks/usePopoverTransition.cjs.map +1 -0
  1262. package/dist/hooks/usePopoverTransition.d.ts.map +1 -1
  1263. package/dist/hooks/usePopoverTransition.js.map +1 -0
  1264. package/dist/index.cjs +1 -1
  1265. package/dist/index.cjs.map +1 -1
  1266. package/dist/index.css +156 -1
  1267. package/dist/index.js +199 -7841
  1268. package/dist/index.js.map +1 -1
  1269. package/dist/node_modules/simplebar-react/dist/simplebar.min.css +1 -0
  1270. package/dist/utils/anchoredPopupPlacement.cjs +2 -0
  1271. package/dist/utils/anchoredPopupPlacement.cjs.map +1 -0
  1272. package/dist/utils/anchoredPopupPlacement.js +72 -0
  1273. package/dist/utils/anchoredPopupPlacement.js.map +1 -0
  1274. package/dist/utils/string.cjs +2 -0
  1275. package/dist/utils/string.cjs.map +1 -0
  1276. package/dist/utils/string.js +5 -0
  1277. package/dist/utils/string.js.map +1 -0
  1278. package/package.json +301 -2
  1279. package/dist/components/ActionButton/ActionButton.d.ts.map +0 -1
  1280. package/dist/components/ActionButton/index.d.ts.map +0 -1
  1281. package/dist/components/AdminConsoleHeader/AdminConsoleHeader.d.ts.map +0 -1
  1282. package/dist/components/AdminConsoleHeader/index.d.ts.map +0 -1
  1283. package/dist/components/AdminConsoleSidebar/AdminConsoleSidebar.d.ts.map +0 -1
  1284. package/dist/components/AdminConsoleSidebar/adminConsoleSidebarModel.d.ts.map +0 -1
  1285. package/dist/components/AdminConsoleSidebar/index.d.ts.map +0 -1
  1286. package/dist/components/AdminPanel/AdminPanel.d.ts.map +0 -1
  1287. package/dist/components/AdminPanel/index.d.ts.map +0 -1
  1288. package/dist/components/AdminPanelFooter/AdminPanelFooter.d.ts.map +0 -1
  1289. package/dist/components/AdminPanelFooter/index.d.ts.map +0 -1
  1290. package/dist/components/AdminPanelHeader/AdminPanelHeader.d.ts.map +0 -1
  1291. package/dist/components/AdminPanelHeader/index.d.ts.map +0 -1
  1292. package/dist/components/AppBarItem/AppBarItem.d.ts.map +0 -1
  1293. package/dist/components/AppBarItem/index.d.ts.map +0 -1
  1294. package/dist/components/AttachmentCard/AttachmentCard.d.ts.map +0 -1
  1295. package/dist/components/AttachmentCard/index.d.ts.map +0 -1
  1296. package/dist/components/Button/Button.d.ts.map +0 -1
  1297. package/dist/components/Button/index.d.ts +0 -3
  1298. package/dist/components/Button/index.d.ts.map +0 -1
  1299. package/dist/components/ChannelCategoryMenu/ChannelCategoryMenu.d.ts.map +0 -1
  1300. package/dist/components/ChannelCategoryMenu/index.d.ts.map +0 -1
  1301. package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +0 -1
  1302. package/dist/components/ChannelHeader/index.d.ts.map +0 -1
  1303. package/dist/components/ChannelHeaderMenu/ChannelHeaderMenu.d.ts.map +0 -1
  1304. package/dist/components/ChannelHeaderMenu/index.d.ts.map +0 -1
  1305. package/dist/components/ChannelInfoMsgHeader/ChannelInfoMsgHeader.d.ts.map +0 -1
  1306. package/dist/components/ChannelInfoMsgHeader/index.d.ts.map +0 -1
  1307. package/dist/components/ChannelMenu/ChannelMenu.d.ts.map +0 -1
  1308. package/dist/components/ChannelMenu/index.d.ts.map +0 -1
  1309. package/dist/components/ChannelSidebarItem/ChannelSidebarItem.d.ts.map +0 -1
  1310. package/dist/components/ChannelSidebarItem/index.d.ts.map +0 -1
  1311. package/dist/components/ChannelsSidebar/ChannelsSidebar.d.ts.map +0 -1
  1312. package/dist/components/ChannelsSidebar/channelsSidebarModel.d.ts.map +0 -1
  1313. package/dist/components/ChannelsSidebar/index.d.ts +0 -5
  1314. package/dist/components/ChannelsSidebar/index.d.ts.map +0 -1
  1315. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  1316. package/dist/components/Checkbox/index.d.ts.map +0 -1
  1317. package/dist/components/Chip/Chip.d.ts.map +0 -1
  1318. package/dist/components/Chip/index.d.ts.map +0 -1
  1319. package/dist/components/Combobox/Combobox.d.ts.map +0 -1
  1320. package/dist/components/Combobox/index.d.ts.map +0 -1
  1321. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +0 -1
  1322. package/dist/components/DateRangePicker/index.d.ts.map +0 -1
  1323. package/dist/components/Divider/Divider.d.ts.map +0 -1
  1324. package/dist/components/Divider/index.d.ts.map +0 -1
  1325. package/dist/components/Dropdown/Dropdown.d.ts.map +0 -1
  1326. package/dist/components/Dropdown/index.d.ts.map +0 -1
  1327. package/dist/components/Emoji/Emoji.d.ts.map +0 -1
  1328. package/dist/components/Emoji/index.d.ts.map +0 -1
  1329. package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
  1330. package/dist/components/EmptyState/index.d.ts.map +0 -1
  1331. package/dist/components/ErrorMessage/ErrorMessage.d.ts.map +0 -1
  1332. package/dist/components/ErrorMessage/index.d.ts.map +0 -1
  1333. package/dist/components/FeatureDiscoveryPanel/FeatureDiscoveryPanel.d.ts.map +0 -1
  1334. package/dist/components/FeatureDiscoveryPanel/index.d.ts.map +0 -1
  1335. package/dist/components/GlobalBanner/GlobalBanner.d.ts.map +0 -1
  1336. package/dist/components/GlobalBanner/index.d.ts.map +0 -1
  1337. package/dist/components/GlobalHeader/GlobalHeader.d.ts.map +0 -1
  1338. package/dist/components/GlobalHeader/index.d.ts.map +0 -1
  1339. package/dist/components/HelpMenu/HelpMenu.d.ts.map +0 -1
  1340. package/dist/components/HelpMenu/index.d.ts.map +0 -1
  1341. package/dist/components/Icon/Icon.d.ts.map +0 -1
  1342. package/dist/components/Icon/index.d.ts.map +0 -1
  1343. package/dist/components/IconButton/IconButton.d.ts.map +0 -1
  1344. package/dist/components/IconButton/index.d.ts.map +0 -1
  1345. package/dist/components/Illustration/Illustration.d.ts.map +0 -1
  1346. package/dist/components/Illustration/index.d.ts.map +0 -1
  1347. package/dist/components/ImagePreview/ImagePreview.d.ts.map +0 -1
  1348. package/dist/components/ImagePreview/index.d.ts.map +0 -1
  1349. package/dist/components/LinkPreview/LinkPreview.d.ts.map +0 -1
  1350. package/dist/components/LinkPreview/index.d.ts.map +0 -1
  1351. package/dist/components/MentionBadge/MentionBadge.d.ts.map +0 -1
  1352. package/dist/components/MentionBadge/index.d.ts.map +0 -1
  1353. package/dist/components/MenuItem/MenuItem.d.ts.map +0 -1
  1354. package/dist/components/MenuItem/index.d.ts.map +0 -1
  1355. package/dist/components/Message/Message.d.ts.map +0 -1
  1356. package/dist/components/Message/index.d.ts +0 -3
  1357. package/dist/components/Message/index.d.ts.map +0 -1
  1358. package/dist/components/MessageActions/MessageActions.d.ts.map +0 -1
  1359. package/dist/components/MessageActions/index.d.ts.map +0 -1
  1360. package/dist/components/MessageHeader/MessageHeader.d.ts.map +0 -1
  1361. package/dist/components/MessageHeader/index.d.ts.map +0 -1
  1362. package/dist/components/MessageInput/MessageInput.d.ts.map +0 -1
  1363. package/dist/components/MessageInput/index.d.ts.map +0 -1
  1364. package/dist/components/MessageMoreOptionsMenu/MessageMoreOptionsMenu.d.ts.map +0 -1
  1365. package/dist/components/MessageMoreOptionsMenu/index.d.ts.map +0 -1
  1366. package/dist/components/MessageReactions/MessageReactions.d.ts.map +0 -1
  1367. package/dist/components/MessageReactions/index.d.ts.map +0 -1
  1368. package/dist/components/MessageSeparator/MessageSeparator.d.ts.map +0 -1
  1369. package/dist/components/MessageSeparator/index.d.ts.map +0 -1
  1370. package/dist/components/Modal/Modal.d.ts.map +0 -1
  1371. package/dist/components/Modal/index.d.ts.map +0 -1
  1372. package/dist/components/MoreUnreadsBanner/MoreUnreadsBanner.d.ts.map +0 -1
  1373. package/dist/components/MoreUnreadsBanner/index.d.ts.map +0 -1
  1374. package/dist/components/NewMessageBanner/NewMessageBanner.d.ts.map +0 -1
  1375. package/dist/components/NewMessageBanner/index.d.ts.map +0 -1
  1376. package/dist/components/PaginationDots/PaginationDots.d.ts.map +0 -1
  1377. package/dist/components/PaginationDots/index.d.ts.map +0 -1
  1378. package/dist/components/PermalinkPreview/PermalinkPreview.d.ts.map +0 -1
  1379. package/dist/components/PermalinkPreview/index.d.ts.map +0 -1
  1380. package/dist/components/PinnedSavedIndicators/PinnedSavedIndicators.d.ts.map +0 -1
  1381. package/dist/components/PinnedSavedIndicators/index.d.ts.map +0 -1
  1382. package/dist/components/PlusMenu/PlusMenu.d.ts.map +0 -1
  1383. package/dist/components/PlusMenu/index.d.ts.map +0 -1
  1384. package/dist/components/PopoverMenu/PopoverMenu.d.ts.map +0 -1
  1385. package/dist/components/PopoverMenu/index.d.ts.map +0 -1
  1386. package/dist/components/PopoverNotice/PopoverNotice.d.ts.map +0 -1
  1387. package/dist/components/PopoverNotice/index.d.ts.map +0 -1
  1388. package/dist/components/ProductSwitcherMenu/ProductSwitcherMenu.d.ts.map +0 -1
  1389. package/dist/components/ProductSwitcherMenu/index.d.ts.map +0 -1
  1390. package/dist/components/ProfilePopover/ProfilePopover.d.ts.map +0 -1
  1391. package/dist/components/ProfilePopover/index.d.ts.map +0 -1
  1392. package/dist/components/ProgressBar/ProgressBar.d.ts.map +0 -1
  1393. package/dist/components/ProgressBar/index.d.ts.map +0 -1
  1394. package/dist/components/Radio/Radio.d.ts.map +0 -1
  1395. package/dist/components/Radio/index.d.ts.map +0 -1
  1396. package/dist/components/ReactionPill/ReactionPill.d.ts.map +0 -1
  1397. package/dist/components/ReactionPill/index.d.ts.map +0 -1
  1398. package/dist/components/RightSidebar/RightSidebar.d.ts.map +0 -1
  1399. package/dist/components/RightSidebar/RightSidebarHeader/RightSidebarHeader.d.ts.map +0 -1
  1400. package/dist/components/RightSidebar/RightSidebarHeader/index.d.ts.map +0 -1
  1401. package/dist/components/RightSidebar/index.d.ts.map +0 -1
  1402. package/dist/components/Scrollbar/Scrollbar.d.ts.map +0 -1
  1403. package/dist/components/Scrollbar/index.d.ts.map +0 -1
  1404. package/dist/components/SearchInput/SearchInput.d.ts.map +0 -1
  1405. package/dist/components/SearchInput/index.d.ts.map +0 -1
  1406. package/dist/components/SearchTipBanner/SearchTipBanner.d.ts.map +0 -1
  1407. package/dist/components/SearchTipBanner/index.d.ts.map +0 -1
  1408. package/dist/components/SectionNotice/SectionNotice.d.ts.map +0 -1
  1409. package/dist/components/SectionNotice/index.d.ts.map +0 -1
  1410. package/dist/components/Select/Select.d.ts.map +0 -1
  1411. package/dist/components/Select/index.d.ts.map +0 -1
  1412. package/dist/components/ShortcutTag/ShortcutTag.d.ts.map +0 -1
  1413. package/dist/components/ShortcutTag/index.d.ts.map +0 -1
  1414. package/dist/components/Spinner/Spinner.d.ts.map +0 -1
  1415. package/dist/components/Spinner/index.d.ts.map +0 -1
  1416. package/dist/components/StatusBadge/StatusBadge.d.ts.map +0 -1
  1417. package/dist/components/StatusBadge/index.d.ts.map +0 -1
  1418. package/dist/components/Switch/Switch.d.ts.map +0 -1
  1419. package/dist/components/Switch/index.d.ts.map +0 -1
  1420. package/dist/components/Tabs/Tabs.d.ts.map +0 -1
  1421. package/dist/components/Tabs/index.d.ts.map +0 -1
  1422. package/dist/components/Tag/Tag.d.ts.map +0 -1
  1423. package/dist/components/Tag/index.d.ts.map +0 -1
  1424. package/dist/components/TeamAvatar/TeamAvatar.d.ts.map +0 -1
  1425. package/dist/components/TeamAvatar/index.d.ts.map +0 -1
  1426. package/dist/components/TeamMenu/TeamMenu.d.ts.map +0 -1
  1427. package/dist/components/TeamMenu/index.d.ts.map +0 -1
  1428. package/dist/components/TeamSidebar/TeamSidebar.d.ts.map +0 -1
  1429. package/dist/components/TeamSidebar/index.d.ts.map +0 -1
  1430. package/dist/components/TextArea/TextArea.d.ts.map +0 -1
  1431. package/dist/components/TextArea/index.d.ts.map +0 -1
  1432. package/dist/components/TextInput/TextInput.d.ts.map +0 -1
  1433. package/dist/components/TextInput/index.d.ts.map +0 -1
  1434. package/dist/components/ThreadActionsMenu/ThreadActionsMenu.d.ts.map +0 -1
  1435. package/dist/components/ThreadActionsMenu/index.d.ts.map +0 -1
  1436. package/dist/components/ThreadFooter/ThreadFooter.d.ts.map +0 -1
  1437. package/dist/components/ThreadFooter/index.d.ts.map +0 -1
  1438. package/dist/components/ThreadListItem/ThreadListItem.d.ts.map +0 -1
  1439. package/dist/components/ThreadListItem/index.d.ts.map +0 -1
  1440. package/dist/components/Toast/Toast.d.ts.map +0 -1
  1441. package/dist/components/Toast/index.d.ts.map +0 -1
  1442. package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
  1443. package/dist/components/Tooltip/index.d.ts.map +0 -1
  1444. package/dist/components/TourPoint/TourPoint.d.ts.map +0 -1
  1445. package/dist/components/TourPoint/index.d.ts.map +0 -1
  1446. package/dist/components/UnreadBadge/UnreadBadge.d.ts.map +0 -1
  1447. package/dist/components/UnreadBadge/index.d.ts.map +0 -1
  1448. package/dist/components/UserAvatar/UserAvatar.d.ts.map +0 -1
  1449. package/dist/components/UserAvatar/index.d.ts.map +0 -1
  1450. package/dist/components/UserAvatarGroup/UserAvatarGroup.d.ts.map +0 -1
  1451. package/dist/components/UserAvatarGroup/index.d.ts.map +0 -1
  1452. /package/dist/components/{ActionButton → action-button}/ActionButton.d.ts +0 -0
  1453. /package/dist/components/{ActionButton → action-button}/index.d.ts +0 -0
  1454. /package/dist/components/{AdminConsoleHeader → admin-console-header}/AdminConsoleHeader.d.ts +0 -0
  1455. /package/dist/components/{AdminConsoleHeader → admin-console-header}/index.d.ts +0 -0
  1456. /package/dist/components/{AdminConsoleSidebar → admin-console-sidebar}/AdminConsoleSidebar.d.ts +0 -0
  1457. /package/dist/components/{AdminConsoleSidebar → admin-console-sidebar}/adminConsoleSidebarModel.d.ts +0 -0
  1458. /package/dist/components/{AdminConsoleSidebar → admin-console-sidebar}/index.d.ts +0 -0
  1459. /package/dist/components/{AdminPanel → admin-panel}/AdminPanel.d.ts +0 -0
  1460. /package/dist/components/{AdminPanel → admin-panel}/index.d.ts +0 -0
  1461. /package/dist/components/{AdminPanelFooter → admin-panel-footer}/AdminPanelFooter.d.ts +0 -0
  1462. /package/dist/components/{AdminPanelFooter → admin-panel-footer}/index.d.ts +0 -0
  1463. /package/dist/components/{AdminPanelHeader → admin-panel-header}/AdminPanelHeader.d.ts +0 -0
  1464. /package/dist/components/{AdminPanelHeader → admin-panel-header}/index.d.ts +0 -0
  1465. /package/dist/components/{AppBarItem → app-bar-item}/AppBarItem.d.ts +0 -0
  1466. /package/dist/components/{AppBarItem → app-bar-item}/index.d.ts +0 -0
  1467. /package/dist/components/{AttachmentCard → attachment-card}/AttachmentCard.d.ts +0 -0
  1468. /package/dist/components/{AttachmentCard → attachment-card}/index.d.ts +0 -0
  1469. /package/dist/components/{Button → button}/Button.d.ts +0 -0
  1470. /package/dist/components/{ChannelCategoryMenu → channel-category-menu}/ChannelCategoryMenu.d.ts +0 -0
  1471. /package/dist/components/{ChannelCategoryMenu → channel-category-menu}/index.d.ts +0 -0
  1472. /package/dist/components/{ChannelHeader → channel-header}/ChannelHeader.d.ts +0 -0
  1473. /package/dist/components/{ChannelHeader → channel-header}/index.d.ts +0 -0
  1474. /package/dist/components/{ChannelHeaderMenu → channel-header-menu}/ChannelHeaderMenu.d.ts +0 -0
  1475. /package/dist/components/{ChannelHeaderMenu → channel-header-menu}/index.d.ts +0 -0
  1476. /package/dist/components/{ChannelInfoMsgHeader → channel-info-msg-header}/ChannelInfoMsgHeader.d.ts +0 -0
  1477. /package/dist/components/{ChannelInfoMsgHeader → channel-info-msg-header}/index.d.ts +0 -0
  1478. /package/dist/components/{ChannelMenu → channel-menu}/ChannelMenu.d.ts +0 -0
  1479. /package/dist/components/{ChannelMenu → channel-menu}/index.d.ts +0 -0
  1480. /package/dist/components/{ChannelSidebarItem → channel-sidebar-item}/ChannelSidebarItem.d.ts +0 -0
  1481. /package/dist/components/{ChannelSidebarItem → channel-sidebar-item}/index.d.ts +0 -0
  1482. /package/dist/components/{ChannelsSidebar → channels-sidebar}/ChannelsSidebar.d.ts +0 -0
  1483. /package/dist/components/{ChannelsSidebar → channels-sidebar}/channelsSidebarModel.d.ts +0 -0
  1484. /package/dist/components/{Checkbox → checkbox}/Checkbox.d.ts +0 -0
  1485. /package/dist/components/{Checkbox → checkbox}/index.d.ts +0 -0
  1486. /package/dist/components/{Chip → chip}/Chip.d.ts +0 -0
  1487. /package/dist/components/{Chip → chip}/index.d.ts +0 -0
  1488. /package/dist/components/{Combobox → combobox}/Combobox.d.ts +0 -0
  1489. /package/dist/components/{Combobox → combobox}/index.d.ts +0 -0
  1490. /package/dist/components/{DateRangePicker → date-range-picker}/DateRangePicker.d.ts +0 -0
  1491. /package/dist/components/{DateRangePicker → date-range-picker}/index.d.ts +0 -0
  1492. /package/dist/components/{Divider → divider}/Divider.d.ts +0 -0
  1493. /package/dist/components/{Divider → divider}/index.d.ts +0 -0
  1494. /package/dist/components/{Dropdown → dropdown}/Dropdown.d.ts +0 -0
  1495. /package/dist/components/{Dropdown → dropdown}/index.d.ts +0 -0
  1496. /package/dist/components/{Emoji → emoji}/Emoji.d.ts +0 -0
  1497. /package/dist/components/{Emoji → emoji}/index.d.ts +0 -0
  1498. /package/dist/components/{EmptyState → empty-state}/EmptyState.d.ts +0 -0
  1499. /package/dist/components/{EmptyState → empty-state}/index.d.ts +0 -0
  1500. /package/dist/components/{ErrorMessage → error-message}/ErrorMessage.d.ts +0 -0
  1501. /package/dist/components/{ErrorMessage → error-message}/index.d.ts +0 -0
  1502. /package/dist/components/{FeatureDiscoveryPanel → feature-discovery-panel}/FeatureDiscoveryPanel.d.ts +0 -0
  1503. /package/dist/components/{FeatureDiscoveryPanel → feature-discovery-panel}/index.d.ts +0 -0
  1504. /package/dist/components/{GlobalBanner → global-banner}/GlobalBanner.d.ts +0 -0
  1505. /package/dist/components/{GlobalBanner → global-banner}/index.d.ts +0 -0
  1506. /package/dist/components/{GlobalHeader → global-header}/GlobalHeader.d.ts +0 -0
  1507. /package/dist/components/{GlobalHeader → global-header}/index.d.ts +0 -0
  1508. /package/dist/components/{HelpMenu → help-menu}/HelpMenu.d.ts +0 -0
  1509. /package/dist/components/{HelpMenu → help-menu}/index.d.ts +0 -0
  1510. /package/dist/components/{Icon → icon}/Icon.d.ts +0 -0
  1511. /package/dist/components/{Icon → icon}/index.d.ts +0 -0
  1512. /package/dist/components/{IconButton → icon-button}/IconButton.d.ts +0 -0
  1513. /package/dist/components/{IconButton → icon-button}/index.d.ts +0 -0
  1514. /package/dist/components/{Illustration → illustration}/Illustration.d.ts +0 -0
  1515. /package/dist/components/{Illustration → illustration}/index.d.ts +0 -0
  1516. /package/dist/components/{ImagePreview → image-preview}/ImagePreview.d.ts +0 -0
  1517. /package/dist/components/{ImagePreview → image-preview}/index.d.ts +0 -0
  1518. /package/dist/components/{LinkPreview → link-preview}/LinkPreview.d.ts +0 -0
  1519. /package/dist/components/{LinkPreview → link-preview}/index.d.ts +0 -0
  1520. /package/dist/components/{MentionBadge → mention-badge}/MentionBadge.d.ts +0 -0
  1521. /package/dist/components/{MentionBadge → mention-badge}/index.d.ts +0 -0
  1522. /package/dist/components/{MenuItem → menu-item}/MenuItem.d.ts +0 -0
  1523. /package/dist/components/{MenuItem → menu-item}/index.d.ts +0 -0
  1524. /package/dist/components/{Message → message}/Message.d.ts +0 -0
  1525. /package/dist/components/{MessageActions → message-actions}/MessageActions.d.ts +0 -0
  1526. /package/dist/components/{MessageActions → message-actions}/index.d.ts +0 -0
  1527. /package/dist/components/{MessageHeader → message-header}/MessageHeader.d.ts +0 -0
  1528. /package/dist/components/{MessageHeader → message-header}/index.d.ts +0 -0
  1529. /package/dist/components/{MessageInput → message-input}/MessageInput.d.ts +0 -0
  1530. /package/dist/components/{MessageInput → message-input}/index.d.ts +0 -0
  1531. /package/dist/components/{MessageMoreOptionsMenu → message-more-options-menu}/MessageMoreOptionsMenu.d.ts +0 -0
  1532. /package/dist/components/{MessageMoreOptionsMenu → message-more-options-menu}/index.d.ts +0 -0
  1533. /package/dist/components/{MessageReactions → message-reactions}/MessageReactions.d.ts +0 -0
  1534. /package/dist/components/{MessageReactions → message-reactions}/index.d.ts +0 -0
  1535. /package/dist/components/{MessageSeparator → message-separator}/MessageSeparator.d.ts +0 -0
  1536. /package/dist/components/{MessageSeparator → message-separator}/index.d.ts +0 -0
  1537. /package/dist/components/{Modal → modal}/Modal.d.ts +0 -0
  1538. /package/dist/components/{Modal → modal}/index.d.ts +0 -0
  1539. /package/dist/components/{MoreUnreadsBanner → more-unreads-banner}/MoreUnreadsBanner.d.ts +0 -0
  1540. /package/dist/components/{MoreUnreadsBanner → more-unreads-banner}/index.d.ts +0 -0
  1541. /package/dist/components/{NewMessageBanner → new-message-banner}/NewMessageBanner.d.ts +0 -0
  1542. /package/dist/components/{NewMessageBanner → new-message-banner}/index.d.ts +0 -0
  1543. /package/dist/components/{PaginationDots → pagination-dots}/PaginationDots.d.ts +0 -0
  1544. /package/dist/components/{PaginationDots → pagination-dots}/index.d.ts +0 -0
  1545. /package/dist/components/{PermalinkPreview → permalink-preview}/PermalinkPreview.d.ts +0 -0
  1546. /package/dist/components/{PermalinkPreview → permalink-preview}/index.d.ts +0 -0
  1547. /package/dist/components/{PinnedSavedIndicators → pinned-saved-indicators}/PinnedSavedIndicators.d.ts +0 -0
  1548. /package/dist/components/{PinnedSavedIndicators → pinned-saved-indicators}/index.d.ts +0 -0
  1549. /package/dist/components/{PlusMenu → plus-menu}/PlusMenu.d.ts +0 -0
  1550. /package/dist/components/{PlusMenu → plus-menu}/index.d.ts +0 -0
  1551. /package/dist/components/{PopoverMenu → popover-menu}/PopoverMenu.d.ts +0 -0
  1552. /package/dist/components/{PopoverMenu → popover-menu}/index.d.ts +0 -0
  1553. /package/dist/components/{PopoverNotice → popover-notice}/PopoverNotice.d.ts +0 -0
  1554. /package/dist/components/{PopoverNotice → popover-notice}/index.d.ts +0 -0
  1555. /package/dist/components/{ProductSwitcherMenu → product-switcher-menu}/ProductSwitcherMenu.d.ts +0 -0
  1556. /package/dist/components/{ProductSwitcherMenu → product-switcher-menu}/index.d.ts +0 -0
  1557. /package/dist/components/{ProfilePopover → profile-popover}/ProfilePopover.d.ts +0 -0
  1558. /package/dist/components/{ProfilePopover → profile-popover}/index.d.ts +0 -0
  1559. /package/dist/components/{ProgressBar → progress-bar}/ProgressBar.d.ts +0 -0
  1560. /package/dist/components/{ProgressBar → progress-bar}/index.d.ts +0 -0
  1561. /package/dist/components/{Radio → radio}/Radio.d.ts +0 -0
  1562. /package/dist/components/{Radio → radio}/index.d.ts +0 -0
  1563. /package/dist/components/{ReactionPill → reaction-pill}/ReactionPill.d.ts +0 -0
  1564. /package/dist/components/{ReactionPill → reaction-pill}/index.d.ts +0 -0
  1565. /package/dist/components/{RightSidebar → right-sidebar}/RightSidebar.d.ts +0 -0
  1566. /package/dist/components/{RightSidebar → right-sidebar}/RightSidebarHeader/RightSidebarHeader.d.ts +0 -0
  1567. /package/dist/components/{RightSidebar → right-sidebar}/RightSidebarHeader/index.d.ts +0 -0
  1568. /package/dist/components/{RightSidebar → right-sidebar}/index.d.ts +0 -0
  1569. /package/dist/components/{Scrollbar → scrollbar}/Scrollbar.d.ts +0 -0
  1570. /package/dist/components/{Scrollbar → scrollbar}/index.d.ts +0 -0
  1571. /package/dist/components/{SearchInput → search-input}/SearchInput.d.ts +0 -0
  1572. /package/dist/components/{SearchInput → search-input}/index.d.ts +0 -0
  1573. /package/dist/components/{SearchTipBanner → search-tip-banner}/SearchTipBanner.d.ts +0 -0
  1574. /package/dist/components/{SearchTipBanner → search-tip-banner}/index.d.ts +0 -0
  1575. /package/dist/components/{SectionNotice → section-notice}/SectionNotice.d.ts +0 -0
  1576. /package/dist/components/{SectionNotice → section-notice}/index.d.ts +0 -0
  1577. /package/dist/components/{Select → select}/Select.d.ts +0 -0
  1578. /package/dist/components/{Select → select}/index.d.ts +0 -0
  1579. /package/dist/components/{ShortcutTag → shortcut-tag}/ShortcutTag.d.ts +0 -0
  1580. /package/dist/components/{ShortcutTag → shortcut-tag}/index.d.ts +0 -0
  1581. /package/dist/components/{Spinner → spinner}/Spinner.d.ts +0 -0
  1582. /package/dist/components/{Spinner → spinner}/index.d.ts +0 -0
  1583. /package/dist/components/{StatusBadge → status-badge}/StatusBadge.d.ts +0 -0
  1584. /package/dist/components/{StatusBadge → status-badge}/index.d.ts +0 -0
  1585. /package/dist/components/{Switch → switch}/Switch.d.ts +0 -0
  1586. /package/dist/components/{Switch → switch}/index.d.ts +0 -0
  1587. /package/dist/components/{Tabs → tabs}/Tabs.d.ts +0 -0
  1588. /package/dist/components/{Tabs → tabs}/index.d.ts +0 -0
  1589. /package/dist/components/{Tag → tag}/Tag.d.ts +0 -0
  1590. /package/dist/components/{Tag → tag}/index.d.ts +0 -0
  1591. /package/dist/components/{TeamAvatar → team-avatar}/TeamAvatar.d.ts +0 -0
  1592. /package/dist/components/{TeamAvatar → team-avatar}/index.d.ts +0 -0
  1593. /package/dist/components/{TeamMenu → team-menu}/TeamMenu.d.ts +0 -0
  1594. /package/dist/components/{TeamMenu → team-menu}/index.d.ts +0 -0
  1595. /package/dist/components/{TeamSidebar → team-sidebar}/TeamSidebar.d.ts +0 -0
  1596. /package/dist/components/{TeamSidebar → team-sidebar}/index.d.ts +0 -0
  1597. /package/dist/components/{TextArea → text-area}/TextArea.d.ts +0 -0
  1598. /package/dist/components/{TextArea → text-area}/index.d.ts +0 -0
  1599. /package/dist/components/{TextInput → text-input}/TextInput.d.ts +0 -0
  1600. /package/dist/components/{TextInput → text-input}/index.d.ts +0 -0
  1601. /package/dist/components/{ThreadActionsMenu → thread-actions-menu}/ThreadActionsMenu.d.ts +0 -0
  1602. /package/dist/components/{ThreadActionsMenu → thread-actions-menu}/index.d.ts +0 -0
  1603. /package/dist/components/{ThreadFooter → thread-footer}/ThreadFooter.d.ts +0 -0
  1604. /package/dist/components/{ThreadFooter → thread-footer}/index.d.ts +0 -0
  1605. /package/dist/components/{ThreadListItem → thread-list-item}/ThreadListItem.d.ts +0 -0
  1606. /package/dist/components/{ThreadListItem → thread-list-item}/index.d.ts +0 -0
  1607. /package/dist/components/{Toast → toast}/Toast.d.ts +0 -0
  1608. /package/dist/components/{Toast → toast}/index.d.ts +0 -0
  1609. /package/dist/components/{Tooltip → tooltip}/Tooltip.d.ts +0 -0
  1610. /package/dist/components/{Tooltip → tooltip}/index.d.ts +0 -0
  1611. /package/dist/components/{TourPoint → tour-point}/TourPoint.d.ts +0 -0
  1612. /package/dist/components/{TourPoint → tour-point}/index.d.ts +0 -0
  1613. /package/dist/components/{UnreadBadge → unread-badge}/UnreadBadge.d.ts +0 -0
  1614. /package/dist/components/{UnreadBadge → unread-badge}/index.d.ts +0 -0
  1615. /package/dist/components/{UserAvatar → user-avatar}/UserAvatar.d.ts +0 -0
  1616. /package/dist/components/{UserAvatar → user-avatar}/index.d.ts +0 -0
  1617. /package/dist/components/{UserAvatarGroup → user-avatar-group}/UserAvatarGroup.d.ts +0 -0
  1618. /package/dist/components/{UserAvatarGroup → user-avatar-group}/index.d.ts +0 -0
  1619. /package/dist/hooks/{useAnchoredPopupPortal.d.ts → use-anchored-popup-portal.d.ts} +0 -0
  1620. /package/dist/hooks/{useControllable.d.ts → use-controllable.d.ts} +0 -0
  1621. /package/dist/hooks/{useExitAnimation.d.ts → use-exit-animation.d.ts} +0 -0
  1622. /package/dist/hooks/{useOutsideClose.d.ts → use-outside-close.d.ts} +0 -0
  1623. /package/dist/hooks/{usePopoverTransition.d.ts → use-popover-transition.d.ts} +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/ActionButton/ActionButton.tsx","../src/components/Icon/Icon.tsx","../src/utils/string.ts","../src/components/IconButton/IconButton.tsx","../src/components/Tag/Tag.tsx","../src/components/AdminConsoleHeader/AdminConsoleHeader.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/UserAvatar/UserAvatar.tsx","../src/components/MentionBadge/MentionBadge.tsx","../src/components/ChannelSidebarItem/ChannelSidebarItem.tsx","../src/components/MoreUnreadsBanner/MoreUnreadsBanner.tsx","../src/components/Scrollbar/Scrollbar.tsx","../src/components/ChannelsSidebar/channelsSidebarModel.ts","../src/components/ChannelsSidebar/ChannelsSidebar.tsx","../src/components/AdminConsoleSidebar/AdminConsoleSidebar.tsx","../src/components/Button/Button.tsx","../src/hooks/useControllable.ts","../src/components/Switch/Switch.tsx","../src/components/AdminPanelHeader/AdminPanelHeader.tsx","../src/components/AdminPanel/AdminPanel.tsx","../src/components/AdminPanelFooter/AdminPanelFooter.tsx","../src/components/AppBarItem/AppBarItem.tsx","../src/components/AttachmentCard/AttachmentCard.tsx","../src/components/ChannelHeader/ChannelHeader.tsx","../src/components/MenuItem/MenuItem.tsx","../src/components/PopoverMenu/PopoverMenu.tsx","../src/components/ChannelHeaderMenu/ChannelHeaderMenu.tsx","../src/components/ChannelInfoMsgHeader/ChannelInfoMsgHeader.tsx","../src/components/ChannelMenu/ChannelMenu.tsx","../src/components/ChannelCategoryMenu/ChannelCategoryMenu.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/utils/anchoredPopupPlacement.ts","../src/hooks/useAnchoredPopupPortal.ts","../src/hooks/useOutsideClose.ts","../src/hooks/usePopoverTransition.ts","../src/components/Combobox/Combobox.tsx","../src/components/DateRangePicker/DateRangePicker.tsx","../src/components/Divider/Divider.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Emoji/Emoji.tsx","../src/components/Illustration/Illustration.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/ErrorMessage/ErrorMessage.tsx","../src/components/FeatureDiscoveryPanel/FeatureDiscoveryPanel.tsx","../src/components/GlobalBanner/GlobalBanner.tsx","../src/components/GlobalHeader/GlobalHeader.tsx","../src/components/HelpMenu/HelpMenu.tsx","../src/components/ImagePreview/ImagePreview.tsx","../src/components/LinkPreview/LinkPreview.tsx","../src/components/MessageHeader/MessageHeader.tsx","../src/components/MessageActions/MessageActions.tsx","../src/components/PinnedSavedIndicators/PinnedSavedIndicators.tsx","../src/components/Message/Message.tsx","../src/components/MessageInput/MessageInput.tsx","../src/components/ShortcutTag/ShortcutTag.tsx","../src/components/MessageMoreOptionsMenu/MessageMoreOptionsMenu.tsx","../src/components/MessageReactions/MessageReactions.tsx","../src/components/MessageSeparator/MessageSeparator.tsx","../src/components/Modal/Modal.tsx","../src/components/NewMessageBanner/NewMessageBanner.tsx","../src/components/PaginationDots/PaginationDots.tsx","../src/components/PermalinkPreview/PermalinkPreview.tsx","../src/components/PlusMenu/PlusMenu.tsx","../src/components/PopoverNotice/PopoverNotice.tsx","../src/components/ProductSwitcherMenu/ProductSwitcherMenu.tsx","../src/components/ProfilePopover/ProfilePopover.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Radio/Radio.tsx","../src/components/ReactionPill/ReactionPill.tsx","../src/components/RightSidebar/RightSidebar.tsx","../src/components/RightSidebar/RightSidebarHeader/RightSidebarHeader.tsx","../src/components/SearchInput/SearchInput.tsx","../src/components/SearchTipBanner/SearchTipBanner.tsx","../src/components/SectionNotice/SectionNotice.tsx","../src/components/Select/Select.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Tabs/Tabs.tsx","../src/components/TeamAvatar/TeamAvatar.tsx","../src/components/TeamMenu/TeamMenu.tsx","../src/components/UnreadBadge/UnreadBadge.tsx","../src/components/TeamSidebar/TeamSidebar.tsx","../src/components/TextArea/TextArea.tsx","../src/components/TextInput/TextInput.tsx","../src/components/ThreadActionsMenu/ThreadActionsMenu.tsx","../src/components/ThreadFooter/ThreadFooter.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/UserAvatarGroup/UserAvatarGroup.tsx","../src/components/ThreadListItem/ThreadListItem.tsx","../src/components/Toast/Toast.tsx","../src/components/TourPoint/TourPoint.tsx","../src/hooks/useExitAnimation.ts"],"sourcesContent":["import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport styles from './ActionButton.module.scss';\n\nexport interface ActionButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n label: string;\n active?: boolean;\n destructive?: boolean;\n}\n\n/**\n * Action Buttons surface a small set of high-frequency actions in a fixed context — a\n * profile popover, a channel info panel, a card. They sit close to the content they act on\n * and read as a row of equal-weight choices.\n */\nexport default function ActionButton({\n icon,\n label,\n active = false,\n destructive = false,\n className,\n ...htmlProps\n}: ActionButtonProps) {\n const rootClass = [\n styles['action-button'],\n active ? styles['action-button--active'] : '',\n destructive ? styles['action-button--destructive'] : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button className={rootClass} aria-pressed={active} {...htmlProps}>\n <span className={styles['action-button__icon']}>{icon}</span>\n <span className={styles['action-button__label']}>{label}</span>\n </button>\n );\n}\n","import React, { type ReactNode } from 'react';\nimport EmoticonHappyOutlineIcon from '@mattermost/compass-icons/components/emoticon-happy-outline';\nimport styles from './Icon.module.scss';\n\nexport type IconSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\n/**\n * Maps container size → SVG render size. Icons bleed slightly past the container\n * to strip the built-in clear-space padding from compass-icons SVGs.\n * Pass SVG_SIZE_MAP[size] as the `size` prop on any compass-icons component\n * used as a glyph (e.g. <GlobeIcon size={SVG_SIZE_MAP['24']} />).\n */\nexport const SVG_SIZE_MAP: Record<IconSize, number> = {\n '10': 12,\n '12': 14,\n '16': 18,\n '20': 24,\n '24': 28,\n '28': 32,\n '32': 36,\n '40': 48,\n '52': 60,\n '64': 72,\n '104': 120,\n};\n\nexport interface IconProps {\n /** Optional CSS class name applied to the container. */\n className?: string;\n /**\n * Icon SVG from @mattermost/compass-icons (e.g. `<GlobeIcon />`).\n * Icon automatically injects the correct SVG size — no need to pass a size\n * prop on the glyph element. When omitted, shows emoticon-happy-outline.\n */\n glyph?: ReactNode | null;\n /** Container size from the Mattermost icon scale. Default 24. */\n size?: IconSize;\n}\n\nconst SIZE_CLASS_MAP: Record<IconSize, string> = {\n '10': styles['icon--size-10'],\n '12': styles['icon--size-12'],\n '16': styles['icon--size-16'],\n '20': styles['icon--size-20'],\n '24': styles['icon--size-24'],\n '28': styles['icon--size-28'],\n '32': styles['icon--size-32'],\n '40': styles['icon--size-40'],\n '52': styles['icon--size-52'],\n '64': styles['icon--size-64'],\n '104': styles['icon--size-104'],\n};\n\n/**\n * Icon is the standard wrapper for any glyph from `@mattermost/compass-icons`. It enforces a\n * consistent container size, strips the package's built-in clear-space padding, and keeps\n * icons aligned with text and other icons across the system.\n */\nexport default function Icon({\n className = '',\n glyph = null,\n size = '24',\n}: IconProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [styles.icon, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const svgSize = SVG_SIZE_MAP[size];\n const glyphContent = (() => {\n if (glyph === undefined || glyph === null) {\n return <EmoticonHappyOutlineIcon size={svgSize} aria-hidden />;\n }\n // Inject the correct SVG size into the glyph so callers don't need to\n // know about SVG_SIZE_MAP — the container size is all that's needed.\n if (React.isValidElement(glyph)) {\n return React.cloneElement(\n glyph as React.ReactElement<{ size?: number }>,\n {\n size: svgSize,\n },\n );\n }\n return glyph;\n })();\n\n return (\n <div className={rootClass} aria-hidden>\n <div className={styles['icon__glyph-area']}>{glyphContent}</div>\n </div>\n );\n}\n","/**\n * Converts a string to kebab-case.\n * Used to map variant prop values (e.g. \"do-not-disturb\", \"x-small\")\n * to CSS modifier class name suffixes.\n */\nexport const toKebab = (s: string) => s.replace(/\\s+/g, '-').toLowerCase();\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { toKebab } from '@/utils/string';\nimport styles from './IconButton.module.scss';\n\nexport type IconButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Figma \"Style\": Default (light context) | Inverted (dark context). */\nexport type IconButtonStyle = 'default' | 'inverted';\n\nexport type IconButtonPadding = 'default' | 'compact';\n\nexport interface IconButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'style'\n> {\n /** When true, forces the subtler pressed/active visual (lighter than toggled). */\n active?: boolean;\n /** Optional CSS class name. */\n className?: string;\n /** Numeric count shown inline after the icon. Figma: Count. */\n count?: number;\n /** When true, uses destructive (danger) styling. Figma: Destructive. */\n destructive?: boolean;\n /** Icon to show. Size the glyph via SVG_SIZE_MAP: e.g. `<Icon glyph={<GlobeIcon size={SVG_SIZE_MAP['16']} />} size=\"16\" />`. */\n icon: ReactNode;\n /** Padding variant. Figma: Padding = Default | Compact. */\n padding?: IconButtonPadding;\n /** When true, uses full border radius (pill). Figma: Rounded = On. */\n rounded?: boolean;\n /** Size variant. Figma: Size. Default: Medium. */\n size?: IconButtonSize;\n /** Default | Inverted. Figma: Style (for light vs dark backgrounds). */\n style?: IconButtonStyle;\n /** When true, shows toggled/selected state. Figma: Toggled = On. */\n toggled?: boolean;\n /** When true, shows a small unread dot over the icon. Figma: Unread Badge. */\n unreadBadge?: boolean;\n}\n\n/** Icon size (px) per IconButton size. Use with Icon: size=\"12\" | \"16\" | \"20\" | \"24\". */\nexport const ICON_BUTTON_ICON_SIZES: Record<\n IconButtonSize,\n '12' | '16' | '20' | '24'\n> = {\n 'x-small': '12',\n small: '16',\n medium: '20',\n large: '24',\n};\n\n/**\n * Icon Buttons are compact, label-free actions for tight surfaces — channel headers, message\n * hover actions, modal dismissals, toolbar slots. They lean on the icon to communicate\n * intent, so every Icon Button must pair with a tooltip or `aria-label` that makes the\n * action explicit.\n */\nexport default function IconButton({\n active = false,\n className = '',\n count,\n destructive = false,\n icon,\n padding = 'default',\n rounded = false,\n size = 'medium',\n style = 'default',\n toggled = false,\n unreadBadge = false,\n disabled,\n type = 'button',\n 'aria-label': ariaLabel,\n ...rest\n}: IconButtonProps) {\n const sizeClass = styles[`icon-button--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['icon-button--padding-compact'] : '';\n const styleClass =\n style === 'inverted' ? styles['icon-button--style-inverted'] : '';\n const destructiveClass = destructive\n ? styles['icon-button--destructive']\n : '';\n const roundedClass = rounded ? styles['icon-button--rounded'] : '';\n const toggledClass = toggled ? styles['icon-button--toggled'] : '';\n const activeClass = active ? styles['icon-button--active'] : '';\n const hasCount = count !== undefined;\n const hasCountClass = hasCount ? styles['icon-button--has-count'] : '';\n\n const rootClass = [\n styles['icon-button'],\n sizeClass,\n paddingClass,\n styleClass,\n destructiveClass,\n roundedClass,\n toggledClass,\n activeClass,\n hasCountClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n className={rootClass}\n type={type}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-pressed={toggled ? true : undefined}\n data-active={active ? 'true' : undefined}\n {...rest}\n >\n <span className={styles['icon-button__icon-slot']} aria-hidden>\n {icon}\n {unreadBadge && (\n <span className={styles['icon-button__unread-badge']} />\n )}\n </span>\n {hasCount && (\n <span className={styles['icon-button__count']}>{count}</span>\n )}\n </button>\n );\n}\n","import type { ReactNode } from 'react';\nimport styles from './Tag.module.scss';\n\nexport type TagType =\n | 'default'\n | 'info'\n | 'info-dim'\n | 'danger'\n | 'success'\n | 'warning';\n\nexport type TagSize = 'small' | 'x-small';\nexport type TagCasing = 'title-case' | 'all-caps';\n\nexport type TagProps = {\n /** Tag label text. */\n label: string;\n /** Semantic colour type. Default: Default. */\n type?: TagType;\n /** Size variant. Default: X-Small. */\n size?: TagSize;\n /** Text casing. Default: Title Case. */\n casing?: TagCasing;\n /** Optional leading icon node. */\n leadingIcon?: ReactNode;\n /** Merged onto the root after variant classes (e.g. layout overrides in a parent row). */\n className?: string;\n};\n\nconst TYPE_CLASS: Record<TagType, string> = {\n default: styles['tag--type-default'],\n info: styles['tag--type-info'],\n 'info-dim': styles['tag--type-info-dim'],\n danger: styles['tag--type-danger'],\n success: styles['tag--type-success'],\n warning: styles['tag--type-warning'],\n};\n\n/**\n * Tags are compact pills that mark something — a role (_BOT_, _GUEST_), a tier\n * (_PROFESSIONAL_), a status (_NEW_, _BETA_), or a category. They're scannable signal: a way\n * to surface a small piece of metadata without spending a sentence on it.\n */\nexport default function Tag({\n label,\n type = 'default',\n size = 'x-small',\n casing = 'title-case',\n leadingIcon,\n className = '',\n}: TagProps) {\n const classes = [\n styles.tag,\n TYPE_CLASS[type],\n size === 'small'\n ? styles['tag--size-small']\n : styles['tag--size-x-small'],\n casing === 'all-caps' ? styles['tag--casing-all-caps'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={classes}>\n {leadingIcon && (\n <span className={styles['tag__icon']} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <span className={styles['tag__label']}>{label}</span>\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport ArrowBackIosIcon from '@mattermost/compass-icons/components/arrow-back-ios';\nimport MattermostIcon from '@mattermost/compass-icons/components/mattermost';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport styles from './AdminConsoleHeader.module.scss';\n\nexport interface AdminConsoleHeaderProps {\n /** Page heading (Heading 500). */\n title: ReactNode;\n /** When true, shows a back control with a divider from the title block. */\n showBack?: boolean;\n ariaLabelBack?: string;\n onBackClick?: () => void;\n /** Optional plan or edition tag beside the title. */\n enterpriseBadge?: boolean;\n enterpriseBadgeLabel?: string;\n /** Optional actions on the trailing edge of the title row. */\n trailing?: ReactNode;\n className?: string;\n}\n\n/**\n * The Admin Console header is the stripe above scrolling System Console content. It anchors\n * the active page title, optional edition signalling, navigation back into nested settings,\n * and sparse trailing utilities.\n */\nexport default function AdminConsoleHeader({\n title,\n showBack = false,\n ariaLabelBack = 'Go back',\n onBackClick,\n enterpriseBadge = false,\n enterpriseBadgeLabel = 'Enterprise',\n trailing,\n className = '',\n}: AdminConsoleHeaderProps) {\n const enterpriseChip =\n enterpriseBadge ? (\n <Tag\n label={enterpriseBadgeLabel}\n size=\"x-small\"\n leadingIcon={<Icon size=\"12\" glyph={<MattermostIcon />} />}\n />\n ) : null;\n\n return (\n <header\n className={[styles['admin-console-header'], className].join(' ').trim()}\n >\n <div className={styles['admin-console-header__row']}>\n {showBack && (\n <div className={styles['admin-console-header__back']}>\n <IconButton\n type=\"button\"\n style=\"default\"\n size=\"medium\"\n className={styles['admin-console-header__back-button']}\n aria-label={ariaLabelBack}\n onClick={onBackClick}\n icon={<Icon size=\"20\" glyph={<ArrowBackIosIcon />} />}\n />\n </div>\n )}\n <div className={styles['admin-console-header__title-row']}>\n <div className={styles['admin-console-header__intro']}>\n <h1 className={styles['admin-console-header__title']}>{title}</h1>\n {enterpriseChip}\n </div>\n {trailing != null ? (\n <div className={styles['admin-console-header__trailing']}>\n {trailing}\n </div>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n","import type { ElementType } from 'react';\nimport CheckCircleIcon from '@mattermost/compass-icons/components/check-circle';\nimport CircleOutlineIcon from '@mattermost/compass-icons/components/circle-outline';\nimport ClockIcon from '@mattermost/compass-icons/components/clock';\nimport MinusCircleIcon from '@mattermost/compass-icons/components/minus-circle';\nimport { toKebab } from '@/utils/string';\nimport styles from './StatusBadge.module.scss';\n\n/** Figma Status Badge size. */\nexport type StatusBadgeSize =\n | 'xx-small'\n | 'x-small'\n | 'small'\n | 'medium'\n | 'large';\n\n/** Figma Status Badge status variant. */\nexport type StatusBadgeStatus =\n | 'online'\n | 'away'\n | 'do-not-disturb'\n | 'offline';\n\nexport interface StatusBadgeProps {\n /** Optional CSS class name. */\n className?: string;\n /** Size variant. Figma: Size. Default: X-Small. */\n size?: StatusBadgeSize;\n /** Status variant. Figma: Status. Default: Online. */\n status?: StatusBadgeStatus;\n}\n\n/** Compass icon size in px per StatusBadge size — Figma. */\nconst BADGE_ICON_SIZE_PX: Record<StatusBadgeSize, number> = {\n 'xx-small': 10,\n 'x-small': 12,\n small: 16,\n medium: 20,\n large: 32,\n};\n\n/** Compass icon component per status variant. */\nconst GLYPH_COMPONENT: Record<StatusBadgeStatus, ElementType> = {\n online: CheckCircleIcon,\n away: ClockIcon,\n 'do-not-disturb': MinusCircleIcon,\n offline: CircleOutlineIcon,\n};\n\n/**\n * A Status Badge tells you whether someone is reachable. It pairs with an avatar or username\n * so a glance is enough to know if a teammate is online, focused, away, or signed out.\n */\nexport default function StatusBadge({\n className = '',\n size = 'x-small',\n status = 'online',\n}: StatusBadgeProps) {\n const sizeClass = styles[`status-badge--size-${toKebab(size)}`];\n const statusClass = styles[`status-badge--status-${toKebab(status)}`];\n const rootClass = [styles['status-badge'], sizeClass, statusClass, className]\n .filter(Boolean)\n .join(' ');\n\n const iconSizePx = BADGE_ICON_SIZE_PX[size];\n const GlyphIcon = GLYPH_COMPONENT[status];\n\n return (\n <span className={rootClass} role=\"img\" aria-label={status}>\n <span className={styles['status-badge__glyph']}>\n <GlyphIcon size={iconSizePx} />\n </span>\n </span>\n );\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport StatusBadge from '@/components/StatusBadge/StatusBadge';\nimport type { StatusBadgeSize } from '@/components/StatusBadge/StatusBadge';\nimport { toKebab } from '@/utils/string';\nimport styles from './UserAvatar.module.scss';\n\n/** Figma User Avatar sizes. */\nexport type UserAvatarSize =\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72'\n | '80'\n | '96'\n | '120';\n\n/** Figma User Avatar Fallback colour variants. */\nexport type UserAvatarFallbackColor =\n | 'red'\n | 'purple'\n | 'neutral'\n | 'blue'\n | 'cyan'\n | 'yellow'\n | 'green'\n | 'orange';\n\nexport interface UserAvatarProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n 'src' | 'alt' | 'width' | 'height'\n> {\n /** Alt text for the avatar image. */\n alt: string;\n /** Optional CSS class name. */\n className?: string;\n /**\n * Image URL for the avatar. When omitted, the avatar renders as Fallback\n * (initials on a deterministic colour background).\n */\n src?: string;\n /**\n * Display name used to derive initials and the fallback colour. Defaults\n * to `alt` when not provided.\n */\n name?: string;\n /** Force a specific fallback colour. Hashed from `name`/`alt` if omitted. */\n fallbackColor?: UserAvatarFallbackColor;\n /** Size variant. Figma: Size. Default: 48. */\n size?: UserAvatarSize;\n /** When true, shows online status badge (green dot with check). Figma: Status = On. */\n status?: boolean;\n}\n\nconst FALLBACK_COLORS: readonly UserAvatarFallbackColor[] = [\n 'red',\n 'purple',\n 'neutral',\n 'blue',\n 'cyan',\n 'yellow',\n 'green',\n 'orange',\n];\n\n/** Map UserAvatar size to StatusBadge size (Figma scale). */\nconst USER_AVATAR_TO_BADGE_SIZE: Record<UserAvatarSize, StatusBadgeSize> = {\n '12': 'xx-small',\n '16': 'xx-small',\n '20': 'x-small',\n '24': 'x-small',\n '28': 'x-small',\n '32': 'small',\n '40': 'small',\n '48': 'small',\n '56': 'medium',\n '64': 'medium',\n '72': 'medium',\n '80': 'medium',\n '96': 'large',\n '120': 'large',\n};\n\nfunction hashFallbackColor(s: string): UserAvatarFallbackColor {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return FALLBACK_COLORS[Math.abs(h) % FALLBACK_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return '';\n const firstName = trimmed.split(/\\s+/)[0]!;\n return firstName[0]!.toUpperCase() + (firstName[1]?.toLowerCase() ?? '');\n}\n\n/**\n * User Avatars represent a person — usually their uploaded photo, with initials on a colour\n * background as a fallback. Their circular shape distinguishes them from rounded-square Team\n * Avatars at a glance.\n */\nexport default function UserAvatar({\n alt,\n className = '',\n src,\n name,\n fallbackColor,\n size = '48',\n status = false,\n ...imgProps\n}: UserAvatarProps) {\n const sizeClass = styles[`user-avatar--size-${toKebab(size)}`];\n const rootClass = [styles['user-avatar'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const isFallback = !src;\n const displayName = name ?? alt;\n const initials = isFallback ? getInitials(displayName) : '';\n const color = fallbackColor ?? hashFallbackColor(displayName);\n const fallbackColorClass = isFallback\n ? styles[`user-avatar__fallback--${toKebab(color)}`]\n : '';\n\n return (\n <div className={rootClass} data-size={size}>\n {isFallback ? (\n <span\n className={[styles['user-avatar__fallback'], fallbackColorClass]\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n aria-label={alt}\n >\n {initials}\n </span>\n ) : (\n <img\n {...imgProps}\n alt={alt}\n className={styles['user-avatar__image']}\n src={src}\n width={Number(size)}\n height={Number(size)}\n />\n )}\n {status && (\n <span className={styles['user-avatar__status']}>\n <StatusBadge status=\"online\" size={USER_AVATAR_TO_BADGE_SIZE[size]} />\n </span>\n )}\n </div>\n );\n}\n","import { toKebab } from '@/utils/string';\nimport styles from './MentionBadge.module.scss';\n\n/** Figma Mention Badge location context — controls color scheme. */\nexport type MentionBadgeLocation =\n | 'sidebar'\n | 'menu-item'\n | 'icon-button'\n | 'channel';\n\n/** Figma Mention Badge size. */\nexport type MentionBadgeSize = 'small' | 'medium' | 'large';\n\nexport interface MentionBadgeProps {\n /** Optional CSS class name. */\n className?: string;\n /** Mention count. Displays as-is up to 99; shows \"99+\" above that. */\n count: number;\n /** Color context. Figma: Location. Default: Sidebar. */\n location?: MentionBadgeLocation;\n /** Size variant. Figma: Size. Default: Small. */\n size?: MentionBadgeSize;\n}\n\n/**\n * Mention Badges show a numerical count of pending mentions. They appear next to channel\n * names in the sidebar, on app-bar icons, inline in menu items, and on center-channel lists\n * such as thread rows — small, high-contrast pills that pull the eye without dominating the\n * row.\n */\nexport default function MentionBadge({\n className = '',\n count,\n location = 'sidebar',\n size = 'small',\n}: MentionBadgeProps) {\n const displayText = count > 99 ? '99+' : String(count);\n const digitCount = displayText.length; // 1, 2, or 3 (for \"99+\")\n\n const rootClass = [\n styles['mention-badge'],\n styles[`mention-badge--size-${toKebab(size)}`],\n styles[`mention-badge--digits-${digitCount}`],\n location !== 'sidebar'\n ? styles[`mention-badge--location-${toKebab(location)}`]\n : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n className={rootClass}\n aria-label={`${count} mention${count === 1 ? '' : 's'}`}\n >\n {displayText}\n </span>\n );\n}\n","import GlobeIcon from '@mattermost/compass-icons/components/globe';\nimport LockOutlineIcon from '@mattermost/compass-icons/components/lock-outline';\nimport MessageTextOutlineIcon from '@mattermost/compass-icons/components/message-text-outline';\nimport SendOutlineIcon from '@mattermost/compass-icons/components/send-outline';\nimport ChartLineIcon from '@mattermost/compass-icons/components/chart-line';\nimport CircleMultipleOutlineIcon from '@mattermost/compass-icons/components/circle-multiple-outline';\nimport PhoneInTalkIcon from '@mattermost/compass-icons/components/phone-in-talk';\nimport DotsVerticalIcon from '@mattermost/compass-icons/components/dots-vertical';\nimport DialpadIcon from '@mattermost/compass-icons/components/dialpad';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport MentionBadge from '@/components/MentionBadge/MentionBadge';\nimport IconButton from '@/components/IconButton/IconButton';\nimport styles from './ChannelSidebarItem.module.scss';\n\nexport type ChannelSidebarItemLeadingVisual =\n | 'public'\n | 'private'\n | 'group-message'\n | 'direct-message'\n | 'drafts'\n | 'insights'\n | 'threads'\n | 'dial-pad';\n\nexport type ChannelSidebarItemStatus = 'read' | 'unread' | 'mention';\n\nexport interface ChannelSidebarItemProps {\n className?: string;\n /** Channel or user display name. */\n name: string;\n /**\n * Text-only row (e.g. System Console navigation): no channel glyph or\n * overflow menu; name aligns with channel sidebar label padding.\n */\n hideLeadingVisual?: boolean;\n /** Leading visual type. Default: Public. Ignored when `hideLeadingVisual`. */\n leadingVisual?: ChannelSidebarItemLeadingVisual;\n /** Read/unread/mention state. Default: Read. */\n status?: ChannelSidebarItemStatus;\n /** Highlighted as the currently active item. */\n active?: boolean;\n /** Muted channel — reduces visual prominence. */\n muted?: boolean;\n /** Shows a call-in-progress indicator on the right. */\n callActive?: boolean;\n /** Shows the shared-channel icon after the name. */\n sharedChannel?: boolean;\n /** Mention count shown in the badge when status='mention'. */\n mentionCount?: number;\n /** Member count shown in the group icon when leadingVisual='group-message'. */\n memberCount?: number;\n /** Avatar image URL for leadingVisual='direct-message'. */\n avatarSrc?: string;\n /** Avatar alt text for leadingVisual='direct-message'. */\n avatarAlt?: string;\n /** Shows status badge on the avatar when leadingVisual='direct-message'. */\n showAvatarStatus?: boolean;\n /** Custom status emoji shown after the name for leadingVisual='direct-message'. */\n customStatusEmoji?: string;\n onClick?: () => void;\n}\n\nfunction LeadingVisualContent({\n leadingVisual,\n memberCount,\n avatarSrc,\n avatarAlt,\n showAvatarStatus,\n}: {\n leadingVisual: ChannelSidebarItemLeadingVisual;\n memberCount: number | undefined;\n avatarSrc: string | undefined;\n avatarAlt: string | undefined;\n showAvatarStatus: boolean | undefined;\n}) {\n switch (leadingVisual) {\n case 'private':\n return <LockOutlineIcon size={16} />;\n case 'group-message':\n return (\n <div className={styles['channel-sidebar-item__group-icon']}>\n {memberCount ?? 2}\n </div>\n );\n case 'direct-message':\n return (\n <UserAvatar\n src={avatarSrc ?? ''}\n alt={avatarAlt ?? ''}\n size=\"20\"\n status={!!showAvatarStatus}\n />\n );\n case 'drafts':\n return <SendOutlineIcon size={16} />;\n case 'insights':\n return <ChartLineIcon size={16} />;\n case 'threads':\n return <MessageTextOutlineIcon size={16} />;\n case 'dial-pad':\n return <DialpadIcon size={16} />;\n case 'public':\n default:\n return <GlobeIcon size={16} />;\n }\n}\n\n/**\n * The Channel Sidebar Item is the row people use to move between channels, DMs, and group\n * messages. It compresses a lot of state — channel type, unread, mention count, mute,\n * in-call — into a single, scannable line.\n */\nexport default function ChannelSidebarItem({\n className,\n name,\n hideLeadingVisual = false,\n leadingVisual = 'public',\n status = 'read',\n active = false,\n muted = false,\n callActive = false,\n sharedChannel = false,\n mentionCount,\n memberCount,\n avatarSrc,\n avatarAlt,\n showAvatarStatus = false,\n customStatusEmoji,\n onClick,\n}: ChannelSidebarItemProps) {\n const isDM = !hideLeadingVisual && leadingVisual === 'direct-message';\n const isDrafts = !hideLeadingVisual && leadingVisual === 'drafts';\n const effectiveStatus = isDrafts && status === 'unread' ? 'read' : status;\n const hasMentionBadge = effectiveStatus === 'mention';\n const isChannelOrDM =\n !hideLeadingVisual &&\n ['public', 'private', 'group-message', 'direct-message'].includes(\n leadingVisual,\n );\n\n const rootClass = [\n styles['channel-sidebar-item'],\n hideLeadingVisual ? styles['channel-sidebar-item--text-only'] : '',\n active ? styles['channel-sidebar-item--active'] : '',\n muted ? styles['channel-sidebar-item--muted'] : '',\n styles[`channel-sidebar-item--status-${effectiveStatus.toLowerCase()}`],\n isDrafts ? styles['channel-sidebar-item--drafts'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const iconContainerClass = [\n styles['channel-sidebar-item__icon-container'],\n isDM ? styles['channel-sidebar-item__icon-container--dm'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const rightClass = styles['channel-sidebar-item__right'];\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={rootClass}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n >\n {active && (\n <div className={styles['channel-sidebar-item__active-border']} />\n )}\n <div className={styles['channel-sidebar-item__left']}>\n {!hideLeadingVisual && (\n <div className={iconContainerClass}>\n <LeadingVisualContent\n leadingVisual={leadingVisual}\n memberCount={memberCount}\n avatarSrc={avatarSrc}\n avatarAlt={avatarAlt}\n showAvatarStatus={showAvatarStatus}\n />\n </div>\n )}\n <div className={styles['channel-sidebar-item__content']}>\n <span className={styles['channel-sidebar-item__name']}>{name}</span>\n {sharedChannel && (\n <span className={styles['channel-sidebar-item__shared-icon']}>\n <CircleMultipleOutlineIcon size={12} />\n </span>\n )}\n {isDM && customStatusEmoji && (\n <span className={styles['channel-sidebar-item__custom-status']}>\n {customStatusEmoji}\n </span>\n )}\n </div>\n </div>\n <div className={rightClass}>\n {callActive && (\n <div className={styles['channel-sidebar-item__call']}>\n <PhoneInTalkIcon size={12} />\n </div>\n )}\n {hasMentionBadge && (\n <span className={styles['channel-sidebar-item__mention-badge']}>\n <MentionBadge\n count={mentionCount ?? 1}\n location=\"sidebar\"\n size=\"medium\"\n />\n </span>\n )}\n {isChannelOrDM && (\n <span className={styles['channel-sidebar-item__menu-button']}>\n <IconButton\n size=\"x-small\"\n style=\"inverted\"\n icon={<DotsVerticalIcon size={12} />}\n aria-label=\"Channel options\"\n onClick={(e) => e.stopPropagation()}\n />\n </span>\n )}\n </div>\n </div>\n );\n}\n","import Icon from '@/components/Icon/Icon';\nimport ArrowUpIcon from '@mattermost/compass-icons/components/arrow-up';\nimport ArrowDownIcon from '@mattermost/compass-icons/components/arrow-down';\nimport styles from './MoreUnreadsBanner.module.scss';\n\nexport type MoreUnreadsBannerDirection = 'up' | 'down';\nexport type MoreUnreadsBannerSize = 'small' | 'medium' | 'large';\n\nexport interface MoreUnreadsBannerProps {\n /** Optional CSS class name. */\n className?: string;\n /** Arrow direction. Default: Up. */\n direction?: MoreUnreadsBannerDirection;\n /** Size variant. Default: Medium. */\n size?: MoreUnreadsBannerSize;\n /** Callback when the banner is clicked. */\n onClick?: () => void;\n}\n\n/**\n * The More Unreads Banner is the small pill that floats inside the channel sidebar to tell\n * the user there are unread channels above or below the current scroll position. One arrow,\n * one label — clicking it scrolls to the next unread.\n */\nexport default function MoreUnreadsBanner({\n className = '',\n direction = 'up',\n size = 'medium',\n onClick,\n}: MoreUnreadsBannerProps) {\n const sizeClass = styles[`more-unreads-banner--size-${size.toLowerCase()}`];\n\n const rootClass = [styles['more-unreads-banner'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button className={rootClass} type=\"button\" onClick={onClick}>\n <span className={styles['more-unreads-banner__icon']} aria-hidden>\n {direction === 'up' ? (\n <Icon size=\"12\" glyph={<ArrowUpIcon />} />\n ) : (\n <Icon size=\"12\" glyph={<ArrowDownIcon />} />\n )}\n </span>\n <span className={styles['more-unreads-banner__label']}>More unreads</span>\n </button>\n );\n}\n","import {\n forwardRef,\n useCallback,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport SimpleBar from 'simplebar-react';\nimport 'simplebar-react/dist/simplebar.min.css';\nimport styles from './Scrollbar.module.scss';\n\nexport interface ScrollbarProps {\n /** Scrollable content. */\n children: ReactNode;\n /**\n * CSS variable name (including the leading `--`) for the thumb RGB triplet.\n * Use this to recolor the thumb in dark surfaces (e.g. `--sidebar-text-rgb`).\n * When omitted, the thumb uses `--center-channel-color-rgb`.\n */\n color?: string;\n /**\n * Disable auto-hide; the thumb is visible whenever content overflows.\n * Default: false (auto-hide).\n */\n alwaysVisible?: boolean;\n /** Class applied to the SimpleBar root. */\n className?: string;\n /** Inline style applied to the SimpleBar root. */\n style?: CSSProperties;\n /** Scroll handler attached to the inner scrollable element. */\n onScroll?: (e: Event) => void;\n}\n\n/**\n * Scrollbars let people move through content that exceeds the viewport while showing where\n * they are in the larger whole. Compass uses a single, minimal treatment — a transparent\n * track with a thin, translucent thumb — so the scrollbar reads as a position indicator\n * first and a control second.\n */\nconst Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(function Scrollbar(\n { children, color, alwaysVisible = false, className, style, onScroll },\n ref,\n) {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n\n const setScrollNode = useCallback(\n (el: HTMLDivElement | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n\n if (el && onScroll) {\n el.addEventListener('scroll', onScroll);\n cleanup.current = () => el.removeEventListener('scroll', onScroll);\n }\n\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }\n },\n [onScroll, ref],\n );\n\n const mergedStyle: CSSProperties = {\n ...style,\n ...(color\n ? ({ '--scrollbar-color': `var(${color})` } as CSSProperties)\n : null),\n };\n\n const rootClass = [styles.scrollbar, className].filter(Boolean).join(' ');\n\n return (\n <SimpleBar\n autoHide={!alwaysVisible}\n scrollableNodeProps={{ ref: setScrollNode }}\n className={rootClass}\n style={mergedStyle}\n tabIndex={-1}\n >\n {children}\n </SimpleBar>\n );\n});\n\nexport default Scrollbar;\n","import type { ChannelSidebarItemProps } from '@/components/ChannelSidebarItem/ChannelSidebarItem';\n\nexport type ChannelsSidebarItemModel = Pick<\n ChannelSidebarItemProps,\n | 'name'\n | 'leadingVisual'\n | 'active'\n | 'status'\n | 'mentionCount'\n | 'memberCount'\n | 'avatarSrc'\n | 'avatarAlt'\n | 'showAvatarStatus'\n | 'onClick'\n>;\n\nexport interface ChannelsSidebarCategoryModel {\n label: string;\n showChevron?: boolean;\n showPlusButton?: boolean;\n}\n\nexport interface ChannelsSidebarGroupModel {\n key: string;\n category: ChannelsSidebarCategoryModel;\n items: ChannelsSidebarItemModel[];\n}\n\nexport interface ChannelsSidebarModel {\n topGroupItems: ChannelsSidebarItemModel[];\n groups: ChannelsSidebarGroupModel[];\n}\n\n/**\n * Applies per-page display renames (keys = default names from the model) to\n * `name` and `avatarAlt` on each row, matching pre-model `channelNameOverrides` behavior.\n */\nexport function applyChannelNameOverrides(\n model: ChannelsSidebarModel,\n channelNameOverrides?: Record<string, string>,\n): ChannelsSidebarModel {\n if (!channelNameOverrides || Object.keys(channelNameOverrides).length === 0) {\n return model;\n }\n\n const resolve = (s: string) => channelNameOverrides[s] ?? s;\n\n const mapRow = (row: ChannelsSidebarItemModel): ChannelsSidebarItemModel => ({\n ...row,\n name: resolve(row.name),\n avatarAlt: row.avatarAlt != null ? resolve(row.avatarAlt) : row.avatarAlt,\n });\n\n return {\n topGroupItems: model.topGroupItems.map(mapRow),\n groups: model.groups.map((g) => ({\n ...g,\n items: g.items.map(mapRow),\n })),\n };\n}\n","import { useMemo, type ReactNode } from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport FilterVariantIcon from '@mattermost/compass-icons/components/filter-variant';\nimport ChannelSidebarItem from '@/components/ChannelSidebarItem/ChannelSidebarItem';\nimport MoreUnreadsBanner from '@/components/MoreUnreadsBanner/MoreUnreadsBanner';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport {\n applyChannelNameOverrides,\n type ChannelsSidebarItemModel,\n type ChannelsSidebarModel,\n} from './channelsSidebarModel';\nimport styles from './ChannelsSidebar.module.scss';\n\nfunction applyChannelSidebarInteractivity(\n model: ChannelsSidebarModel,\n activeChannelName: string | undefined,\n onItemClick?: (name: string) => void,\n): ChannelsSidebarModel {\n const mapRow = (row: ChannelsSidebarItemModel) => ({\n ...row,\n active:\n activeChannelName === undefined\n ? row.active\n : row.name === activeChannelName,\n onClick: onItemClick ? () => onItemClick(row.name) : row.onClick,\n });\n return {\n topGroupItems: model.topGroupItems.map(mapRow),\n groups: model.groups.map((g) => ({\n ...g,\n items: g.items.map(mapRow),\n })),\n };\n}\n\nexport interface ChannelsSidebarHeaderProps {\n teamName: string;\n}\n\n/** Team row + Add control; same markup as the top of `ChannelsSidebar`. */\nexport function ChannelsSidebarHeader({ teamName }: ChannelsSidebarHeaderProps) {\n return (\n <div className={styles['channels-sidebar__header']}>\n <div className={styles['channels-sidebar__team-dropdown']}>\n <span className={styles['channels-sidebar__team-name']}>\n {teamName}\n </span>\n <span className={styles['channels-sidebar__team-chevron']}>\n <ChevronDownIcon size={16} />\n </span>\n </div>\n <IconButton\n aria-label=\"Add channels\"\n size=\"small\"\n style=\"inverted\"\n padding=\"compact\"\n rounded\n icon={<Icon size=\"16\" glyph={<PlusIcon />} />}\n className={styles['channels-sidebar__sidebar-icon-button']}\n />\n </div>\n );\n}\n\nexport interface ChannelsSidebarNavigatorProps {\n showFilter?: boolean;\n}\n\n/** Find channels row + optional unread filter control; same markup as `ChannelsSidebar`. */\nexport function ChannelsSidebarNavigator({\n showFilter = false,\n}: ChannelsSidebarNavigatorProps) {\n return (\n <div className={styles['channels-sidebar__navigator']}>\n {showFilter && (\n <IconButton\n aria-label=\"Filter channels\"\n size=\"small\"\n style=\"inverted\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<FilterVariantIcon />} />}\n className={styles['channels-sidebar__sidebar-icon-button']}\n />\n )}\n <div className={styles['channels-sidebar__find-channels']}>\n <span className={styles['channels-sidebar__find-channels-icon']}>\n <MagnifyIcon size={16} />\n </span>\n <span className={styles['channels-sidebar__find-channels-label']}>\n Find channels\n </span>\n </div>\n </div>\n );\n}\n\nexport interface ChannelsSidebarCategoryProps {\n label: string;\n showChevron?: boolean;\n showPlusButton?: boolean;\n /** When set, shown instead of the expand chevron (e.g. System Console categories). */\n leadingIcon?: ReactNode;\n /** Pin category row to the top of the scroll container while scrolling (e.g. first console section). */\n sticky?: boolean;\n /** Full-opacity label + leading icon (System Console categories). Default: toned like channel sidebar. */\n opaqueCategory?: boolean;\n}\n\nexport function ChannelsSidebarCategory({\n label,\n showChevron = true,\n showPlusButton = false,\n leadingIcon,\n sticky = false,\n opaqueCategory = false,\n}: ChannelsSidebarCategoryProps) {\n const hasLeadingIcon = Boolean(leadingIcon);\n const showChevronRow = showChevron && !hasLeadingIcon;\n\n const categoryClass = [\n styles['channels-sidebar__category'],\n hasLeadingIcon ? styles['channels-sidebar__category--with-leading-icon'] : '',\n opaqueCategory ? styles['channels-sidebar__category--opaque'] : '',\n !showChevronRow && !hasLeadingIcon\n ? styles['channels-sidebar__category--no-chevron']\n : '',\n showPlusButton ? styles['channels-sidebar__category--has-action'] : '',\n sticky ? styles['channels-sidebar__category--sticky'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={categoryClass}>\n <div className={styles['channels-sidebar__category-left']}>\n {hasLeadingIcon && (\n <span className={styles['channels-sidebar__category-leading-icon']}>\n {leadingIcon}\n </span>\n )}\n {showChevronRow && (\n <span className={styles['channels-sidebar__category-chevron']}>\n <ChevronDownIcon size={12} />\n </span>\n )}\n <span className={styles['channels-sidebar__category-label']}>\n {label}\n </span>\n </div>\n {showPlusButton && (\n <IconButton\n aria-label={`New ${label.toLowerCase()}`}\n size=\"x-small\"\n style=\"inverted\"\n icon={<Icon size=\"12\" glyph={<PlusIcon />} />}\n />\n )}\n </div>\n );\n}\n\nexport interface ChannelsSidebarProps {\n teamName?: string;\n showUnreadsCategory?: boolean;\n showFilter?: boolean;\n showDialPad?: boolean;\n moreUnreadsAbove?: boolean;\n moreUnreadsBelow?: boolean;\n /**\n * Rename built-in channel/DM items without editing the model.\n * Keys are the default names; values are the display names to use instead.\n * Applies to `name` and `avatarAlt` on each item (same as the legacy hardcoded list).\n */\n channelNameOverrides?: Record<string, string>;\n /**\n * Match against **resolved** item names (after `channelNameOverrides`).\n * Omit to keep each row’s fixture `active` value; pass `''` to clear selection.\n */\n activeChannelName?: string;\n /** Receives the row's visible `name` (after overrides). */\n onItemClick?: (name: string) => void;\n avatarAikoTan?: string;\n avatarArjunPatel?: string;\n avatarDanielleOkoro?: string;\n avatarDariusCole?: string;\n avatarDavidLiang?: string;\n avatarEmmaNovak?: string;\n avatarEthanBrooks?: string;\n /** When set, overrides the default channel tree (for per-prototype sidebars). */\n model?: ChannelsSidebarModel;\n}\n\nexport default function ChannelsSidebar({\n teamName = 'Contributors',\n showFilter = false,\n moreUnreadsAbove = false,\n moreUnreadsBelow = false,\n channelNameOverrides,\n activeChannelName,\n onItemClick,\n model: modelProp,\n}: ChannelsSidebarProps) {\n const model = useMemo(() => {\n const baseModel = modelProp ?? { topGroupItems: [], groups: [] };\n const withOverrides = applyChannelNameOverrides(baseModel, channelNameOverrides);\n return applyChannelSidebarInteractivity(\n withOverrides,\n activeChannelName,\n onItemClick,\n );\n }, [\n modelProp,\n channelNameOverrides,\n activeChannelName,\n onItemClick,\n ]);\n\n return (\n <div className={styles['channels-sidebar']}>\n <ChannelsSidebarHeader teamName={teamName} />\n <ChannelsSidebarNavigator showFilter={showFilter} />\n\n <div className={styles['channels-sidebar__top-group']}>\n {model.topGroupItems.map((row, i) => (\n <ChannelSidebarItem key={`top-${i}-${row.name}`} {...row} />\n ))}\n </div>\n\n <div className={styles['channels-sidebar__scroll-view']}>\n <Scrollbar color=\"--sidebar-text-rgb\">\n <div className={styles['channels-sidebar__channel-groups']}>\n {model.groups.map((group) => (\n <div\n key={group.key}\n className={styles['channels-sidebar__channel-group']}\n >\n <ChannelsSidebarCategory\n label={group.category.label}\n showChevron={group.category.showChevron}\n showPlusButton={group.category.showPlusButton}\n />\n {group.items.map((row, index) => (\n <ChannelSidebarItem\n key={`${group.key}-${index}-${row.name}`}\n {...row}\n />\n ))}\n </div>\n ))}\n </div>\n </Scrollbar>\n\n {moreUnreadsAbove && (\n <MoreUnreadsBanner\n direction=\"up\"\n className={`${styles['channels-sidebar__more-unreads']} ${styles['channels-sidebar__more-unreads--above']}`}\n />\n )}\n {moreUnreadsBelow && (\n <MoreUnreadsBanner\n direction=\"down\"\n className={`${styles['channels-sidebar__more-unreads']} ${styles['channels-sidebar__more-unreads--below']}`}\n />\n )}\n </div>\n </div>\n );\n}\n\nexport type { ChannelsSidebarModel } from './channelsSidebarModel';\n","import { type ReactNode, useId } from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CreditCardOutlineIcon from '@mattermost/compass-icons/components/credit-card-outline';\nimport ChartLineIcon from '@mattermost/compass-icons/components/chart-line';\nimport AccountMultipleOutlineIcon from '@mattermost/compass-icons/components/account-multiple-outline';\nimport ServerOutlineIcon from '@mattermost/compass-icons/components/server-outline';\nimport TuneIcon from '@mattermost/compass-icons/components/tune';\nimport ShieldOutlineIcon from '@mattermost/compass-icons/components/shield-outline';\nimport AppsIcon from '@mattermost/compass-icons/components/apps';\nimport WebhookIcon from '@mattermost/compass-icons/components/webhook';\nimport FileTextOutlineIcon from '@mattermost/compass-icons/components/file-text-outline';\nimport FlaskOutlineIcon from '@mattermost/compass-icons/components/flask-outline';\nimport ChannelSidebarItem from '@/components/ChannelSidebarItem/ChannelSidebarItem';\nimport { ChannelsSidebarCategory } from '@/components/ChannelsSidebar/ChannelsSidebar';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport {\n type AdminConsoleSidebarCategoryIconKey,\n type AdminConsoleSidebarGroupModel,\n} from './adminConsoleSidebarModel';\nimport styles from './AdminConsoleSidebar.module.scss';\n\nconst CATEGORY_ICON_GLYPHS: Record<\n AdminConsoleSidebarCategoryIconKey,\n ReactNode\n> = {\n billing: <CreditCardOutlineIcon size={12} />,\n reporting: <ChartLineIcon size={12} />,\n users: <AccountMultipleOutlineIcon size={12} />,\n environment: <ServerOutlineIcon size={12} />,\n site: <TuneIcon size={12} />,\n authentication: <ShieldOutlineIcon size={12} />,\n plugins: <AppsIcon size={12} />,\n integrations: <WebhookIcon size={12} />,\n compliance: <FileTextOutlineIcon size={12} />,\n experimental: <FlaskOutlineIcon size={12} />,\n};\n\nfunction categoryLeadingIcon(\n key: AdminConsoleSidebarCategoryIconKey,\n): ReactNode {\n return CATEGORY_ICON_GLYPHS[key];\n}\n\nexport interface AdminConsoleSidebarProps {\n consoleTitle?: string;\n userHandle?: string;\n /** Used for avatar initials when `avatarSrc` is empty. */\n userDisplayName?: string;\n avatarSrc?: string;\n avatarAlt?: string;\n groups?: AdminConsoleSidebarGroupModel[];\n}\n\nexport default function AdminConsoleSidebar({\n consoleTitle = 'Admin Console',\n userHandle = '@leonard.riley',\n userDisplayName = 'Leonard Riley',\n avatarSrc = '',\n avatarAlt = 'Account avatar',\n groups = [],\n}: AdminConsoleSidebarProps) {\n const findSettingsId = useId();\n return (\n <div className={styles['admin-console-sidebar']}>\n <div className={styles['admin-console-sidebar__header']}>\n <div className={styles['admin-console-sidebar__identity']}>\n <UserAvatar\n src={avatarSrc}\n alt={avatarAlt}\n name={userDisplayName}\n size=\"40\"\n />\n <div className={styles['admin-console-sidebar__identity-text']}>\n <div className={styles['admin-console-sidebar__title-row']}>\n <span className={styles['admin-console-sidebar__title']}>\n {consoleTitle}\n </span>\n <span className={styles['admin-console-sidebar__title-chevron']}>\n <ChevronDownIcon size={16} />\n </span>\n </div>\n <div className={styles['admin-console-sidebar__handle']}>\n {userHandle}\n </div>\n </div>\n </div>\n <label\n className={styles['admin-console-sidebar__find']}\n htmlFor={findSettingsId}\n >\n <span className={styles['admin-console-sidebar__find-icon']} aria-hidden>\n <MagnifyIcon size={12} />\n </span>\n <input\n id={findSettingsId}\n type=\"search\"\n className={styles['admin-console-sidebar__find-field']}\n placeholder=\"Find settings\"\n aria-label=\"Find settings\"\n autoComplete=\"off\"\n spellCheck={false}\n enterKeyHint=\"search\"\n />\n </label>\n </div>\n\n <div className={styles['admin-console-sidebar__scroll']}>\n <Scrollbar color=\"--sidebar-text-rgb\">\n <div className={styles['admin-console-sidebar__nav']}>\n {groups.map((group) => (\n <div\n key={group.key}\n className={styles['admin-console-sidebar__group']}\n >\n <ChannelsSidebarCategory\n label={group.categoryLabel}\n showChevron={false}\n leadingIcon={categoryLeadingIcon(group.categoryIconKey)}\n sticky={group.stickyCategory}\n opaqueCategory\n />\n {group.items.map((row, index) => (\n <ChannelSidebarItem\n key={`${group.key}-${index}-${row.name}`}\n name={row.name}\n hideLeadingVisual\n active={row.active}\n status=\"read\"\n />\n ))}\n </div>\n ))}\n </div>\n </Scrollbar>\n </div>\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport Icon from '@/components/Icon/Icon';\nimport type { IconSize } from '@/components/Icon/Icon';\nimport { toKebab } from '@/utils/string';\nimport styles from './Button.module.scss';\n\nexport type ButtonEmphasis =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'quaternary';\n\nexport type ButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\nexport type ButtonAppearance = 'default' | 'inverted';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** default | inverted (for use on dark backgrounds). Maps to Figma \"Style\". */\n appearance?: ButtonAppearance;\n /** Optional CSS class name. */\n className?: string;\n /** Button label. */\n children: React.ReactNode;\n /** When true, uses destructive (danger) styling. */\n destructive?: boolean;\n /** Visual emphasis. Default: primary. */\n emphasis?: ButtonEmphasis;\n /** Leading icon (e.g. <Icon glyph={<SomeIcon />} size=\"16\" />). Icon size should match button size. */\n leadingIcon?: ReactNode;\n /** Size variant. Default: medium. */\n size?: ButtonSize;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n}\n\nconst SIZE_ICON_MAP: Record<ButtonSize, IconSize> = {\n 'x-small': '12',\n small: '16',\n medium: '16',\n large: '20',\n};\n\n/**\n * Buttons let people take actions or make decisions with a single tap or click — saving a\n * form, sending a message, confirming a dialog. Compass ships several button variants, each\n * with the same anatomy and rhythm so they feel like members of the same family.\n */\nexport default function Button({\n appearance = 'default',\n className = '',\n destructive = false,\n emphasis = 'primary',\n children,\n leadingIcon,\n size = 'medium',\n trailingIcon,\n disabled,\n type = 'button',\n ...rest\n}: ButtonProps) {\n const iconSize = SIZE_ICON_MAP[size];\n const emphasisClass = styles[`button--emphasis-${toKebab(emphasis)}`];\n const sizeClass = styles[`button--size-${toKebab(size)}`];\n const appearanceClass =\n appearance === 'inverted' ? styles['button--appearance-inverted'] : '';\n const destructiveClass = destructive ? styles['button--destructive'] : '';\n\n const rootClass = [\n styles.button,\n emphasisClass,\n sizeClass,\n appearanceClass,\n destructiveClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button className={rootClass} type={type} disabled={disabled} {...rest}>\n {leadingIcon != null ? (\n <span className={styles['button__icon-slot']} aria-hidden>\n {typeof leadingIcon === 'boolean' ? (\n <Icon size={iconSize} />\n ) : (\n leadingIcon\n )}\n </span>\n ) : null}\n <span className={styles['button__label']}>{children}</span>\n {trailingIcon != null ? (\n <span className={styles['button__icon-slot']} aria-hidden>\n {typeof trailingIcon === 'boolean' ? (\n <Icon size={iconSize} />\n ) : (\n trailingIcon\n )}\n </span>\n ) : null}\n </button>\n );\n}\n","import type { ChangeEvent } from 'react';\nimport { useState } from 'react';\n\n/**\n * Handles the controlled/uncontrolled pattern for boolean inputs (checkbox, radio, switch).\n *\n * - If `controlled` is provided (not undefined), the component is controlled and the\n * caller owns the value. Changes are forwarded to `onChange` only.\n * - If `controlled` is undefined, the component manages its own state, initialised\n * from `defaultValue`.\n *\n * Returns `[value, handleChange]`.\n */\nexport function useControllable(\n controlled: boolean | undefined,\n defaultValue: boolean | undefined,\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void,\n): [boolean, (e: ChangeEvent<HTMLInputElement>) => void] {\n const isControlled = controlled !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? false);\n\n const value = isControlled ? controlled! : uncontrolled;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolled(e.target.checked);\n onChange?.(e);\n };\n\n return [value, handleChange];\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { useId } from 'react';\nimport { useControllable } from '@/hooks/useControllable';\nimport { toKebab } from '@/utils/string';\nimport styles from './Switch.module.scss';\n\nexport type SwitchSize = 'small' | 'medium' | 'large';\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Size variant. Figma: Small (16px), Medium (20px), Large (24px). Default: Medium. */\n size?: SwitchSize;\n /** Primary label content. Rendered to the left of the switch. */\n children?: React.ReactNode;\n /** Optional secondary label (e.g. description) below the primary label. */\n secondaryLabel?: React.ReactNode;\n /** When true, primary label uses semi-bold (600) weight. Default: false. */\n semiBold?: boolean;\n}\n\n/**\n * A Switch is a real-world toggle: flip it, and the change happens. Use it for binary\n * settings that take effect immediately and don't need a separate \"Save\" step.\n */\nexport default function Switch({\n className = '',\n size = 'medium',\n children,\n secondaryLabel,\n semiBold = false,\n id: idProp,\n checked,\n defaultChecked,\n disabled,\n onChange,\n ...rest\n}: SwitchProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const [resolvedChecked, handleChange] = useControllable(\n checked,\n defaultChecked,\n onChange,\n );\n\n const sizeClass = styles[`switch--size-${toKebab(size)}`];\n const semiBoldClass = semiBold ? styles['switch--semi-bold'] : '';\n const secondaryClass =\n secondaryLabel != null ? styles['switch--with-secondary'] : '';\n\n const rootClass = [\n styles.switch,\n sizeClass,\n semiBoldClass,\n secondaryClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={rootClass} htmlFor={id}>\n {(children != null || secondaryLabel != null) && (\n <span className={styles['switch__labels']}>\n {children != null && (\n <span className={styles['switch__label']}>{children}</span>\n )}\n {secondaryLabel != null && (\n <span className={styles['switch__secondary-label']}>\n {secondaryLabel}\n </span>\n )}\n </span>\n )}\n <span className={styles['switch__track']} aria-hidden>\n {/* Native checkbox (visually hidden via CSS); provides semantics, keyboard, and form support */}\n <input\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n className={styles['switch__input']}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={resolvedChecked}\n onChange={handleChange}\n {...rest}\n />\n <span className={styles['switch__knob']} />\n </span>\n </label>\n );\n}\n","import { type ChangeEvent, type ReactNode } from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronUpIcon from '@mattermost/compass-icons/components/chevron-up';\nimport CogOutlineIcon from '@mattermost/compass-icons/components/cog-outline';\nimport MattermostIcon from '@mattermost/compass-icons/components/mattermost';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport Switch from '@/components/Switch/Switch';\nimport styles from './AdminPanelHeader.module.scss';\n\n/** System Console admin panel expand/collapse (`expandedState` in Figma). */\nexport type AdminPanelExpandedState = 'collapsed' | 'expanded';\n\nexport interface AdminPanelHeaderProps {\n /** Passed to the title `h2` for `aria-labelledby` on the parent panel. */\n titleId: string;\n title: ReactNode;\n subtitle?: ReactNode;\n /** Trailing accessory actions rendered after Switch / Primary button and before expand. */\n headerActions?: ReactNode;\n iconLeft?: boolean;\n leadingIcon?: ReactNode;\n showBeta?: boolean;\n betaLabel?: string;\n showEnterpriseLabel?: boolean;\n enterpriseLabel?: string;\n showButton?: boolean;\n buttonLabel?: string;\n onButtonClick?: () => void;\n showSwitch?: boolean;\n switchLabel?: ReactNode;\n switchChecked?: boolean;\n defaultSwitchChecked?: boolean;\n onSwitchChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;\n switchDisabled?: boolean;\n expandable?: boolean;\n isExpanded?: boolean;\n onToggleExpand?: () => void;\n /** Bottom border under the header row (hidden when expandable and collapsed). */\n showDivider?: boolean;\n className?: string;\n}\n\n/**\n * Admin Panel Header is the titled rail for a System Console settings section: optional\n * leading icon, title with optional tags, subtitle, and trailing controls. It is composed\n * inside the [`Admin Panel`](/patterns/admin-panel) pattern; it can also be documented on\n * its own when adjusting header anatomy or behaviour.\n */\nexport default function AdminPanelHeader({\n titleId,\n title,\n subtitle,\n headerActions,\n iconLeft = false,\n leadingIcon,\n showBeta = false,\n betaLabel = 'Beta',\n showEnterpriseLabel = false,\n enterpriseLabel = 'Enterprise',\n showButton = false,\n buttonLabel = 'Button',\n onButtonClick,\n showSwitch = false,\n switchLabel = 'Off',\n switchChecked,\n defaultSwitchChecked,\n onSwitchChange,\n switchDisabled,\n expandable = false,\n isExpanded = false,\n onToggleExpand,\n showDivider = true,\n className = '',\n}: AdminPanelHeaderProps) {\n const hasActions =\n showSwitch || showButton || headerActions != null || expandable;\n\n const defaultLeading = <Icon size=\"20\" glyph={<CogOutlineIcon />} />;\n\n return (\n <header\n className={[\n styles['admin-panel-header'],\n showDivider ? styles['admin-panel-header--divided'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n .trim()}\n >\n <div className={styles['admin-panel-header__main']}>\n <div className={styles['admin-panel-header__start']}>\n {iconLeft ? (\n <div\n className={styles['admin-panel-header__leading']}\n aria-hidden\n >\n {leadingIcon ?? defaultLeading}\n </div>\n ) : null}\n <div className={styles['admin-panel-header__title-stack']}>\n <div className={styles['admin-panel-header__title-row']}>\n <h2\n id={titleId}\n className={styles['admin-panel-header__title']}\n >\n {title}\n </h2>\n {showEnterpriseLabel ? (\n <Tag\n label={enterpriseLabel}\n size=\"x-small\"\n type=\"default\"\n leadingIcon={<Icon size=\"10\" glyph={<MattermostIcon />} />}\n />\n ) : null}\n {showBeta ? (\n <Tag label={betaLabel} size=\"x-small\" type=\"default\" />\n ) : null}\n </div>\n {subtitle != null ? (\n <p className={styles['admin-panel-header__subtitle']}>\n {subtitle}\n </p>\n ) : null}\n </div>\n </div>\n {hasActions ? (\n <div className={styles['admin-panel-header__actions']}>\n {showSwitch ? (\n <Switch\n size=\"medium\"\n checked={switchChecked}\n defaultChecked={defaultSwitchChecked}\n disabled={switchDisabled}\n onChange={(e) => {\n onSwitchChange?.(e.target.checked, e);\n }}\n >\n {switchLabel}\n </Switch>\n ) : null}\n {showButton ? (\n <Button\n type=\"button\"\n size=\"medium\"\n emphasis=\"primary\"\n onClick={onButtonClick}\n >\n {buttonLabel}\n </Button>\n ) : null}\n {headerActions}\n {expandable ? (\n <IconButton\n type=\"button\"\n style=\"default\"\n size=\"medium\"\n aria-label={isExpanded ? 'Collapse section' : 'Expand section'}\n aria-expanded={isExpanded}\n onClick={onToggleExpand}\n icon={\n <Icon\n size=\"20\"\n glyph={isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n />\n }\n />\n ) : null}\n </div>\n ) : null}\n </div>\n </header>\n );\n}\n","import { useId, useState, type ChangeEvent, type ReactNode } from 'react';\nimport AdminPanelHeader, {\n type AdminPanelExpandedState,\n} from '@/components/AdminPanelHeader/AdminPanelHeader';\nimport styles from './AdminPanel.module.scss';\n\nexport type { AdminPanelExpandedState };\n\nexport interface AdminPanelProps {\n title: ReactNode;\n subtitle?: ReactNode;\n children?: ReactNode;\n className?: string;\n headerActions?: ReactNode;\n iconLeft?: boolean;\n leadingIcon?: ReactNode;\n showBeta?: boolean;\n betaLabel?: string;\n showEnterpriseLabel?: boolean;\n enterpriseLabel?: string;\n showButton?: boolean;\n buttonLabel?: string;\n onButtonClick?: () => void;\n showSwitch?: boolean;\n switchLabel?: ReactNode;\n switchChecked?: boolean;\n defaultSwitchChecked?: boolean;\n onSwitchChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;\n switchDisabled?: boolean;\n expandable?: boolean;\n expandedState?: AdminPanelExpandedState;\n defaultExpandedState?: AdminPanelExpandedState;\n onExpandedStateChange?: (state: AdminPanelExpandedState) => void;\n}\n\n/**\n * System Console admin settings panel: `AdminPanelHeader` plus a body slot\n * for grouped fields. Expand/collapse state is owned here and passed to the header.\n */\nexport default function AdminPanel({\n title,\n subtitle,\n headerActions,\n children,\n className = '',\n iconLeft = false,\n leadingIcon,\n showBeta = false,\n betaLabel = 'Beta',\n showEnterpriseLabel = false,\n enterpriseLabel = 'Enterprise',\n showButton = false,\n buttonLabel = 'Button',\n onButtonClick,\n showSwitch = false,\n switchLabel = 'Off',\n switchChecked,\n defaultSwitchChecked,\n onSwitchChange,\n switchDisabled,\n expandable = false,\n expandedState: expandedStateProp,\n defaultExpandedState = 'collapsed',\n onExpandedStateChange,\n}: AdminPanelProps) {\n const titleId = useId();\n\n const [uncontrolledExpanded, setUncontrolledExpanded] =\n useState<AdminPanelExpandedState>(defaultExpandedState);\n\n const isExpandControlled = expandable && expandedStateProp !== undefined;\n const resolvedExpandedState: AdminPanelExpandedState = !expandable\n ? 'expanded'\n : isExpandControlled\n ? expandedStateProp!\n : uncontrolledExpanded;\n\n const isExpanded = resolvedExpandedState === 'expanded';\n\n const setExpandedState = (next: AdminPanelExpandedState) => {\n if (!expandable) return;\n if (!isExpandControlled) {\n setUncontrolledExpanded(next);\n }\n onExpandedStateChange?.(next);\n };\n\n const toggleExpanded = () => {\n setExpandedState(isExpanded ? 'collapsed' : 'expanded');\n };\n\n const showHeaderDivider = !expandable || isExpanded;\n\n return (\n <section\n className={[styles['admin-panel'], className].join(' ').trim()}\n aria-labelledby={titleId}\n >\n <AdminPanelHeader\n titleId={titleId}\n title={title}\n subtitle={subtitle}\n headerActions={headerActions}\n iconLeft={iconLeft}\n leadingIcon={leadingIcon}\n showBeta={showBeta}\n betaLabel={betaLabel}\n showEnterpriseLabel={showEnterpriseLabel}\n enterpriseLabel={enterpriseLabel}\n showButton={showButton}\n buttonLabel={buttonLabel}\n onButtonClick={onButtonClick}\n showSwitch={showSwitch}\n switchLabel={switchLabel}\n switchChecked={switchChecked}\n defaultSwitchChecked={defaultSwitchChecked}\n onSwitchChange={onSwitchChange}\n switchDisabled={switchDisabled}\n expandable={expandable}\n isExpanded={isExpanded}\n onToggleExpand={toggleExpanded}\n showDivider={showHeaderDivider}\n />\n {expandable ? (\n <div\n className={[\n styles['admin-panel__collapse'],\n isExpanded ? styles['admin-panel__collapse--expanded'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-hidden={!isExpanded}\n >\n <div className={styles['admin-panel__collapse-inner']}>\n <div className={styles['admin-panel__body']}>{children}</div>\n </div>\n </div>\n ) : (\n <div className={styles['admin-panel__body']}>{children}</div>\n )}\n </section>\n );\n}\n","import type { ReactNode } from 'react';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport AlertOutlineIcon from '@mattermost/compass-icons/components/alert-outline';\nimport Button from '@/components/Button/Button';\nimport styles from './AdminPanelFooter.module.scss';\n\nexport type AdminPanelFooterStatus = 'none' | 'warning' | 'error';\n\nexport interface AdminPanelFooterProps {\n /** Primary footer action label. */\n saveLabel?: string;\n cancelLabel?: string;\n onSave?: () => void;\n onCancel?: () => void;\n /** When true, Save uses disabled styling until the sheet is actionable. */\n saveDisabled?: boolean;\n /** Optional validation summary beside the buttons. */\n status?: AdminPanelFooterStatus;\n /** Override default copy when `warning` | `error`. */\n statusMessage?: ReactNode;\n className?: string;\n}\n\nconst DEFAULT_WARNING = 'There are outstanding issues in the form above.';\nconst DEFAULT_ERROR = 'There are errors in the form above.';\n\n/**\n * Admin Panel Footer pins Save and Cancel to the bottom of System Console form layouts. It\n * mirrors channel composer discipline: one primary commit path, a safe escape hatch, and\n * optional validation status without stealing focus from the draft.\n */\nexport default function AdminPanelFooter({\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n onSave,\n onCancel,\n saveDisabled = true,\n status = 'none',\n statusMessage,\n className = '',\n}: AdminPanelFooterProps) {\n let statusUi: ReactNode = null;\n\n if (status === 'warning') {\n const copy = statusMessage ?? DEFAULT_WARNING;\n statusUi = (\n <>\n <span className={styles['admin-panel-footer__status-icon']} aria-hidden>\n <AlertOutlineIcon size={12} />\n </span>\n <span>{copy}</span>\n </>\n );\n }\n\n if (status === 'error') {\n const copy = statusMessage ?? DEFAULT_ERROR;\n statusUi = (\n <>\n <span className={styles['admin-panel-footer__status-icon']} aria-hidden>\n <AlertCircleOutlineIcon size={12} />\n </span>\n <span>{copy}</span>\n </>\n );\n }\n\n const statusMod =\n status === 'warning'\n ? styles['admin-panel-footer--status-warning']\n : status === 'error'\n ? styles['admin-panel-footer--status-error']\n : '';\n\n return (\n <footer\n className={[styles['admin-panel-footer'], statusMod, className]\n .filter(Boolean)\n .join(' ')\n .trim()}\n role=\"contentinfo\"\n >\n <div className={styles['admin-panel-footer__inner']}>\n <div className={styles['admin-panel-footer__actions']}>\n <Button\n type=\"button\"\n size=\"medium\"\n emphasis=\"primary\"\n disabled={saveDisabled}\n onClick={onSave}\n >\n {saveLabel}\n </Button>\n <Button\n type=\"button\"\n size=\"medium\"\n emphasis=\"tertiary\"\n onClick={onCancel}\n >\n {cancelLabel}\n </Button>\n </div>\n {statusUi != null ? (\n <div\n className={styles['admin-panel-footer__status']}\n role=\"alert\"\n >\n {statusUi}\n </div>\n ) : null}\n </div>\n </footer>\n );\n}\n","import type { ReactNode } from 'react';\nimport styles from './AppBarItem.module.scss';\n\nexport type AppBarItemState = 'default' | 'selected';\n\nexport interface AppBarItemProps {\n /** Icon element (image or SVG) representing the app. */\n icon: ReactNode;\n /** Accessible label for the app item. */\n label: string;\n /** Interaction state. Default: Default. */\n state?: AppBarItemState;\n /** When true, shows a mention count badge. */\n mentionBadge?: number;\n /** When true, shows an unread dot badge. */\n unreadBadge?: boolean;\n /** Click handler. */\n onClick?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The App Bar Item is a circular icon that anchors a third-party app or plugin in the\n * right-side App Bar. Each item is a single tap-target with optional selection styling and\n * notification badges.\n */\nexport default function AppBarItem({\n icon,\n label,\n state = 'default',\n mentionBadge,\n unreadBadge = false,\n onClick,\n className = '',\n}: AppBarItemProps) {\n const isSelected = state === 'selected';\n\n const rootClass = [\n styles['app-bar-item'],\n isSelected ? styles['app-bar-item--selected'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n type=\"button\"\n className={rootClass}\n aria-label={label}\n aria-pressed={isSelected}\n onClick={onClick}\n >\n <span className={styles['app-bar-item__icon']}>{icon}</span>\n\n {mentionBadge != null && mentionBadge > 0 && (\n <span\n className={styles['app-bar-item__mention-badge']}\n aria-label={`${mentionBadge} mentions`}\n >\n {mentionBadge}\n </span>\n )}\n\n {unreadBadge && mentionBadge == null && (\n <span\n className={styles['app-bar-item__unread-badge']}\n aria-label=\"Unread\"\n />\n )}\n </button>\n );\n}\n","import type { ComponentType } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport DotsVerticalIcon from '@mattermost/compass-icons/components/dots-vertical';\nimport DownloadOutlineIcon from '@mattermost/compass-icons/components/download-outline';\nimport FileAudioOutlineLargeIcon from '@mattermost/compass-icons/components/file-audio-outline-large';\nimport FileCodeOutlineLargeIcon from '@mattermost/compass-icons/components/file-code-outline-large';\nimport FileExcelOutlineLargeIcon from '@mattermost/compass-icons/components/file-excel-outline-large';\nimport FileGenericOutlineLargeIcon from '@mattermost/compass-icons/components/file-generic-outline-large';\nimport FileImageOutlineLargeIcon from '@mattermost/compass-icons/components/file-image-outline-large';\nimport FilePatchOutlineLargeIcon from '@mattermost/compass-icons/components/file-patch-outline-large';\nimport FilePdfOutlineLargeIcon from '@mattermost/compass-icons/components/file-pdf-outline-large';\nimport FilePowerpointOutlineLargeIcon from '@mattermost/compass-icons/components/file-powerpoint-outline-large';\nimport FileTextOutlineLargeIcon from '@mattermost/compass-icons/components/file-text-outline-large';\nimport FileVideoOutlineLargeIcon from '@mattermost/compass-icons/components/file-video-outline-large';\nimport FileWordOutlineLargeIcon from '@mattermost/compass-icons/components/file-word-outline-large';\nimport FileZipOutlineLargeIcon from '@mattermost/compass-icons/components/file-zip-outline-large';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport styles from './AttachmentCard.module.scss';\n\nexport type AttachmentCardFileType =\n | 'text'\n | 'word'\n | 'excel'\n | 'powerpoint'\n | 'pdf'\n | 'image-icon'\n | 'image-thumbnail'\n | 'video'\n | 'audio'\n | 'generic'\n | 'patch'\n | 'zip'\n | 'code';\n\nexport type AttachmentCardState = 'default' | 'uploading' | 'uploaded';\n\nexport interface AttachmentCardProps {\n className?: string;\n /** File name to display. */\n fileName: string;\n /** File type + size string shown below the filename, e.g. \"TXT 15KB\". */\n fileMeta?: string;\n /** Controls the icon shown on the left. Default: \"generic\". */\n fileType?: AttachmentCardFileType;\n /** Card state. Default: \"default\" (browsing context). */\n state?: AttachmentCardState;\n /** Upload progress 0–100. Used when state=\"uploading\". */\n progress?: number;\n /** Thumbnail image URL. Used when fileType=\"image-thumbnail\". */\n thumbnailSrc?: string;\n /** Optional channel tag label shown below the filename, e.g. \"UX Design\". */\n channelTag?: string;\n /** Optional date/time stamp, e.g. \"Sep 24 5:14 PM\". */\n dateTimeStamp?: string;\n /** Called when the remove or cancel button is clicked. */\n onRemove?: () => void;\n /** Called when the download button is clicked (visible on hover in default state). */\n onDownload?: () => void;\n /** Called when the more-options button is clicked (visible on hover in default state). */\n onMore?: () => void;\n}\n\ntype IconComponent = ComponentType<{ size: number; className?: string }>;\n\nconst FILE_TYPE_ICONS: Record<\n Exclude<AttachmentCardFileType, 'image-thumbnail'>,\n IconComponent\n> = {\n audio: FileAudioOutlineLargeIcon,\n code: FileCodeOutlineLargeIcon,\n excel: FileExcelOutlineLargeIcon,\n generic: FileGenericOutlineLargeIcon,\n 'image-icon': FileImageOutlineLargeIcon,\n patch: FilePatchOutlineLargeIcon,\n pdf: FilePdfOutlineLargeIcon,\n powerpoint: FilePowerpointOutlineLargeIcon,\n text: FileTextOutlineLargeIcon,\n video: FileVideoOutlineLargeIcon,\n word: FileWordOutlineLargeIcon,\n zip: FileZipOutlineLargeIcon,\n};\n\nconst FILE_TYPE_COLORS: Record<\n Exclude<AttachmentCardFileType, 'image-thumbnail'>,\n string | undefined\n> = {\n audio: 'var(--attachment-blue)',\n code: undefined,\n excel: 'var(--attachment-green)',\n generic: undefined,\n 'image-icon': 'var(--attachment-blue)',\n patch: undefined,\n pdf: 'var(--attachment-red)',\n powerpoint: 'var(--attachment-orange)',\n text: undefined,\n video: 'var(--attachment-blue)',\n word: 'var(--attachment-blue)',\n zip: undefined,\n};\n\n/**\n * Attachment Cards represent a file shared in a channel, message, or task. Each card shows\n * the file's identity at a glance — type, name, size — and hosts the actions a viewer can\n * take on it.\n */\nexport default function AttachmentCard({\n className = '',\n fileName,\n fileMeta,\n fileType = 'generic',\n state = 'default',\n progress = 0,\n thumbnailSrc,\n channelTag,\n dateTimeStamp,\n onRemove,\n onDownload,\n onMore,\n}: AttachmentCardProps) {\n const isUploading = state === 'uploading';\n const isUploaded = state === 'uploaded';\n const isDefault = state === 'default';\n\n const stateClass = !isDefault ? styles[`attachment-card--${state}`] : '';\n const rootClass = [styles['attachment-card'], stateClass, className]\n .filter(Boolean)\n .join(' ');\n\n const FileIcon =\n fileType !== 'image-thumbnail'\n ? FILE_TYPE_ICONS[fileType]\n : FileGenericOutlineLargeIcon;\n\n const iconColor =\n fileType !== 'image-thumbnail' ? FILE_TYPE_COLORS[fileType] : undefined;\n\n return (\n <div className={rootClass}>\n <div className={styles['attachment-card__container']}>\n <div className={styles['attachment-card__inner']}>\n <div className={styles['attachment-card__left']}>\n {fileType === 'image-thumbnail' && thumbnailSrc ? (\n <img\n src={thumbnailSrc}\n alt=\"\"\n className={styles['attachment-card__thumbnail']}\n />\n ) : (\n <div\n className={styles['attachment-card__icon']}\n style={iconColor ? { color: iconColor } : undefined}\n >\n <Icon glyph={<FileIcon size={40} />} size=\"40\" />\n </div>\n )}\n\n <div className={styles['attachment-card__text']}>\n <p className={styles['attachment-card__filename']}>{fileName}</p>\n <div className={styles['attachment-card__secondary-details']}>\n {isUploading ? (\n <span className={styles['attachment-card__uploading-text']}>\n {`Uploading… (${progress}%)`}\n </span>\n ) : (\n <>\n {channelTag && <Tag label={channelTag} />}\n {fileMeta && (\n <div className={styles['attachment-card__details']}>\n <span>{fileMeta}</span>\n {dateTimeStamp && (\n <span className={styles['attachment-card__datetime']}>\n <span>{'•'}</span>\n <span>{dateTimeStamp}</span>\n </span>\n )}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n\n <div className={styles['attachment-card__right']}>\n <div className={styles['attachment-card__actions']}>\n {(isUploaded || isUploading) && (\n <IconButton\n size=\"small\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n aria-label={\n isUploading ? 'Cancel upload' : 'Remove attachment'\n }\n onClick={onRemove}\n />\n )}\n {isDefault && (\n <>\n <IconButton\n size=\"small\"\n icon={<Icon glyph={<DotsVerticalIcon />} size=\"16\" />}\n aria-label=\"More options\"\n onClick={onMore}\n />\n <IconButton\n size=\"small\"\n icon={<Icon glyph={<DownloadOutlineIcon />} size=\"16\" />}\n aria-label=\"Download\"\n onClick={onDownload}\n />\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {isUploading && (\n <div className={styles['attachment-card__progress-bar']}>\n <div\n className={styles['attachment-card__progress-fill']}\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport StarOutlineIcon from '@mattermost/compass-icons/components/star-outline';\nimport StarIcon from '@mattermost/compass-icons/components/star';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport BellOffOutlineIcon from '@mattermost/compass-icons/components/bell-off-outline';\nimport AccountOutlineIcon from '@mattermost/compass-icons/components/account-outline';\nimport PinOutlineIcon from '@mattermost/compass-icons/components/pin-outline';\nimport FileTextOutlineIcon from '@mattermost/compass-icons/components/file-text-outline';\nimport PhoneIcon from '@mattermost/compass-icons/components/phone';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport styles from './ChannelHeader.module.scss';\n\nexport type ChannelHeaderType =\n | 'channel'\n | 'bot'\n | 'dm'\n | 'gm'\n | 'threads'\n | 'drafts';\n\nexport interface ChannelHeaderProps {\n /** Channel type variant. Default: Channel. */\n type?: ChannelHeaderType;\n /** Channel or conversation name. */\n name?: string;\n /** Subtitle shown to the right of the stat icons (Bot) or next to the title (Threads, Drafts). */\n description?: string;\n /** Member count shown for Channel and GM types. */\n memberCount?: number;\n /** Number of pinned messages shown as a stat. */\n pinnedCount?: number;\n /** Whether the channel is favorited (filled star). */\n favorited?: boolean;\n /** Whether the channel is muted (bell-off icon shown). */\n muted?: boolean;\n /** Avatar image URL for DM and Bot types. */\n avatarSrc?: string;\n /** Show online status badge on the DM avatar. */\n avatarStatus?: boolean;\n /** Called when the favorite star is clicked. */\n onFavoriteClick?: () => void;\n /** Called when the channel name is clicked. */\n onNameClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Called when the Start a Call button is clicked. */\n onCallClick?: () => void;\n /** Replaces the default Start a Call button when provided. */\n callButton?: ReactNode;\n /** Called when the channel info button is clicked. */\n onInfoClick?: () => void;\n /** Whether the info button is in a toggled (active) state. */\n infoToggled?: boolean;\n className?: string;\n}\n\nexport default function ChannelHeader({\n type = 'channel',\n name = '',\n description,\n memberCount,\n pinnedCount,\n favorited = false,\n muted = false,\n avatarSrc,\n avatarStatus = false,\n onFavoriteClick,\n onNameClick,\n onCallClick,\n callButton,\n onInfoClick,\n infoToggled = false,\n className = '',\n}: ChannelHeaderProps) {\n const isSimple = type === 'threads' || type === 'drafts';\n const showCallButton = type === 'channel' || type === 'dm' || type === 'gm';\n const showMembers =\n (type === 'channel' || type === 'gm') && memberCount != null;\n const showFiles = type === 'channel' || type === 'dm' || type === 'gm';\n const showChevron = type === 'channel' || type === 'dm' || type === 'gm';\n const hasDmAvatar = (type === 'dm' || type === 'bot') && Boolean(avatarSrc);\n\n const rootClass = [\n styles['channel-header'],\n isSimple ? styles['channel-header--simple'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n if (isSimple) {\n return (\n <div className={rootClass}>\n <span className={styles['channel-header__title']}>{name}</span>\n {description && (\n <span className={styles['channel-header__description']}>\n {description}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div className={rootClass}>\n <div className={styles['channel-header__left']}>\n <div className={styles['channel-header__top-row']}>\n <IconButton\n size=\"x-small\"\n aria-label={\n favorited ? 'Remove from favorites' : 'Add to favorites'\n }\n onClick={onFavoriteClick}\n icon={\n favorited ? (\n <span\n style={{ color: 'var(--button-bg)', display: 'inline-flex' }}\n >\n <StarIcon size={18} />\n </span>\n ) : (\n <StarOutlineIcon size={18} />\n )\n }\n />\n\n {hasDmAvatar && (\n <div className={styles['channel-header__identity']}>\n <UserAvatar\n src={avatarSrc!}\n alt={name}\n size=\"24\"\n status={type === 'dm' ? avatarStatus : false}\n />\n {type === 'bot' ? (\n <div className={styles['channel-header__bot-name-group']}>\n <button\n className={styles['channel-header__name-area']}\n type=\"button\"\n onClick={onNameClick}\n >\n <span className={styles['channel-header__name']}>\n {name}\n </span>\n </button>\n <span className={styles['channel-header__bot-tag']}>\n <Tag label=\"BOT\" casing=\"all-caps\" />\n </span>\n </div>\n ) : (\n <button\n className={styles['channel-header__name-area']}\n type=\"button\"\n onClick={onNameClick}\n >\n <span className={styles['channel-header__name']}>{name}</span>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </button>\n )}\n </div>\n )}\n\n {!hasDmAvatar && (\n <button\n className={styles['channel-header__name-area']}\n type=\"button\"\n onClick={onNameClick}\n >\n <span className={styles['channel-header__name']}>{name}</span>\n {showChevron && <Icon size=\"16\" glyph={<ChevronDownIcon />} />}\n </button>\n )}\n\n <div className={styles['channel-header__stat-icons']}>\n {muted && (\n <IconButton\n size=\"x-small\"\n aria-label=\"Notifications muted\"\n icon={<Icon size=\"12\" glyph={<BellOffOutlineIcon />} />}\n />\n )}\n {showMembers && (\n <IconButton\n size=\"x-small\"\n aria-label={`${memberCount} members`}\n count={memberCount}\n icon={<Icon size=\"12\" glyph={<AccountOutlineIcon />} />}\n />\n )}\n {pinnedCount != null && (\n <IconButton\n size=\"x-small\"\n aria-label={`${pinnedCount} pinned messages`}\n count={pinnedCount}\n icon={<Icon size=\"12\" glyph={<PinOutlineIcon />} />}\n />\n )}\n {showFiles && (\n <IconButton\n size=\"x-small\"\n aria-label=\"Files\"\n icon={<Icon size=\"12\" glyph={<FileTextOutlineIcon />} />}\n />\n )}\n </div>\n </div>\n\n <div className={styles['channel-header__description']}>\n {description ?? null}\n </div>\n </div>\n\n <div className={styles['channel-header__right']}>\n {showCallButton && (callButton ?? (\n <Button\n className={styles['channel-header__call-btn']}\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={<Icon size=\"16\" glyph={<PhoneIcon />} />}\n onClick={onCallClick}\n >\n Start a Call\n </Button>\n ))}\n <IconButton\n size=\"small\"\n aria-label=\"Channel info\"\n icon={<Icon size=\"16\" glyph={<InformationOutlineIcon />} />}\n onClick={onInfoClick}\n toggled={infoToggled}\n />\n </div>\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport EmoticonHappyOutlineIcon from '@mattermost/compass-icons/components/emoticon-happy-outline';\nimport CheckIcon from '@mattermost/compass-icons/components/check';\nimport Icon from '@/components/Icon/Icon';\nimport Tag from '@/components/Tag/Tag';\nimport MentionBadge from '@/components/MentionBadge/MentionBadge';\nimport styles from './MenuItem.module.scss';\n\nexport interface MenuItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Primary label text. */\n label: string;\n /** Optional secondary label. */\n secondaryLabel?: ReactNode;\n /** Where the secondary label appears. Default: 'below'. */\n secondaryLabelPosition?: 'inline' | 'below';\n /** Custom content for the leading slot. When omitted, shows placeholder icon. */\n leadingVisual?: ReactNode;\n /** Show the leading visual slot. Default: true. */\n leadingElement?: boolean;\n /** Custom content for the trailing slot. When omitted with trailingElement=true, shows check icon. */\n trailingVisual?: ReactNode;\n /** Show the trailing visual slot. Default: false. */\n trailingElement?: boolean;\n /** Emoji character for custom status, shown inline after the label. */\n customStatusEmoji?: string;\n /** Show \"NEW\" label tag. */\n tag?: boolean;\n /** Inline mention count badge. */\n mentionCount?: number;\n /** Destructive (danger) styling. */\n destructive?: boolean;\n /** Highlight row (e.g. submenu parent while child menu is open). */\n active?: boolean;\n}\n\n/**\n * Menu Items are the rows inside a Menu — the smallest selectable unit in any dropdown,\n * kebab, or context menu. One label, optional supporting visuals, and a clear hit target.\n */\nexport default function MenuItem({\n label,\n secondaryLabel,\n secondaryLabelPosition = 'below',\n leadingVisual,\n leadingElement = true,\n trailingVisual,\n trailingElement = false,\n customStatusEmoji,\n tag = false,\n mentionCount,\n destructive = false,\n active = false,\n className = '',\n disabled,\n type = 'button',\n ...rest\n}: MenuItemProps) {\n const rootClass = [\n styles['menu-item'],\n destructive ? styles['menu-item--destructive'] : '',\n active ? styles['menu-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button className={rootClass} type={type} disabled={disabled} {...rest}>\n <div className={styles['menu-item__content']}>\n {leadingElement && (\n <div className={styles['menu-item__left']}>\n <span className={styles['menu-item__leading-visual']}>\n {leadingVisual ?? (\n <Icon glyph={<EmoticonHappyOutlineIcon />} size=\"16\" />\n )}\n </span>\n </div>\n )}\n <div className={styles['menu-item__middle']}>\n <div className={styles['menu-item__top-row']}>\n <span className={styles['menu-item__label']}>{label}</span>\n {secondaryLabel && secondaryLabelPosition === 'inline' && (\n <span className={styles['menu-item__secondary-label-inline']}>\n {secondaryLabel}\n </span>\n )}\n {customStatusEmoji && (\n <span className={styles['menu-item__custom-status']} aria-hidden>\n {customStatusEmoji}\n </span>\n )}\n {tag && <Tag label=\"NEW\" />}\n {mentionCount != null && mentionCount > 0 && (\n <MentionBadge\n count={mentionCount}\n location=\"menu-item\"\n size=\"small\"\n />\n )}\n </div>\n {secondaryLabel && secondaryLabelPosition === 'below' && (\n <div className={styles['menu-item__bottom-row']}>\n <span className={styles['menu-item__secondary-label-below']}>\n {secondaryLabel}\n </span>\n </div>\n )}\n </div>\n {trailingElement && (\n <div className={styles['menu-item__right']}>\n <span\n className={[\n styles['menu-item__trailing-visual'],\n !trailingVisual\n ? styles['menu-item__trailing-visual--check']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {trailingVisual ?? <Icon glyph={<CheckIcon />} size=\"16\" />}\n </span>\n </div>\n )}\n </div>\n </button>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport styles from './PopoverMenu.module.scss';\n\nexport interface PopoverMenuProps extends HTMLAttributes<HTMLDivElement> {\n /** Parent menus use Elevation 4; nested child menus use Elevation 5. */\n variant?: 'parent' | 'child';\n children: ReactNode;\n}\n\n/**\n * Surface container for popover-style menus — border, fill, elevation, and width\n * constraints per Compass. Compose with {@link MenuItem} rows and optional\n * titles, group labels, and dividers. Use {@link PopoverMenuScroll} when the item\n * list should scroll while a {@link PopoverMenuTitle} stays pinned.\n */\nexport default function PopoverMenu({\n variant = 'parent',\n children,\n className = '',\n ...rest\n}: PopoverMenuProps) {\n const rootClass = [\n styles['popover-menu'],\n variant === 'child'\n ? styles['popover-menu--child']\n : styles['popover-menu--parent'],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface PopoverMenuScrollProps {\n children: ReactNode;\n /** Maximum height of the scrollable region (coerces numbers to px). */\n maxHeight: string | number;\n className?: string;\n}\n\n/** Scrollable region for long item lists; keeps a sibling title visible when used with `maxHeight`. */\nexport function PopoverMenuScroll({\n maxHeight,\n children,\n className = '',\n}: PopoverMenuScrollProps) {\n const maxH =\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n return (\n <Scrollbar\n className={[styles['popover-menu__scroll'], className]\n .filter(Boolean)\n .join(' ')}\n style={{ maxHeight: maxH }}\n >\n {children}\n </Scrollbar>\n );\n}\n\nexport interface PopoverMenuTitleProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\n/** Optional heading above menu items; keep pinned outside a scrolling body when using `maxHeight` on `PopoverMenu`. */\nexport function PopoverMenuTitle({\n children,\n className = '',\n ...rest\n}: PopoverMenuTitleProps) {\n return (\n <p\n className={[styles['popover-menu__title'], className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </p>\n );\n}\n\nexport interface PopoverMenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Accessible label when the group has no visible `PopoverMenuGroupTitle`. */\n 'aria-label'?: string;\n}\n\n/** Groups related menu items. */\nexport function PopoverMenuGroup({\n children,\n className = '',\n ...rest\n}: PopoverMenuGroupProps) {\n return (\n <div\n role=\"group\"\n className={[styles['popover-menu__group'], className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface PopoverMenuGroupTitleProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\n/** Optional label for a `PopoverMenuGroup`. */\nexport function PopoverMenuGroupTitle({\n children,\n className = '',\n ...rest\n}: PopoverMenuGroupTitleProps) {\n return (\n <p\n className={[styles['popover-menu__group-title'], className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </p>\n );\n}\n\nexport interface PopoverMenuDividerProps extends HTMLAttributes<HTMLDivElement> {}\n\n/** Horizontal rule between groups or below a menu title. */\nexport function PopoverMenuDivider({\n className = '',\n ...rest\n}: PopoverMenuDividerProps) {\n return (\n <div\n className={[styles['popover-menu__divider'], className].filter(Boolean).join(' ')}\n role=\"separator\"\n {...rest}\n />\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport AccountOutlineIcon from '@mattermost/compass-icons/components/account-outline';\nimport AppsIcon from '@mattermost/compass-icons/components/apps';\nimport ArchiveOutlineIcon from '@mattermost/compass-icons/components/archive-outline';\nimport BellOffOutlineIcon from '@mattermost/compass-icons/components/bell-off-outline';\nimport BellOutlineIcon from '@mattermost/compass-icons/components/bell-outline';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport CogOutlineIcon from '@mattermost/compass-icons/components/cog-outline';\nimport ExitToAppIcon from '@mattermost/compass-icons/components/exit-to-app';\nimport FolderMoveOutlineIcon from '@mattermost/compass-icons/components/folder-move-outline';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\n\nexport interface ChannelHeaderMenuProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Channel header overflow menu — settings, members, more actions, and archive.\n */\nexport default function ChannelHeaderMenu({\n className = '',\n ...rest\n}: ChannelHeaderMenuProps) {\n return (\n <PopoverMenu className={className} {...rest}>\n <PopoverMenuGroup>\n <MenuItem\n label=\"View info\"\n leadingVisual={<Icon glyph={<InformationOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Mute channel\"\n leadingVisual={<Icon glyph={<BellOffOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Notification preferences\"\n leadingVisual={<Icon glyph={<BellOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Channel settings\"\n leadingVisual={<Icon glyph={<CogOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Bookmarks bar\"\n leadingVisual={<Icon glyph={<BookmarkOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Members\"\n leadingVisual={<Icon glyph={<AccountOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Move to\"\n leadingVisual={<Icon glyph={<FolderMoveOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"More actions\"\n leadingVisual={<Icon glyph={<AppsIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Leave channel\"\n destructive\n leadingVisual={<Icon glyph={<ExitToAppIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Archive channel\"\n destructive\n leadingVisual={<Icon glyph={<ArchiveOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import styles from './ChannelInfoMsgHeader.module.scss';\n\nexport interface ChannelInfoMsgHeaderTab {\n /** Label text for this tab. */\n label: string;\n /** Whether this tab is currently active/selected. */\n active?: boolean;\n /** Click handler. */\n onClick?: () => void;\n}\n\nexport interface ChannelInfoMsgHeaderProps {\n /**\n * Channel (or section) label — primary API for Mentions / Saved message\n * indicators. Prefer this over `tabs` for a single channel chip.\n */\n channelName?: string;\n /** Called when the channel label is pressed (`channelName` mode). */\n onChannelClick?: () => void;\n /**\n * Multi-section tabs for channel info panels. Used when `channelName` is\n * omitted.\n */\n tabs?: ChannelInfoMsgHeaderTab[];\n /**\n * Team name after the channel divider. Omit when the workspace has only one\n * team or the team is already clear from context.\n */\n teamName?: string;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The Channel Info Message Header names a channel (or section) and, when useful, the team it\n * belongs to. Use it above posts in Mentions and Saved lists, or as section tabs at the top\n * of a channel info panel.\n */\nexport default function ChannelInfoMsgHeader({\n channelName,\n onChannelClick,\n tabs,\n teamName,\n className = '',\n}: ChannelInfoMsgHeaderProps) {\n const resolvedTabs: ChannelInfoMsgHeaderTab[] =\n channelName != null && channelName !== ''\n ? [{label: channelName, onClick: onChannelClick}]\n : (tabs ?? [{label: 'Spec Reviews', active: true}]);\n\n const rootClass = [styles['channel-info-msg-header'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['channel-info-msg-header__container']}>\n {resolvedTabs.map((tab, index) => (\n <div\n key={`${tab.label}-${index}`}\n className={[\n styles['channel-info-msg-header__tab-area'],\n tab.active\n ? styles['channel-info-msg-header__tab-area--active']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <button\n type='button'\n className={[\n styles['channel-info-msg-header__tab'],\n tab.active\n ? styles['channel-info-msg-header__tab--active']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={tab.onClick}\n >\n {tab.label}\n </button>\n </div>\n ))}\n {teamName != null && teamName !== '' && (\n <div className={styles['channel-info-msg-header__team']}>\n <span className={styles['channel-info-msg-header__team-name']}>\n {teamName}\n </span>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport AccountPlusOutlineIcon from '@mattermost/compass-icons/components/account-plus-outline';\nimport BellOffOutlineIcon from '@mattermost/compass-icons/components/bell-off-outline';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport ExitToAppIcon from '@mattermost/compass-icons/components/exit-to-app';\nimport FolderMoveOutlineIcon from '@mattermost/compass-icons/components/folder-move-outline';\nimport LinkVariantIcon from '@mattermost/compass-icons/components/link-variant';\nimport MarkAsUnreadIcon from '@mattermost/compass-icons/components/mark-as-unread';\nimport StarOutlineIcon from '@mattermost/compass-icons/components/star-outline';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\n\nexport interface ChannelMenuProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Narrow channel sidebar context menu (174px).\n */\nexport default function ChannelMenu({\n className = '',\n style,\n ...rest\n}: ChannelMenuProps) {\n return (\n <PopoverMenu\n className={className}\n style={{ width: '174px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Mark as read\"\n leadingVisual={<Icon glyph={<MarkAsUnreadIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Favorite\"\n leadingVisual={<Icon glyph={<StarOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Mute channel\"\n leadingVisual={<Icon glyph={<BellOffOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Move to\"\n leadingVisual={<Icon glyph={<FolderMoveOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Copy link\"\n leadingVisual={<Icon glyph={<LinkVariantIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Add members\"\n leadingVisual={<Icon glyph={<AccountPlusOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Leave channel\"\n destructive\n leadingVisual={<Icon glyph={<ExitToAppIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport BellOffOutlineIcon from '@mattermost/compass-icons/components/bell-off-outline';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport FolderMoveOutlineIcon from '@mattermost/compass-icons/components/folder-move-outline';\nimport GlobeIcon from '@mattermost/compass-icons/components/globe';\nimport PencilOutlineIcon from '@mattermost/compass-icons/components/pencil-outline';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport SortAlphabeticalAscendingIcon from '@mattermost/compass-icons/components/sort-alphabetical-ascending';\nimport TrashCanOutlineIcon from '@mattermost/compass-icons/components/trash-can-outline';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport styles from './ChannelCategoryMenu.module.scss';\n\nexport interface ChannelCategoryMenuProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Label shown in the Sort row trailing detail. Default: Alphabetically. */\n sortLabel?: string;\n}\n\n/**\n * Channel category context menu — mute/rename/delete, sort, browse/create.\n */\nexport default function ChannelCategoryMenu({\n sortLabel = 'Alphabetically',\n className = '',\n style,\n ...rest\n}: ChannelCategoryMenuProps) {\n const rootClass = [styles['channel-category-menu'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PopoverMenu\n className={rootClass}\n style={{ width: '247px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Mute category\"\n leadingVisual={<Icon glyph={<BellOffOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Rename category\"\n leadingVisual={<Icon glyph={<PencilOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Delete category\"\n destructive\n leadingVisual={<Icon glyph={<TrashCanOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Sort\"\n leadingVisual={\n <Icon glyph={<SortAlphabeticalAscendingIcon />} size=\"16\" />\n }\n trailingElement\n trailingVisual={\n <span className={styles['channel-category-menu__sort-trailing']}>\n <span\n className={styles['channel-category-menu__sort-label']}\n >\n {sortLabel}\n </span>\n <Icon glyph={<ChevronRightIcon />} size=\"16\" />\n </span>\n }\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Browse channels\"\n leadingVisual={<Icon glyph={<GlobeIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Create new channel\"\n leadingVisual={<Icon glyph={<PlusIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Create new category\"\n leadingVisual={<Icon glyph={<FolderMoveOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { useRef, useEffect, useId } from 'react';\nimport { useControllable } from '@/hooks/useControllable';\nimport Icon from '@/components/Icon/Icon';\nimport type { IconSize } from '@/components/Icon/Icon';\nimport type { ElementType } from 'react';\nimport CheckIcon from '@mattermost/compass-icons/components/check';\nimport MinusIcon from '@mattermost/compass-icons/components/minus';\nimport { toKebab } from '@/utils/string';\nimport styles from './Checkbox.module.scss';\n\nexport type CheckboxSize = 'small' | 'medium' | 'large';\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows indeterminate (minus) state. Syncs to native input.indeterminate. */\n indeterminate?: boolean;\n /** Size variant. Figma: Small (12px), Medium (16px), Large (20px). Default: Medium. */\n size?: CheckboxSize;\n /** When false, uses error/destructive styling (red fill when checked). Default: true. */\n valid?: boolean;\n /** Label content. Rendered next to the checkbox. */\n children?: React.ReactNode;\n}\n\n/** Icon size from design system scale for each checkbox size (fits inside box). */\nconst CHECKBOX_ICON_SIZE: Record<CheckboxSize, IconSize> = {\n small: '10',\n medium: '12',\n large: '16',\n};\n\n/** Compass icon component per checked/indeterminate state. */\nconst ICON_COMPONENT: Record<'check' | 'minus', ElementType> = {\n check: CheckIcon,\n minus: MinusIcon,\n};\n\n/**\n * A Checkbox lets people pick any number of options from a set, or toggle a single setting\n * on or off. Each box represents one independent choice — pick none, some, or all.\n */\nexport default function Checkbox({\n className = '',\n indeterminate = false,\n size = 'medium',\n valid = true,\n children,\n id: idProp,\n checked,\n defaultChecked,\n disabled,\n onChange,\n ...rest\n}: CheckboxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const [resolvedChecked, handleChange] = useControllable(\n checked,\n defaultChecked,\n onChange,\n );\n\n const showingIcon = indeterminate\n ? 'minus'\n : resolvedChecked\n ? 'check'\n : null;\n\n useEffect(() => {\n const input = inputRef.current;\n if (input) input.indeterminate = indeterminate;\n }, [indeterminate]);\n\n const sizeClass = styles[`checkbox--size-${toKebab(size)}`];\n const invalidClass = valid ? '' : styles['checkbox--invalid'];\n const indeterminateClass = indeterminate\n ? styles['checkbox--indeterminate']\n : '';\n\n const rootClass = [\n styles.checkbox,\n sizeClass,\n invalidClass,\n indeterminateClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const iconSize = CHECKBOX_ICON_SIZE[size];\n\n return (\n <label className={rootClass} htmlFor={id}>\n <input\n ref={inputRef}\n id={id}\n type=\"checkbox\"\n className={styles['checkbox__input']}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={valid ? undefined : true}\n onChange={handleChange}\n {...rest}\n />\n <span className={styles['checkbox__box']}>\n {showingIcon !== null &&\n (() => {\n const IconComponent = ICON_COMPONENT[showingIcon];\n return (\n <span key={showingIcon} className={styles['checkbox__icon']}>\n <Icon glyph={<IconComponent />} size={iconSize} />\n </span>\n );\n })()}\n </span>\n {children != null && (\n <span className={styles['checkbox__label']}>{children}</span>\n )}\n </label>\n );\n}\n","import type { HTMLAttributes, MouseEvent, ReactNode } from 'react';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport Icon from '@/components/Icon/Icon';\nimport type { IconSize } from '@/components/Icon/Icon';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport type { UserAvatarSize } from '@/components/UserAvatar/UserAvatar';\nimport { toKebab } from '@/utils/string';\nimport styles from './Chip.module.scss';\n\nexport type ChipSize = 'small' | 'medium' | 'medium-compact' | 'large';\n\nexport interface ChipProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Chip label. */\n children: ReactNode;\n /** Visual size. Default: Medium. */\n size?: ChipSize;\n /** Leading icon from @mattermost/compass-icons. */\n leadingIcon?: ReactNode;\n /** Leading avatar. Overrides leadingIcon when both are provided. */\n leadingAvatar?: { src: string; alt: string };\n /** When provided, shows the remove (×) button and calls this on click. */\n onRemove?: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Accessible label for the remove button. Default: \"Remove\". */\n removeLabel?: string;\n /** Shows an error border. */\n error?: boolean;\n /** Adds a colored background overlay. */\n colored?: boolean;\n className?: string;\n}\n\nconst ICON_SIZE_MAP: Record<ChipSize, IconSize> = {\n small: '10',\n medium: '12',\n 'medium-compact': '12',\n large: '16',\n};\n\nconst AVATAR_SIZE_MAP: Record<ChipSize, UserAvatarSize> = {\n small: '12',\n medium: '16',\n 'medium-compact': '16',\n large: '20',\n};\n\n/**\n * Chips are compact, self-contained tokens that represent a selection — a person added to an\n * invite, a filter applied to a search, a chosen value in a tokenizing input. Each Chip\n * stands on its own and is removable or selectable, depending on context.\n */\nexport default function Chip({\n children,\n size = 'medium',\n leadingIcon,\n leadingAvatar,\n onRemove,\n removeLabel = 'Remove',\n error = false,\n colored = false,\n className = '',\n ...rest\n}: ChipProps) {\n const iconSize = ICON_SIZE_MAP[size];\n const avatarSize = AVATAR_SIZE_MAP[size];\n\n const rootClass = [\n styles.chip,\n styles[`chip--size-${toKebab(size)}`],\n error && styles['chip--error'],\n colored && styles['chip--colored'],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} {...rest}>\n {leadingAvatar != null ? (\n <span className={styles['chip__avatar-slot']}>\n <UserAvatar\n src={leadingAvatar.src}\n alt={leadingAvatar.alt}\n size={avatarSize}\n />\n </span>\n ) : leadingIcon != null ? (\n <span className={styles['chip__icon-slot']} aria-hidden>\n <Icon glyph={leadingIcon} size={iconSize} />\n </span>\n ) : null}\n <span className={styles['chip__label']}>{children}</span>\n {onRemove != null ? (\n <button\n type=\"button\"\n className={styles['chip__remove']}\n onClick={onRemove}\n aria-label={removeLabel}\n >\n <CloseCircleIcon size={Number(iconSize)} aria-hidden />\n </button>\n ) : null}\n </div>\n );\n}\n","export type PopupPlacement = 'above' | 'below';\n\nexport const ANCHORED_POPUP_GAP = 4;\nexport const ANCHORED_POPUP_VIEWPORT_MARGIN = 48;\nexport const ANCHORED_POPUP_MIN_HEIGHT = 120;\n/** Default stacking above typical product chrome; hosts can override via zIndex. */\nexport const ANCHORED_POPUP_Z_INDEX = 1000;\n\nexport interface AnchoredPopupPlacementOptions {\n /** Gap between trigger and popup. Default: 4. */\n gap?: number;\n /** Reserved space at the viewport edge. Default: 48. */\n viewportMargin?: number;\n /** Height used to decide whether the popup fits below. */\n preferredHeight: number;\n /** Cap for scrollable menus (e.g. Select/Combobox 280). */\n maxHeightCap?: number;\n /** Floor so short viewports still show a scrollable list. Default: 120. */\n minHeight?: number;\n}\n\nexport interface AnchoredPopupPlacementResult {\n placement: PopupPlacement;\n maxHeight: number;\n}\n\n/**\n * Prefers opening below the anchor; flips above when there isn’t enough room\n * below and there is more space above. Max-height is the available space in the\n * chosen direction, optionally capped.\n */\nexport function computeAnchoredPopupPlacement(\n anchorRect: Pick<DOMRect, 'top' | 'bottom'>,\n viewportHeight: number,\n options: AnchoredPopupPlacementOptions & {\n /** When set, flip/max-height use this box instead of the viewport. */\n bounds?: Pick<DOMRect, 'top' | 'bottom'>;\n },\n): AnchoredPopupPlacementResult {\n const gap = options.gap ?? ANCHORED_POPUP_GAP;\n const viewportMargin =\n options.viewportMargin ?? ANCHORED_POPUP_VIEWPORT_MARGIN;\n const minHeight = options.minHeight ?? ANCHORED_POPUP_MIN_HEIGHT;\n const preferredHeight = Math.max(options.preferredHeight, 0);\n\n const boundsTop = options.bounds?.top ?? 0;\n const boundsBottom = options.bounds?.bottom ?? viewportHeight;\n\n const spaceBelow = Math.max(\n 0,\n boundsBottom - anchorRect.bottom - gap - viewportMargin,\n );\n const spaceAbove = Math.max(0, anchorRect.top - boundsTop - gap - viewportMargin);\n\n const placement: PopupPlacement =\n spaceBelow < preferredHeight && spaceAbove > spaceBelow ? 'above' : 'below';\n\n const available = placement === 'below' ? spaceBelow : spaceAbove;\n const capped =\n options.maxHeightCap != null\n ? Math.min(options.maxHeightCap, available)\n : available;\n\n return {\n placement,\n maxHeight: Math.max(minHeight, capped),\n };\n}\n\nexport interface AnchoredPopupFixedStyle {\n position: 'fixed' | 'absolute';\n top?: number;\n bottom?: number;\n left: number;\n width: number;\n zIndex: number;\n}\n\nexport type AnchoredPopupBounds = Pick<\n DOMRect,\n 'top' | 'bottom' | 'left' | 'width' | 'height'\n>;\n\n/** Mount element metrics for portaled absolute positioning. */\nexport interface AnchoredPopupContainerFrame {\n /** Visible viewport bounds used for flip/max-height. */\n bounds: Pick<DOMRect, 'top' | 'bottom'>;\n /** Maps a viewport anchor rect into mount padding-box coordinates. */\n anchorInContainer: (\n anchorRect: Pick<DOMRect, 'top' | 'bottom' | 'left' | 'width'>,\n ) => {\n left: number;\n top: number;\n bottom: number;\n width: number;\n };\n /** Visible padding-box height used for above `bottom` anchoring. */\n clientHeight: number;\n /** Current vertical scroll offset of the mount. */\n scrollTop: number;\n}\n\nexport function getAnchoredPopupContainerFrame(\n mount: HTMLElement,\n): AnchoredPopupContainerFrame {\n const borderRect = mount.getBoundingClientRect();\n const boundsTop = borderRect.top + mount.clientTop;\n const boundsBottom = boundsTop + mount.clientHeight;\n\n return {\n bounds: { top: boundsTop, bottom: boundsBottom },\n anchorInContainer: (anchorRect: Pick<DOMRect, 'top' | 'bottom' | 'left' | 'width'>) => ({\n left:\n anchorRect.left -\n borderRect.left -\n mount.clientLeft +\n mount.scrollLeft,\n top:\n anchorRect.top -\n borderRect.top -\n mount.clientTop +\n mount.scrollTop,\n bottom:\n anchorRect.bottom -\n borderRect.top -\n mount.clientTop +\n mount.scrollTop,\n width: anchorRect.width,\n }),\n clientHeight: mount.clientHeight,\n scrollTop: mount.scrollTop,\n };\n}\n\n/**\n * Fixed box coords for a portaled popup anchored to a trigger rect.\n * Below: top edge sits `gap` px under the trigger bottom.\n * Above: bottom edge sits `gap` px above the trigger top (uses `bottom` so\n * height does not affect the gap).\n *\n * When `containerFrame` is provided, returns `absolute` coords in the mount\n * padding box (accounts for scroll and client border offsets). Otherwise uses\n * viewport `fixed` coords (document.body default).\n */\nexport function computeAnchoredPopupFixedStyle(\n anchorRect: Pick<DOMRect, 'top' | 'bottom' | 'left' | 'width'>,\n placement: PopupPlacement,\n options: {\n gap?: number;\n zIndex?: number;\n /** Override width (defaults to trigger width). */\n width?: number;\n viewportHeight?: number;\n containerFrame?: AnchoredPopupContainerFrame;\n },\n): AnchoredPopupFixedStyle {\n const gap = options.gap ?? ANCHORED_POPUP_GAP;\n const width = options.width ?? anchorRect.width;\n const zIndex = options.zIndex ?? ANCHORED_POPUP_Z_INDEX;\n const containerFrame = options.containerFrame;\n\n if (containerFrame) {\n const anchor = containerFrame.anchorInContainer(anchorRect);\n if (placement === 'below') {\n return {\n position: 'absolute',\n top: anchor.bottom + gap,\n left: anchor.left,\n width,\n zIndex,\n };\n }\n const visibleTop = anchor.top - containerFrame.scrollTop;\n return {\n position: 'absolute',\n bottom: containerFrame.clientHeight - visibleTop + gap,\n left: anchor.left,\n width,\n zIndex,\n };\n }\n\n const viewportHeight = options.viewportHeight ?? window.innerHeight;\n\n if (placement === 'below') {\n return {\n position: 'fixed',\n top: anchorRect.bottom + gap,\n left: anchorRect.left,\n width,\n zIndex,\n };\n }\n\n return {\n position: 'fixed',\n bottom: viewportHeight - anchorRect.top + gap,\n left: anchorRect.left,\n width,\n zIndex,\n };\n}\n","import {\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n ANCHORED_POPUP_GAP,\n ANCHORED_POPUP_Z_INDEX,\n computeAnchoredPopupFixedStyle,\n computeAnchoredPopupPlacement,\n getAnchoredPopupContainerFrame,\n type PopupPlacement,\n} from '@/utils/anchoredPopupPlacement';\n\nexport interface UseAnchoredPopupPortalOptions {\n /** Height used for the flip decision when content isn’t measured yet. */\n preferredHeight: number;\n /** Cap for scrollable menus (Select/Combobox). Omit for intrinsic panels. */\n maxHeightCap?: number;\n /** Ref to the portaled panel for measuring intrinsic height (DateRangePicker). */\n contentRef?: RefObject<HTMLElement | null>;\n /**\n * Portal mount node; defaults to `document.body` with viewport-fixed coords.\n * Custom containers must establish a positioning context (`position` other\n * than `static`); coords are converted to that container’s space.\n */\n portalContainer?: HTMLElement | null;\n zIndex?: number;\n /**\n * When true (default), fixed width matches the trigger.\n * DateRangePicker sets false and keeps its CSS width.\n */\n matchWidth?: boolean;\n gap?: number;\n}\n\nexport interface UseAnchoredPopupPortalResult {\n placement: PopupPlacement;\n maxHeight: number;\n style: CSSProperties;\n /** Ref for the portaled surface — pass to `useOutsideClose` as a second root. */\n portalRef: RefObject<HTMLDivElement | null>;\n /** Wraps children in a portal to `portalContainer` or `document.body`. */\n renderPortal: (children: ReactNode) => ReactNode;\n}\n\nconst DEFAULT_PLACEMENT: PopupPlacement = 'below';\n\nfunction resolvePortalMount(\n portalContainer: HTMLElement | null | undefined,\n): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n return portalContainer ?? document.body;\n}\n\nfunction usesViewportFixedCoords(mount: HTMLElement): boolean {\n return mount === document.body;\n}\n\n/**\n * Positions a form-widget popup in a portal with viewport-aware above/below flip.\n * Internal to compass-ui form widgets — not a general overlay positioning API.\n */\nexport function useAnchoredPopupPortal(\n anchorRef: RefObject<HTMLElement | null>,\n isOpen: boolean,\n options: UseAnchoredPopupPortalOptions,\n): UseAnchoredPopupPortalResult {\n const {\n preferredHeight,\n maxHeightCap,\n contentRef,\n portalContainer = null,\n zIndex = ANCHORED_POPUP_Z_INDEX,\n matchWidth = true,\n gap = ANCHORED_POPUP_GAP,\n } = options;\n\n const portalRef = useRef<HTMLDivElement | null>(null);\n const [placement, setPlacement] = useState<PopupPlacement>(DEFAULT_PLACEMENT);\n const [maxHeight, setMaxHeight] = useState(\n maxHeightCap ?? preferredHeight,\n );\n const [style, setStyle] = useState<CSSProperties>({\n position: 'fixed',\n top: 0,\n left: 0,\n width: matchWidth ? 0 : undefined,\n zIndex,\n });\n\n const update = useCallback(() => {\n const anchor = anchorRef.current;\n if (!anchor) return;\n\n const mount = resolvePortalMount(portalContainer);\n if (!mount) return;\n\n const rect = anchor.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportFixed = usesViewportFixedCoords(mount);\n const containerFrame = viewportFixed\n ? undefined\n : getAnchoredPopupContainerFrame(mount);\n\n const measured =\n contentRef?.current?.offsetHeight ??\n portalRef.current?.offsetHeight ??\n 0;\n const heightForFlip = measured > 0 ? measured : preferredHeight;\n\n const { placement: nextPlacement, maxHeight: nextMaxHeight } =\n computeAnchoredPopupPlacement(rect, viewportHeight, {\n gap,\n preferredHeight: heightForFlip,\n maxHeightCap,\n bounds: containerFrame?.bounds,\n });\n\n const fixed = computeAnchoredPopupFixedStyle(rect, nextPlacement, {\n gap,\n zIndex,\n width: matchWidth ? rect.width : undefined,\n viewportHeight,\n containerFrame,\n });\n\n setPlacement(nextPlacement);\n setMaxHeight(nextMaxHeight);\n setStyle({\n position: fixed.position,\n left: fixed.left,\n zIndex: fixed.zIndex,\n ...(matchWidth ? { width: fixed.width } : null),\n ...(nextPlacement === 'below'\n ? { top: fixed.top, bottom: 'auto' }\n : { bottom: fixed.bottom, top: 'auto' }),\n });\n }, [\n anchorRef,\n contentRef,\n gap,\n matchWidth,\n maxHeightCap,\n portalContainer,\n preferredHeight,\n zIndex,\n ]);\n\n useLayoutEffect(() => {\n if (!isOpen) return;\n\n update();\n\n function handle() {\n update();\n }\n\n window.addEventListener('resize', handle);\n // Capture phase so nested scroll containers (modals, RHS) are covered.\n document.addEventListener('scroll', handle, true);\n return () => {\n window.removeEventListener('resize', handle);\n document.removeEventListener('scroll', handle, true);\n };\n }, [isOpen, update]);\n\n // Re-measure after content mounts / changes size (calendar, long lists).\n useLayoutEffect(() => {\n if (!isOpen) return;\n const el = contentRef?.current ?? portalRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n\n const ro = new ResizeObserver(() => update());\n ro.observe(el);\n return () => ro.disconnect();\n }, [isOpen, contentRef, update]);\n\n const renderPortal = useCallback(\n (children: ReactNode) => {\n const mount = resolvePortalMount(portalContainer);\n if (!mount) return null;\n return createPortal(children, mount);\n },\n [portalContainer],\n );\n\n return {\n placement,\n maxHeight,\n style,\n portalRef,\n renderPortal,\n };\n}\n","import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\ntype MaybeRef = RefObject<HTMLElement | null>;\n\n/**\n * Closes a dropdown or popover when the user mousedowns outside the container(s).\n * Listeners attach only while `open` is true.\n *\n * Pass `portalRef` when the popup is portaled outside `ref` so menu clicks\n * still count as inside.\n *\n * @param ref - Primary container (e.g. field root).\n * @param open - When true, the listener is active.\n * @param onClose - Called when a mousedown lands outside all containers.\n * @param portalRef - Optional portaled surface to treat as inside.\n */\nexport function useOutsideClose(\n ref: MaybeRef,\n open: boolean,\n onClose: () => void,\n portalRef?: MaybeRef,\n): void {\n useEffect(() => {\n if (!open) return;\n function handle(e: MouseEvent) {\n const target = e.target as Node;\n if (ref.current?.contains(target)) return;\n if (portalRef?.current?.contains(target)) return;\n onClose();\n }\n document.addEventListener('mousedown', handle);\n return () => document.removeEventListener('mousedown', handle);\n }, [ref, portalRef, open, onClose]);\n}\n","import { useEffect, useState } from 'react';\n\n// --duration-quick is 150ms; keep in sync if that token changes.\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a popover mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. See CLAUDE.md:\n * \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(open: boolean) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(() => setMounted(false), POPOVER_TRANSITION_MS);\n return () => window.clearTimeout(t);\n }, [open]);\n\n return { mounted, visible };\n}\n","import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport Chip from '@/components/Chip/Chip';\nimport type { ChipSize } from '@/components/Chip/Chip';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/useAnchoredPopupPortal';\nimport { useOutsideClose } from '@/hooks/useOutsideClose';\nimport { usePopoverTransition } from '@/hooks/usePopoverTransition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n emptyMessage?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(\n value: string | string[] | null | undefined,\n): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = multiple ? toMultiValue(rawValue) : [];\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const selectedOption = useMemo(\n () =>\n singleValue == null\n ? undefined\n : options.find((o) => o.value === singleValue),\n [options, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (filteredOptions.length === 0) return -1;\n if (prev >= 0 && prev < filteredOptions.length) return prev;\n const selectedIdx = multiple\n ? filteredOptions.findIndex((o) => multiValue.includes(o.value))\n : filteredOptions.findIndex((o) => o.value === singleValue);\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, filteredOptions, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple\n ? multiValue.includes(optionValue)\n : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n inputRef.current?.focus();\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = filteredOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [filteredOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = filteredOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(\n `${listboxId}-option-${option.value}`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, filteredOptions, listboxId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n setActiveIndex(\n filteredOptions.findIndex((o) => !o.disabled) >= 0\n ? filteredOptions.findIndex((o) => !o.disabled)\n : 0,\n );\n }\n break;\n case 'End':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n for (let i = filteredOptions.length - 1; i >= 0; i--) {\n if (!filteredOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n e.preventDefault();\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (\n multiple &&\n displayInput === '' &&\n multiValue.length > 0\n ) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chip remove buttons\n if ((e.target as HTMLElement).closest('button')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeOption =\n activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const activeDescendant =\n activeOption != null ? `${listboxId}-option-${activeOption.value}` : undefined;\n\n const selectedOptions = useMemo(\n () => options.filter((o) => multiValue.includes(o.value)),\n [options, multiValue],\n );\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && selectedOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div\n className={styles.combobox__wrapper}\n ref={anchorRef}\n >\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles.combobox__leadingIcon} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple &&\n selectedOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n removeLabel={`Remove ${option.label}`}\n >\n {option.label}\n </Chip>\n ))}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && selectedOptions.length > 0\n ? undefined\n : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles.combobox__trailingIcon} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {filteredOptions.length === 0 ? (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n ) : (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {filteredOptions.map((option, index) => {\n const selected = isSelected(option.value);\n const active = index === activeIndex;\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n }}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n","import type { InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/Button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/useAnchoredPopupPortal';\nimport { useOutsideClose } from '@/hooks/useOutsideClose';\nimport { usePopoverTransition } from '@/hooks/usePopoverTransition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(-1, getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next);\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` – ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles.dateRangePicker,\n isOpen ? styles['dateRangePicker--open'] : '',\n disabled ? styles['dateRangePicker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles.dateRangePicker__trigger}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span className={styles.dateRangePicker__calendarIcon} aria-hidden>\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles.dateRangePicker__value}>\n {displayValue || 'mm/dd/yyyy'}\n </span>\n <span className={styles.dateRangePicker__chevron} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles.dateRangePicker__popover,\n placement === 'above'\n ? styles['dateRangePicker__popover--above']\n : '',\n popoverVisible\n ? styles['dateRangePicker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker\"\n >\n {/* Header */}\n <div className={styles.dateRangePicker__header}>\n <span className={styles.dateRangePicker__monthLabel} aria-live=\"polite\">\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <div className={styles.dateRangePicker__headerActions}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={<Icon size=\"16\" glyph={<CalendarOutlineIcon />} />}\n onClick={handleToday}\n >\n Today\n </Button>\n <div className={styles.dateRangePicker__navButtons}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles.dateRangePicker__weekdays} aria-hidden>\n {WEEKDAYS.map((d) => (\n <span key={d} className={styles.dateRangePicker__weekday}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles.dateRangePicker__grid}\n role=\"grid\"\n aria-label={`${MONTHS[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles.dateRangePicker__week}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles.dateRangePicker__dayEmpty}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles.dateRangePicker__dayCell,\n isInRange\n ? styles['dateRangePicker__dayCell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['dateRangePicker__dayCell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['dateRangePicker__dayCell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles.dateRangePicker__day,\n isSelected ? styles['dateRangePicker__day--selected'] : '',\n isToday && !isSelected\n ? styles['dateRangePicker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n","import styles from './Divider.module.scss';\n\n/**\n * A Divider is a thin horizontal rule that separates content into related groups. It does\n * the lightest possible work — split a list, mark a transition, give a layout breathing room\n * — without competing for attention.\n */\nexport default function Divider() {\n return (\n <div className={styles.divider}>\n <hr className={styles['divider__line']} />\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport Button from '@/components/Button/Button';\nimport { toKebab } from '@/utils/string';\nimport Icon from '@/components/Icon/Icon';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport styles from './Dropdown.module.scss';\n\nexport type DropdownSize = 'x-small' | 'small' | 'medium' | 'large' | 'x-large';\nexport type DropdownAppearance = 'default' | 'inverted';\nexport type DropdownPadding = 'tight' | 'compact';\n\nexport interface DropdownProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'size'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Label text shown in the trigger. */\n children: ReactNode;\n /** Optional leading icon. */\n leadingIcon?: ReactNode;\n /** Trigger inset. Tight is default; Compact adds more padding (Figma). Default: Tight. */\n padding?: DropdownPadding;\n /** Size variant. Default: Medium. */\n size?: DropdownSize;\n /** Light or dark background context. Default: Default. */\n appearance?: DropdownAppearance;\n /** When true, the dropdown is in an open/active state. */\n isOpen?: boolean;\n}\n\n/**\n * A Dropdown is a heading-weight trigger that opens a Popover Menu. It reads as a title —\n * semibold, with a chevron — and signals \"this label is also a control.\"\n */\nexport default function Dropdown({\n className = '',\n children,\n leadingIcon,\n padding = 'tight',\n size = 'medium',\n appearance = 'default',\n isOpen = false,\n disabled,\n type = 'button',\n ...rest\n}: DropdownProps) {\n const sizeClass = styles[`dropdown--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['dropdown--padding-compact'] : '';\n const appearanceClass =\n appearance === 'inverted' ? styles['dropdown--appearance-inverted'] : '';\n const openClass = isOpen ? styles['dropdown--open'] : '';\n\n const rootClass = [\n styles.dropdown,\n sizeClass,\n paddingClass,\n appearanceClass,\n openClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Button\n className={rootClass}\n emphasis=\"quaternary\"\n size=\"medium\"\n type={type}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n {...rest}\n >\n <span className={styles.dropdown__trigger}>\n <span className={styles.dropdown__content}>\n {leadingIcon != null && (\n <span className={styles.dropdown__leadingIcon} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <span className={styles.dropdown__label}>{children}</span>\n </span>\n <span className={styles.dropdown__chevron} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </span>\n </Button>\n );\n}\n","import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status — on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [\n styles.emoji,\n sizeClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport styles from './Illustration.module.scss';\n\nexport interface IllustrationProps {\n /** SVG component from an illustration import (e.g. from `@/assets/illustrations/name.svg?react`). */\n children: ReactNode;\n /** Optional CSS class name. */\n className?: string;\n /** Optional inline width (e.g. \"100%\", \"320px\"). */\n width?: string;\n /** Optional inline height. */\n height?: string;\n /** Accessible label; set to empty string for decorative only. */\n 'aria-label'?: string;\n}\n\n/**\n * Illustration is the wrapper for any of the brand SVG artworks shipped under\n * `@/assets/illustrations/`. It enforces a consistent size box, contains the SVG, and\n * exposes an accessible label so screen readers can describe the artwork (or skip it when\n * it's purely decorative).\n */\nexport default function Illustration({\n children,\n className = '',\n width,\n height,\n 'aria-label': ariaLabel,\n}: IllustrationProps) {\n const rootClass = [styles.illustration, className].filter(Boolean).join(' ');\n const hasLabel = ariaLabel !== undefined && ariaLabel !== '';\n\n return (\n <span\n className={rootClass}\n style={{ width, height }}\n role={hasLabel ? 'img' : undefined}\n aria-label={hasLabel ? ariaLabel : undefined}\n aria-hidden={!hasLabel}\n >\n {children}\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport Button from '@/components/Button/Button';\nimport type { ButtonProps } from '@/components/Button/Button';\nimport Illustration from '@/components/Illustration/Illustration';\nimport type { IllustrationProps } from '@/components/Illustration/Illustration';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport styles from './EmptyState.module.scss';\n\nexport interface EmptyStateProps {\n /** Illustration props (children = the SVG component). Rendered above the title. */\n illustration?: IllustrationProps;\n /** Main heading text. */\n title: string;\n /** Body description. Supports ReactNode for inline formatting. */\n description?: ReactNode;\n /** Button props (children = label). Rendered below the description. */\n action?: ButtonProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Empty State fills a view that has no content yet — no saved messages, no mentions, no\n * search results, no files. It pairs an illustration with a short explanation and, when\n * there's something the user can do next, a single action.\n */\nexport default function EmptyState({\n illustration,\n title,\n description,\n action,\n className = '',\n}: EmptyStateProps) {\n return (\n <Scrollbar\n className={[styles['empty-state'], className].filter(Boolean).join(' ')}\n >\n <div className={styles['empty-state__container']}>\n {illustration != null && (\n <div className={styles['empty-state__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n <div className={styles['empty-state__titles']}>\n <h2 className={styles['empty-state__title']}>{title}</h2>\n {description != null && (\n <p className={styles['empty-state__description']}>{description}</p>\n )}\n </div>\n {action != null && (\n <div className={styles['empty-state__action']}>\n <Button {...action} />\n </div>\n )}\n </div>\n </Scrollbar>\n );\n}\n","import Icon from '@/components/Icon/Icon';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport styles from './ErrorMessage.module.scss';\n\nexport interface ErrorMessageProps {\n /** Optional CSS class name. */\n className?: string;\n /** The error message text to display. */\n message: string;\n}\n\n/**\n * Error Message is the inline red error line that appears below a form input when validation\n * fails. It pairs an alert glyph with a short, human-readable explanation so the user can\n * fix the field and move on.\n */\nexport default function ErrorMessage({\n className = '',\n message,\n}: ErrorMessageProps) {\n const rootClass = [styles['error-message'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} role=\"alert\">\n <span className={styles['error-message__icon']} aria-hidden>\n <Icon size=\"12\" glyph={<AlertCircleOutlineIcon />} />\n </span>\n <span className={styles['error-message__text']}>{message}</span>\n </div>\n );\n}\n","import Button from '@/components/Button/Button';\nimport type { ButtonProps } from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport Illustration from '@/components/Illustration/Illustration';\nimport type { IllustrationProps } from '@/components/Illustration/Illustration';\nimport Tag from '@/components/Tag/Tag';\nimport MattermostIcon from '@mattermost/compass-icons/components/mattermost';\nimport styles from './FeatureDiscoveryPanel.module.scss';\n\nexport interface FeatureDiscoveryPanelProps {\n /** SKU tag label (e.g. \"PROFESSIONAL\"). Set to null to hide. */\n skuLabel?: string | null;\n /** Panel heading title. */\n title: string;\n /** Body description text. */\n description: string;\n /** Primary CTA button props (children = label). */\n primaryAction?: ButtonProps;\n /** Secondary CTA button props (children = label). */\n secondaryAction?: ButtonProps;\n /** Illustration props (children = the SVG component). Rendered in the right column. */\n illustration?: IllustrationProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Feature Discovery Panels surface capabilities only available on a higher-tier SKU. They\n * live in the System Console and are visible to admins — never to end users. The goal is to\n * communicate the value of the feature, not gate the UI behind a paywall.\n */\nexport default function FeatureDiscoveryPanel({\n skuLabel = 'PROFESSIONAL',\n title,\n description,\n primaryAction,\n secondaryAction,\n illustration,\n className = '',\n}: FeatureDiscoveryPanelProps) {\n return (\n <div\n className={[styles['feature-discovery-panel'], className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={styles['feature-discovery-panel__content']}>\n <div className={styles['feature-discovery-panel__text']}>\n <div className={styles['feature-discovery-panel__title-group']}>\n {skuLabel != null && (\n <Tag\n label={skuLabel}\n casing=\"all-caps\"\n leadingIcon={<Icon size=\"10\" glyph={<MattermostIcon />} />}\n />\n )}\n <h2 className={styles['feature-discovery-panel__title']}>\n {title}\n </h2>\n </div>\n <p className={styles['feature-discovery-panel__description']}>\n {description}\n </p>\n </div>\n\n {(primaryAction != null || secondaryAction != null) && (\n <div className={styles['feature-discovery-panel__actions']}>\n {primaryAction != null && (\n <div className={styles['feature-discovery-panel__action']}>\n <Button size=\"medium\" {...primaryAction} />\n </div>\n )}\n {secondaryAction != null && (\n <div className={styles['feature-discovery-panel__action']}>\n <Button size=\"medium\" {...secondaryAction} />\n </div>\n )}\n </div>\n )}\n </div>\n\n {illustration != null && (\n <div className={styles['feature-discovery-panel__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport Button from '@/components/Button/Button';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './GlobalBanner.module.scss';\n\nexport type GlobalBannerType =\n | 'general'\n | 'warning'\n | 'danger'\n | 'info'\n | 'success';\n\nexport interface GlobalBannerProps {\n /** Optional CSS class name. */\n className?: string;\n /** The message text. */\n message: string;\n /** Optional type for color-coding. Default: General. */\n type?: GlobalBannerType;\n /** Optional leading icon. */\n leadingIcon?: ReactNode;\n /** Label for the optional action button. */\n actionLabel?: string;\n /** Callback when the action button is clicked. */\n onAction?: () => void;\n /** Called when dismiss button is clicked. When omitted, dismiss button is hidden. */\n onDismiss?: () => void;\n}\n\n/**\n * Global Banners sit at the very top of the application and broadcast something every user\n * in the workspace needs to know — a maintenance window, an expiring licence, a connectivity\n * problem, an available update. They span the full width of the app and stay visible until\n * they're dismissed or the condition resolves.\n */\nexport default function GlobalBanner({\n className = '',\n message,\n type = 'general',\n leadingIcon,\n actionLabel,\n onAction,\n onDismiss,\n}: GlobalBannerProps) {\n const typeClass =\n type !== 'general'\n ? styles[`global-banner--type-${type.toLowerCase()}`]\n : '';\n\n const rootClass = [styles['global-banner'], typeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} role=\"banner\">\n <div className={styles['global-banner__content']}>\n {leadingIcon != null && (\n <span className={styles['global-banner__icon']} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <span className={styles['global-banner__message']}>{message}</span>\n {actionLabel != null && (\n <Button\n className={styles['global-banner__action']}\n appearance=\"default\"\n emphasis=\"tertiary\"\n size=\"x-small\"\n onClick={onAction}\n >\n {actionLabel}\n </Button>\n )}\n </div>\n {onDismiss != null && (\n <IconButton\n className={styles['global-banner__dismiss']}\n aria-label=\"Dismiss\"\n size=\"small\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n onClick={onDismiss}\n />\n )}\n </div>\n );\n}\n","import ProductsIcon from '@mattermost/compass-icons/components/products';\nimport ProductChannelsIcon from '@mattermost/compass-icons/components/product-channels';\nimport ProductPlaybooksIcon from '@mattermost/compass-icons/components/product-playbooks';\nimport ProductBoardsIcon from '@mattermost/compass-icons/components/product-boards';\nimport ArrowLeftIcon from '@mattermost/compass-icons/components/arrow-left';\nimport ArrowRightIcon from '@mattermost/compass-icons/components/arrow-right';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport HelpCircleOutlineIcon from '@mattermost/compass-icons/components/help-circle-outline';\nimport CogOutlineIcon from '@mattermost/compass-icons/components/cog-outline';\nimport AtIcon from '@mattermost/compass-icons/components/at';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport CheckboxMultipleMarkedOutlineIcon from '@mattermost/compass-icons/components/checkbox-multiple-marked-outline';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport type { ComponentType } from 'react';\nimport styles from './GlobalHeader.module.scss';\n\nexport type GlobalHeaderProduct = 'channels' | 'playbooks' | 'boards';\n\nexport interface GlobalHeaderProps {\n /** Optional CSS class name. */\n className?: string;\n /** Product context. Controls branding + right-side controls. Default: Channels. */\n product?: GlobalHeaderProduct;\n /** When true and product is Channels, shows the Channels product icon + label. */\n showChannelsBranding?: boolean;\n /** When true, shows the Upgrade button in the right controls. */\n showUpgradeButton?: boolean;\n /** URL for the signed-in user avatar. Omit for initials fallback. */\n userAvatarSrc?: string;\n /** Alt text for the signed-in user avatar. */\n userAvatarAlt?: string;\n}\n\nconst PRODUCT_ICON: Record<\n GlobalHeaderProduct,\n ComponentType<{ size?: number }>\n> = {\n channels: ProductChannelsIcon,\n playbooks: ProductPlaybooksIcon,\n boards: ProductBoardsIcon,\n};\n\nconst PRODUCT_LABEL: Record<GlobalHeaderProduct, string> = {\n channels: 'Channels',\n playbooks: 'Playbooks',\n boards: 'Boards',\n};\n\nfunction InvertedIconButton({\n ariaLabel,\n glyph,\n}: {\n ariaLabel: string;\n glyph: React.ReactNode;\n}) {\n return (\n <IconButton\n aria-label={ariaLabel}\n size=\"small\"\n padding=\"compact\"\n style=\"inverted\"\n icon={<Icon size=\"16\" glyph={glyph} />}\n />\n );\n}\n\nfunction ProductBrand({ product }: { product: GlobalHeaderProduct }) {\n const ProductIcon = PRODUCT_ICON[product];\n return (\n <div className={styles['global-header__product']}>\n <span className={styles['global-header__product-icon']} aria-hidden>\n <Icon size=\"20\" glyph={<ProductIcon />} />\n </span>\n <span className={styles['global-header__product-name']}>\n {PRODUCT_LABEL[product]}\n </span>\n </div>\n );\n}\n\nfunction Navigator() {\n return (\n <div className={styles['global-header__navigator']}>\n <InvertedIconButton ariaLabel=\"Back\" glyph={<ArrowLeftIcon />} />\n <InvertedIconButton ariaLabel=\"Forward\" glyph={<ArrowRightIcon />} />\n </div>\n );\n}\n\n/**\n * Global Header pattern — top bar spanning the full viewport that contains\n * the product switcher, product branding, navigator, and session-level\n * controls (search, mentions, saved, settings, account).\n *\n * Layout uses a three-column CSS grid for Channels (left | centered search + help | session)\n * so session controls stay anchored to the trailing edge. Playbooks/Boards omit the center\n * column and use two tracks (left product block | session).\n *\n * Matches Figma Global Header v1.2.1 (node 613:4135).\n */\nexport default function GlobalHeader({\n className = '',\n product = 'channels',\n showChannelsBranding = true,\n showUpgradeButton = false,\n userAvatarSrc,\n userAvatarAlt = 'User',\n}: GlobalHeaderProps) {\n const isChannels = product === 'channels';\n const showBrand = isChannels ? showChannelsBranding : true;\n\n const rootClass = [\n styles['global-header'],\n isChannels\n ? styles['global-header--channels']\n : styles['global-header--product-only'],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <header className={rootClass}>\n <div className={styles['global-header__left']}>\n <InvertedIconButton\n ariaLabel=\"Product switcher\"\n glyph={<ProductsIcon />}\n />\n {showBrand && <ProductBrand product={product} />}\n <Navigator />\n </div>\n\n {isChannels && (\n <div className={styles['global-header__center']}>\n <div className={styles['global-header__search']}>\n <span className={styles['global-header__search-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<MagnifyIcon />} />\n </span>\n <input\n type=\"search\"\n className={styles['global-header__search-input']}\n placeholder=\"Search\"\n aria-label=\"Search\"\n />\n </div>\n <InvertedIconButton\n ariaLabel=\"Help\"\n glyph={<HelpCircleOutlineIcon />}\n />\n </div>\n )}\n\n <div className={styles['global-header__right']}>\n {showUpgradeButton && (\n <Button emphasis=\"primary\" size=\"x-small\">\n Upgrade\n </Button>\n )}\n {product === 'playbooks' && (\n <InvertedIconButton\n ariaLabel=\"Tasks\"\n glyph={<CheckboxMultipleMarkedOutlineIcon />}\n />\n )}\n {isChannels && (\n <>\n <InvertedIconButton\n ariaLabel=\"Recent mentions\"\n glyph={<AtIcon />}\n />\n <InvertedIconButton\n ariaLabel=\"Saved messages\"\n glyph={<BookmarkOutlineIcon />}\n />\n </>\n )}\n {!isChannels && (\n <InvertedIconButton\n ariaLabel=\"Help\"\n glyph={<HelpCircleOutlineIcon />}\n />\n )}\n <InvertedIconButton ariaLabel=\"Settings\" glyph={<CogOutlineIcon />} />\n <button\n className={styles['global-header__account']}\n aria-label=\"Account menu\"\n >\n <UserAvatar\n src={userAvatarSrc}\n alt={userAvatarAlt}\n size=\"24\"\n status\n />\n </button>\n </div>\n </header>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport AlertOutlineIcon from '@mattermost/compass-icons/components/alert-outline';\nimport FileTextOutlineIcon from '@mattermost/compass-icons/components/file-text-outline';\nimport HelpCircleOutlineIcon from '@mattermost/compass-icons/components/help-circle-outline';\nimport KeyboardOutlineIcon from '@mattermost/compass-icons/components/keyboard-outline';\nimport LightbulbOutlineIcon from '@mattermost/compass-icons/components/lightbulb-outline';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\n\nexport interface HelpMenuProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Global header help menu — docs, community, and shortcuts.\n */\nexport default function HelpMenu({\n className = '',\n style,\n ...rest\n}: HelpMenuProps) {\n return (\n <PopoverMenu\n className={className}\n style={{ width: '232px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Mattermost user guide\"\n leadingVisual={<Icon glyph={<FileTextOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Training resources\"\n leadingVisual={<Icon glyph={<LightbulbOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Ask the community\"\n leadingVisual={<Icon glyph={<HelpCircleOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Report a problem\"\n leadingVisual={<Icon glyph={<AlertOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Keyboard shortcuts\"\n leadingVisual={<Icon glyph={<KeyboardOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport { usePopoverTransition } from '@/hooks/usePopoverTransition';\nimport LinkVariantIcon from '@mattermost/compass-icons/components/link-variant';\nimport DownloadOutlineIcon from '@mattermost/compass-icons/components/download-outline';\nimport MenuDownIcon from '@mattermost/compass-icons/components/menu-down';\nimport MenuRightIcon from '@mattermost/compass-icons/components/menu-right';\nimport styles from './ImagePreview.module.scss';\n\nexport type ImagePreviewAspectRatio = '16:9' | '4:3' | '1:1';\n\nexport interface ImagePreviewProps {\n /** Image src URL. */\n src: string;\n /** Alt text. */\n alt?: string;\n /** Whether the preview is collapsed (shows toggle label only). */\n collapsed?: boolean;\n /** Callback when the collapse toggle is clicked. */\n onToggleCollapse?: () => void;\n /** Callback when the copy-link action is clicked. */\n onCopyLink?: () => void;\n /** Callback when the download action is clicked. */\n onDownload?: () => void;\n /** Aspect ratio of the image container. Default: 16:9 */\n aspectRatio?: ImagePreviewAspectRatio;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Image Preview displays image attachments, markdown images, and inline image links inside\n * the message stream. It frames the image, shows hover actions for copy and download, and\n * lets the user collapse the preview when it's in the way.\n */\nexport default function ImagePreview({\n src,\n alt = '',\n collapsed = false,\n onToggleCollapse,\n onCopyLink,\n onDownload,\n aspectRatio = '16:9',\n className = '',\n}: ImagePreviewProps) {\n const frameTransition = usePopoverTransition(!collapsed);\n const labelTransition = usePopoverTransition(collapsed);\n\n const rootClass = [\n styles['image-preview'],\n collapsed ? styles['image-preview--collapsed'] : '',\n aspectRatio === '4:3' ? styles['image-preview--ratio-4-3'] : '',\n aspectRatio === '1:1' ? styles['image-preview--ratio-1-1'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['image-preview__stage']}>\n {labelTransition.mounted && (\n <button\n type=\"button\"\n className={[\n styles['image-preview__collapsed-trigger'],\n labelTransition.visible\n ? styles['image-preview__collapsed-trigger--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onToggleCollapse}\n aria-label=\"Show image preview\"\n >\n <span className={styles['image-preview__show-label']}>\n <span\n className={styles['image-preview__show-icon']}\n aria-hidden=\"true\"\n >\n <Icon size=\"12\" glyph={<MenuRightIcon />} />\n </span>\n Show Image preview\n </span>\n </button>\n )}\n\n {frameTransition.mounted && (\n <div\n className={[\n styles['image-preview__frame'],\n frameTransition.visible\n ? styles['image-preview__frame--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={styles['image-preview__media']}>\n <img src={src} alt={alt} className={styles['image-preview__img']} />\n </div>\n\n <div className={styles['image-preview__actions']}>\n {onCopyLink != null && (\n <IconButton\n size=\"small\"\n padding=\"compact\"\n aria-label=\"Copy link\"\n icon={<Icon size=\"16\" glyph={<LinkVariantIcon />} />}\n onClick={onCopyLink}\n />\n )}\n {onDownload != null && (\n <IconButton\n size=\"small\"\n padding=\"compact\"\n aria-label=\"Download\"\n icon={<Icon size=\"16\" glyph={<DownloadOutlineIcon />} />}\n onClick={onDownload}\n />\n )}\n </div>\n\n {onToggleCollapse != null && (\n <button\n type=\"button\"\n className={styles['image-preview__collapse-btn']}\n onClick={onToggleCollapse}\n aria-label=\"Collapse image preview\"\n >\n <Icon size=\"16\" glyph={<MenuDownIcon />} />\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport ImagePreview from '@/components/ImagePreview/ImagePreview';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './LinkPreview.module.scss';\n\nexport type LinkPreviewImageSize = 'none' | 'small' | 'large';\n\nexport interface LinkPreviewProps {\n /** The site/domain label shown above the title. */\n siteName?: string;\n /** The main link title. */\n title?: string;\n /** Description text. */\n description?: string;\n /** Preview image URL. Pair with `imageSize` to choose layout. */\n imageSrc?: string;\n /** Alt text for the preview image. */\n imageAlt?: string;\n /** Small: square thumbnail on the right. Large: ImagePreview below text. */\n imageSize?: LinkPreviewImageSize;\n /** Whether the large image preview is collapsed. Only applies when `imageSize` is `large`. */\n imageCollapsed?: boolean;\n /** Callback when the large image collapse toggle is clicked. */\n onToggleImageCollapse?: () => void;\n /** Callback when copy-link is clicked on the large image preview. */\n onCopyImageLink?: () => void;\n /** Callback when download is clicked on the large image preview. */\n onDownloadImage?: () => void;\n /** Called when the dismiss control is clicked. Shown on hover when provided. */\n onDismiss?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Link Previews appear under a message whenever it contains a URL with rich metadata — a\n * documentation page, a blog post, a product link. They give the recipient enough context to\n * decide whether to click without forcing them to open the link cold.\n */\nexport default function LinkPreview({\n siteName = 'Mattermost.com',\n title = 'Mattermost: Open-source, high-trust, developer-centric collaboration platform',\n description = 'Mattermost is a secure, open source platform for communication, collaboration, and workflow orchestration across tools and teams.',\n imageSrc,\n imageAlt = '',\n imageSize = 'none',\n imageCollapsed = false,\n onToggleImageCollapse,\n onCopyImageLink,\n onDownloadImage,\n onDismiss,\n className = '',\n}: LinkPreviewProps) {\n const resolvedImageSize =\n imageSrc != null && imageSize === 'none' ? 'large' : imageSize;\n const hasSmallImage = resolvedImageSize === 'small' && imageSrc != null;\n const hasLargeImage = resolvedImageSize === 'large' && imageSrc != null;\n\n const rootClass = [styles['link-preview'], className]\n .filter(Boolean)\n .join(' ');\n\n const cardClass = [\n styles['link-preview__card'],\n hasSmallImage ? styles['link-preview__card--small-image'] : '',\n hasLargeImage && !imageCollapsed\n ? styles['link-preview__card--large-image']\n : '',\n hasLargeImage && imageCollapsed\n ? styles['link-preview__card--collapsed-image']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n {onDismiss != null && (\n <>\n <div\n className={styles['link-preview__dismiss-bridge']}\n aria-hidden\n />\n <IconButton\n className={styles['link-preview__dismiss']}\n size=\"x-small\"\n padding=\"compact\"\n aria-label=\"Remove link preview\"\n icon={<Icon size=\"12\" glyph={<CloseIcon />} />}\n onClick={onDismiss}\n />\n </>\n )}\n\n <div className={cardClass}>\n <div className={styles['link-preview__text']}>\n <p className={styles['link-preview__site-name']}>{siteName}</p>\n <p className={styles['link-preview__title']}>{title}</p>\n <p className={styles['link-preview__description']}>{description}</p>\n </div>\n\n {hasSmallImage && (\n <div className={styles['link-preview__thumbnail']}>\n <img\n src={imageSrc}\n alt={imageAlt}\n className={styles['link-preview__thumbnail-img']}\n />\n </div>\n )}\n\n {hasLargeImage && (\n <ImagePreview\n className={styles['link-preview__image-preview']}\n src={imageSrc}\n alt={imageAlt}\n collapsed={imageCollapsed}\n onToggleCollapse={onToggleImageCollapse}\n onCopyLink={onCopyImageLink}\n onDownload={onDownloadImage}\n />\n )}\n </div>\n </div>\n );\n}\n","import Tag from '@/components/Tag/Tag';\nimport styles from './MessageHeader.module.scss';\n\ntype MessageHeaderProps = {\n username: string;\n timestamp: string;\n isBot?: boolean;\n botLabel?: string;\n};\n\n/**\n * The Message Header sits above every message body — username, optional bot or guest tag,\n * and timestamp. It's the byline of the conversation, so the rules are tight: same parts,\n * same order, every time.\n */\nexport default function MessageHeader({\n username,\n timestamp,\n isBot = false,\n botLabel = 'Bot',\n}: MessageHeaderProps) {\n return (\n <div className={styles['message-header']}>\n <span className={styles['message-header__username']}>{username}</span>\n {isBot && <Tag label={botLabel} />}\n <span className={styles['message-header__timestamp']}>{timestamp}</span>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport Emoji from '@/components/Emoji/Emoji';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport EmoticonPlusOutlineIcon from '@mattermost/compass-icons/components/emoticon-plus-outline';\nimport DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport CreationOutlineIcon from '@mattermost/compass-icons/components/creation-outline';\nimport AppsIcon from '@mattermost/compass-icons/components/apps';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport styles from './MessageActions.module.scss';\n\nexport type MessageActionsType = 'center-channel' | 'rhs' | 'search-results';\n\nexport interface MessageActionsProps extends HTMLAttributes<HTMLDivElement> {\n /** Context variant. Default: Center Channel. */\n type?: MessageActionsType;\n /** Whether the hover toolbar is visible. Default: true. */\n visible?: boolean;\n /** Whether collapsed reply threads feature is on. Default: true. */\n collapsedReplyThreads?: boolean;\n /** Whether quick reactions are shown. Default: true. */\n quickReactions?: boolean;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Message Actions is the floating toolbar that appears on a message when you hover, tab, or\n * long-press it. It bundles the most common per-message actions — react, save, reply, more —\n * into a small, context-aware row that hovers above the post.\n */\nexport default function MessageActions({\n type = 'center-channel',\n visible = true,\n collapsedReplyThreads = true,\n quickReactions = true,\n className = '',\n ...rest\n}: MessageActionsProps) {\n if (!visible) return null;\n\n const isCenterChannel = type === 'center-channel';\n const isRHS = type === 'rhs';\n const isSearchResults = type === 'search-results';\n const showQuickReactions = quickReactions && collapsedReplyThreads;\n\n const rootClass = [styles['message-actions'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"toolbar\"\n aria-label=\"Message actions\"\n {...rest}\n >\n {/* Quick reaction emojis — center channel + RHS */}\n {showQuickReactions && !isSearchResults && (\n <>\n <IconButton\n aria-label=\"React with thumbs up\"\n size=\"small\"\n padding=\"compact\"\n icon={<Emoji emoji=\"👍\" size=\"16\" />}\n />\n {isCenterChannel && (\n <>\n <IconButton\n aria-label=\"React with raised hands\"\n size=\"small\"\n padding=\"compact\"\n icon={<Emoji emoji=\"🙌\" size=\"16\" />}\n />\n <IconButton\n aria-label=\"React with OK hand\"\n size=\"small\"\n padding=\"compact\"\n icon={<Emoji emoji=\"👌\" size=\"16\" />}\n />\n </>\n )}\n <IconButton\n aria-label=\"Add reaction\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<EmoticonPlusOutlineIcon />} />}\n />\n </>\n )}\n\n {/* Search results only: more button first */}\n {isSearchResults && (\n <IconButton\n aria-label=\"More actions\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n />\n )}\n\n {/* Center channel actions */}\n {isCenterChannel && (\n <>\n <IconButton\n aria-label=\"Save message\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<BookmarkOutlineIcon />} />}\n />\n <IconButton\n aria-label=\"AI actions\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<CreationOutlineIcon />} />}\n />\n <IconButton\n aria-label=\"Plugin actions\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<AppsIcon />} />}\n />\n <IconButton\n aria-label=\"Reply in thread\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<ReplyOutlineIcon />} />}\n />\n <IconButton\n aria-label=\"More actions\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n />\n </>\n )}\n\n {/* RHS actions */}\n {isRHS && (\n <IconButton\n aria-label=\"More actions\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n />\n )}\n\n {/* Search results additional buttons */}\n {isSearchResults && (\n <>\n <IconButton\n aria-label=\"Save message\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<BookmarkOutlineIcon />} />}\n />\n <IconButton\n aria-label=\"Reply in thread\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<ReplyOutlineIcon />} />}\n />\n <button\n type=\"button\"\n className={styles['message-actions__jump']}\n aria-label=\"Jump to message\"\n >\n Jump\n </button>\n </>\n )}\n </div>\n );\n}\n","import PinOutlineIcon from '@mattermost/compass-icons/components/pin-outline';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport Icon from '@/components/Icon/Icon';\nimport styles from './PinnedSavedIndicators.module.scss';\n\nexport interface PinnedSavedIndicatorsProps {\n /** Optional CSS class on the root. */\n className?: string;\n}\n\n/**\n * Pinned + Saved row shown above a message when applicable (Patterns — Message).\n */\nexport default function PinnedSavedIndicators({\n className = '',\n}: PinnedSavedIndicatorsProps) {\n const rootClass = [styles['pinned-saved-indicators'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} aria-label=\"Pinned and Saved\">\n <div className={styles['pinned-saved-indicators__icons']}>\n <Icon size=\"12\" glyph={<PinOutlineIcon />} aria-hidden />\n <Icon size=\"12\" glyph={<BookmarkOutlineIcon />} aria-hidden />\n </div>\n <div className={styles['pinned-saved-indicators__labels']}>\n <span className={styles['pinned-saved-indicators__label']}>Pinned</span>\n <span className={styles['pinned-saved-indicators__sep']} aria-hidden>\n •\n </span>\n <span className={styles['pinned-saved-indicators__label']}>Saved</span>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport MessageHeader from '@/components/MessageHeader/MessageHeader';\nimport MessageActions from '@/components/MessageActions/MessageActions';\nimport type { MessageActionsType } from '@/components/MessageActions/MessageActions';\nimport PinnedSavedIndicators from '@/components/PinnedSavedIndicators/PinnedSavedIndicators';\nimport styles from './Message.module.scss';\n\ntype MessageProps = {\n avatarSrc?: string;\n avatarAlt: string;\n username: string;\n timestamp: string;\n isBot?: boolean;\n botLabel?: string;\n /** Hover toolbar context. Default: Center Channel. */\n messageActionsType?: MessageActionsType;\n /** When false, the hover Message Actions toolbar is omitted. Default: true. */\n showMessageActions?: boolean;\n /** When true, Pinned + Saved row appears at the top of the message container. */\n showPinnedSavedIndicators?: boolean;\n /** Merged onto the root element (e.g. documentation modifiers). */\n className?: string;\n /**\n * Primary body content (e.g. message text). When using structured slots, this\n * is usually the markdown/text block only. For plain `<p>` copy, use the\n * `message__body-text` class from `Message.module.scss` so typography matches\n * the component and host shells (docs, patterns) cannot restyle bare tags.\n */\n children: React.ReactNode;\n /** Link Preview block — renders after `children`. */\n linkPreview?: React.ReactNode;\n /** Image Preview block(s) — renders after the link preview slot. */\n imagePreviews?: React.ReactNode;\n /** Trailing body content — e.g. attachments and reactions — renders last. */\n footer?: React.ReactNode;\n};\n\nexport default function Message({\n avatarSrc,\n avatarAlt,\n username,\n timestamp,\n isBot = false,\n botLabel,\n messageActionsType = 'center-channel',\n showMessageActions = true,\n showPinnedSavedIndicators = false,\n className = '',\n children,\n linkPreview,\n imagePreviews,\n footer,\n}: MessageProps) {\n const rootClass = [styles.message, className].filter(Boolean).join(' ');\n\n return (\n <div className={rootClass}>\n {showPinnedSavedIndicators && (\n <div className={styles['message__pinned']}>\n <PinnedSavedIndicators />\n </div>\n )}\n <div className={styles['message__layout']}>\n <div className={styles['message__avatar-col']}>\n <UserAvatar src={avatarSrc} alt={avatarAlt} size=\"32\" />\n </div>\n <div className={styles['message__content']}>\n <div className={styles['message__header-row']}>\n <div className={styles['message__header-block']}>\n <MessageHeader\n username={username}\n timestamp={timestamp}\n isBot={isBot}\n botLabel={botLabel}\n />\n </div>\n {showMessageActions && (\n <div className={styles['message__actions-slot']}>\n <MessageActions type={messageActionsType} />\n </div>\n )}\n </div>\n <div className={styles['message__body']}>\n {children}\n {linkPreview != null && (\n <div className={styles['message__link-preview-slot']}>\n {linkPreview}\n </div>\n )}\n {imagePreviews != null && (\n <div className={styles['message__images-slot']}>{imagePreviews}</div>\n )}\n {footer != null && (\n <div className={styles['message__footer-slot']}>{footer}</div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useState, useRef, useCallback } from 'react';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronUpIcon from '@mattermost/compass-icons/components/chevron-up';\nimport DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport CodeTagsIcon from '@mattermost/compass-icons/components/code-tags';\nimport CreationOutlineIcon from '@mattermost/compass-icons/components/creation-outline';\nimport EmoticonHappyOutlineIcon from '@mattermost/compass-icons/components/emoticon-happy-outline';\nimport EyeOutlineIcon from '@mattermost/compass-icons/components/eye-outline';\nimport FireIcon from '@mattermost/compass-icons/components/fire';\nimport FormatBoldIcon from '@mattermost/compass-icons/components/format-bold';\nimport FormatHeaderIcon from '@mattermost/compass-icons/components/format-header';\nimport FormatItalicIcon from '@mattermost/compass-icons/components/format-italic';\nimport FormatLetterCaseIcon from '@mattermost/compass-icons/components/format-letter-case';\nimport FormatListBulletedIcon from '@mattermost/compass-icons/components/format-list-bulleted';\nimport FormatListNumberedIcon from '@mattermost/compass-icons/components/format-list-numbered';\nimport FormatQuoteOpenIcon from '@mattermost/compass-icons/components/format-quote-open';\nimport FormatStrikethroughVariantIcon from '@mattermost/compass-icons/components/format-strikethrough-variant';\nimport LinkVariantIcon from '@mattermost/compass-icons/components/link-variant';\nimport PaperclipIcon from '@mattermost/compass-icons/components/paperclip';\nimport SendIcon from '@mattermost/compass-icons/components/send';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport AttachmentCard from '@/components/AttachmentCard/AttachmentCard';\nimport styles from './MessageInput.module.scss';\n\nexport type MessageInputWidth = 'wide' | 'narrow';\n\nexport interface MessageInputProps {\n className?: string;\n placeholder?: string;\n showPriorityIndicator?: boolean;\n showAttachments?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onSelectionChange?: () => void;\n inputRef?: React.RefObject<HTMLTextAreaElement | null>;\n /** `narrow` matches the Figma Message Input “Narrow” / right-sidebar layout. */\n width?: MessageInputWidth;\n}\n\nexport default function MessageInput({\n className = '',\n placeholder = 'Message channel…',\n showPriorityIndicator = false,\n showAttachments = false,\n value,\n onChange,\n onSelectionChange,\n inputRef,\n width = 'wide',\n}: MessageInputProps) {\n const [internalText, setInternalText] = useState('');\n const isControlled = value !== undefined;\n const text = isControlled ? value : internalText;\n const setText = (next: string) => {\n if (isControlled) onChange?.(next);\n else setInternalText(next);\n };\n const [formattingOpen, setFormattingOpen] = useState(false);\n const internalRef = useRef<HTMLTextAreaElement>(null);\n\n const setTextareaRef = (node: HTMLTextAreaElement | null) => {\n internalRef.current = node;\n if (inputRef) {\n (inputRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n }\n };\n\n const handleInput = useCallback(() => {\n const el = internalRef.current;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }, []);\n\n useEffect(() => {\n handleInput();\n }, [text, handleInput]);\n\n const hasSendValue = text.trim().length > 0;\n\n const cls = (base: string, mod?: string) =>\n [styles[base], mod ? styles[mod] : ''].filter(Boolean).join(' ');\n\n const isNarrowFormattingOpen = width === 'narrow' && formattingOpen;\n const showWideFormattingBar = formattingOpen && width === 'wide';\n\n const composerActions = (\n <>\n <button\n type=\"button\"\n className={cls(\n 'message-input__format-btn',\n formattingOpen ? 'message-input__format-btn--active' : '',\n )}\n aria-label={\n formattingOpen\n ? 'Hide formatting toolbar'\n : 'Show formatting toolbar'\n }\n aria-pressed={formattingOpen}\n onClick={() => setFormattingOpen((prev) => !prev)}\n >\n <Icon glyph={<FormatLetterCaseIcon />} size=\"16\" />\n {isNarrowFormattingOpen ? (\n <span className={styles['message-input__format-chevron']}>\n <Icon glyph={<ChevronUpIcon />} size=\"12\" />\n </span>\n ) : (\n <span\n className={cls(\n 'message-input__format-chevron',\n formattingOpen ? 'message-input__format-chevron--rotated' : '',\n )}\n >\n <Icon glyph={<ChevronDownIcon />} size=\"12\" />\n </span>\n )}\n </button>\n\n <span\n className={styles['message-input__actions-divider']}\n aria-hidden\n />\n\n <IconButton\n icon={<Icon glyph={<PaperclipIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Attach a file\"\n />\n <IconButton\n icon={<Icon glyph={<EmoticonHappyOutlineIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Add an emoji\"\n />\n\n <div\n className={cls(\n 'message-input__send',\n !hasSendValue ? 'message-input__send--disabled' : '',\n )}\n >\n <button\n type=\"button\"\n className={styles['message-input__send-main']}\n aria-label=\"Send message\"\n disabled={!hasSendValue}\n >\n <Icon glyph={<SendIcon />} size=\"16\" />\n </button>\n <button\n type=\"button\"\n className={styles['message-input__send-dropdown']}\n aria-label=\"Send options\"\n disabled={!hasSendValue}\n >\n <Icon glyph={<ChevronDownIcon />} size=\"16\" />\n </button>\n </div>\n </>\n );\n\n const rootClass = [\n styles['message-input'],\n width === 'narrow' ? styles['message-input--width-narrow'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div\n className={cls(\n 'message-input__container',\n formattingOpen ? 'message-input__container--formatting-open' : '',\n )}\n >\n {/* Preview button — fades in when formatting is open */}\n <button\n type=\"button\"\n className={cls(\n 'message-input__preview-btn',\n formattingOpen ? 'message-input__preview-btn--visible' : '',\n )}\n aria-label=\"Preview\"\n tabIndex={formattingOpen ? 0 : -1}\n >\n <Icon glyph={<EyeOutlineIcon />} size=\"16\" />\n </button>\n\n {/* Main text area */}\n <div\n className={cls(\n 'message-input__body',\n formattingOpen ? 'message-input__body--formatting-open' : '',\n )}\n >\n {showPriorityIndicator && (\n <div className={styles['message-input__priority-row']}>\n <Tag\n label=\"IMPORTANT\"\n type=\"info\"\n size=\"x-small\"\n casing=\"all-caps\"\n leadingIcon={\n <Icon glyph={<AlertCircleOutlineIcon />} size=\"10\" />\n }\n />\n </div>\n )}\n <textarea\n ref={setTextareaRef}\n className={styles['message-input__textarea']}\n placeholder={placeholder}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onInput={handleInput}\n onSelect={onSelectionChange}\n onKeyUp={onSelectionChange}\n onClick={onSelectionChange}\n rows={1}\n />\n </div>\n\n {/* Attachment cards */}\n {showAttachments && (\n <div className={styles['message-input__attachments']}>\n <div className={styles['message-input__attachments-list']}>\n <AttachmentCard\n fileName=\"Design_Brief.pdf\"\n fileMeta=\"PDF 240KB\"\n fileType=\"pdf\"\n state=\"default\"\n onRemove={() => {}}\n />\n <AttachmentCard\n fileName=\"Wireframes_v3.png\"\n fileMeta=\"PNG 1.2MB\"\n fileType=\"image-icon\"\n state=\"default\"\n onRemove={() => {}}\n />\n </div>\n </div>\n )}\n\n {/* Formatting toolbar — full bar (wide only); narrow uses collapsed strip in footer */}\n <div\n className={cls(\n 'message-input__formatting-bar',\n showWideFormattingBar ? 'message-input__formatting-bar--open' : '',\n )}\n aria-hidden={!showWideFormattingBar}\n >\n <div className={styles['message-input__toolbar-controls']}>\n {/* Style */}\n <div className={styles['message-input__toolbar-group']}>\n <IconButton\n icon={<Icon glyph={<FormatBoldIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Bold\"\n />\n <IconButton\n icon={<Icon glyph={<FormatItalicIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Italic\"\n />\n <IconButton\n icon={\n <Icon glyph={<FormatStrikethroughVariantIcon />} size=\"16\" />\n }\n size=\"small\"\n aria-label=\"Strikethrough\"\n />\n <IconButton\n icon={<Icon glyph={<FormatHeaderIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Heading\"\n />\n </div>\n\n <span\n className={styles['message-input__toolbar-divider']}\n aria-hidden\n />\n\n {/* Links + Code */}\n <div className={styles['message-input__toolbar-group']}>\n <IconButton\n icon={<Icon glyph={<LinkVariantIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Add link\"\n />\n <IconButton\n icon={<Icon glyph={<CodeTagsIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Code\"\n />\n </div>\n\n <span\n className={styles['message-input__toolbar-divider']}\n aria-hidden\n />\n\n {/* Paragraph */}\n <div className={styles['message-input__toolbar-group']}>\n <IconButton\n icon={<Icon glyph={<FormatQuoteOpenIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Quote\"\n />\n <IconButton\n icon={<Icon glyph={<FormatListBulletedIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Bulleted list\"\n />\n <IconButton\n icon={<Icon glyph={<FormatListNumberedIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Numbered list\"\n />\n </div>\n\n <span\n className={styles['message-input__toolbar-divider']}\n aria-hidden\n />\n\n {/* Tools */}\n <div className={styles['message-input__toolbar-group']}>\n <IconButton\n icon={<Icon glyph={<AlertCircleOutlineIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Message priority\"\n />\n <IconButton\n icon={<Icon glyph={<FireIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Burn on read\"\n />\n <IconButton\n icon={<Icon glyph={<CreationOutlineIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"AI assistance\"\n />\n </div>\n </div>\n </div>\n\n {width === 'narrow' ? (\n <div className={styles['message-input__narrow-chrome']}>\n <div className={styles['message-input__narrow-chrome-left']}>\n {formattingOpen && (\n <div className={styles['message-input__formatting-collapsed']}>\n <IconButton\n icon={<Icon glyph={<FormatBoldIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Bold\"\n />\n <IconButton\n icon={<Icon glyph={<FormatItalicIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Italic\"\n />\n <IconButton\n icon={<Icon glyph={<LinkVariantIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"Add link\"\n />\n <IconButton\n icon={<Icon glyph={<DotsHorizontalIcon />} size=\"16\" />}\n size=\"small\"\n aria-label=\"More formatting options\"\n />\n </div>\n )}\n </div>\n <div\n className={[\n styles['message-input__actions'],\n styles['message-input__actions--narrow-chrome'],\n ].join(' ')}\n >\n {composerActions}\n </div>\n </div>\n ) : (\n <div className={styles['message-input__actions']}>{composerActions}</div>\n )}\n </div>\n </div>\n );\n}\n","import styles from './ShortcutTag.module.scss';\n\nexport type ShortcutTagSize = 'small' | 'medium' | 'large';\nexport type ShortcutTagLocation = 'default' | 'tooltips';\n\nexport type ShortcutTagProps = {\n /** Key label (e.g. `⌘`, `Shift`, `K`). */\n label: string;\n size?: ShortcutTagSize;\n /** Default for menus and light surfaces; Tooltips for dark overlays. */\n location?: ShortcutTagLocation;\n className?: string;\n};\n\nconst SIZE_CLASS: Record<ShortcutTagSize, string> = {\n small: styles['shortcut-tag__key--size-small'],\n medium: styles['shortcut-tag__key--size-medium'],\n large: styles['shortcut-tag__key--size-large'],\n};\n\nconst LOCATION_CLASS: Record<ShortcutTagLocation, string> = {\n default: styles['shortcut-tag__key--location-default'],\n tooltips: styles['shortcut-tag__key--location-tooltips'],\n};\n\n/**\n * Keyboard shortcut key chip for menus, tooltips, and popovers.\n *\n * @see Figma Shortcut Tag (Source: xkm54Q9IQcyo3c0pGeNIMH)\n */\nexport default function ShortcutTag({\n label,\n size = 'small',\n location = 'default',\n className = '',\n}: ShortcutTagProps) {\n const rootClass = [\n styles['shortcut-tag__key'],\n SIZE_CLASS[size],\n LOCATION_CLASS[location],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return <kbd className={rootClass}>{label}</kbd>;\n}\n\nexport type ShortcutTagGroupProps = {\n /** Individual key labels (e.g. `['Ctrl', 'K']`). */\n labels: string[];\n size?: ShortcutTagSize;\n location?: ShortcutTagLocation;\n className?: string;\n};\n\n/** Inline row of shortcut tags for prose and notice copy. */\nexport function ShortcutTagGroup({\n labels,\n size = 'small',\n location = 'default',\n className = '',\n}: ShortcutTagGroupProps) {\n const groupClass = [styles['shortcut-tag-group'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={groupClass}>\n {labels.map((label, index) => (\n <ShortcutTag\n key={`${label}-${index}`}\n label={label}\n size={size}\n location={location}\n />\n ))}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport ArrowRightBoldOutlineIcon from '@mattermost/compass-icons/components/arrow-right-bold-outline';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport ClockOutlineIcon from '@mattermost/compass-icons/components/clock-outline';\nimport ContentCopyIcon from '@mattermost/compass-icons/components/content-copy';\nimport FlagOutlineIcon from '@mattermost/compass-icons/components/flag-outline';\nimport LinkVariantIcon from '@mattermost/compass-icons/components/link-variant';\nimport MarkAsUnreadIcon from '@mattermost/compass-icons/components/mark-as-unread';\nimport MessageCheckOutlineIcon from '@mattermost/compass-icons/components/message-check-outline';\nimport PencilOutlineIcon from '@mattermost/compass-icons/components/pencil-outline';\nimport PinOutlineIcon from '@mattermost/compass-icons/components/pin-outline';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport TranslateIcon from '@mattermost/compass-icons/components/translate';\nimport TrashCanOutlineIcon from '@mattermost/compass-icons/components/trash-can-outline';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport ShortcutTag from '@/components/ShortcutTag/ShortcutTag';\n\nexport interface MessageMoreOptionsMenuProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Shows Edit and Delete rows. Default: true. */\n permissionToEdit?: boolean;\n /** Shows Flag message row. Default: true. */\n showFlagOption?: boolean;\n}\n\nfunction shortcutLabel(text: string) {\n return <ShortcutTag label={text} size=\"small\" />;\n}\n\n/**\n * Message “more options” menu — actions with keyboard hints, optional edit/flag.\n */\nexport default function MessageMoreOptionsMenu({\n permissionToEdit = true,\n showFlagOption = true,\n className = '',\n style,\n ...rest\n}: MessageMoreOptionsMenuProps) {\n return (\n <PopoverMenu\n className={className}\n style={{ width: '236px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Reply\"\n leadingVisual={<Icon glyph={<ReplyOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('R')}\n />\n <MenuItem\n label=\"Forward\"\n leadingVisual={\n <Icon glyph={<ArrowRightBoldOutlineIcon />} size=\"16\" />\n }\n trailingElement\n trailingVisual={shortcutLabel('Shift + F')}\n />\n <MenuItem\n label=\"Follow thread\"\n leadingVisual={<Icon glyph={<MessageCheckOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('F')}\n />\n <MenuItem\n label=\"Mark as unread\"\n leadingVisual={<Icon glyph={<MarkAsUnreadIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('U')}\n />\n <MenuItem\n label=\"Save\"\n leadingVisual={<Icon glyph={<BookmarkOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('S')}\n />\n <MenuItem\n label=\"Remind\"\n leadingVisual={<Icon glyph={<ClockOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={<Icon glyph={<ChevronRightIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Pin to channel\"\n leadingVisual={<Icon glyph={<PinOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('P')}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Copy text\"\n leadingVisual={<Icon glyph={<ContentCopyIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('C')}\n />\n <MenuItem\n label=\"Show translation\"\n leadingVisual={<Icon glyph={<TranslateIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Copy link\"\n leadingVisual={<Icon glyph={<LinkVariantIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('K')}\n />\n </PopoverMenuGroup>\n {permissionToEdit && (\n <>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Edit\"\n leadingVisual={<Icon glyph={<PencilOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('E')}\n />\n <MenuItem\n label=\"Delete\"\n destructive\n leadingVisual={<Icon glyph={<TrashCanOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('delete')}\n />\n </PopoverMenuGroup>\n </>\n )}\n {showFlagOption && (\n <>\n {!permissionToEdit && <PopoverMenuDivider />}\n <PopoverMenuGroup>\n <MenuItem\n label=\"Flag message\"\n destructive\n leadingVisual={<Icon glyph={<FlagOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </>\n )}\n </PopoverMenu>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport CheckCircleOutlineIcon from '@mattermost/compass-icons/components/check-circle-outline';\nimport EmoticonPlusOutlineIcon from '@mattermost/compass-icons/components/emoticon-plus-outline';\nimport styles from './MessageReactions.module.scss';\n\nexport interface ReactionItem {\n emoji: string;\n count: number;\n /** Whether the current user reacted with this emoji. */\n byCurrentUser?: boolean;\n}\n\nexport interface MessageReactionsProps extends HTMLAttributes<HTMLDivElement> {\n /** List of reactions to display. */\n reactions?: ReactionItem[];\n /** Whether to show the add-reaction button. Default: false. */\n showAddReaction?: boolean;\n /** Whether to show the acknowledge button. */\n acknowledged?: boolean;\n /** Acknowledge count. */\n acknowledgeCount?: number;\n /** Whether the current user has acknowledged. Default: false. */\n currentUserAcknowledged?: boolean;\n /** Called when add-reaction is clicked. */\n onAddReaction?: () => void;\n /** Called when a reaction pill is clicked. */\n onReactionClick?: (emoji: string) => void;\n /** Called when the acknowledge button is clicked. */\n onAcknowledge?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\nconst DEFAULT_REACTIONS: ReactionItem[] = [\n { emoji: '👍', count: 1 },\n { emoji: '😀', count: 4 },\n { emoji: '🙌', count: 1 },\n];\n\n/**\n * Message Reactions are the row of emoji pills below a message — the lightest weight way to\n * respond, applaud, or acknowledge without adding to the thread. The component handles the\n * count, the \"this is mine\" highlight, and the add-reaction affordance.\n */\nexport default function MessageReactions({\n reactions = DEFAULT_REACTIONS,\n showAddReaction = false,\n acknowledged = false,\n acknowledgeCount = 0,\n currentUserAcknowledged = false,\n onAddReaction,\n onReactionClick,\n onAcknowledge,\n className = '',\n ...rest\n}: MessageReactionsProps) {\n const rootClass = [styles['message-reactions'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} {...rest}>\n {/* Acknowledge button */}\n {acknowledged && (\n <button\n type=\"button\"\n className={[\n styles['message-reactions__ack'],\n currentUserAcknowledged\n ? styles['message-reactions__ack--active']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onAcknowledge}\n aria-pressed={currentUserAcknowledged}\n aria-label=\"Acknowledge message\"\n >\n <span className={styles['message-reactions__ack-icon']} aria-hidden>\n <Icon size=\"16\" glyph={<CheckCircleOutlineIcon />} />\n </span>\n {currentUserAcknowledged ? (\n <span className={styles['message-reactions__ack-count']}>\n {acknowledgeCount}\n </span>\n ) : (\n <span className={styles['message-reactions__ack-label']}>\n Acknowledge\n </span>\n )}\n </button>\n )}\n\n {/* Reaction pills */}\n <div className={styles['message-reactions__pills']}>\n {reactions.map(({ emoji, count, byCurrentUser }) => (\n <button\n key={emoji}\n type=\"button\"\n className={[\n styles['message-reactions__pill'],\n byCurrentUser ? styles['message-reactions__pill--mine'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onReactionClick?.(emoji)}\n aria-label={`${emoji} ${count} reaction${count !== 1 ? 's' : ''}`}\n aria-pressed={byCurrentUser}\n >\n <span\n className={styles['message-reactions__pill-emoji']}\n aria-hidden\n >\n {emoji}\n </span>\n <span className={styles['message-reactions__pill-count']}>\n {count}\n </span>\n </button>\n ))}\n\n {/* Add reaction button */}\n {showAddReaction && (\n <IconButton\n aria-label=\"Add reaction\"\n className={styles['message-reactions__add-reaction']}\n size=\"x-small\"\n onClick={onAddReaction}\n icon={<Icon size=\"16\" glyph={<EmoticonPlusOutlineIcon />} />}\n />\n )}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport Icon from '@/components/Icon/Icon';\nimport CreationOutlineIcon from '@mattermost/compass-icons/components/creation-outline';\nimport styles from './MessageSeparator.module.scss';\n\nexport type MessageSeparatorType = 'date' | 'new-messages' | 'reply-count';\n\nexport interface MessageSeparatorProps extends HTMLAttributes<HTMLDivElement> {\n /** Separator variant. Default: Date. */\n type?: MessageSeparatorType;\n /** Label text. Defaults: 'Today' / 'new-messages' / '4 replies'. */\n label?: string;\n /** Show AI summarize button (New Messages type only). Default: false. */\n showAiSummary?: boolean;\n /** Called when Summarize button is clicked. */\n onSummarize?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\nconst DEFAULT_LABELS: Record<MessageSeparatorType, string> = {\n date: 'Today',\n 'new-messages': 'new-messages',\n 'reply-count': '4 replies',\n};\n\n/**\n * Message Separators sit between messages in the stream to group them — by day, by reply\n * count, or to mark the boundary between read and unread. They help readers orient\n * themselves when scrolling back through history or returning to a busy channel.\n */\nexport default function MessageSeparator({\n type = 'date',\n label,\n showAiSummary = false,\n onSummarize,\n className = '',\n ...rest\n}: MessageSeparatorProps) {\n const displayLabel = label ?? DEFAULT_LABELS[type];\n\n const rootClass = [\n styles['message-separator'],\n styles[\n `message-separator--${type === 'new-messages' ? 'new' : type === 'reply-count' ? 'reply' : 'date'}`\n ],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const labelBlock = (\n <div className={styles['message-separator__label']}>\n <span className={styles['message-separator__text']}>\n {displayLabel}\n </span>\n\n {type === 'new-messages' && showAiSummary && (\n <button\n type=\"button\"\n className={styles['message-separator__summarize']}\n onClick={onSummarize}\n aria-label=\"Summarize new messages with AI\"\n >\n <span\n className={styles['message-separator__summarize-icon']}\n aria-hidden\n >\n <Icon size=\"12\" glyph={<CreationOutlineIcon />} />\n </span>\n Summarize\n </button>\n )}\n </div>\n );\n\n return (\n <div className={rootClass} role=\"separator\" {...rest}>\n {type === 'reply-count' ? (\n <>\n <div className={styles['message-separator__reply-gutter']} aria-hidden>\n <div className={styles['message-separator__reply-line-start']} />\n </div>\n {labelBlock}\n <div className={styles['message-separator__line']} aria-hidden />\n </>\n ) : (\n <>\n <div className={styles['message-separator__line']} aria-hidden />\n {labelBlock}\n <div className={styles['message-separator__line']} aria-hidden />\n </>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { useId } from 'react';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport ArrowLeftIcon from '@mattermost/compass-icons/components/arrow-left';\nimport { toKebab } from '@/utils/string';\nimport styles from './Modal.module.scss';\n\nexport type ModalSize = 'small' | 'medium' | 'large';\n\nexport interface ModalProps {\n /** Width variant. Figma: Size — Small 600px, Medium 704px, Large 832px. */\n size?: ModalSize;\n /** Modal heading text. Always visible. */\n title: ReactNode;\n /** Optional secondary line below the title. */\n subtitle?: ReactNode;\n /** When true, shows a back-arrow button before the title. */\n showBackButton?: boolean;\n /** Called when the back button is clicked. */\n onBack?: () => void;\n /** Called when the × close button is clicked. */\n onClose?: () => void;\n /** Show divider between header and body. Figma: Divider = On. Default: true. */\n headerDivider?: boolean;\n /** Body content. */\n children: ReactNode;\n /** Footer slot — typically a group of Buttons, right-aligned by default. */\n footer?: ReactNode;\n /** Show divider between body and footer. Figma: Divider = On. Default: true. */\n footerDivider?: boolean;\n}\n\nexport default function Modal({\n size = 'small',\n title,\n subtitle,\n showBackButton = false,\n onBack,\n onClose,\n headerDivider = true,\n children,\n footer,\n footerDivider = true,\n}: ModalProps) {\n const titleId = useId();\n const sizeClass = styles[`modal--size-${toKebab(size)}`];\n\n return (\n <div\n className={[styles.modal, sizeClass].filter(Boolean).join(' ')}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n >\n <div\n className={[\n styles['modal__header'],\n !headerDivider && styles['modal__header--no-divider'],\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={styles['modal__header-inner']}>\n {showBackButton && (\n <IconButton\n aria-label=\"Go back\"\n icon={<Icon glyph={<ArrowLeftIcon />} size=\"20\" />}\n onClick={onBack}\n />\n )}\n <div className={styles['modal__title-group']}>\n <h2 id={titleId} className={styles['modal__title']}>\n {title}\n </h2>\n {subtitle && (\n <p className={styles['modal__subtitle']}>{subtitle}</p>\n )}\n </div>\n </div>\n <IconButton\n aria-label=\"Close\"\n className={styles['modal__close']}\n icon={<Icon glyph={<CloseIcon />} size=\"20\" />}\n onClick={onClose}\n />\n </div>\n\n <div className={styles['modal__body']}>\n <Scrollbar>\n <div className={styles['modal__body-inner']}>{children}</div>\n </Scrollbar>\n </div>\n\n {footer && (\n <div\n className={[\n styles['modal__footer'],\n !footerDivider && styles['modal__footer--no-divider'],\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {footer}\n </div>\n )}\n </div>\n );\n}\n","import Icon from '@/components/Icon/Icon';\nimport ArrowDownIcon from '@mattermost/compass-icons/components/arrow-down';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './NewMessageBanner.module.scss';\n\nexport type NewMessageBannerType = 'jump-to-unreads' | 'new-replies';\n\nexport interface NewMessageBannerProps {\n /** Optional CSS class name. */\n className?: string;\n /** Type controls the layout. Default: JumpToUnreads. */\n type?: NewMessageBannerType;\n /** Unread count label text (e.g. \"21 new messages since Saturday\"). Used in JumpToUnreads type. */\n countLabel?: string;\n /** Called when the banner itself is clicked. */\n onClick?: () => void;\n /** Called when the dismiss (×) button is clicked. */\n onDismiss?: () => void;\n}\n\n/**\n * The New Messages Banner alerts the user that there's fresh activity in the channel they're\n * reading. It floats over the message stream so they can jump to the unread region in one\n * click — or dismiss it if they'd rather keep scrolling.\n */\nexport default function NewMessageBanner({\n className = '',\n type = 'jump-to-unreads',\n countLabel,\n onClick,\n onDismiss,\n}: NewMessageBannerProps) {\n const typeClass =\n styles[\n `new-message-banner--type-${type === 'jump-to-unreads' ? 'jump-to-unreads' : 'new-replies'}`\n ];\n\n const rootClass = [\n styles['new-message-banner'],\n typeClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <button\n className={styles['new-message-banner__main']}\n type=\"button\"\n onClick={onClick}\n aria-label={\n type === 'jump-to-unreads'\n ? countLabel != null\n ? `Jump to unreads, ${countLabel}`\n : 'Jump to unreads'\n : undefined\n }\n >\n <span className={styles['new-message-banner__left']}>\n <span className={styles['new-message-banner__icon']} aria-hidden>\n <Icon size=\"16\" glyph={<ArrowDownIcon />} />\n </span>\n <span className={styles['new-message-banner__jump-label']}>\n {type === 'jump-to-unreads' ? 'Jump to unreads' : 'New replies'}\n </span>\n </span>\n </button>\n {type === 'jump-to-unreads' && countLabel != null && (\n <span className={styles['new-message-banner__count']} aria-hidden>\n {countLabel}\n </span>\n )}\n {onDismiss != null && (\n <button\n className={styles['new-message-banner__dismiss']}\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n >\n <Icon size=\"16\" glyph={<CloseIcon />} />\n </button>\n )}\n </div>\n );\n}\n","import styles from './PaginationDots.module.scss';\n\nexport type PaginationDotsOrientation = 'horizontal' | 'vertical';\nexport type PaginationDotsStyle = 'default' | 'inverted' | 'on-primary';\n\nexport interface PaginationDotsProps {\n /** Total number of pages/steps. */\n pages: number;\n /** Currently active page (1-indexed). */\n activePage: number;\n /** Layout orientation. Default: Horizontal. */\n orientation?: PaginationDotsOrientation;\n /** Color style. Default: Default. */\n dotStyle?: PaginationDotsStyle;\n /** Called when a dot is clicked. Receives the 1-indexed page number. */\n onPageChange?: (page: number) => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Pagination Dots indicate progress through a fixed sequence of steps — most often a\n * multi-step onboarding flow or a swipeable carousel. One dot per step, the active one\n * filled, the rest quiet.\n */\nexport default function PaginationDots({\n pages,\n activePage,\n orientation = 'horizontal',\n dotStyle = 'default',\n onPageChange,\n className = '',\n}: PaginationDotsProps) {\n const isVertical = orientation === 'vertical';\n const isInverted = dotStyle === 'inverted';\n const isOnPrimary = dotStyle === 'on-primary';\n\n const orientationClass = isVertical\n ? styles['pagination-dots--vertical']\n : styles['pagination-dots--horizontal'];\n const styleClass = isInverted\n ? styles['pagination-dots--inverted']\n : isOnPrimary\n ? styles['pagination-dots--on-primary']\n : '';\n\n return (\n <div\n className={[\n styles['pagination-dots'],\n orientationClass,\n styleClass,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"tablist\"\n aria-label=\"Pages\"\n >\n {Array.from({ length: pages }, (_, i) => {\n const page = i + 1;\n const isActive = page === activePage;\n const dotClass = [\n styles['pagination-dots__dot'],\n isActive ? styles['pagination-dots__dot--active'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={page}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`Page ${page}`}\n className={styles['pagination-dots__item']}\n onClick={() => onPageChange?.(page)}\n >\n <span className={dotClass} />\n </button>\n );\n })}\n </div>\n );\n}\n","import UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport MessageHeader from '@/components/MessageHeader/MessageHeader';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './PermalinkPreview.module.scss';\n\nexport interface PermalinkPreviewProps {\n /** Sender's display name. */\n authorName?: string;\n /** Avatar image src. */\n avatarSrc: string;\n /** Timestamp label. */\n timestamp?: string;\n /** The quoted message body text. */\n messageText?: string;\n /** \"Originally posted in ~Channel\" footer text. */\n originalChannel?: string;\n /** Called when the dismiss control is clicked. Shown on hover when provided. */\n onDismiss?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * A Permalink Preview renders an inline card for a message that another message links to.\n * Sender, timestamp, body, and origin channel — enough context to recognise the quoted\n * message without leaving where you are.\n */\nexport default function PermalinkPreview({\n authorName = 'Leonard Riley',\n avatarSrc,\n timestamp = '10:43 AM',\n messageText = 'At eu sed tristique gravida et fames vel pellentesque. Urna phasellus integer eu tempor mauris amet sagittis. Mollis risus mi felis magna.',\n originalChannel = '~Desktop App',\n onDismiss,\n className = '',\n}: PermalinkPreviewProps) {\n const rootClass = [styles['permalink-preview'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n {onDismiss != null && (\n <>\n <div\n className={styles['permalink-preview__dismiss-bridge']}\n aria-hidden\n />\n <IconButton\n className={styles['permalink-preview__dismiss']}\n size=\"x-small\"\n padding=\"compact\"\n aria-label=\"Remove permalink preview\"\n icon={<Icon size=\"12\" glyph={<CloseIcon />} />}\n onClick={onDismiss}\n />\n </>\n )}\n\n <div className={styles['permalink-preview__card']}>\n <div className={styles['permalink-preview__message']}>\n <div className={styles['permalink-preview__header']}>\n <UserAvatar src={avatarSrc} alt={authorName} size=\"24\" />\n <MessageHeader username={authorName} timestamp={timestamp} />\n </div>\n <div className={styles['permalink-preview__body']}>\n <p className={styles['permalink-preview__text']}>{messageText}</p>\n </div>\n </div>\n <p className={styles['permalink-preview__origin']}>\n Originally posted in {originalChannel}\n </p>\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport AccountOutlineIcon from '@mattermost/compass-icons/components/account-outline';\nimport AccountPlusOutlineIcon from '@mattermost/compass-icons/components/account-plus-outline';\nimport FolderPlusOutlineIcon from '@mattermost/compass-icons/components/folder-plus-outline';\nimport GlobeIcon from '@mattermost/compass-icons/components/globe';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\n\nexport interface PlusMenuProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Channel sidebar “+” menu — browse/create channels, DM, category, invite.\n */\nexport default function PlusMenu({\n className = '',\n style,\n ...rest\n}: PlusMenuProps) {\n return (\n <PopoverMenu\n className={className}\n style={{ width: '260px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Browse channels\"\n leadingVisual={<Icon glyph={<GlobeIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Create new channel\"\n leadingVisual={<Icon glyph={<PlusIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Open a direct message\"\n leadingVisual={<Icon glyph={<AccountOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Create new category\"\n leadingVisual={<Icon glyph={<FolderPlusOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Invite people\"\n secondaryLabel=\"Add or invite people to team\"\n leadingVisual={<Icon glyph={<AccountPlusOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import type { ReactNode } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport CheckCircleOutlineIcon from '@mattermost/compass-icons/components/check-circle-outline';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport AlertOutlineIcon from '@mattermost/compass-icons/components/alert-outline';\nimport Button from '@/components/Button/Button';\nimport Checkbox from '@/components/Checkbox/Checkbox';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport styles from './PopoverNotice.module.scss';\n\nexport type PopoverNoticeVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface PopoverNoticeAction {\n label: string;\n onClick?: () => void;\n emphasis?: 'primary' | 'tertiary';\n}\n\nexport interface PopoverNoticeProps {\n /** Popover title text. */\n title: string;\n /** Body content. */\n children: ReactNode;\n /**\n * Semantic variant — sets the icon and its color automatically.\n * Ignored if `icon` is also provided.\n */\n variant?: PopoverNoticeVariant;\n /** Optional icon shown to the left of the title. Overrides variant icon. */\n icon?: ReactNode;\n /** Action buttons rendered below the body. */\n actions?: PopoverNoticeAction[];\n /** When true, shows a \"Don't show this again\" checkbox. */\n showCheckbox?: boolean;\n /** Checkbox label override. */\n checkboxLabel?: string;\n /** Callback when close button is clicked. */\n onClose?: () => void;\n /** Optional CSS class name. */\n className?: string;\n}\n\nconst VARIANT_ICONS: Record<PopoverNoticeVariant, ReactNode> = {\n info: <Icon size=\"20\" glyph={<InformationOutlineIcon />} />,\n success: <Icon size=\"20\" glyph={<CheckCircleOutlineIcon />} />,\n warning: <Icon size=\"20\" glyph={<AlertCircleOutlineIcon />} />,\n danger: <Icon size=\"20\" glyph={<AlertOutlineIcon />} />,\n};\n\nconst VARIANT_ICON_CLASS: Record<PopoverNoticeVariant, string> = {\n info: styles['popover-notice__icon--info'],\n success: styles['popover-notice__icon--success'],\n warning: styles['popover-notice__icon--warning'],\n danger: styles['popover-notice__icon--danger'],\n};\n\n/**\n * Popover Notice is a small overlay card that surfaces a transient message — a tip, a\n * confirmation, a warning — without taking over the screen. Think of it as a [Section\n * Notice](/components/section-notice) that floats: shorter, dismissable, and gone in five\n * seconds unless the user engages.\n */\nexport default function PopoverNotice({\n title,\n children,\n variant,\n icon,\n actions,\n showCheckbox = false,\n checkboxLabel = \"Don't show this confirmation again\",\n onClose,\n className = '',\n}: PopoverNoticeProps) {\n const rootClass = [styles['popover-notice'], className]\n .filter(Boolean)\n .join(' ');\n\n const resolvedIcon = icon ?? (variant ? VARIANT_ICONS[variant] : null);\n const iconColorClass = !icon && variant ? VARIANT_ICON_CLASS[variant] : '';\n\n return (\n <div className={rootClass}>\n <div className={styles['popover-notice__content']}>\n {resolvedIcon != null && (\n <div\n className={[styles['popover-notice__icon'], iconColorClass]\n .filter(Boolean)\n .join(' ')}\n aria-hidden\n >\n {resolvedIcon}\n </div>\n )}\n\n <div className={styles['popover-notice__body']}>\n <div className={styles['popover-notice__title-row']}>\n <span className={styles['popover-notice__title']}>{title}</span>\n </div>\n\n <div className={styles['popover-notice__description']}>\n {children}\n </div>\n\n {actions && actions.length > 0 && (\n <div className={styles['popover-notice__actions']}>\n {actions.map((action, i) => (\n <Button\n key={i}\n emphasis={action.emphasis ?? 'primary'}\n size=\"small\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n\n {showCheckbox && <Checkbox size=\"medium\">{checkboxLabel}</Checkbox>}\n </div>\n </div>\n\n {onClose && (\n <IconButton\n className={styles['popover-notice__close']}\n aria-label=\"Close\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n onClick={onClose}\n />\n )}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport ApplicationCogIcon from '@mattermost/compass-icons/components/application-cog';\nimport AppsIcon from '@mattermost/compass-icons/components/apps';\nimport DownloadOutlineIcon from '@mattermost/compass-icons/components/download-outline';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport ProductBoardsIcon from '@mattermost/compass-icons/components/product-boards';\nimport ProductChannelsIcon from '@mattermost/compass-icons/components/product-channels';\nimport ProductPlaybooksIcon from '@mattermost/compass-icons/components/product-playbooks';\nimport WebhookIcon from '@mattermost/compass-icons/components/webhook';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport styles from './ProductSwitcherMenu.module.scss';\n\n/** Built-in products shipped with the switcher. */\nexport type BuiltInProductSwitcherProduct = 'channels' | 'boards' | 'playbooks';\n\n/**\n * Product id for selection. Built-ins use their labels; prototypes use any\n * string id from {@link ProductSwitcherProductItem.id}.\n */\nexport type ProductSwitcherProduct = BuiltInProductSwitcherProduct | (string & {});\n\nexport interface ProductSwitcherProductItem {\n /** Stable id used for `selectedProduct` and `onProductSelect`. */\n id: string;\n /** Menu row label. */\n label: string;\n /**\n * Leading icon glyph (e.g. a compass-icons component). Rendered at 24px in\n * the product row slot.\n */\n icon: ReactNode;\n /** Optional row click handler (also fires `onProductSelect` when provided). */\n onClick?: () => void;\n}\n\nexport interface ProductSwitcherMenuProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Currently active product id; shows trailing check on that row.\n * Default: `Channels`.\n */\n selectedProduct?: ProductSwitcherProduct;\n /**\n * Extra products appended after Channels, Boards, and Playbooks.\n * Use this from prototypes to register custom products in the top section.\n */\n additionalProducts?: ProductSwitcherProductItem[];\n /** Called when any product row (built-in or additional) is activated. */\n onProductSelect?: (productId: string) => void;\n}\n\nexport const DEFAULT_PRODUCT_SWITCHER_PRODUCTS: ProductSwitcherProductItem[] = [\n {\n id: 'channels',\n label: 'Channels',\n icon: <ProductChannelsIcon />,\n },\n {\n id: 'boards',\n label: 'Boards',\n icon: <ProductBoardsIcon />,\n },\n {\n id: 'playbooks',\n label: 'Playbooks',\n icon: <ProductPlaybooksIcon />,\n },\n];\n\nfunction productLeadingVisual(glyph: ReactNode) {\n return (\n <span className={styles['product-switcher-menu__product-icon']}>\n <Icon glyph={glyph} size=\"24\" />\n </span>\n );\n}\n\n/**\n * Product switcher popover opened from the Global Header products control.\n * Products use 24px button-bg icons and semibold center-channel labels; the\n * active product shows a trailing check. Utility links follow in a second group.\n *\n * Prototypes can append products via {@link ProductSwitcherMenuProps.additionalProducts}.\n *\n * Matches Figma Patterns — Popover Menus (node 1423:8667).\n */\nexport default function ProductSwitcherMenu({\n selectedProduct = 'channels',\n additionalProducts = [],\n onProductSelect,\n className = '',\n style,\n ...rest\n}: ProductSwitcherMenuProps) {\n const rootClass = [styles['product-switcher-menu'], className]\n .filter(Boolean)\n .join(' ');\n\n const products = [...DEFAULT_PRODUCT_SWITCHER_PRODUCTS, ...additionalProducts];\n\n return (\n <PopoverMenu\n className={rootClass}\n style={{ width: '273px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n {products.map((product) => (\n <MenuItem\n key={product.id}\n className={styles['product-switcher-menu__product-item']}\n label={product.label}\n leadingVisual={productLeadingVisual(product.icon)}\n trailingElement={selectedProduct === product.id}\n onClick={() => {\n product.onClick?.();\n onProductSelect?.(product.id);\n }}\n />\n ))}\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"System console\"\n leadingVisual={<Icon glyph={<ApplicationCogIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Integrations\"\n leadingVisual={<Icon glyph={<WebhookIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Marketplace\"\n leadingVisual={<Icon glyph={<AppsIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Download apps\"\n leadingVisual={<Icon glyph={<DownloadOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"About Mattermost\"\n leadingVisual={<Icon glyph={<InformationOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import type { ReactNode } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport EmailOutlineIcon from '@mattermost/compass-icons/components/email-outline';\nimport CircleMultipleOutlineIcon from '@mattermost/compass-icons/components/circle-multiple-outline';\nimport GithubCircleIcon from '@mattermost/compass-icons/components/github-circle';\nimport MattermostIcon from '@mattermost/compass-icons/components/mattermost';\nimport AccountPlusOutlineIcon from '@mattermost/compass-icons/components/account-plus-outline';\nimport PhoneIcon from '@mattermost/compass-icons/components/phone';\nimport AtIcon from '@mattermost/compass-icons/components/at';\nimport SendOutlineIcon from '@mattermost/compass-icons/components/send-outline';\nimport PencilOutlineIcon from '@mattermost/compass-icons/components/pencil-outline';\nimport Button from '@/components/Button/Button';\nimport IconButton from '@/components/IconButton/IconButton';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport Tag from '@/components/Tag/Tag';\nimport Icon from '@/components/Icon/Icon';\nimport styles from './ProfilePopover.module.scss';\n\nexport type ProfilePopoverUser = 'others' | 'you';\n\nexport interface ProfilePopoverCustomStatus {\n emoji: string;\n text: string;\n /** Label suffix like \"Until Tomorrow\". */\n expiresLabel?: string;\n}\n\nexport interface ProfilePopoverLocalTime {\n /** Local time, e.g. \"10:42 PM\". */\n time: string;\n /** Timezone abbreviation, e.g. \"EST\". */\n timezone: string;\n /** Hour difference relative to viewer, e.g. \"3 hrs behind\". */\n hourDifference?: string;\n}\n\nexport interface ProfilePopoverPhone {\n number: string;\n /** Category label, e.g. \"NIPR\", \"NIPR Conf Bridge\", \"SIPR Extension\". */\n label?: string;\n /** Trunk / gateway identifier, e.g. \"DSN\", \"DISN Gateway\". */\n sipTrunk?: string;\n /** Per-row phone glyph; overrides the popover-level `phoneIcon` when set. */\n icon?: ReactNode;\n href?: string;\n /** When provided, the number click runs this handler instead of navigating. */\n onClick?: () => void;\n}\n\nexport interface ProfilePopoverProps {\n /** Whose profile is shown. Default: 'others'. */\n user?: ProfilePopoverUser;\n /** Avatar image URL. */\n avatarSrc: string;\n /** Avatar alt text. */\n avatarAlt: string;\n /** Full name. */\n name: string;\n /** @handle. */\n username: string;\n /** Job title. */\n title?: string;\n /** Email address. */\n email?: string;\n /** Phone rows shown under the email. */\n phones?: ProfilePopoverPhone[];\n /** Caption above the name, e.g. \"Last online 6 hrs ago\". */\n lastOnline?: string;\n /** Role tag shown at the very top, e.g. \"System Admin\". (Named `jobRole` to avoid clashing with the ARIA `role` attribute in JSX.) */\n jobRole?: string;\n /** Local time block. */\n localTime?: ProfilePopoverLocalTime;\n /** Custom status. */\n customStatus?: ProfilePopoverCustomStatus;\n /** Shared member org name. */\n sharedOrg?: string;\n /** Shows a Staff row. */\n staff?: boolean;\n /** Shows a Core Committer row. */\n coreCommitter?: boolean;\n /** GitHub handle — shows the GitHub profile row. */\n githubHandle?: string;\n onClose?: () => void;\n onPrimaryAction?: () => void;\n /** Inserts an @mention for this user in the active channel message input. */\n onMention?: () => void;\n /** Opens the Add to Channel flow for this user. */\n onAddToChannel?: () => void;\n /** Used when `callButton` is not provided; starts a simple outbound call action. */\n onCall?: () => void;\n onSend?: () => void;\n /** Replaces the default Call icon button in the footer when provided. */\n callButton?: ReactNode;\n /** Replaces the default phone glyph shown next to the phone number. */\n phoneIcon?: ReactNode;\n /** Animation state. Set to 'closing' to play the exit animation — listen via onAnimationEnd to unmount. */\n state?: 'open' | 'closing';\n /** Fires when an animation on the popover root ends (entrance or exit). */\n onAnimationEnd?: (e: React.AnimationEvent<HTMLDivElement>) => void;\n className?: string;\n}\n\ninterface MetaRowProps {\n icon: ReactNode;\n children: ReactNode;\n href?: string;\n}\n\nfunction MetaRow({ icon, children, href }: MetaRowProps) {\n const textClass = href\n ? styles['profile-popover__meta-link']\n : styles['profile-popover__meta-text'];\n\n return (\n <div className={styles['profile-popover__meta-item']}>\n <span className={styles['profile-popover__meta-icon']} aria-hidden>\n {icon}\n </span>\n {href ? (\n <a className={textClass} href={href}>\n {children}\n </a>\n ) : (\n <span className={textClass}>{children}</span>\n )}\n </div>\n );\n}\n\nexport default function ProfilePopover({\n user = 'others',\n avatarSrc,\n avatarAlt,\n name,\n username,\n title,\n email,\n phones,\n lastOnline,\n jobRole,\n localTime,\n customStatus,\n sharedOrg,\n staff = false,\n coreCommitter = false,\n githubHandle,\n onClose,\n onPrimaryAction,\n onMention,\n onAddToChannel,\n onCall,\n onSend,\n callButton,\n phoneIcon,\n state = 'open',\n onAnimationEnd,\n className = '',\n}: ProfilePopoverProps) {\n const isYou = user === 'you';\n\n const rootClass = [\n styles['profile-popover'],\n state === 'closing' ? styles['profile-popover--closing'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const hasPhones = Boolean(phones && phones.length > 0);\n const hasTitlesBlock =\n Boolean(email) ||\n hasPhones ||\n Boolean(sharedOrg) ||\n staff ||\n coreCommitter ||\n Boolean(githubHandle);\n const hasSecondary =\n hasTitlesBlock || Boolean(localTime) || Boolean(customStatus);\n\n return (\n <div className={rootClass} onAnimationEnd={onAnimationEnd}>\n {jobRole && (\n <div className={styles['profile-popover__role-tag']}>\n <Tag label={jobRole} casing=\"all-caps\" size=\"x-small\" />\n </div>\n )}\n\n {onClose && (\n <IconButton\n className={styles['profile-popover__close']}\n aria-label=\"Close\"\n size=\"small\"\n padding=\"compact\"\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n onClick={onClose}\n />\n )}\n\n <section className={styles['profile-popover__primary']}>\n <UserAvatar src={avatarSrc} alt={avatarAlt} size=\"120\" status />\n {lastOnline && (\n <p className={styles['profile-popover__last-online']}>{lastOnline}</p>\n )}\n <div className={styles['profile-popover__names']}>\n <p className={styles['profile-popover__name']}>{name}</p>\n <p className={styles['profile-popover__handle']}>{username}</p>\n {title && <p className={styles['profile-popover__title']}>{title}</p>}\n </div>\n </section>\n\n {hasSecondary && (\n <section className={styles['profile-popover__secondary']}>\n {hasTitlesBlock && (\n <div className={styles['profile-popover__titles']}>\n {email && (\n <MetaRow\n icon={<Icon size=\"16\" glyph={<EmailOutlineIcon />} />}\n href={`mailto:${email}`}\n >\n {email}\n </MetaRow>\n )}\n {phones?.map((p, i) => {\n const subParts = [p.label, p.sipTrunk].filter(Boolean);\n const subText = subParts.join(' • ');\n return (\n <div\n key={`${p.number}-${i}`}\n className={[\n styles['profile-popover__meta-item'],\n styles['profile-popover__meta-item--stacked'],\n ].join(' ')}\n >\n <span className={styles['profile-popover__meta-icon']} aria-hidden>\n <Icon size=\"16\" glyph={p.icon ?? phoneIcon ?? <PhoneIcon />} />\n </span>\n <div className={styles['profile-popover__phone-body']}>\n {subText && (\n <span className={styles['profile-popover__phone-sub']}>\n {subText}\n </span>\n )}\n {p.onClick ? (\n <button\n type=\"button\"\n className={styles['profile-popover__meta-link']}\n onClick={p.onClick}\n >\n {p.number}\n </button>\n ) : (\n <a\n className={styles['profile-popover__meta-link']}\n href={p.href ?? `tel:${p.number}`}\n >\n {p.number}\n </a>\n )}\n </div>\n </div>\n );\n })}\n {sharedOrg && (\n <MetaRow\n icon={\n <Icon size=\"16\" glyph={<CircleMultipleOutlineIcon />} />\n }\n >\n {sharedOrg}\n </MetaRow>\n )}\n {staff && (\n <MetaRow icon={<Icon size=\"16\" glyph={<MattermostIcon />} />}>\n Staff\n </MetaRow>\n )}\n {coreCommitter && (\n <MetaRow icon={<Icon size=\"16\" glyph={<MattermostIcon />} />}>\n Core Committer\n </MetaRow>\n )}\n {githubHandle && (\n <MetaRow icon={<Icon size=\"16\" glyph={<GithubCircleIcon />} />}>\n {githubHandle}\n </MetaRow>\n )}\n </div>\n )}\n\n {localTime && (\n <div className={styles['profile-popover__local-time']}>\n <p className={styles['profile-popover__section-label']}>\n Local time ({localTime.timezone})\n </p>\n <div className={styles['profile-popover__time']}>\n <span>{localTime.time}</span>\n {localTime.hourDifference && (\n <span>({localTime.hourDifference})</span>\n )}\n </div>\n </div>\n )}\n\n {customStatus && (\n <div className={styles['profile-popover__custom-status']}>\n <p className={styles['profile-popover__section-label']}>\n Status\n {customStatus.expiresLabel\n ? ` (${customStatus.expiresLabel})`\n : ''}\n </p>\n <div className={styles['profile-popover__status-row']}>\n <span\n className={styles['profile-popover__status-emoji']}\n aria-hidden\n >\n {customStatus.emoji}\n </span>\n <span>{customStatus.text}</span>\n </div>\n </div>\n )}\n </section>\n )}\n\n <footer\n className={[\n styles['profile-popover__footer'],\n isYou\n ? styles['profile-popover__footer--you']\n : styles['profile-popover__footer--others'],\n ].join(' ')}\n >\n <div\n className={[\n styles['profile-popover__primary-action'],\n isYou\n ? styles['profile-popover__primary-action--you']\n : styles['profile-popover__primary-action--others'],\n ].join(' ')}\n >\n <Button\n className={styles['profile-popover__primary-button']}\n size=\"small\"\n emphasis=\"primary\"\n leadingIcon={\n isYou ? (\n <Icon size=\"12\" glyph={<PencilOutlineIcon />} />\n ) : (\n <Icon size=\"12\" glyph={<SendOutlineIcon />} />\n )\n }\n onClick={onPrimaryAction}\n >\n {isYou ? 'Edit profile' : 'Message'}\n </Button>\n </div>\n <div className={styles['profile-popover__secondary-actions']}>\n {isYou ? (\n <IconButton\n aria-label=\"Send message\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<SendOutlineIcon />} />}\n onClick={onSend}\n />\n ) : (\n <>\n <IconButton\n aria-label=\"Mention user\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<AtIcon />} />}\n onClick={onMention}\n />\n <IconButton\n aria-label=\"Add to channel\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<AccountPlusOutlineIcon />} />}\n onClick={onAddToChannel}\n />\n {callButton ??\n (onCall ? (\n <IconButton\n aria-label=\"Call\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<PhoneIcon />} />}\n onClick={onCall}\n />\n ) : null)}\n </>\n )}\n </div>\n </footer>\n </div>\n );\n}\n","import styles from './ProgressBar.module.scss';\n\nexport type ProgressBarSize = 'small' | 'large';\n\nexport interface ProgressBarProps {\n /** Progress value 0–100. Default: 0. */\n value?: number;\n /** Size variant. Default: Large. */\n size?: ProgressBarSize;\n /**\n * When true, fill color shifts from green→yellow→red based on percentage.\n * When false, uses the default brand blue. Default: false.\n */\n semanticColors?: boolean;\n /** Accessible label for the progress bar. */\n 'aria-label'?: string;\n /** Optional CSS class name. */\n className?: string;\n}\n\nfunction getSemanticColorClass(value: number): string {\n if (value >= 90) return styles['progress-bar__fill--danger'];\n if (value >= 70) return styles['progress-bar__fill--warning'];\n return styles['progress-bar__fill--success'];\n}\n\n/**\n * Progress Bar shows determinate progress through a wait state — an upload finishing, a\n * quota filling, an import running. Use it when the duration or total is known; reach for\n * [Spinner](/components/spinner) when it isn't.\n */\nexport default function ProgressBar({\n value = 0,\n size = 'large',\n semanticColors = false,\n 'aria-label': ariaLabel = 'Progress',\n className = '',\n}: ProgressBarProps) {\n const clampedValue = Math.min(100, Math.max(0, value));\n const sizeClass =\n size === 'small'\n ? styles['progress-bar--size-small']\n : styles['progress-bar--size-large'];\n\n const fillColorClass = semanticColors\n ? getSemanticColorClass(clampedValue)\n : styles['progress-bar__fill--default'];\n\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={ariaLabel}\n className={[styles['progress-bar'], sizeClass, className]\n .filter(Boolean)\n .join(' ')}\n >\n <div\n className={[styles['progress-bar__fill'], fillColorClass]\n .filter(Boolean)\n .join(' ')}\n style={{ width: `${clampedValue}%` }}\n />\n </div>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { useId } from 'react';\nimport { useControllable } from '@/hooks/useControllable';\nimport { toKebab } from '@/utils/string';\nimport styles from './Radio.module.scss';\n\nexport type RadioSize = 'small' | 'medium' | 'large';\n\nexport interface RadioProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Size variant. Figma: Small (12px), Medium (16px), Large (20px). Default: Medium. */\n size?: RadioSize;\n /** When false, uses error/destructive styling (red when checked). Default: true. */\n valid?: boolean;\n /** Label content. Rendered next to the radio. */\n children?: React.ReactNode;\n}\n\n/**\n * Radios let people pick exactly one option from a small, mutually exclusive set — a\n * workspace plan, a notification cadence, a default theme. Use a Radio when the choices are\n * few enough to show at once and the user benefits from seeing every option side-by-side.\n */\nexport default function Radio({\n className = '',\n size = 'medium',\n valid = true,\n children,\n id: idProp,\n checked,\n defaultChecked,\n disabled,\n onChange,\n name,\n value,\n ...rest\n}: RadioProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const [, handleChange] = useControllable(checked, defaultChecked, onChange);\n\n const sizeClass = styles[`radio--size-${toKebab(size)}`];\n const invalidClass = valid ? '' : styles['radio--invalid'];\n\n const rootClass = [styles.radio, sizeClass, invalidClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={rootClass} htmlFor={id}>\n <input\n id={id}\n type=\"radio\"\n name={name}\n value={value}\n className={styles['radio__input']}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={valid ? undefined : true}\n onChange={handleChange}\n {...rest}\n />\n <span className={styles['radio__circle']}>\n <span className={styles['radio__dot']} aria-hidden />\n </span>\n {children != null && (\n <span className={styles['radio__label']}>{children}</span>\n )}\n </label>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport Icon from '@/components/Icon/Icon';\nimport HandRightOutlineIcon from '@mattermost/compass-icons/components/hand-right-outline';\nimport MicrophoneOffIcon from '@mattermost/compass-icons/components/microphone-off';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './ReactionPill.module.scss';\n\nexport type ReactionPillSize = 'small' | 'medium' | 'large';\nexport type ReactionPillType = 'reaction' | 'hand-raise' | 'other';\n\nexport interface ReactionPillProps extends HTMLAttributes<HTMLDivElement> {\n /** Size variant. Default: Small. */\n size?: ReactionPillSize;\n /** Pill type. Default: Reaction. */\n type?: ReactionPillType;\n /** Emoji to display for Reaction type. Default: 😀 */\n emoji?: string;\n /** Participant name / label text. */\n label?: string;\n /** Notification message for 'other' type. */\n message?: string;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Reaction Pills surface lightweight, transient signals during a call — emoji reactions,\n * raised hands, and system notifications like \"you've been muted.\" They float over the call\n * surface long enough to register and then disappear; they aren't meant to be durable UI.\n */\nexport default function ReactionPill({\n size = 'small',\n type = 'reaction',\n emoji = '😀',\n label = 'Leonard R.',\n message = 'You have been muted by the host',\n className = '',\n ...rest\n}: ReactionPillProps) {\n const rootClass = [\n styles['reaction-pill'],\n styles[`reaction-pill--size-${size.toLowerCase()}`],\n styles[\n `reaction-pill--type-${type === 'hand-raise' ? 'hand-raise' : type === 'other' ? 'other' : 'reaction'}`\n ],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} {...rest}>\n <div className={styles['reaction-pill__inner']}>\n {/* Reaction type: emoji + name */}\n {type === 'reaction' && (\n <>\n <span className={styles['reaction-pill__emoji']} aria-hidden>\n {emoji}\n </span>\n <span className={styles['reaction-pill__label']}>{label}</span>\n </>\n )}\n\n {/* Hand Raise: icon + name */}\n {type === 'hand-raise' && (\n <>\n <span className={styles['reaction-pill__leading-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<HandRightOutlineIcon />} />\n </span>\n <span className={styles['reaction-pill__label']}>\n {label} Raised Hand\n </span>\n </>\n )}\n\n {/* Other type: icon + message + dismiss */}\n {type === 'other' && (\n <>\n <span className={styles['reaction-pill__leading-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<MicrophoneOffIcon />} />\n </span>\n <span className={styles['reaction-pill__label']}>{message}</span>\n <span\n className={styles['reaction-pill__trailing-icon']}\n aria-hidden\n >\n <Icon size=\"12\" glyph={<CloseCircleIcon />} />\n </span>\n </>\n )}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport Scrollbar from '@/components/Scrollbar/Scrollbar';\nimport styles from './RightSidebar.module.scss';\n\nexport interface RightSidebarProps {\n /** Header element (typically <RightSidebarHeader />). */\n header: ReactNode;\n /** Optional element rendered at the bottom of the sidebar (e.g. a reply composer). */\n footer?: ReactNode;\n /** Body content — anything. Scrolls when it overflows. The body has no padding;\n * add your own when the content calls for it. */\n children?: ReactNode;\n className?: string;\n /**\n * When true, the sidebar grows horizontally instead of staying at 400px.\n * Pair with a parent flex row and `channel-shell__right-sidebar--fill` in full layouts.\n */\n fill?: boolean;\n /**\n * When `end`, short body content sits on the bottom of the scroll viewport (e.g.\n * thread replies). Default `start` keeps content top-aligned (e.g. channel info).\n */\n alignBody?: 'start' | 'end';\n}\n\nexport default function RightSidebar({\n header,\n footer,\n children,\n className = '',\n fill = false,\n alignBody = 'start',\n}: RightSidebarProps) {\n const rootClass = [\n styles['right-sidebar'],\n fill ? styles['right-sidebar--fill'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const bodyClass = [\n styles['right-sidebar__body'],\n alignBody === 'end' ? styles['right-sidebar__body--align-end'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <aside className={rootClass} aria-label=\"Right sidebar\">\n <div className={styles['right-sidebar__header']}>{header}</div>\n <div className={bodyClass}>\n <Scrollbar>{children}</Scrollbar>\n </div>\n {footer && (\n <div className={styles['right-sidebar__footer']}>{footer}</div>\n )}\n </aside>\n );\n}\n","import type { ReactNode } from 'react';\nimport ArrowBackIosIcon from '@mattermost/compass-icons/components/arrow-back-ios';\nimport ArrowExpandIcon from '@mattermost/compass-icons/components/arrow-expand';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport type { TagType } from '@/components/Tag/Tag';\nimport styles from './RightSidebarHeader.module.scss';\n\nexport interface RightSidebarHeaderProps {\n /** Primary title text. */\n title: string;\n /** Secondary title shown to the right of a vertical divider (e.g. parent channel name). */\n secondaryTitle?: string;\n /** Optional tag rendered next to the title (e.g. \"BETA\"). */\n tag?: string;\n /** Tag visual style. Default: Info. */\n tagType?: TagType;\n /** Optional leading element shown before the title — typically a UserAvatar or Icon. */\n leadingIcon?: ReactNode;\n /** When set, shows a back button and calls this on click. */\n onBack?: () => void;\n /** When set, shows an expand button and calls this on click. */\n onExpand?: () => void;\n /** When set, shows a close button and calls this on click. */\n onClose?: () => void;\n /** Optional inline action label (e.g. \"Follow\"). */\n actionLabel?: string;\n /** Click handler for the action label. */\n onActionClick?: () => void;\n /** When true, the action button shows in its active state. */\n actionActive?: boolean;\n className?: string;\n}\n\nexport default function RightSidebarHeader({\n title,\n secondaryTitle,\n tag,\n tagType = 'info',\n leadingIcon,\n onBack,\n onExpand,\n onClose,\n actionLabel,\n onActionClick,\n actionActive = false,\n className = '',\n}: RightSidebarHeaderProps) {\n const rootClass = [styles['right-sidebar-header'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['right-sidebar-header__left']}>\n <div className={styles['right-sidebar-header__primary']}>\n {onBack && (\n <IconButton\n className={styles['right-sidebar-header__back']}\n size=\"small\"\n aria-label=\"Back\"\n onClick={onBack}\n icon={<Icon size=\"16\" glyph={<ArrowBackIosIcon />} />}\n />\n )}\n {leadingIcon && (\n <span className={styles['right-sidebar-header__leading-icon']}>\n {leadingIcon}\n </span>\n )}\n <span className={styles['right-sidebar-header__title']}>{title}</span>\n {tag && (\n <span className={styles['right-sidebar-header__tag']}>\n <Tag\n label={tag}\n type={tagType}\n size=\"x-small\"\n casing=\"all-caps\"\n />\n </span>\n )}\n </div>\n {secondaryTitle && (\n <div className={styles['right-sidebar-header__secondary']}>\n <span className={styles['right-sidebar-header__secondary-text']}>\n {secondaryTitle}\n </span>\n </div>\n )}\n </div>\n\n <div className={styles['right-sidebar-header__actions']}>\n {actionLabel && (\n <button\n type=\"button\"\n className={[\n styles['right-sidebar-header__action'],\n actionActive\n ? styles['right-sidebar-header__action--active']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onActionClick}\n aria-pressed={actionActive ? true : undefined}\n >\n {actionLabel}\n </button>\n )}\n {onExpand && (\n <IconButton\n size=\"small\"\n aria-label=\"Expand\"\n onClick={onExpand}\n icon={<Icon size=\"16\" glyph={<ArrowExpandIcon />} />}\n />\n )}\n {onClose && (\n <IconButton\n size=\"small\"\n aria-label=\"Close\"\n onClick={onClose}\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n />\n )}\n </div>\n </div>\n );\n}\n","import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react';\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport { toKebab } from '@/utils/string';\nimport type { IconSize } from '@/components/Icon/Icon';\nimport Icon from '@/components/Icon/Icon';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './SearchInput.module.scss';\n\nexport type SearchInputSize = 'small' | 'medium' | 'large';\n\nconst ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '20',\n};\n\nexport interface SearchInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Floating label (placeholder-style). Floats above border when filled. */\n label?: ReactNode;\n /** Size variant. Default: Medium. */\n size?: SearchInputSize;\n /** Called when the clear button is pressed. Omit to use built-in clearing. */\n onClear?: () => void;\n}\n\n/**\n * Search Inputs are the entry point to filtering or finding content — global search, channel\n * switcher, member picker, file finder. They look like a text input with a leading magnifier\n * so the affordance is obvious before the user reads a single word.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n className = '',\n size = 'medium',\n label,\n onClear,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const handleClear = useCallback(() => {\n if (disabled) return;\n\n if (onClear) {\n onClear();\n inputRef.current?.focus();\n return;\n }\n\n const input = inputRef.current;\n if (input == null) return;\n\n input.value = '';\n if (!isControlled) setUncontrolledValue('');\n\n onChange?.({\n target: input,\n currentTarget: input,\n } as ChangeEvent<HTMLInputElement>);\n\n input.focus();\n }, [disabled, isControlled, onChange, onClear]);\n\n const showClearButton = hasValue && !disabled;\n\n const sizeClass = styles[`searchInput--size-${toKebab(size)}`];\n const labelFloatedClass =\n label != null && labelFloated ? styles['searchInput--label-floated'] : '';\n const hasLeadingClass = styles['searchInput--has-leading-icon'];\n const hasTrailingClass = showClearButton\n ? styles['searchInput--has-trailing-icon']\n : '';\n const iconSize = ICON_SIZE_MAP[size];\n\n const rootClass = [\n styles.searchInput,\n sizeClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles.searchInput__wrapper}>\n {label != null && (\n <label className={styles.searchInput__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div className={styles.searchInput__inner}>\n <span className={styles.searchInput__leadingIcon} aria-hidden>\n <Icon size={iconSize} glyph={<MagnifyIcon />} />\n </span>\n <input\n ref={setInputRef}\n id={id}\n type=\"search\"\n className={styles.searchInput__input}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n {showClearButton && (\n <span className={styles.searchInput__trailingIcon}>\n <button\n type=\"button\"\n className={styles.searchInput__clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <Icon size={iconSize} glyph={<CloseCircleIcon />} />\n </button>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nexport default SearchInput;\n","import type { ReactNode } from 'react';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport { ShortcutTagGroup } from '@/components/ShortcutTag/ShortcutTag';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './SearchTipBanner.module.scss';\n\nexport interface ShortcutKey {\n label: string;\n}\n\nexport interface SearchTipBannerProps {\n /** Text shown before the shortcut keys. Default: \"Tip: Try\". */\n prefix?: string;\n /** Text shown after the shortcut keys. Default: \"to search this channel\". */\n suffix?: string;\n /** Keyboard shortcut keys to display. */\n shortcutKeys?: ShortcutKey[];\n /** Called when the dismiss button is clicked. */\n onDismiss?: () => void;\n /** Optional CSS class name. */\n className?: string;\n /** Custom content to replace the default tip content. */\n children?: ReactNode;\n}\n\n/**\n * The Search Tip Banner nudges people toward the keyboard shortcut for in-channel search. It\n * appears once a user has scrolled up far enough that they're clearly looking for something,\n * and offers a faster path than scroll-and-skim.\n */\nexport default function SearchTipBanner({\n prefix = 'Tip: Try',\n suffix = 'to search this channel',\n shortcutKeys = [{ label: '⌘' }, { label: 'Shift' }, { label: 'F' }],\n onDismiss,\n className = '',\n children,\n}: SearchTipBannerProps) {\n return (\n <div\n className={[styles['search-tip-banner'], className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={styles['search-tip-banner__content']}>\n {children ?? (\n <>\n <span className={styles['search-tip-banner__text']}>{prefix}</span>\n <ShortcutTagGroup\n labels={shortcutKeys.map((key) => key.label)}\n size=\"medium\"\n />\n <span className={styles['search-tip-banner__text']}>{suffix}</span>\n </>\n )}\n </div>\n {onDismiss != null && (\n <IconButton\n aria-label=\"Dismiss tip\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n onClick={onDismiss}\n />\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport Button from '@/components/Button/Button';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Icon from '@/components/Icon/Icon';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport AlertOutlineIcon from '@mattermost/compass-icons/components/alert-outline';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport CheckCircleOutlineIcon from '@mattermost/compass-icons/components/check-circle-outline';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport styles from './SectionNotice.module.scss';\n\nexport type SectionNoticeType =\n | 'info'\n | 'warning'\n | 'danger'\n | 'success'\n | 'hint';\n\nexport interface SectionNoticeProps {\n /** Optional CSS class name. */\n className?: string;\n /** Type controls color-coding. Default: Info. */\n type?: SectionNoticeType;\n /** Optional leading icon. When omitted a default type icon is shown. */\n icon?: ReactNode;\n /** Title / headline text. */\n title: string;\n /** Optional body description. */\n description?: ReactNode;\n /** Primary action button label. */\n primaryButtonLabel?: string;\n /** Primary action callback. */\n onPrimaryAction?: () => void;\n /** Secondary action button label. */\n secondaryButtonLabel?: string;\n /** Secondary action callback. */\n onSecondaryAction?: () => void;\n /** Called when dismiss (×) button is clicked. When omitted, dismiss button is hidden. */\n onDismiss?: () => void;\n}\n\nconst DEFAULT_ICONS: Record<SectionNoticeType, ReactNode> = {\n info: <Icon size=\"20\" glyph={<InformationOutlineIcon />} />,\n warning: <Icon size=\"20\" glyph={<AlertCircleOutlineIcon />} />,\n danger: <Icon size=\"20\" glyph={<AlertOutlineIcon />} />,\n success: <Icon size=\"20\" glyph={<CheckCircleOutlineIcon />} />,\n hint: <Icon size=\"20\" glyph={<InformationOutlineIcon />} />,\n};\n\n/**\n * A Section Notice is an in-context alert that lives inside a settings page, admin panel, or\n * other content region. Use it to flag important information, report a state change, or\n * surface a problem the user needs to act on — without yanking them out of the flow.\n */\nexport default function SectionNotice({\n className = '',\n type = 'info',\n icon,\n title,\n description,\n primaryButtonLabel,\n onPrimaryAction,\n secondaryButtonLabel,\n onSecondaryAction,\n onDismiss,\n}: SectionNoticeProps) {\n const typeClass = styles[`section-notice--type-${type.toLowerCase()}`];\n\n const rootClass = [styles['section-notice'], typeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const resolvedIcon = icon !== undefined ? icon : DEFAULT_ICONS[type];\n\n const hasActions = primaryButtonLabel != null || secondaryButtonLabel != null;\n\n return (\n <div className={rootClass}>\n <div className={styles['section-notice__content']}>\n {resolvedIcon != null && (\n <span className={styles['section-notice__icon']} aria-hidden>\n {resolvedIcon}\n </span>\n )}\n <div className={styles['section-notice__body']}>\n <p className={styles['section-notice__title']}>{title}</p>\n {description != null && (\n <div className={styles['section-notice__description']}>\n {description}\n </div>\n )}\n {hasActions && (\n <div className={styles['section-notice__actions']}>\n {primaryButtonLabel != null && (\n <Button\n emphasis=\"primary\"\n size=\"small\"\n onClick={onPrimaryAction}\n >\n {primaryButtonLabel}\n </Button>\n )}\n {secondaryButtonLabel != null && (\n <Button\n emphasis=\"secondary\"\n size=\"small\"\n onClick={onSecondaryAction}\n >\n {secondaryButtonLabel}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n {onDismiss != null && (\n <IconButton\n className={styles['section-notice__dismiss']}\n aria-label=\"Dismiss\"\n size=\"small\"\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n onClick={onDismiss}\n />\n )}\n </div>\n );\n}\n","import type { KeyboardEvent, ReactNode } from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport CheckIcon from '@mattermost/compass-icons/components/check';\nimport Icon from '@/components/Icon/Icon';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport menuItemStyles from '@/components/MenuItem/MenuItem.module.scss';\nimport { useAnchoredPopupPortal } from '@/hooks/useAnchoredPopupPortal';\nimport { useOutsideClose } from '@/hooks/useOutsideClose';\nimport { usePopoverTransition } from '@/hooks/usePopoverTransition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Select.module.scss';\n\nexport type SelectSize = 'small' | 'medium' | 'large';\n\nexport type SelectOption = {\n value: string;\n label: string;\n disabled?: boolean;\n leadingVisual?: ReactNode;\n secondaryLabel?: string;\n};\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Shown on the trigger when no value is selected. Empty-value options are not listed in the menu. */\n placeholder?: string;\n label?: ReactNode;\n leadingIcon?: ReactNode;\n size?: SelectSize;\n invalid?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nfunction SelectOptionRow({\n option,\n listboxId,\n selected,\n active,\n onSelect,\n onHover,\n}: {\n option: SelectOption;\n listboxId: string;\n selected: boolean;\n active: boolean;\n onSelect: (option: SelectOption) => void;\n onHover: () => void;\n}) {\n const rowClass = [\n menuItemStyles['menu-item'],\n active ? menuItemStyles['menu-item--active'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <li\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n className={[styles.select__option, rowClass].filter(Boolean).join(' ')}\n aria-selected={selected}\n aria-disabled={option.disabled || undefined}\n onMouseDown={(ev) => ev.preventDefault()}\n onMouseEnter={onHover}\n onPointerUp={() => {\n if (!option.disabled) onSelect(option);\n }}\n >\n <div\n className={[\n menuItemStyles['menu-item__content'],\n option.disabled ? styles['select__option-content--disabled'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {option.leadingVisual != null && (\n <div className={menuItemStyles['menu-item__left']}>\n <span className={menuItemStyles['menu-item__leading-visual']}>\n {option.leadingVisual}\n </span>\n </div>\n )}\n <div className={menuItemStyles['menu-item__middle']}>\n <div className={menuItemStyles['menu-item__top-row']}>\n <span className={menuItemStyles['menu-item__label']}>\n {option.label}\n </span>\n </div>\n {option.secondaryLabel != null && (\n <div className={menuItemStyles['menu-item__bottom-row']}>\n <span className={menuItemStyles['menu-item__secondary-label-below']}>\n {option.secondaryLabel}\n </span>\n </div>\n )}\n </div>\n {selected && (\n <div className={menuItemStyles['menu-item__right']}>\n <span\n className={[\n menuItemStyles['menu-item__trailing-visual'],\n menuItemStyles['menu-item__trailing-visual--check'],\n ].join(' ')}\n >\n <Icon glyph={<CheckIcon />} size=\"16\" />\n </span>\n </div>\n )}\n </div>\n </li>\n );\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, ];\n */\nconst Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n value: valueProp,\n defaultValue = '',\n onChange,\n placeholder,\n label,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n id: idProp,\n name,\n className = '',\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const setButtonRef = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const value = isControlled ? valueProp! : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value],\n );\n\n const listOptions = useMemo(\n () => options.filter((o) => o.value !== ''),\n [options],\n );\n\n const hasValue = value !== '';\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n }, []);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (listOptions.length === 0) return -1;\n if (prev >= 0 && prev < listOptions.length) return prev;\n const selectedIdx = listOptions.findIndex((o) => o.value === value);\n if (selectedIdx >= 0) return selectedIdx;\n const firstEnabled = listOptions.findIndex((o) => !o.disabled);\n return firstEnabled >= 0 ? firstEnabled : 0;\n });\n }, [isOpen, listOptions, value]);\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n const selectOption = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n commitValue(option.value);\n close();\n buttonRef.current?.focus();\n },\n [commitValue, close],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = listOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [listOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = listOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(`${listboxId}-option-${option.value}`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, listOptions, listboxId]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n const idx = listOptions.findIndex((o) => !o.disabled);\n setActiveIndex(idx >= 0 ? idx : 0);\n }\n break;\n case 'End':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n for (let i = listOptions.length - 1; i >= 0; i--) {\n if (!listOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && activeIndex >= 0 && listOptions[activeIndex]) {\n selectOption(listOptions[activeIndex]);\n } else if (!isOpen) {\n open();\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const labelFloated = isFocused || isOpen || hasValue;\n const displayLabel = selectedOption?.label ?? placeholder ?? '';\n const showPlaceholderStyle = !hasValue && displayLabel !== '';\n\n const activeOption =\n activeIndex >= 0 ? listOptions[activeIndex] : undefined;\n const activeDescendant =\n isOpen && activeOption != null\n ? `${listboxId}-option-${activeOption.value}`\n : undefined;\n\n const sizeClass = styles[`select--size-${toKebab(size)}`];\n const rootClass = [\n styles.select,\n sizeClass,\n invalid ? styles['select--invalid'] : '',\n label != null && labelFloated ? styles['select--label-floated'] : '',\n leadingIcon != null ? styles['select--has-leading-icon'] : '',\n isOpen ? styles['select--open'] : '',\n disabled ? styles['select--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClass = [\n styles.select__control,\n showPlaceholderStyle ? styles['select__control--placeholder'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.select__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.select__label} htmlFor={id}>\n {label}\n </label>\n )}\n <button\n ref={setButtonRef}\n id={id}\n type=\"button\"\n role=\"combobox\"\n className={controlClass}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendant}\n aria-invalid={invalid ? true : undefined}\n aria-label={\n ariaLabel ??\n (typeof label === 'string' ? label : undefined)\n }\n onClick={() => (isOpen ? close() : open())}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n >\n {leadingIcon != null && (\n <span className={styles.select__leadingIcon} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <span className={styles.select__value}>{displayLabel}</span>\n <span className={styles.select__trailingIcon} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </button>\n </div>\n\n {name != null && !disabled && (\n <input type=\"hidden\" name={name} value={value} />\n )}\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.select__popup,\n placement === 'above' ? styles['select__popup--above'] : '',\n popupVisible ? styles['select__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.select__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n <ul\n id={listboxId}\n className={styles.select__list}\n role=\"listbox\"\n aria-label={\n typeof label === 'string' ? label : (ariaLabel ?? 'Options')\n }\n >\n {listOptions.map((option, index) => (\n <SelectOptionRow\n key={option.value}\n option={option}\n listboxId={listboxId}\n selected={option.value === value}\n active={index === activeIndex}\n onSelect={selectOption}\n onHover={() => setActiveIndex(index)}\n />\n ))}\n </ul>\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Select;\n","import type { HTMLAttributes } from 'react';\nimport styles from './Spinner.module.scss';\n\nexport type SpinnerSize = 10 | 12 | 16 | 20 | 24 | 28 | 32;\n\nexport interface SpinnerProps extends Omit<\n HTMLAttributes<HTMLSpanElement>,\n 'role'\n> {\n size?: SpinnerSize;\n inverted?: boolean;\n 'aria-label'?: string;\n}\n\n/**\n * A Spinner is the all-purpose indicator that something is happening but the duration is\n * unknown. It signals \"wait\" without claiming to know how long the wait will be.\n */\nexport default function Spinner({\n size = 16,\n inverted = false,\n className = '',\n 'aria-label': ariaLabel = 'Loading',\n style,\n ...htmlProps\n}: SpinnerProps) {\n const strokeWidth = Math.max(1, Math.min(3, Math.round(size * 0.1)));\n\n const rootClass = [\n styles.spinner,\n inverted ? styles['spinner--inverted'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n className={rootClass}\n role=\"status\"\n aria-label={ariaLabel}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n ['--spinner-stroke-width' as string]: `${strokeWidth}px`,\n ...style,\n }}\n {...htmlProps}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport styles from './Tabs.module.scss';\n\nexport interface TabItem {\n /** Unique key for this tab. */\n key: string;\n /** Tab label text. */\n label: string;\n /** Optional count badge number. */\n countBadge?: number;\n /** When true, shows an unread dot badge. */\n unreadBadge?: boolean;\n}\n\nexport interface TabsProps {\n /** Array of tab items to display. */\n tabs: TabItem[];\n /** Key of the currently active tab. */\n activeKey: string;\n /** Called when a tab is selected. */\n onChange: (key: string) => void;\n /** Optional CSS class name. */\n className?: string;\n /** Optional trailing controls rendered to the right of the tabs. */\n controls?: ReactNode;\n}\n\n/**\n * Tabs let people switch between sibling views inside the same surface — Mentions in the\n * right sidebar, sections of a settings panel, or filters on a list. The content area\n * changes; the surrounding chrome doesn't.\n */\nexport default function Tabs({\n tabs,\n activeKey,\n onChange,\n className = '',\n controls,\n}: TabsProps) {\n const rootClass = [styles.tabs, className].filter(Boolean).join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['tabs__tab-list']} role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.key === activeKey;\n const tabClass = [\n styles['tabs__tab'],\n isActive ? styles['tabs__tab--active'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={tab.key}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n className={tabClass}\n onClick={() => onChange(tab.key)}\n >\n <span className={styles['tabs__tab-label']}>{tab.label}</span>\n\n {tab.countBadge != null && (\n <span\n className={[\n styles['tabs__count-badge'],\n isActive ? styles['tabs__count-badge--active'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {tab.countBadge}\n </span>\n )}\n\n {tab.unreadBadge && !isActive && (\n <span\n className={styles['tabs__unread-badge']}\n aria-label=\"Unread\"\n />\n )}\n </button>\n );\n })}\n </div>\n\n {controls != null && (\n <div className={styles['tabs__controls']}>{controls}</div>\n )}\n </div>\n );\n}\n","import MentionBadge from '../MentionBadge/MentionBadge';\nimport styles from './TeamAvatar.module.scss';\n\nexport type TeamAvatarSize =\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72'\n | '96'\n | '120';\nexport type TeamAvatarState = 'default' | 'active';\n\nexport interface TeamAvatarProps {\n alt?: string;\n badge?: number;\n className?: string;\n initials?: string;\n size?: TeamAvatarSize;\n src?: string;\n state?: TeamAvatarState;\n}\n\n/**\n * Team Avatars identify a Team in Mattermost. Their rounded-square shape sets them apart\n * from circular User Avatars at a glance — same scanning rhythm, different kind of subject.\n */\nexport default function TeamAvatar({\n alt = '',\n badge,\n className = '',\n initials = 'Ac',\n size = '40',\n src,\n state = 'default',\n}: TeamAvatarProps) {\n const numSize = parseInt(size, 10);\n const isActive = state === 'active';\n const showBadge = badge != null && badge > 0 && numSize <= 64 && !isActive;\n\n const rootClasses = [\n styles['team-avatar'],\n styles[`team-avatar--size-${size}`],\n isActive && styles['team-avatar--active'],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n <div className={styles['team-avatar__inner']}>\n {src ? (\n <img src={src} alt={alt} className={styles['team-avatar__image']} />\n ) : (\n <div\n className={styles['team-avatar__fallback']}\n aria-label={alt || initials}\n >\n {initials}\n </div>\n )}\n </div>\n {showBadge && (\n <MentionBadge\n count={badge!}\n size=\"medium\"\n className={styles['team-avatar__badge']}\n />\n )}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport AccountMultipleOutlineIcon from '@mattermost/compass-icons/components/account-multiple-outline';\nimport AccountPlusOutlineIcon from '@mattermost/compass-icons/components/account-plus-outline';\nimport CogOutlineIcon from '@mattermost/compass-icons/components/cog-outline';\nimport ExitToAppIcon from '@mattermost/compass-icons/components/exit-to-app';\nimport LightbulbOutlineIcon from '@mattermost/compass-icons/components/lightbulb-outline';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport styles from './TeamMenu.module.scss';\n\nexport interface TeamMenuProps extends HTMLAttributes<HTMLDivElement> {\n /** Shows Manage members and Manage groups (team admin). */\n adminOptions?: boolean;\n /** Shows Create a team. */\n createTeamPermission?: boolean;\n /** Shows Join another team. Default: true. */\n joinTeamPermission?: boolean;\n}\n\n/**\n * Team menu from the team switcher / team header — invite, settings, and\n * optional admin / create-team rows.\n */\nexport default function TeamMenu({\n adminOptions = false,\n createTeamPermission = false,\n joinTeamPermission = true,\n className = '',\n style,\n ...rest\n}: TeamMenuProps) {\n const rootClass = [styles['team-menu'], className].filter(Boolean).join(' ');\n\n return (\n <PopoverMenu\n className={rootClass}\n style={{ width: '260px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Invite people\"\n secondaryLabel=\"Add or invite people to team\"\n leadingVisual={<Icon glyph={<AccountPlusOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Team settings\"\n leadingVisual={<Icon glyph={<CogOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"View members\"\n leadingVisual={\n <Icon glyph={<AccountMultipleOutlineIcon />} size=\"16\" />\n }\n />\n {adminOptions && (\n <MenuItem\n label=\"Manage members\"\n leadingVisual={\n <Icon glyph={<AccountMultipleOutlineIcon />} size=\"16\" />\n }\n />\n )}\n {adminOptions && (\n <MenuItem\n label=\"Manage groups\"\n leadingVisual={\n <Icon glyph={<AccountMultipleOutlineIcon />} size=\"16\" />\n }\n />\n )}\n <MenuItem\n label=\"Leave team\"\n destructive\n leadingVisual={<Icon glyph={<ExitToAppIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n {joinTeamPermission && (\n <MenuItem\n label=\"Join another team\"\n leadingVisual={<Icon glyph={<PlusIcon />} size=\"16\" />}\n />\n )}\n {createTeamPermission && (\n <MenuItem\n label=\"Create a team\"\n leadingVisual={<Icon glyph={<PlusIcon />} size=\"16\" />}\n />\n )}\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n className={styles['team-menu__learn-item']}\n label=\"Learn about teams\"\n leadingVisual={<Icon glyph={<LightbulbOutlineIcon />} size=\"16\" />}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import { toKebab } from '@/utils/string';\nimport styles from './UnreadBadge.module.scss';\n\nexport type UnreadBadgeSize = '6' | '8';\n\nexport type UnreadBadgeContext = 'team-icon' | 'icon-button';\n\nexport interface UnreadBadgeProps {\n /** Dot size in px. Default: 8. */\n size?: UnreadBadgeSize;\n /** Display context affects dot colour. Default: Team Icon (same fill as MentionBadge). */\n context?: UnreadBadgeContext;\n /** Optional CSS class name. */\n className?: string;\n /** Accessible label. Default: \"unread\". */\n 'aria-label'?: string;\n}\n\n/**\n * The Unread Badge is a small dot that signals \"something's new here\" without specifying how\n * much. Reach for it when the count would be noisy, distracting, or simply isn't useful — a\n * Team has unread channels, an icon button has a new state, a tab has activity behind it.\n */\nexport default function UnreadBadge({\n 'aria-label': ariaLabel = 'unread',\n className = '',\n context = 'team-icon',\n size = '8',\n}: UnreadBadgeProps) {\n const sizeClass = styles[`unread-badge--size-${size}`];\n const contextClass = styles[`unread-badge--context-${toKebab(context)}`];\n const rootClass = [styles['unread-badge'], sizeClass, contextClass, className]\n .filter(Boolean)\n .join(' ');\n\n return <span className={rootClass} role=\"status\" aria-label={ariaLabel} />;\n}\n","import PlusIcon from '@mattermost/compass-icons/components/plus';\nimport DialpadIcon from '@mattermost/compass-icons/components/dialpad';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport TeamAvatar from '@/components/TeamAvatar/TeamAvatar';\nimport UnreadBadge from '@/components/UnreadBadge/UnreadBadge';\nimport styles from './TeamSidebar.module.scss';\n\nexport interface TeamSidebarItem {\n id: string;\n name: string;\n src?: string;\n initials?: string;\n unread?: boolean;\n mentions?: number;\n}\n\nexport interface TeamSidebarProps {\n className?: string;\n teams: TeamSidebarItem[];\n activeTeamId?: string;\n showAddTeam?: boolean;\n showDialPad?: boolean;\n dialPadActive?: boolean;\n onSelectTeam?: (id: string) => void;\n onAddTeam?: () => void;\n onDialPadClick?: () => void;\n}\n\nexport default function TeamSidebar({\n className = '',\n teams,\n activeTeamId,\n showAddTeam = true,\n showDialPad = false,\n dialPadActive = false,\n onSelectTeam,\n onAddTeam,\n onDialPadClick,\n}: TeamSidebarProps) {\n const rootClass = [styles['team-sidebar'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['team-sidebar__teams']}>\n {teams.map((team) => {\n const active = team.id === activeTeamId;\n const hasMentions = team.mentions != null && team.mentions > 0;\n const showUnreadDot = team.unread && !active && !hasMentions;\n return (\n <button\n key={team.id}\n type=\"button\"\n className={styles['team-sidebar__team']}\n aria-label={team.name}\n aria-current={active ? 'true' : undefined}\n onClick={() => onSelectTeam?.(team.id)}\n >\n <TeamAvatar\n src={team.src}\n alt={team.name}\n initials={team.initials}\n state={active ? 'active' : 'default'}\n badge={hasMentions ? team.mentions : undefined}\n />\n {showUnreadDot && (\n <UnreadBadge\n className={styles['team-sidebar__unread']}\n aria-label={`${team.name} has unread messages`}\n />\n )}\n </button>\n );\n })}\n {showAddTeam && (\n <IconButton\n aria-label=\"Add team\"\n size=\"medium\"\n style=\"inverted\"\n icon={<Icon size=\"20\" glyph={<PlusIcon />} />}\n onClick={onAddTeam}\n className={styles['team-sidebar__add']}\n />\n )}\n </div>\n {showDialPad && (\n <div className={styles['team-sidebar__footer']}>\n <IconButton\n aria-label=\"Dial pad\"\n size=\"small\"\n style=\"inverted\"\n active={dialPadActive}\n icon={<Icon size=\"16\" glyph={<DialpadIcon />} />}\n onClick={onDialPadClick}\n className={styles['team-sidebar__dial-pad']}\n />\n </div>\n )}\n </div>\n );\n}\n","import type { TextareaHTMLAttributes, ReactNode, ChangeEvent } from 'react';\nimport { forwardRef, useId, useState, useCallback } from 'react';\nimport { toKebab } from '@/utils/string';\nimport styles from './TextArea.module.scss';\n\nexport type TextAreaSize = 'small' | 'medium' | 'large';\n\nexport interface TextAreaProps extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label content. When provided, label floats on focus or when value is non-empty. */\n label?: ReactNode;\n /** Max length for the textarea; used with showCharacterCount for counter. */\n maxLength?: number;\n /** When true with maxLength, shows \"current / max\" character count below textarea. */\n showCharacterCount?: boolean;\n /** Size variant. Default: Medium. */\n size?: TextAreaSize;\n}\n\n/**\n * Text Areas let people write long-form text that spans multiple lines — descriptions,\n * channel purposes, message drafts, admin notes. They share their visual rhythm with Text\n * Input but trade the single-line constraint for room to breathe.\n */\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n function TextArea(\n {\n className = '',\n size = 'medium',\n label,\n invalid = false,\n maxLength,\n showCharacterCount = false,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n readOnly,\n rows = 3,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const sizeClass = styles[`textArea--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['textArea--invalid'] : '';\n const labelFloatedClass =\n label != null && labelFloated ? styles['textArea--label-floated'] : '';\n\n const rootClass = [\n styles.textArea,\n sizeClass,\n invalidClass,\n labelFloatedClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const currentLength = typeof value === 'string' ? value.length : 0;\n const counterId =\n showCharacterCount && maxLength != null ? `${id}-counter` : undefined;\n\n return (\n <div className={rootClass}>\n <div className={styles.textArea__wrapper}>\n {label != null && (\n <label className={styles.textArea__label} htmlFor={id}>\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n className={styles.textArea__input}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n maxLength={maxLength}\n disabled={disabled}\n readOnly={readOnly}\n rows={rows}\n aria-invalid={invalid ? true : undefined}\n aria-describedby={counterId}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n </div>\n {showCharacterCount && maxLength != null && (\n <div\n id={counterId}\n className={styles.textArea__counter}\n aria-live=\"polite\"\n >\n {currentLength} / {maxLength}\n </div>\n )}\n </div>\n );\n },\n);\n\nexport default TextArea;\n","import type {\n InputHTMLAttributes,\n ReactNode,\n ChangeEvent,\n RefCallback,\n} from 'react';\nimport { forwardRef, useId, useState, useCallback, useRef } from 'react';\nimport { toKebab } from '@/utils/string';\nimport styles from './TextInput.module.scss';\n\nexport type TextInputSize = 'small' | 'medium' | 'large';\n\nexport interface TextInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label content. When provided, label floats on focus or when value is non-empty. */\n label?: ReactNode;\n /** Leading icon (e.g. <Icon glyph={<SearchIcon />} size=\"16\" />). */\n leadingIcon?: ReactNode;\n /** Max length for the input; used with showCharacterCount for counter. */\n maxLength?: number;\n /** When true with maxLength, shows \"current / max\" character count below input. */\n showCharacterCount?: boolean;\n /** Size variant. Figma: Small (32px), Medium (40px), Large (48px). Default: Medium. */\n size?: TextInputSize;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n}\n\n/**\n * Text Inputs let people enter and edit a single line of text — names, emails, search\n * queries, channel titles. They're the workhorse of every form and modal in Mattermost.\n */\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n function TextInput(\n {\n className = '',\n size = 'medium',\n label,\n leadingIcon,\n trailingIcon,\n invalid = false,\n maxLength,\n showCharacterCount = false,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n readOnly,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n const cleanup = (ref as RefCallback<HTMLInputElement>)(node);\n return () => {\n inputRef.current = null;\n if (typeof cleanup === 'function') cleanup();\n };\n }\n if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const sizeClass = styles[`textInput--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['textInput--invalid'] : '';\n const labelFloatedClass =\n label != null && labelFloated ? styles['textInput--label-floated'] : '';\n const hasLeadingClass =\n leadingIcon != null ? styles['textInput--has-leading-icon'] : '';\n const hasTrailingClass =\n trailingIcon != null ? styles['textInput--has-trailing-icon'] : '';\n\n const rootClass = [\n styles.textInput,\n sizeClass,\n invalidClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const currentLength = typeof value === 'string' ? value.length : 0;\n const counterId =\n showCharacterCount && maxLength != null ? `${id}-counter` : undefined;\n\n return (\n <div className={rootClass}>\n <div className={styles.textInput__wrapper}>\n <label className={styles.textInput__inner}>\n {label != null && (\n <span className={styles.textInput__label}>{label}</span>\n )}\n {leadingIcon != null && (\n <span className={styles.textInput__leadingIcon}>\n {leadingIcon}\n </span>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles.textInput__input}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n maxLength={maxLength}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid ? true : undefined}\n aria-describedby={counterId}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n {trailingIcon != null && (\n <span className={styles.textInput__trailingIcon}>\n {trailingIcon}\n </span>\n )}\n </label>\n </div>\n {showCharacterCount && maxLength != null && (\n <div\n id={counterId}\n className={styles.textInput__counter}\n aria-live=\"polite\"\n >\n {currentLength} / {maxLength}\n </div>\n )}\n </div>\n );\n },\n);\n\nexport default TextInput;\n","import type { HTMLAttributes } from 'react';\nimport BookmarkOutlineIcon from '@mattermost/compass-icons/components/bookmark-outline';\nimport LinkVariantIcon from '@mattermost/compass-icons/components/link-variant';\nimport MarkAsUnreadIcon from '@mattermost/compass-icons/components/mark-as-unread';\nimport MessageMinusOutlineIcon from '@mattermost/compass-icons/components/message-minus-outline';\nimport OpenInNewIcon from '@mattermost/compass-icons/components/open-in-new';\nimport Icon from '@/components/Icon/Icon';\nimport MenuItem from '@/components/MenuItem/MenuItem';\nimport PopoverMenu, {\n PopoverMenuDivider,\n PopoverMenuGroup,\n} from '@/components/PopoverMenu/PopoverMenu';\nimport ShortcutTag from '@/components/ShortcutTag/ShortcutTag';\n\nexport interface ThreadActionsMenuProps extends HTMLAttributes<HTMLDivElement> {}\n\nfunction shortcutLabel(text: string) {\n return <ShortcutTag label={text} size=\"small\" />;\n}\n\n/**\n * Thread list / thread header actions menu.\n */\nexport default function ThreadActionsMenu({\n className = '',\n style,\n ...rest\n}: ThreadActionsMenuProps) {\n return (\n <PopoverMenu\n className={className}\n style={{ width: '268px', ...style }}\n {...rest}\n >\n <PopoverMenuGroup>\n <MenuItem\n label=\"Unfollow thread\"\n leadingVisual={<Icon glyph={<MessageMinusOutlineIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Open in channel\"\n leadingVisual={<Icon glyph={<OpenInNewIcon />} size=\"16\" />}\n />\n <MenuItem\n label=\"Mark as unread\"\n leadingVisual={<Icon glyph={<MarkAsUnreadIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('U')}\n />\n <MenuItem\n label=\"Save\"\n leadingVisual={<Icon glyph={<BookmarkOutlineIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('S')}\n />\n </PopoverMenuGroup>\n <PopoverMenuDivider />\n <PopoverMenuGroup>\n <MenuItem\n label=\"Copy link\"\n leadingVisual={<Icon glyph={<LinkVariantIcon />} size=\"16\" />}\n trailingElement\n trailingVisual={shortcutLabel('K')}\n />\n </PopoverMenuGroup>\n </PopoverMenu>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport styles from './ThreadFooter.module.scss';\n\nexport type ThreadFooterBadge = 'none' | 'unread' | 'mention';\n\nexport interface AvatarData {\n src: string;\n alt: string;\n}\n\nexport interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Reply count. Default: 3. */\n replyCount?: number;\n /** Participant avatars (first 3 shown, overflow as +N). */\n avatars?: AvatarData[];\n /** Badge variant. Default: None. */\n badge?: ThreadFooterBadge;\n /** Whether the current user is following the thread. Default: false. */\n following?: boolean;\n /** Last reply timestamp label. Shown when following. */\n lastReplyTime?: string;\n /** Called when Reply is clicked. */\n onReply?: () => void;\n /** Called when Follow/Following is clicked. */\n onFollowToggle?: () => void;\n /** Hover / active state for button highlight. Default: false. */\n hovered?: boolean;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The Thread Footer is the reply summary bar at the bottom of a message. It shows\n * participants, reply count, follow state, and last-reply time — the information someone\n * needs to decide whether to dive in.\n */\nexport default function ThreadFooter({\n replyCount = 3,\n avatars = [],\n badge = 'none',\n following = false,\n lastReplyTime,\n onReply,\n onFollowToggle,\n hovered = false,\n className = '',\n ...rest\n}: ThreadFooterProps) {\n const rootClass = [styles['thread-footer'], className]\n .filter(Boolean)\n .join(' ');\n\n const MAX_VISIBLE = 3;\n const visibleAvatars = avatars.slice(0, MAX_VISIBLE);\n const overflowCount =\n avatars.length > MAX_VISIBLE ? avatars.length - MAX_VISIBLE : 0;\n\n return (\n <div className={rootClass} {...rest}>\n <div className={styles['thread-footer__inner']}>\n {/* Badge + Avatars */}\n <div className={styles['thread-footer__avatars-group']}>\n {badge === 'unread' && (\n <span\n className={styles['thread-footer__unread-dot']}\n aria-label=\"Unread replies\"\n />\n )}\n {badge === 'mention' && (\n <span className={styles['thread-footer__mention-badge']}>@</span>\n )}\n\n {/* Avatar stack */}\n {visibleAvatars.length > 0 && (\n <div className={styles['thread-footer__avatars']}>\n {visibleAvatars.map((av, i) => (\n <UserAvatar\n key={i}\n src={av.src}\n alt={av.alt}\n size=\"20\"\n className={styles['thread-footer__avatar']}\n />\n ))}\n {overflowCount > 0 && (\n <span className={styles['thread-footer__avatar-overflow']}>\n +{overflowCount}\n </span>\n )}\n </div>\n )}\n\n {/* Placeholder avatars when none provided */}\n {visibleAvatars.length === 0 && (\n <div className={styles['thread-footer__avatars']}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className={styles['thread-footer__avatar-placeholder']}\n />\n ))}\n <span className={styles['thread-footer__avatar-overflow']}>\n +2\n </span>\n </div>\n )}\n </div>\n\n {/* Buttons */}\n <div className={styles['thread-footer__buttons']}>\n {/* Reply button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__reply-btn'],\n hovered ? styles['thread-footer__reply-btn--hovered'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onReply}\n aria-label={`${replyCount} repl${replyCount === 1 ? 'y' : 'ies'}`}\n leadingIcon={<Icon size=\"12\" glyph={<ReplyOutlineIcon />} />}\n >\n <span className={styles['thread-footer__btn-label']}>\n {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </span>\n </Button>\n\n <div className={styles['thread-footer__divider']} aria-hidden />\n\n {/* Follow / Following button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__follow-btn'],\n following ? styles['thread-footer__follow-btn--following'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onFollowToggle}\n aria-pressed={following}\n aria-label={following ? 'Unfollow thread' : 'Follow thread'}\n >\n {following ? 'Following' : 'Follow'}\n </Button>\n\n {/* Last reply time — visible when following */}\n {following && lastReplyTime && (\n <>\n <div className={styles['thread-footer__divider']} aria-hidden />\n <span className={styles['thread-footer__last-reply']}>\n {lastReplyTime}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { ShortcutTagGroup } from '@/components/ShortcutTag/ShortcutTag';\nimport styles from './Tooltip.module.scss';\n\nexport type TooltipArrow = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface TooltipShortcutKey {\n label: string;\n}\n\nexport interface TooltipProps {\n /** Tooltip label text. */\n label: string;\n /** Arrow direction. Default: Right. */\n arrow?: TooltipArrow;\n /** Optional hint text shown below label. */\n hint?: string;\n /** Optional keyboard shortcut keys shown below label. */\n shortcutKeys?: TooltipShortcutKey[];\n /** Optional leading icon node. */\n icon?: ReactNode;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Tooltips surface short, supporting text on hover. Reach for a tooltip when the affordance\n * behind it isn't fully self-explanatory — an Icon Button, a truncated label, a keyboard\n * shortcut. Don't reach for one when the label is already on screen.\n */\nexport default function Tooltip({\n label,\n arrow = 'right',\n hint,\n shortcutKeys,\n icon,\n className = '',\n}: TooltipProps) {\n const arrowClass = styles[`tooltip--arrow-${arrow.toLowerCase()}`] ?? '';\n\n const rootClass = [styles.tooltip, arrowClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['tooltip__container']}>\n <div className={styles['tooltip__content']}>\n {icon != null && (\n <span className={styles['tooltip__icon']} aria-hidden>\n {icon}\n </span>\n )}\n <span className={styles['tooltip__label']}>{label}</span>\n </div>\n\n {shortcutKeys && shortcutKeys.length > 0 && (\n <div className={styles['tooltip__shortcuts']}>\n <ShortcutTagGroup\n labels={shortcutKeys.map((key) => key.label)}\n location=\"tooltips\"\n size=\"small\"\n />\n </div>\n )}\n\n {hint && <span className={styles['tooltip__hint']}>{hint}</span>}\n </div>\n\n <div className={styles['tooltip__arrow']} aria-hidden />\n </div>\n );\n}\n","import Tooltip from '@/components/Tooltip/Tooltip';\nimport UserAvatar from '@/components/UserAvatar/UserAvatar';\nimport styles from './UserAvatarGroup.module.scss';\n\nexport type UserAvatarGroupSize =\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72';\n\nexport interface UserAvatarGroupItem {\n /** Unique key for the list item. */\n key: string;\n /** Image URL for the avatar. Omit to render the Fallback (initials) variant. */\n src?: string;\n /** Alt text / display name for the avatar. Drives initials and fallback colour. */\n name: string;\n}\n\nexport interface UserAvatarGroupProps {\n /** Array of avatar items to display. */\n avatars: UserAvatarGroupItem[];\n /** Maximum number of avatars to show before showing the overflow count. Default: 3. */\n max?: number;\n /** Avatar size in px. Matches Figma Avatar Group size options. Default: '20'. */\n size?: UserAvatarGroupSize;\n /** Optional CSS class name. */\n className?: string;\n}\n\nfunction overflowNamesLabel(hidden: UserAvatarGroupItem[]): string {\n if (hidden.length === 0) return '';\n if (hidden.length === 1) return hidden[0].name;\n if (hidden.length <= 3) return hidden.map((a) => a.name).join(', ');\n return `${hidden\n .slice(0, 2)\n .map((a) => a.name)\n .join(', ')}, +${hidden.length - 2} more`;\n}\n\n/**\n * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's\n * a compact way to show \"who's involved\" — thread participants, channel members, call\n * attendees — without a list.\n */\nexport default function UserAvatarGroup({\n avatars,\n className = '',\n max = 3,\n size = '20',\n}: UserAvatarGroupProps) {\n const visible = avatars.slice(0, max);\n const hidden = avatars.slice(max);\n const overflow = hidden.length;\n\n const rootClass = [\n styles['user-avatar-group'],\n size !== '20' ? styles[`user-avatar-group--size-${size}`] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"group\"\n aria-label={`${avatars.length} participants`}\n >\n {visible.map((avatar) => (\n <span\n key={avatar.key}\n className={styles['user-avatar-group__item']}\n >\n <span className={styles['user-avatar-group__trigger']}>\n <UserAvatar\n src={avatar.src}\n alt={avatar.name}\n name={avatar.name}\n size={size}\n />\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={avatar.name}\n />\n </div>\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={[\n styles['user-avatar-group__item'],\n styles['user-avatar-group__overflow'],\n ].join(' ')}\n aria-label={`${overflow} more participants`}\n >\n <span className={styles['user-avatar-group__trigger']}>\n +{overflow}\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={overflowNamesLabel(hidden)}\n />\n </div>\n </span>\n )}\n </div>\n );\n}\n","import DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport { type KeyboardEvent, type MouseEvent, useCallback } from 'react';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport Tag from '@/components/Tag/Tag';\nimport MentionBadge from '../MentionBadge/MentionBadge';\nimport UnreadBadge from '../UnreadBadge/UnreadBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '../UserAvatarGroup/UserAvatarGroup';\nimport styles from './ThreadListItem.module.scss';\n\nconst DEFAULT_PARTICIPANTS: UserAvatarGroupItem[] = [\n { key: 'leonard', name: 'Leonard Riley' },\n { key: 'aiko', name: 'Aiko Tan' },\n { key: 'arjun', name: 'Arjun Patel' },\n { key: 'marco', name: 'Marco Rinaldi' },\n { key: 'sofia', name: 'Sofia Bauer' },\n];\n\nexport interface ThreadListItemProps {\n /** Whether this item is the active/selected thread. */\n active?: boolean;\n /** Badge in the left gutter. Default: None. Hidden when `active` is true. */\n badge?: 'none' | 'unread' | 'mention';\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Author name. */\n authorName?: string;\n /** Channel/team label. */\n channelLabel?: string;\n /** Message preview text. */\n previewText?: string;\n /** Timestamp label. */\n timestamp?: string;\n /** Number of replies. */\n replyCount?: number;\n /** Stacked avatars for recent participants. Pass `[]` to hide. When omitted, uses demo participants. */\n participants?: UserAvatarGroupItem[];\n /** Optional thread title. */\n threadTitle?: string;\n /** Optional CSS class name. */\n className?: string;\n /** Click handler. */\n onClick?: () => void;\n /** Thread overflow menu handler. */\n onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * The Thread List Item is a single entry in the Threads view. Each row gives the user enough\n * context — who, where, what, when — to decide whether to open the thread without opening\n * it.\n */\nexport default function ThreadListItem({\n active = false,\n badge = 'none',\n mentionCount = 1,\n authorName = 'Martin Kraft',\n channelLabel = 'ENTERPRISE TEAM',\n previewText = 'Do we have a guideline for what minimum width we should support in the system console? I know that…',\n timestamp = '5 mins ago',\n replyCount = 3,\n participants: participantsProp,\n threadTitle,\n className = '',\n onClick,\n onMenuClick,\n}: ThreadListItemProps) {\n const participants =\n participantsProp === undefined ? DEFAULT_PARTICIPANTS : participantsProp;\n const showParticipants = participants.length > 0;\n const showGutterBadge =\n !active && (badge === 'unread' || badge === 'mention');\n const replyLabel = replyCount === 1 ? '1 reply' : `${replyCount} replies`;\n\n const rootClass = [\n styles['thread-list-item'],\n active ? styles['thread-list-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (!onClick) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onClick();\n }\n },\n [onClick],\n );\n\n return (\n <div\n className={rootClass}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className={styles['thread-list-item__thread']}>\n <div className={styles['thread-list-item__container']}>\n <div className={styles['thread-list-item__post-content']}>\n <div className={styles['thread-list-item__gutter']}>\n {showGutterBadge && badge === 'unread' && (\n <UnreadBadge\n className={styles['thread-list-item__unread-badge']}\n context=\"icon-button\"\n />\n )}\n {showGutterBadge && badge === 'mention' && (\n <span className={styles['thread-list-item__mention-gutter']}>\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n </div>\n <div className={styles['thread-list-item__post-body']}>\n <div className={styles['thread-list-item__post-body-content']}>\n <div className={styles['thread-list-item__name-row']}>\n <div className={styles['thread-list-item__name-group']}>\n <span className={styles['thread-list-item__author']}>\n {authorName}\n </span>\n <Tag\n casing=\"all-caps\"\n label={channelLabel}\n />\n </div>\n <span className={styles['thread-list-item__timestamp']}>\n {timestamp}\n </span>\n </div>\n {threadTitle != null && (\n <div className={styles['thread-list-item__title-row']}>\n <p className={styles['thread-list-item__title']}>\n {threadTitle}\n </p>\n </div>\n )}\n <p className={styles['thread-list-item__preview']}>\n {previewText}\n </p>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__replies']}>\n <div className={styles['thread-list-item__replies-inner']}>\n {showParticipants && (\n <UserAvatarGroup\n avatars={participants}\n className={styles['thread-list-item__avatar-group']}\n max={3}\n size=\"20\"\n />\n )}\n <span className={styles['thread-list-item__reply-count']}>\n {replyLabel}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__actions']}>\n <span className={styles['thread-list-item__menu-button']}>\n <IconButton\n aria-label=\"Thread actions\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n padding=\"compact\"\n size=\"small\"\n style=\"default\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onMenuClick?.(e);\n }}\n />\n </span>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport AlertOutlineIcon from '@mattermost/compass-icons/components/alert-outline';\nimport CheckIcon from '@mattermost/compass-icons/components/check';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport InformationOutlineIcon from '@mattermost/compass-icons/components/information-outline';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport styles from './Toast.module.scss';\n\nexport type ToastType =\n | 'general'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger';\n\nexport interface ToastProps {\n className?: string;\n message: string;\n type?: ToastType;\n actionLabel?: string;\n onAction?: () => void;\n onDismiss?: () => void;\n}\n\nconst TYPE_ICONS: Record<ToastType, ReactNode> = {\n general: <AlertCircleOutlineIcon />,\n info: <InformationOutlineIcon />,\n success: <CheckIcon />,\n danger: <AlertOutlineIcon />,\n warning: <AlertCircleOutlineIcon />,\n};\n\n/**\n * Toasts notify the user that an action has completed or surface a brief message about a\n * system process. They sit on top of the workflow without interrupting it, don't require\n * user input to disappear, and auto-dismiss after a short duration.\n */\nexport default function Toast({\n className = '',\n message,\n type = 'general',\n actionLabel,\n onAction,\n onDismiss,\n}: ToastProps) {\n const typeClass = styles[`toast--type-${type.toLowerCase()}`];\n const rootClass = [styles.toast, typeClass, className].filter(Boolean).join(' ');\n\n return (\n <div className={rootClass} role=\"status\" aria-live=\"polite\">\n <div className={styles['toast__content']}>\n <span className={styles['toast__icon']} aria-hidden>\n <Icon glyph={TYPE_ICONS[type]} size=\"16\" />\n </span>\n <span className={styles['toast__message']}>{message}</span>\n {actionLabel != null && (\n <Button\n appearance=\"default\"\n emphasis=\"tertiary\"\n size=\"x-small\"\n className={styles['toast__action-btn--on-dark']}\n onClick={onAction}\n >\n {actionLabel}\n </Button>\n )}\n </div>\n {onDismiss != null && (\n <IconButton\n aria-label=\"Dismiss\"\n size=\"small\"\n className={styles['toast__dismiss']}\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n onClick={onDismiss}\n />\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport Button from '@/components/Button/Button';\nimport Icon from '@/components/Icon/Icon';\nimport IconButton from '@/components/IconButton/IconButton';\nimport PaginationDots from '@/components/PaginationDots/PaginationDots';\nimport { toKebab } from '@/utils/string';\nimport styles from './TourPoint.module.scss';\n\nexport type TourPointPointerPosition =\n | 'top-center'\n | 'top-left'\n | 'top-right'\n | 'bottom-center'\n | 'bottom-left'\n | 'bottom-right'\n | 'left-center'\n | 'right-center';\n\nexport interface TourPointProgress {\n pages: number;\n activePage: number;\n onPageChange?: (page: number) => void;\n}\n\nexport interface TourPointPrimaryAction {\n label: string;\n onClick?: () => void;\n}\n\nexport interface TourPointProps {\n title: string;\n children: ReactNode;\n /** Optional image between body copy and footer (e.g. screenshot as an img). */\n media?: ReactNode;\n /** Where the pointer sits on the card edge; omit or `none` to hide the pointer. */\n pointerPosition?: TourPointPointerPosition | 'none';\n /**\n * Animated marker at the arrow tip (Figma Pulsing Dot). Only applies when a\n * pointer is shown. Default on; set false for reduced motion preference at the\n * callsite or a static tour step.\n */\n showPulsingDot?: boolean;\n onClose?: () => void;\n progress?: TourPointProgress;\n primaryAction?: TourPointPrimaryAction;\n className?: string;\n}\n\nexport default function TourPoint({\n title,\n children,\n media,\n pointerPosition = 'top-center',\n showPulsingDot = true,\n onClose,\n progress,\n primaryAction,\n className = '',\n}: TourPointProps) {\n const showPointer = pointerPosition !== 'none';\n const pointerModifier =\n showPointer &&\n styles[`tour-point--pointer-${toKebab(pointerPosition as TourPointPointerPosition)}`];\n\n const rootClass = [\n styles['tour-point'],\n pointerModifier,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const showFooter = progress != null || primaryAction != null;\n\n return (\n <div className={rootClass}>\n {showPointer && (\n <span className={styles['tour-point__pointer']} aria-hidden>\n <span className={styles['tour-point__pointer-triangle']} />\n {showPulsingDot && (\n <span className={styles['tour-point__pointer-pulse']}>\n <span className={styles['tour-point__pointer-pulse-ring']} />\n <span\n className={[\n styles['tour-point__pointer-pulse-ring'],\n styles['tour-point__pointer-pulse-ring--delay'],\n ].join(' ')}\n />\n <span className={styles['tour-point__pointer-pulse-core']} />\n </span>\n )}\n </span>\n )}\n\n <div className={styles['tour-point__panel']}>\n <div className={styles['tour-point__header']}>\n <h2 className={styles['tour-point__title']}>{title}</h2>\n {onClose && (\n <IconButton\n className={styles['tour-point__close']}\n aria-label=\"Close\"\n size=\"small\"\n padding=\"compact\"\n style=\"default\"\n icon={<Icon size=\"16\" glyph={<CloseIcon />} />}\n onClick={onClose}\n />\n )}\n </div>\n\n <div className={styles['tour-point__body']}>\n <div className={styles['tour-point__description']}>{children}</div>\n {media != null && (\n <div className={styles['tour-point__media']}>{media}</div>\n )}\n </div>\n\n {showFooter && (\n <div className={styles['tour-point__footer']}>\n {progress != null ? (\n <PaginationDots\n className={styles['tour-point__progress']}\n pages={progress.pages}\n activePage={progress.activePage}\n dotStyle=\"on-primary\"\n onPageChange={progress.onPageChange}\n />\n ) : (\n <span className={styles['tour-point__footer-spacer']} aria-hidden />\n )}\n\n {primaryAction != null ? (\n <div className={styles['tour-point__next-wrap']}>\n <Button\n emphasis=\"primary\"\n size=\"small\"\n trailingIcon={\n <Icon size=\"16\" glyph={<ChevronRightIcon />} />\n }\n onClick={primaryAction.onClick}\n >\n {primaryAction.label}\n </Button>\n </div>\n ) : null}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Keeps a panel mounted through its exit animation. While `open` is true the\n * panel renders normally. When `open` flips false, the panel keeps rendering\n * for `durationMs` with `exiting: true` so an exit animation can play before\n * the DOM node is removed.\n */\nexport function useExitAnimation(open: boolean, durationMs: number) {\n const [rendered, setRendered] = useState(open);\n const [exiting, setExiting] = useState(false);\n\n useEffect(() => {\n if (open) {\n setRendered(true);\n setExiting(false);\n return;\n }\n if (!rendered) return;\n setExiting(true);\n const t = window.setTimeout(() => {\n setRendered(false);\n setExiting(false);\n }, durationMs);\n return () => window.clearTimeout(t);\n }, [open, rendered, durationMs]);\n\n return { rendered, exiting };\n}\n"],"names":["ActionButton","icon","label","active","destructive","className","htmlProps","rootClass","styles","jsx","SVG_SIZE_MAP","SIZE_CLASS_MAP","Icon","glyph","size","sizeClass","svgSize","glyphContent","EmoticonHappyOutlineIcon","React","toKebab","s","ICON_BUTTON_ICON_SIZES","IconButton","count","padding","rounded","style","toggled","unreadBadge","disabled","type","ariaLabel","rest","paddingClass","styleClass","destructiveClass","roundedClass","toggledClass","activeClass","hasCount","hasCountClass","jsxs","TYPE_CLASS","Tag","casing","leadingIcon","classes","AdminConsoleHeader","title","showBack","ariaLabelBack","onBackClick","enterpriseBadge","enterpriseBadgeLabel","trailing","enterpriseChip","MattermostIcon","ArrowBackIosIcon","BADGE_ICON_SIZE_PX","GLYPH_COMPONENT","CheckCircleIcon","ClockIcon","MinusCircleIcon","CircleOutlineIcon","StatusBadge","status","statusClass","iconSizePx","GlyphIcon","FALLBACK_COLORS","USER_AVATAR_TO_BADGE_SIZE","hashFallbackColor","h","i","getInitials","name","trimmed","firstName","_a","UserAvatar","alt","src","fallbackColor","imgProps","isFallback","displayName","initials","color","fallbackColorClass","MentionBadge","location","displayText","digitCount","LeadingVisualContent","leadingVisual","memberCount","avatarSrc","avatarAlt","showAvatarStatus","LockOutlineIcon","SendOutlineIcon","ChartLineIcon","MessageTextOutlineIcon","DialpadIcon","GlobeIcon","ChannelSidebarItem","hideLeadingVisual","muted","callActive","sharedChannel","mentionCount","customStatusEmoji","onClick","isDM","isDrafts","effectiveStatus","hasMentionBadge","isChannelOrDM","iconContainerClass","rightClass","e","CircleMultipleOutlineIcon","PhoneInTalkIcon","DotsVerticalIcon","MoreUnreadsBanner","direction","ArrowUpIcon","ArrowDownIcon","Scrollbar","forwardRef","children","alwaysVisible","onScroll","ref","cleanup","useRef","setScrollNode","useCallback","el","mergedStyle","SimpleBar","applyChannelNameOverrides","model","channelNameOverrides","resolve","mapRow","row","g","applyChannelSidebarInteractivity","activeChannelName","onItemClick","ChannelsSidebarHeader","teamName","ChevronDownIcon","PlusIcon","ChannelsSidebarNavigator","showFilter","FilterVariantIcon","MagnifyIcon","ChannelsSidebarCategory","showChevron","showPlusButton","sticky","opaqueCategory","hasLeadingIcon","showChevronRow","categoryClass","ChannelsSidebar","moreUnreadsAbove","moreUnreadsBelow","modelProp","useMemo","withOverrides","group","index","CATEGORY_ICON_GLYPHS","CreditCardOutlineIcon","AccountMultipleOutlineIcon","ServerOutlineIcon","TuneIcon","ShieldOutlineIcon","AppsIcon","WebhookIcon","FileTextOutlineIcon","FlaskOutlineIcon","categoryLeadingIcon","key","AdminConsoleSidebar","consoleTitle","userHandle","userDisplayName","groups","findSettingsId","useId","SIZE_ICON_MAP","Button","appearance","emphasis","trailingIcon","iconSize","emphasisClass","appearanceClass","useControllable","controlled","defaultValue","onChange","isControlled","uncontrolled","setUncontrolled","useState","Switch","secondaryLabel","semiBold","idProp","checked","defaultChecked","generatedId","id","resolvedChecked","handleChange","semiBoldClass","secondaryClass","AdminPanelHeader","titleId","subtitle","headerActions","iconLeft","showBeta","betaLabel","showEnterpriseLabel","enterpriseLabel","showButton","buttonLabel","onButtonClick","showSwitch","switchLabel","switchChecked","defaultSwitchChecked","onSwitchChange","switchDisabled","expandable","isExpanded","onToggleExpand","showDivider","hasActions","defaultLeading","CogOutlineIcon","ChevronUpIcon","AdminPanel","expandedStateProp","defaultExpandedState","onExpandedStateChange","uncontrolledExpanded","setUncontrolledExpanded","isExpandControlled","setExpandedState","next","toggleExpanded","showHeaderDivider","DEFAULT_WARNING","DEFAULT_ERROR","AdminPanelFooter","saveLabel","cancelLabel","onSave","onCancel","saveDisabled","statusMessage","statusUi","copy","Fragment","AlertOutlineIcon","AlertCircleOutlineIcon","statusMod","AppBarItem","state","mentionBadge","isSelected","FILE_TYPE_ICONS","FileAudioOutlineLargeIcon","FileCodeOutlineLargeIcon","FileExcelOutlineLargeIcon","FileGenericOutlineLargeIcon","FileImageOutlineLargeIcon","FilePatchOutlineLargeIcon","FilePdfOutlineLargeIcon","FilePowerpointOutlineLargeIcon","FileTextOutlineLargeIcon","FileVideoOutlineLargeIcon","FileWordOutlineLargeIcon","FileZipOutlineLargeIcon","FILE_TYPE_COLORS","AttachmentCard","fileName","fileMeta","fileType","progress","thumbnailSrc","channelTag","dateTimeStamp","onRemove","onDownload","onMore","isUploading","isUploaded","isDefault","stateClass","FileIcon","iconColor","CloseIcon","DownloadOutlineIcon","ChannelHeader","description","pinnedCount","favorited","avatarStatus","onFavoriteClick","onNameClick","onCallClick","callButton","onInfoClick","infoToggled","isSimple","showCallButton","showMembers","showFiles","hasDmAvatar","StarIcon","StarOutlineIcon","BellOffOutlineIcon","AccountOutlineIcon","PinOutlineIcon","PhoneIcon","InformationOutlineIcon","MenuItem","secondaryLabelPosition","leadingElement","trailingVisual","trailingElement","tag","CheckIcon","PopoverMenu","variant","PopoverMenuScroll","maxHeight","maxH","PopoverMenuTitle","PopoverMenuGroup","PopoverMenuGroupTitle","PopoverMenuDivider","ChannelHeaderMenu","BellOutlineIcon","ChevronRightIcon","BookmarkOutlineIcon","FolderMoveOutlineIcon","ExitToAppIcon","ArchiveOutlineIcon","ChannelInfoMsgHeader","channelName","onChannelClick","tabs","resolvedTabs","tab","ChannelMenu","MarkAsUnreadIcon","LinkVariantIcon","AccountPlusOutlineIcon","ChannelCategoryMenu","sortLabel","PencilOutlineIcon","TrashCanOutlineIcon","SortAlphabeticalAscendingIcon","CHECKBOX_ICON_SIZE","ICON_COMPONENT","MinusIcon","Checkbox","indeterminate","valid","inputRef","showingIcon","useEffect","input","invalidClass","indeterminateClass","IconComponent","ICON_SIZE_MAP","AVATAR_SIZE_MAP","Chip","leadingAvatar","removeLabel","error","colored","avatarSize","CloseCircleIcon","ANCHORED_POPUP_GAP","ANCHORED_POPUP_VIEWPORT_MARGIN","ANCHORED_POPUP_MIN_HEIGHT","ANCHORED_POPUP_Z_INDEX","computeAnchoredPopupPlacement","anchorRect","viewportHeight","options","gap","viewportMargin","minHeight","preferredHeight","boundsTop","boundsBottom","_b","spaceBelow","spaceAbove","placement","available","capped","getAnchoredPopupContainerFrame","mount","borderRect","computeAnchoredPopupFixedStyle","width","zIndex","containerFrame","anchor","visibleTop","DEFAULT_PLACEMENT","resolvePortalMount","portalContainer","usesViewportFixedCoords","useAnchoredPopupPortal","anchorRef","isOpen","maxHeightCap","contentRef","matchWidth","portalRef","setPlacement","setMaxHeight","setStyle","update","rect","measured","heightForFlip","nextPlacement","nextMaxHeight","fixed","useLayoutEffect","handle","ro","renderPortal","createPortal","useOutsideClose","open","onClose","target","POPOVER_TRANSITION_MS","usePopoverTransition","mounted","setMounted","visible","setVisible","raf2","raf1","t","POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","Combobox","multiple","valueProp","inputValueProp","defaultInputValue","onInputChange","placeholder","invalid","filter","emptyMessage","listboxId","rootRef","setInputRef","node","isValueControlled","uncontrolledValue","setUncontrolledValue","rawValue","singleValue","multiValue","isInputControlled","uncontrolledInput","setUncontrolledInput","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","selectedOption","o","displayInput","filterQuery","setInputDisplay","commitValue","filteredOptions","fn","popupMounted","popupVisible","popupStyle","close","prev","selectedIdx","optionValue","selectOption","v","removeValue","moveActive","delta","enabled","currentPos","nextPos","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeOption","activeDescendant","selectedOptions","hasChips","ev","selected","leading","CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","b","isBetween","date","start","end","dayFromIso","DateRangePicker","mode","startDate","endDate","onRangeChange","popoverId","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","displayMonth","setDisplayMonth","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","popoverStyle","restoreFocus","handleFocusIn","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","handlePrevMonth","handleNextMonth","goToAdjacentMonth","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","weeks","displayValue","CalendarOutlineIcon","ChevronLeftIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isInRange","hasRangeSpan","cellClass","dayClass","Divider","Dropdown","openClass","Emoji","emoji","Illustration","height","hasLabel","EmptyState","illustration","action","ErrorMessage","message","FeatureDiscoveryPanel","skuLabel","primaryAction","secondaryAction","GlobalBanner","actionLabel","onAction","onDismiss","typeClass","PRODUCT_ICON","ProductChannelsIcon","ProductPlaybooksIcon","ProductBoardsIcon","PRODUCT_LABEL","InvertedIconButton","ProductBrand","product","ProductIcon","Navigator","ArrowLeftIcon","ArrowRightIcon","GlobalHeader","showChannelsBranding","showUpgradeButton","userAvatarSrc","userAvatarAlt","isChannels","showBrand","ProductsIcon","HelpCircleOutlineIcon","CheckboxMultipleMarkedOutlineIcon","AtIcon","HelpMenu","LightbulbOutlineIcon","KeyboardOutlineIcon","ImagePreview","collapsed","onToggleCollapse","onCopyLink","aspectRatio","frameTransition","labelTransition","MenuRightIcon","MenuDownIcon","LinkPreview","siteName","imageSrc","imageAlt","imageSize","imageCollapsed","onToggleImageCollapse","onCopyImageLink","onDownloadImage","resolvedImageSize","hasSmallImage","hasLargeImage","cardClass","MessageHeader","username","timestamp","isBot","botLabel","MessageActions","collapsedReplyThreads","quickReactions","isCenterChannel","isRHS","isSearchResults","showQuickReactions","EmoticonPlusOutlineIcon","DotsHorizontalIcon","CreationOutlineIcon","ReplyOutlineIcon","PinnedSavedIndicators","Message","messageActionsType","showMessageActions","showPinnedSavedIndicators","linkPreview","imagePreviews","footer","MessageInput","showPriorityIndicator","showAttachments","onSelectionChange","internalText","setInternalText","text","setText","formattingOpen","setFormattingOpen","internalRef","setTextareaRef","handleInput","hasSendValue","cls","base","mod","isNarrowFormattingOpen","showWideFormattingBar","composerActions","FormatLetterCaseIcon","PaperclipIcon","SendIcon","EyeOutlineIcon","FormatBoldIcon","FormatItalicIcon","FormatStrikethroughVariantIcon","FormatHeaderIcon","CodeTagsIcon","FormatQuoteOpenIcon","FormatListBulletedIcon","FormatListNumberedIcon","FireIcon","SIZE_CLASS","LOCATION_CLASS","ShortcutTag","ShortcutTagGroup","labels","groupClass","shortcutLabel","MessageMoreOptionsMenu","permissionToEdit","showFlagOption","ArrowRightBoldOutlineIcon","MessageCheckOutlineIcon","ClockOutlineIcon","ContentCopyIcon","TranslateIcon","FlagOutlineIcon","DEFAULT_REACTIONS","MessageReactions","reactions","showAddReaction","acknowledged","acknowledgeCount","currentUserAcknowledged","onAddReaction","onReactionClick","onAcknowledge","CheckCircleOutlineIcon","byCurrentUser","DEFAULT_LABELS","MessageSeparator","showAiSummary","onSummarize","displayLabel","labelBlock","Modal","showBackButton","onBack","headerDivider","footerDivider","NewMessageBanner","countLabel","PaginationDots","pages","activePage","orientation","dotStyle","onPageChange","isVertical","isInverted","isOnPrimary","orientationClass","page","isActive","dotClass","PermalinkPreview","authorName","messageText","originalChannel","PlusMenu","FolderPlusOutlineIcon","VARIANT_ICONS","VARIANT_ICON_CLASS","PopoverNotice","actions","showCheckbox","checkboxLabel","resolvedIcon","iconColorClass","DEFAULT_PRODUCT_SWITCHER_PRODUCTS","productLeadingVisual","ProductSwitcherMenu","selectedProduct","additionalProducts","onProductSelect","products","ApplicationCogIcon","MetaRow","href","textClass","ProfilePopover","user","email","phones","lastOnline","jobRole","localTime","customStatus","sharedOrg","staff","coreCommitter","githubHandle","onPrimaryAction","onMention","onAddToChannel","onCall","onSend","phoneIcon","onAnimationEnd","isYou","hasPhones","hasTitlesBlock","hasSecondary","EmailOutlineIcon","p","subText","GithubCircleIcon","getSemanticColorClass","ProgressBar","semanticColors","clampedValue","fillColorClass","Radio","ReactionPill","HandRightOutlineIcon","MicrophoneOffIcon","RightSidebar","header","fill","alignBody","bodyClass","RightSidebarHeader","secondaryTitle","tagType","onExpand","onActionClick","actionActive","ArrowExpandIcon","SearchInput","onClear","onFocus","onBlur","handleClear","showClearButton","labelFloatedClass","hasLeadingClass","hasTrailingClass","SearchTipBanner","prefix","suffix","shortcutKeys","DEFAULT_ICONS","SectionNotice","primaryButtonLabel","secondaryButtonLabel","onSecondaryAction","SelectOptionRow","onSelect","onHover","rowClass","menuItemStyles","Select","buttonRef","setButtonRef","listOptions","firstEnabled","idx","showPlaceholderStyle","controlClass","Spinner","inverted","strokeWidth","Tabs","activeKey","controls","tabClass","TeamAvatar","badge","numSize","showBadge","rootClasses","TeamMenu","adminOptions","createTeamPermission","joinTeamPermission","UnreadBadge","context","contextClass","TeamSidebar","teams","activeTeamId","showAddTeam","showDialPad","dialPadActive","onSelectTeam","onAddTeam","onDialPadClick","team","hasMentions","showUnreadDot","TextArea","maxLength","showCharacterCount","readOnly","rows","currentLength","counterId","TextInput","ThreadActionsMenu","MessageMinusOutlineIcon","OpenInNewIcon","ThreadFooter","replyCount","avatars","following","lastReplyTime","onReply","onFollowToggle","hovered","MAX_VISIBLE","visibleAvatars","overflowCount","av","Tooltip","arrow","hint","arrowClass","overflowNamesLabel","hidden","a","UserAvatarGroup","max","overflow","avatar","DEFAULT_PARTICIPANTS","ThreadListItem","channelLabel","previewText","participantsProp","threadTitle","onMenuClick","participants","showParticipants","showGutterBadge","replyLabel","event","TYPE_ICONS","Toast","TourPoint","media","pointerPosition","showPulsingDot","showPointer","pointerModifier","showFooter","useExitAnimation","durationMs","rendered","setRendered","exiting","setExiting"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}