@mattermost/compass-ui 0.1.0-alpha.12 → 0.1.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/README.md +15 -3
  2. package/dist/compass-ui-standalone.css +270 -276
  3. package/dist/compass-ui.css +293 -290
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js.map +1 -1
  8. package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -1
  9. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts +3 -1
  10. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -1
  11. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
  12. package/dist/components/admin-panel/AdminPanel.cjs +1 -1
  13. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
  14. package/dist/components/admin-panel/AdminPanel.d.ts +13 -6
  15. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
  16. package/dist/components/admin-panel/AdminPanel.js +21 -15
  17. package/dist/components/admin-panel/AdminPanel.js.map +1 -1
  18. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
  19. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts +8 -4
  20. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
  21. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  23. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  24. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  25. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +11 -4
  26. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  27. package/dist/components/admin-panel-header/AdminPanelHeader.js +25 -23
  28. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  29. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  30. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +10 -10
  31. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  32. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  33. package/dist/components/attachment-card/AttachmentCard.d.ts +18 -5
  34. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  35. package/dist/components/attachment-card/AttachmentCard.js +85 -79
  36. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  37. package/dist/components/card-button/CardButton.css +1 -1
  38. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  39. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +1 -1
  41. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
  42. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts +5 -4
  43. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -1
  44. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +7 -7
  45. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +10 -4
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +67 -62
  51. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  52. package/dist/components/checkbox/Checkbox.css +1 -1
  53. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  54. package/dist/components/checkbox/Checkbox.module.scss.js +10 -10
  55. package/dist/components/chip/Chip.cjs.map +1 -1
  56. package/dist/components/chip/Chip.css +1 -1
  57. package/dist/components/chip/Chip.d.ts +4 -0
  58. package/dist/components/chip/Chip.d.ts.map +1 -1
  59. package/dist/components/chip/Chip.js.map +1 -1
  60. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  61. package/dist/components/chip/Chip.module.scss.js +11 -11
  62. package/dist/components/combobox/Combobox.cjs +1 -1
  63. package/dist/components/combobox/Combobox.cjs.map +1 -1
  64. package/dist/components/combobox/Combobox.css +1 -1
  65. package/dist/components/combobox/Combobox.d.ts +24 -1
  66. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  67. package/dist/components/combobox/Combobox.js +307 -271
  68. package/dist/components/combobox/Combobox.js.map +1 -1
  69. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  70. package/dist/components/combobox/Combobox.module.scss.js +28 -26
  71. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  72. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  73. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  74. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  75. package/dist/components/date-range-picker/DateRangePicker.d.ts +18 -2
  76. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  77. package/dist/components/date-range-picker/DateRangePicker.js +134 -126
  78. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  80. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
  81. package/dist/components/emoji-popover/EmojiPopover.cjs +1 -1
  82. package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
  83. package/dist/components/emoji-popover/EmojiPopover.d.ts +25 -4
  84. package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
  85. package/dist/components/emoji-popover/EmojiPopover.js +84 -73
  86. package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
  87. package/dist/components/empty-state/EmptyState.cjs +1 -1
  88. package/dist/components/empty-state/EmptyState.cjs.map +1 -1
  89. package/dist/components/empty-state/EmptyState.d.ts +3 -3
  90. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  91. package/dist/components/empty-state/EmptyState.js +11 -9
  92. package/dist/components/empty-state/EmptyState.js.map +1 -1
  93. package/dist/components/error-message/ErrorMessage.cjs +1 -1
  94. package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
  95. package/dist/components/error-message/ErrorMessage.d.ts +3 -3
  96. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
  97. package/dist/components/error-message/ErrorMessage.js +10 -9
  98. package/dist/components/error-message/ErrorMessage.js.map +1 -1
  99. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -1
  100. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts +7 -6
  101. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -1
  102. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -1
  103. package/dist/components/global-banner/GlobalBanner.cjs +1 -1
  104. package/dist/components/global-banner/GlobalBanner.cjs.map +1 -1
  105. package/dist/components/global-banner/GlobalBanner.d.ts +10 -5
  106. package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -1
  107. package/dist/components/global-banner/GlobalBanner.js +33 -26
  108. package/dist/components/global-banner/GlobalBanner.js.map +1 -1
  109. package/dist/components/icon-button/IconButton.css +1 -1
  110. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  111. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  112. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  113. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  114. package/dist/components/image-preview/ImagePreview.css +1 -1
  115. package/dist/components/image-preview/ImagePreview.d.ts +12 -1
  116. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  117. package/dist/components/image-preview/ImagePreview.js +25 -20
  118. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  119. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  120. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  121. package/dist/components/link-preview/LinkPreview.cjs +1 -1
  122. package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
  123. package/dist/components/link-preview/LinkPreview.d.ts +12 -6
  124. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
  125. package/dist/components/link-preview/LinkPreview.js +19 -16
  126. package/dist/components/link-preview/LinkPreview.js.map +1 -1
  127. package/dist/components/mention-badge/MentionBadge.cjs +1 -1
  128. package/dist/components/mention-badge/MentionBadge.cjs.map +1 -1
  129. package/dist/components/mention-badge/MentionBadge.d.ts +3 -1
  130. package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -1
  131. package/dist/components/mention-badge/MentionBadge.js +18 -23
  132. package/dist/components/mention-badge/MentionBadge.js.map +1 -1
  133. package/dist/components/menu-group-heading/MenuGroupHeading.cjs.map +1 -1
  134. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts +3 -3
  135. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts.map +1 -1
  136. package/dist/components/menu-group-heading/MenuGroupHeading.js.map +1 -1
  137. package/dist/components/menu-item/MenuItem.cjs +1 -1
  138. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  139. package/dist/components/menu-item/MenuItem.d.ts +2 -0
  140. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  141. package/dist/components/menu-item/MenuItem.js +29 -28
  142. package/dist/components/menu-item/MenuItem.js.map +1 -1
  143. package/dist/components/message-actions/MessageActions.cjs +1 -1
  144. package/dist/components/message-actions/MessageActions.cjs.map +1 -1
  145. package/dist/components/message-actions/MessageActions.d.ts +26 -2
  146. package/dist/components/message-actions/MessageActions.d.ts.map +1 -1
  147. package/dist/components/message-actions/MessageActions.js +67 -55
  148. package/dist/components/message-actions/MessageActions.js.map +1 -1
  149. package/dist/components/message-header/MessageHeader.cjs.map +1 -1
  150. package/dist/components/message-header/MessageHeader.d.ts +5 -3
  151. package/dist/components/message-header/MessageHeader.d.ts.map +1 -1
  152. package/dist/components/message-header/MessageHeader.js.map +1 -1
  153. package/dist/components/message-separator/MessageSeparator.cjs +1 -1
  154. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
  155. package/dist/components/message-separator/MessageSeparator.d.ts +8 -4
  156. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
  157. package/dist/components/message-separator/MessageSeparator.js +16 -14
  158. package/dist/components/message-separator/MessageSeparator.js.map +1 -1
  159. package/dist/components/modal/Modal.cjs +1 -1
  160. package/dist/components/modal/Modal.cjs.map +1 -1
  161. package/dist/components/modal/Modal.css +1 -1
  162. package/dist/components/modal/Modal.d.ts +40 -4
  163. package/dist/components/modal/Modal.d.ts.map +1 -1
  164. package/dist/components/modal/Modal.js +105 -56
  165. package/dist/components/modal/Modal.js.map +1 -1
  166. package/dist/components/modal/Modal.module.scss.cjs +1 -1
  167. package/dist/components/modal/Modal.module.scss.js +14 -12
  168. package/dist/components/modal/Modal.module.scss.js.map +1 -1
  169. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  170. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  171. package/dist/components/modal-header/ModalHeader.css +1 -1
  172. package/dist/components/modal-header/ModalHeader.d.ts +16 -1
  173. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  174. package/dist/components/modal-header/ModalHeader.js +72 -57
  175. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  176. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  177. package/dist/components/modal-header/ModalHeader.module.scss.js +15 -13
  178. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  179. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +1 -1
  180. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -1
  181. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts +4 -1
  182. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -1
  183. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +11 -10
  184. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -1
  185. package/dist/components/new-message-banner/NewMessageBanner.cjs +1 -1
  186. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
  187. package/dist/components/new-message-banner/NewMessageBanner.d.ts +15 -3
  188. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
  189. package/dist/components/new-message-banner/NewMessageBanner.js +30 -22
  190. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -1
  193. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  194. package/dist/components/pagination-dots/PaginationDots.d.ts +5 -1
  195. package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -1
  196. package/dist/components/pagination-dots/PaginationDots.js +22 -19
  197. package/dist/components/pagination-dots/PaginationDots.js.map +1 -1
  198. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  199. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  200. package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
  201. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
  202. package/dist/components/permalink-preview/PermalinkPreview.d.ts +16 -5
  203. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
  204. package/dist/components/permalink-preview/PermalinkPreview.js +39 -35
  205. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
  206. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +1 -1
  207. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -1
  208. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts +8 -1
  209. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -1
  210. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +20 -17
  211. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -1
  212. package/dist/components/popover-menu/PopoverMenu.cjs +1 -1
  213. package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
  214. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  215. package/dist/components/popover-menu/PopoverMenu.d.ts +9 -1
  216. package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
  217. package/dist/components/popover-menu/PopoverMenu.js +39 -28
  218. package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
  219. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  220. package/dist/components/popover-menu/PopoverMenu.module.scss.js +12 -10
  221. package/dist/components/popover-menu/PopoverMenu.module.scss.js.map +1 -1
  222. package/dist/components/popover-notice/PopoverNotice.cjs +1 -1
  223. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
  224. package/dist/components/popover-notice/PopoverNotice.d.ts +13 -5
  225. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
  226. package/dist/components/popover-notice/PopoverNotice.js +58 -48
  227. package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
  228. package/dist/components/profile-popover/ProfilePopover.cjs +1 -1
  229. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
  230. package/dist/components/profile-popover/ProfilePopover.d.ts +34 -12
  231. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
  232. package/dist/components/profile-popover/ProfilePopover.js +122 -106
  233. package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
  234. package/dist/components/progress-bar/ProgressBar.cjs +1 -1
  235. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
  236. package/dist/components/progress-bar/ProgressBar.d.ts +4 -3
  237. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
  238. package/dist/components/progress-bar/ProgressBar.js +9 -7
  239. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  240. package/dist/components/radio/Radio.css +1 -1
  241. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  242. package/dist/components/radio/Radio.module.scss.js +11 -11
  243. package/dist/components/reaction-button/ReactionButton.cjs +1 -1
  244. package/dist/components/reaction-button/ReactionButton.cjs.map +1 -1
  245. package/dist/components/reaction-button/ReactionButton.d.ts +3 -1
  246. package/dist/components/reaction-button/ReactionButton.d.ts.map +1 -1
  247. package/dist/components/reaction-button/ReactionButton.js +20 -18
  248. package/dist/components/reaction-button/ReactionButton.js.map +1 -1
  249. package/dist/components/reactions-row/ReactionsRow.cjs +1 -1
  250. package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
  251. package/dist/components/reactions-row/ReactionsRow.d.ts +10 -2
  252. package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
  253. package/dist/components/reactions-row/ReactionsRow.js +33 -28
  254. package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
  255. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  256. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  257. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +15 -7
  258. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  259. package/dist/components/right-sidebar-header/RightSidebarHeader.js +23 -19
  260. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  261. package/dist/components/scrollbar/Scrollbar.cjs +1 -1
  262. package/dist/components/scrollbar/Scrollbar.cjs.map +1 -1
  263. package/dist/components/scrollbar/Scrollbar.css +1 -1
  264. package/dist/components/scrollbar/Scrollbar.d.ts +2 -2
  265. package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -1
  266. package/dist/components/scrollbar/Scrollbar.js +24 -15
  267. package/dist/components/scrollbar/Scrollbar.js.map +1 -1
  268. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  269. package/dist/components/scrollbar/Scrollbar.module.scss.js +4 -4
  270. package/dist/components/scrollbar/simplebar-vendor.css +1 -0
  271. package/dist/components/search-input/SearchInput.cjs +1 -1
  272. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  273. package/dist/components/search-input/SearchInput.d.ts +5 -0
  274. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  275. package/dist/components/search-input/SearchInput.js +92 -85
  276. package/dist/components/search-input/SearchInput.js.map +1 -1
  277. package/dist/components/search-tip-banner/SearchTipBanner.cjs +1 -1
  278. package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -1
  279. package/dist/components/search-tip-banner/SearchTipBanner.d.ts +8 -5
  280. package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -1
  281. package/dist/components/search-tip-banner/SearchTipBanner.js +17 -16
  282. package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -1
  283. package/dist/components/section-notice/SectionNotice.cjs +1 -1
  284. package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
  285. package/dist/components/section-notice/SectionNotice.d.ts +16 -3
  286. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
  287. package/dist/components/section-notice/SectionNotice.js +64 -48
  288. package/dist/components/section-notice/SectionNotice.js.map +1 -1
  289. package/dist/components/select/Select.cjs +1 -1
  290. package/dist/components/select/Select.cjs.map +1 -1
  291. package/dist/components/select/Select.d.ts +8 -1
  292. package/dist/components/select/Select.d.ts.map +1 -1
  293. package/dist/components/select/Select.js +81 -79
  294. package/dist/components/select/Select.js.map +1 -1
  295. package/dist/components/spinner/Spinner.cjs.map +1 -1
  296. package/dist/components/spinner/Spinner.css +1 -1
  297. package/dist/components/spinner/Spinner.d.ts +1 -0
  298. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  299. package/dist/components/spinner/Spinner.js.map +1 -1
  300. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  301. package/dist/components/spinner/Spinner.module.scss.js +5 -5
  302. package/dist/components/status-badge/StatusBadge.css +1 -1
  303. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  304. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  305. package/dist/components/switch/Switch.css +1 -1
  306. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  307. package/dist/components/switch/Switch.module.scss.js +17 -17
  308. package/dist/components/tabs/Tabs.cjs +1 -1
  309. package/dist/components/tabs/Tabs.cjs.map +1 -1
  310. package/dist/components/tabs/Tabs.css +1 -1
  311. package/dist/components/tabs/Tabs.d.ts +14 -3
  312. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  313. package/dist/components/tabs/Tabs.js +62 -53
  314. package/dist/components/tabs/Tabs.js.map +1 -1
  315. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  316. package/dist/components/tabs/Tabs.module.scss.js +13 -12
  317. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  318. package/dist/components/tabs/index.d.ts +1 -1
  319. package/dist/components/tabs/index.d.ts.map +1 -1
  320. package/dist/components/tag/Tag.cjs +1 -1
  321. package/dist/components/tag/Tag.cjs.map +1 -1
  322. package/dist/components/tag/Tag.d.ts +3 -3
  323. package/dist/components/tag/Tag.d.ts.map +1 -1
  324. package/dist/components/tag/Tag.js +12 -11
  325. package/dist/components/tag/Tag.js.map +1 -1
  326. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  327. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  328. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  329. package/dist/components/thread-footer/ThreadFooter.d.ts +19 -3
  330. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  331. package/dist/components/thread-footer/ThreadFooter.js +53 -48
  332. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  333. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  334. package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -18
  335. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  336. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  337. package/dist/components/thread-list-item/ThreadListItem.d.ts +15 -7
  338. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  339. package/dist/components/thread-list-item/ThreadListItem.js +66 -62
  340. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  341. package/dist/components/toast/Toast.cjs +1 -1
  342. package/dist/components/toast/Toast.cjs.map +1 -1
  343. package/dist/components/toast/Toast.d.ts +8 -3
  344. package/dist/components/toast/Toast.d.ts.map +1 -1
  345. package/dist/components/toast/Toast.js +47 -39
  346. package/dist/components/toast/Toast.js.map +1 -1
  347. package/dist/components/tour-point/TourPoint.cjs +1 -1
  348. package/dist/components/tour-point/TourPoint.cjs.map +1 -1
  349. package/dist/components/tour-point/TourPoint.css +1 -1
  350. package/dist/components/tour-point/TourPoint.d.ts +19 -5
  351. package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
  352. package/dist/components/tour-point/TourPoint.js +66 -54
  353. package/dist/components/tour-point/TourPoint.js.map +1 -1
  354. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  355. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  356. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  357. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  358. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  359. package/dist/components/user-avatar/UserAvatar.css +1 -1
  360. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  361. package/dist/components/user-avatar/UserAvatar.module.scss.js +26 -26
  362. package/dist/components/user-avatar-group/UserAvatarGroup.cjs +1 -1
  363. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
  364. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  365. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts +8 -1
  366. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
  367. package/dist/components/user-avatar-group/UserAvatarGroup.js +22 -18
  368. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
  369. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  370. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  371. package/dist/hooks/use-modal-focus.cjs +2 -0
  372. package/dist/hooks/use-modal-focus.cjs.map +1 -0
  373. package/dist/hooks/use-modal-focus.d.ts +26 -0
  374. package/dist/hooks/use-modal-focus.d.ts.map +1 -0
  375. package/dist/hooks/use-modal-focus.js +91 -0
  376. package/dist/hooks/use-modal-focus.js.map +1 -0
  377. package/dist/hooks/use-popover-transition.cjs +1 -1
  378. package/dist/hooks/use-popover-transition.cjs.map +1 -1
  379. package/dist/hooks/use-popover-transition.d.ts +6 -4
  380. package/dist/hooks/use-popover-transition.d.ts.map +1 -1
  381. package/dist/hooks/use-popover-transition.js +19 -15
  382. package/dist/hooks/use-popover-transition.js.map +1 -1
  383. package/dist/index.d.ts +1 -0
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/utils/duration.cjs +2 -0
  386. package/dist/utils/duration.cjs.map +1 -0
  387. package/dist/utils/duration.d.ts +8 -0
  388. package/dist/utils/duration.d.ts.map +1 -0
  389. package/dist/utils/duration.js +11 -0
  390. package/dist/utils/duration.js.map +1 -0
  391. package/dist/utils/props.cjs +2 -0
  392. package/dist/utils/props.cjs.map +1 -0
  393. package/dist/utils/props.d.ts +13 -0
  394. package/dist/utils/props.d.ts.map +1 -0
  395. package/dist/utils/props.js +7 -0
  396. package/dist/utils/props.js.map +1 -0
  397. package/package.json +4 -6
  398. package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
@@ -2,13 +2,13 @@ import { jsx as e, jsxs as l } from "react/jsx-runtime";
2
2
  import t from "../icon/Icon.js";
3
3
  import w from "../icon-button/IconButton.js";
4
4
  import { usePopoverTransition as _ } from "../../hooks/use-popover-transition.js";
5
- import __k from "@mattermost/compass-icons/components/link-variant.js";const k=__k&&__k.default?__k.default:__k;
6
- import __I from "@mattermost/compass-icons/components/download-outline.js";const I=__I&&__I.default?__I.default:__I;
7
- import __z from "@mattermost/compass-icons/components/menu-down.js";const z=__z&&__z.default?__z.default:__z;
8
- import __j from "@mattermost/compass-icons/components/menu-right.js";const j=__j&&__j.default?__j.default:__j;
9
- import { useRef as p, useEffect as T } from "react";
5
+ import __B from "@mattermost/compass-icons/components/link-variant.js";const B=__B&&__B.default?__B.default:__B;
6
+ import __C from "@mattermost/compass-icons/components/download-outline.js";const C=__C&&__C.default?__C.default:__C;
7
+ import __D from "@mattermost/compass-icons/components/menu-down.js";const D=__D&&__D.default?__D.default:__D;
8
+ import __R from "@mattermost/compass-icons/components/menu-right.js";const R=__R&&__R.default?__R.default:__R;
9
+ import { useRef as p, useEffect as x } from "react";
10
10
  import i from "./ImagePreview.module.scss.js";
11
- function O({
11
+ function G({
12
12
  src: h,
13
13
  alt: b = "",
14
14
  collapsed: r = !1,
@@ -16,12 +16,17 @@ function O({
16
16
  onCopyLink: u,
17
17
  onDownload: f,
18
18
  aspectRatio: g = "16:9",
19
- className: y = ""
19
+ className: y = "",
20
+ showLabel: N = "Show Image preview",
21
+ showAriaLabel: k = "Show image preview",
22
+ collapseLabel: I = "Collapse image preview",
23
+ copyLinkLabel: z = "Copy link",
24
+ downloadLabel: j = "Download"
20
25
  }) {
21
26
  const a = _(!r), n = _(r), s = p(null), c = p(null), o = p(!1), d = (v) => {
22
27
  (v.key === "Enter" || v.key === " ") && (o.current = !0);
23
28
  };
24
- T(() => {
29
+ x(() => {
25
30
  if (o.current) {
26
31
  if (r) {
27
32
  if (!n.mounted || !s.current) return;
@@ -31,14 +36,14 @@ function O({
31
36
  !a.mounted || !c.current || (o.current = !1, c.current.focus());
32
37
  }
33
38
  }, [r, a.mounted, n.mounted]);
34
- const N = [
39
+ const T = [
35
40
  i["image-preview"],
36
41
  r ? i["image-preview--collapsed"] : "",
37
42
  g === "4:3" ? i["image-preview--ratio-4-3"] : "",
38
43
  g === "1:1" ? i["image-preview--ratio-1-1"] : "",
39
44
  y
40
45
  ].filter(Boolean).join(" ");
41
- return /* @__PURE__ */ e("div", { className: N, children: /* @__PURE__ */ l("div", { className: i["image-preview__stage"], children: [
46
+ return /* @__PURE__ */ e("div", { className: T, children: /* @__PURE__ */ l("div", { className: i["image-preview__stage"], children: [
42
47
  n.mounted && /* @__PURE__ */ e(
43
48
  "button",
44
49
  {
@@ -50,17 +55,17 @@ function O({
50
55
  ].filter(Boolean).join(" "),
51
56
  onClick: m,
52
57
  onKeyDown: d,
53
- "aria-label": "Show image preview",
58
+ "aria-label": k,
54
59
  children: /* @__PURE__ */ l("span", { className: i["image-preview__show-label"], children: [
55
60
  /* @__PURE__ */ e(
56
61
  "span",
57
62
  {
58
63
  className: i["image-preview__show-icon"],
59
64
  "aria-hidden": "true",
60
- children: /* @__PURE__ */ e(t, { size: "12", glyph: /* @__PURE__ */ e(j, {}) })
65
+ children: /* @__PURE__ */ e(t, { size: "12", glyph: /* @__PURE__ */ e(R, {}) })
61
66
  }
62
67
  ),
63
- "Show Image preview"
68
+ N
64
69
  ] })
65
70
  }
66
71
  ),
@@ -88,8 +93,8 @@ function O({
88
93
  className: i["image-preview__collapse-btn"],
89
94
  onClick: m,
90
95
  onKeyDown: d,
91
- "aria-label": "Collapse image preview",
92
- children: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(z, {}) })
96
+ "aria-label": I,
97
+ children: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(D, {}) })
93
98
  }
94
99
  ),
95
100
  /* @__PURE__ */ l("div", { className: i["image-preview__actions"], children: [
@@ -98,8 +103,8 @@ function O({
98
103
  {
99
104
  size: "small",
100
105
  padding: "compact",
101
- "aria-label": "Copy link",
102
- icon: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(k, {}) }),
106
+ "aria-label": z,
107
+ icon: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(B, {}) }),
103
108
  onClick: u
104
109
  }
105
110
  ),
@@ -108,8 +113,8 @@ function O({
108
113
  {
109
114
  size: "small",
110
115
  padding: "compact",
111
- "aria-label": "Download",
112
- icon: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(I, {}) }),
116
+ "aria-label": j,
117
+ icon: /* @__PURE__ */ e(t, { size: "16", glyph: /* @__PURE__ */ e(C, {}) }),
113
118
  onClick: f
114
119
  }
115
120
  )
@@ -120,6 +125,6 @@ function O({
120
125
  ] }) });
121
126
  }
122
127
  export {
123
- O as default
128
+ G as default
124
129
  };
125
130
  //# sourceMappingURL=ImagePreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePreview.js","sources":["../../../src/components/image-preview/ImagePreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\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 { useEffect, useRef, type KeyboardEvent } from 'react';\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. Keyboard activation\n * moves focus to the paired expand/collapse control; pointer activation does not.\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 const showTriggerRef = useRef<HTMLButtonElement>(null);\n const collapseTriggerRef = useRef<HTMLButtonElement>(null);\n const keyboardToggleRef = useRef(false);\n\n const markKeyboardToggle = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n keyboardToggleRef.current = true;\n }\n };\n\n useEffect(() => {\n if (!keyboardToggleRef.current) return;\n\n if (collapsed) {\n if (!labelTransition.mounted || !showTriggerRef.current) return;\n keyboardToggleRef.current = false;\n showTriggerRef.current.focus();\n return;\n }\n\n if (!frameTransition.mounted || !collapseTriggerRef.current) return;\n keyboardToggleRef.current = false;\n collapseTriggerRef.current.focus();\n }, [collapsed, frameTransition.mounted, labelTransition.mounted]);\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 ref={showTriggerRef}\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 onKeyDown={markKeyboardToggle}\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\n src={src}\n alt={alt}\n className={styles['image-preview__img']}\n />\n </div>\n\n {onToggleCollapse != null && (\n <button\n ref={collapseTriggerRef}\n type=\"button\"\n className={styles['image-preview__collapse-btn']}\n onClick={onToggleCollapse}\n onKeyDown={markKeyboardToggle}\n aria-label=\"Collapse image preview\"\n >\n <Icon size=\"16\" glyph={<MenuDownIcon />} />\n </button>\n )}\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 </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["ImagePreview","src","alt","collapsed","onToggleCollapse","onCopyLink","onDownload","aspectRatio","className","frameTransition","usePopoverTransition","labelTransition","showTriggerRef","useRef","collapseTriggerRef","keyboardToggleRef","markKeyboardToggle","event","useEffect","rootClass","styles","jsx","jsxs","Icon","MenuRightIcon","MenuDownIcon","IconButton","LinkVariantIcon","DownloadOutlineIcon"],"mappings":"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"}
1
+ {"version":3,"file":"ImagePreview.js","sources":["../../../src/components/image-preview/ImagePreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\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 { useEffect, useRef, type KeyboardEvent, type ReactNode } from 'react';\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 /** Visible text of the collapsed toggle. Default: \"Show Image preview\". */\n showLabel?: ReactNode;\n /** Accessible name of the collapsed toggle. Default: \"Show image preview\". */\n showAriaLabel?: string;\n /** Accessible name of the collapse button. Default: \"Collapse image preview\". */\n collapseLabel?: string;\n /** Accessible name of the copy-link button. Default: \"Copy link\". */\n copyLinkLabel?: string;\n /** Accessible name of the download button. Default: \"Download\". */\n downloadLabel?: 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. Keyboard activation\n * moves focus to the paired expand/collapse control; pointer activation does not.\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 showLabel = 'Show Image preview',\n showAriaLabel = 'Show image preview',\n collapseLabel = 'Collapse image preview',\n copyLinkLabel = 'Copy link',\n downloadLabel = 'Download',\n}: ImagePreviewProps) {\n const frameTransition = usePopoverTransition(!collapsed);\n const labelTransition = usePopoverTransition(collapsed);\n const showTriggerRef = useRef<HTMLButtonElement>(null);\n const collapseTriggerRef = useRef<HTMLButtonElement>(null);\n const keyboardToggleRef = useRef(false);\n\n const markKeyboardToggle = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n keyboardToggleRef.current = true;\n }\n };\n\n useEffect(() => {\n if (!keyboardToggleRef.current) return;\n\n if (collapsed) {\n if (!labelTransition.mounted || !showTriggerRef.current) return;\n keyboardToggleRef.current = false;\n showTriggerRef.current.focus();\n return;\n }\n\n if (!frameTransition.mounted || !collapseTriggerRef.current) return;\n keyboardToggleRef.current = false;\n collapseTriggerRef.current.focus();\n }, [collapsed, frameTransition.mounted, labelTransition.mounted]);\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 ref={showTriggerRef}\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 onKeyDown={markKeyboardToggle}\n aria-label={showAriaLabel}\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 {showLabel}\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\n src={src}\n alt={alt}\n className={styles['image-preview__img']}\n />\n </div>\n\n {onToggleCollapse != null && (\n <button\n ref={collapseTriggerRef}\n type=\"button\"\n className={styles['image-preview__collapse-btn']}\n onClick={onToggleCollapse}\n onKeyDown={markKeyboardToggle}\n aria-label={collapseLabel}\n >\n <Icon size=\"16\" glyph={<MenuDownIcon />} />\n </button>\n )}\n\n <div className={styles['image-preview__actions']}>\n {onCopyLink != null && (\n <IconButton\n size=\"small\"\n padding=\"compact\"\n aria-label={copyLinkLabel}\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={downloadLabel}\n icon={<Icon size=\"16\" glyph={<DownloadOutlineIcon />} />}\n onClick={onDownload}\n />\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["ImagePreview","src","alt","collapsed","onToggleCollapse","onCopyLink","onDownload","aspectRatio","className","showLabel","showAriaLabel","collapseLabel","copyLinkLabel","downloadLabel","frameTransition","usePopoverTransition","labelTransition","showTriggerRef","useRef","collapseTriggerRef","keyboardToggleRef","markKeyboardToggle","event","useEffect","rootClass","styles","jsx","jsxs","Icon","MenuRightIcon","MenuDownIcon","IconButton","LinkVariantIcon","DownloadOutlineIcon"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ImagePreview.css');const e={"image-preview":"_image-preview_nf3bn_2","image-preview__stage":"_image-preview__stage_nf3bn_9","image-preview__frame":"_image-preview__frame_nf3bn_19","image-preview__frame--visible":"_image-preview__frame--visible_nf3bn_33","image-preview__media":"_image-preview__media_nf3bn_50","image-preview--ratio-4-3":"_image-preview--ratio-4-3_nf3bn_56","image-preview--ratio-1-1":"_image-preview--ratio-1-1_nf3bn_62","image-preview__img":"_image-preview__img_nf3bn_68","image-preview__actions":"_image-preview__actions_nf3bn_77","image-preview__collapse-btn":"_image-preview__collapse-btn_nf3bn_94","image-preview--collapsed":"_image-preview--collapsed_nf3bn_114","image-preview__collapsed-trigger":"_image-preview__collapsed-trigger_nf3bn_117","image-preview__collapsed-trigger--visible":"_image-preview__collapsed-trigger--visible_nf3bn_126","image-preview__show-label":"_image-preview__show-label_nf3bn_131","image-preview__show-icon":"_image-preview__show-icon_nf3bn_142"};exports.default=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ImagePreview.css');const e={"image-preview":"_image-preview_10kas_2","image-preview__stage":"_image-preview__stage_10kas_9","image-preview__frame":"_image-preview__frame_10kas_19","image-preview__frame--visible":"_image-preview__frame--visible_10kas_33","image-preview__media":"_image-preview__media_10kas_50","image-preview--ratio-4-3":"_image-preview--ratio-4-3_10kas_56","image-preview--ratio-1-1":"_image-preview--ratio-1-1_10kas_62","image-preview__img":"_image-preview__img_10kas_68","image-preview__actions":"_image-preview__actions_10kas_77","image-preview__collapse-btn":"_image-preview__collapse-btn_10kas_94","image-preview--collapsed":"_image-preview--collapsed_10kas_114","image-preview__collapsed-trigger":"_image-preview__collapsed-trigger_10kas_117","image-preview__collapsed-trigger--visible":"_image-preview__collapsed-trigger--visible_10kas_126","image-preview__show-label":"_image-preview__show-label_10kas_131","image-preview__show-icon":"_image-preview__show-icon_10kas_142"};exports.default=e;
2
2
  //# sourceMappingURL=ImagePreview.module.scss.cjs.map
@@ -1,19 +1,19 @@
1
1
  import './ImagePreview.css';const e = {
2
- "image-preview": "_image-preview_nf3bn_2",
3
- "image-preview__stage": "_image-preview__stage_nf3bn_9",
4
- "image-preview__frame": "_image-preview__frame_nf3bn_19",
5
- "image-preview__frame--visible": "_image-preview__frame--visible_nf3bn_33",
6
- "image-preview__media": "_image-preview__media_nf3bn_50",
7
- "image-preview--ratio-4-3": "_image-preview--ratio-4-3_nf3bn_56",
8
- "image-preview--ratio-1-1": "_image-preview--ratio-1-1_nf3bn_62",
9
- "image-preview__img": "_image-preview__img_nf3bn_68",
10
- "image-preview__actions": "_image-preview__actions_nf3bn_77",
11
- "image-preview__collapse-btn": "_image-preview__collapse-btn_nf3bn_94",
12
- "image-preview--collapsed": "_image-preview--collapsed_nf3bn_114",
13
- "image-preview__collapsed-trigger": "_image-preview__collapsed-trigger_nf3bn_117",
14
- "image-preview__collapsed-trigger--visible": "_image-preview__collapsed-trigger--visible_nf3bn_126",
15
- "image-preview__show-label": "_image-preview__show-label_nf3bn_131",
16
- "image-preview__show-icon": "_image-preview__show-icon_nf3bn_142"
2
+ "image-preview": "_image-preview_10kas_2",
3
+ "image-preview__stage": "_image-preview__stage_10kas_9",
4
+ "image-preview__frame": "_image-preview__frame_10kas_19",
5
+ "image-preview__frame--visible": "_image-preview__frame--visible_10kas_33",
6
+ "image-preview__media": "_image-preview__media_10kas_50",
7
+ "image-preview--ratio-4-3": "_image-preview--ratio-4-3_10kas_56",
8
+ "image-preview--ratio-1-1": "_image-preview--ratio-1-1_10kas_62",
9
+ "image-preview__img": "_image-preview__img_10kas_68",
10
+ "image-preview__actions": "_image-preview__actions_10kas_77",
11
+ "image-preview__collapse-btn": "_image-preview__collapse-btn_10kas_94",
12
+ "image-preview--collapsed": "_image-preview--collapsed_10kas_114",
13
+ "image-preview__collapsed-trigger": "_image-preview__collapsed-trigger_10kas_117",
14
+ "image-preview__collapsed-trigger--visible": "_image-preview__collapsed-trigger--visible_10kas_126",
15
+ "image-preview__show-label": "_image-preview__show-label_10kas_131",
16
+ "image-preview__show-icon": "_image-preview__show-icon_10kas_142"
17
17
  };
18
18
  export {
19
19
  e as default
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),j=require("../icon/Icon.cjs"),h=require("../icon-button/IconButton.cjs"),x=require("../image-preview/ImagePreview.cjs"),__g=require("@mattermost/compass-icons/components/close.js"),g=__g?.default??__g,l=require("./LinkPreview.module.scss.cjs");function N({siteName:d="Mattermost.com",title:u="Mattermost: Open-source, high-trust, developer-centric collaboration platform",description:m="Mattermost is a secure, open source platform for communication, collaboration, and workflow orchestration across tools and teams.",imageSrc:a,imageAlt:n="",imageSize:r="none",imageCollapsed:s=!1,onToggleImageCollapse:p,onCopyImageLink:v,onDownloadImage:_,onDismiss:t,className:f=""}){const o=a!=null&&r==="none"?"large":r,c=o==="small"&&a!=null,i=o==="large"&&a!=null,w=[l.default["link-preview"],f].filter(Boolean).join(" "),k=[l.default["link-preview__card"],c?l.default["link-preview__card--small-image"]:"",i&&!s?l.default["link-preview__card--large-image"]:"",i&&s?l.default["link-preview__card--collapsed-image"]:""].filter(Boolean).join(" ");return e.jsxs("div",{className:w,children:[t!=null&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:l.default["link-preview__dismiss-bridge"],"aria-hidden":!0}),e.jsx(h.default,{className:l.default["link-preview__dismiss"],size:"x-small",padding:"compact","aria-label":"Remove link preview",icon:e.jsx(j.default,{size:"12",glyph:e.jsx(g,{})}),onClick:t})]}),e.jsxs("div",{className:k,children:[e.jsxs("div",{className:l.default["link-preview__text"],children:[e.jsx("p",{className:l.default["link-preview__site-name"],children:d}),e.jsx("p",{className:l.default["link-preview__title"],children:u}),e.jsx("p",{className:l.default["link-preview__description"],children:m})]}),c&&e.jsx("div",{className:l.default["link-preview__thumbnail"],children:e.jsx("img",{src:a,alt:n,className:l.default["link-preview__thumbnail-img"]})}),i&&e.jsx(x.default,{className:l.default["link-preview__image-preview"],src:a,alt:n,collapsed:s,onToggleCollapse:p,onCopyLink:v,onDownload:_})]})]})}exports.default=N;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),x=require("../icon/Icon.cjs"),g=require("../icon-button/IconButton.cjs"),N=require("../image-preview/ImagePreview.cjs"),__b=require("@mattermost/compass-icons/components/close.js"),b=__b?.default??__b,l=require("./LinkPreview.module.scss.cjs");function I({siteName:d="Mattermost.com",title:u="Mattermost: Open-source, high-trust, developer-centric collaboration platform",description:m="Mattermost is a secure, open source platform for communication, collaboration, and workflow orchestration across tools and teams.",imageSrc:a,imageAlt:n="",imageSize:r="none",imageCollapsed:s=!1,onToggleImageCollapse:p,onCopyImageLink:v,onDownloadImage:_,onDismiss:t,dismissLabel:f="Remove link preview",imagePreviewLabels:w,className:k=""}){const o=a!=null&&r==="none"?"large":r,c=o==="small"&&a!=null,i=o==="large"&&a!=null,j=[l.default["link-preview"],k].filter(Boolean).join(" "),h=[l.default["link-preview__card"],c?l.default["link-preview__card--small-image"]:"",i&&!s?l.default["link-preview__card--large-image"]:"",i&&s?l.default["link-preview__card--collapsed-image"]:""].filter(Boolean).join(" ");return e.jsxs("div",{className:j,children:[t!=null&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:l.default["link-preview__dismiss-bridge"],"aria-hidden":!0}),e.jsx(g.default,{className:l.default["link-preview__dismiss"],size:"x-small",padding:"compact","aria-label":f,icon:e.jsx(x.default,{size:"12",glyph:e.jsx(b,{})}),onClick:t})]}),e.jsxs("div",{className:h,children:[e.jsxs("div",{className:l.default["link-preview__text"],children:[e.jsx("p",{className:l.default["link-preview__site-name"],children:d}),e.jsx("p",{className:l.default["link-preview__title"],children:u}),e.jsx("p",{className:l.default["link-preview__description"],children:m})]}),c&&e.jsx("div",{className:l.default["link-preview__thumbnail"],children:e.jsx("img",{src:a,alt:n,className:l.default["link-preview__thumbnail-img"]})}),i&&e.jsx(N.default,{...w,className:l.default["link-preview__image-preview"],src:a,alt:n,collapsed:s,onToggleCollapse:p,onCopyLink:v,onDownload:_})]})]})}exports.default=I;
2
2
  //# sourceMappingURL=LinkPreview.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkPreview.cjs","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport ImagePreview from '@/components/image-preview/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 className={styles['link-preview__dismiss-bridge']} aria-hidden />\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"],"names":["LinkPreview","siteName","title","description","imageSrc","imageAlt","imageSize","imageCollapsed","onToggleImageCollapse","onCopyImageLink","onDownloadImage","onDismiss","className","resolvedImageSize","hasSmallImage","hasLargeImage","rootClass","styles","cardClass","jsxs","Fragment","jsx","IconButton","Icon","CloseIcon","ImagePreview"],"mappings":"0WAwCA,SAAwBA,EAAY,CAClC,SAAAC,EAAW,iBACX,MAAAC,EAAQ,gFACR,YAAAC,EAAc,oIACd,SAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,OACZ,eAAAC,EAAiB,GACjB,sBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,UAAAC,EACA,UAAAC,EAAY,EACd,EAAqB,CACnB,MAAMC,EACJT,GAAY,MAAQE,IAAc,OAAS,QAAUA,EACjDQ,EAAgBD,IAAsB,SAAWT,GAAY,KAC7DW,EAAgBF,IAAsB,SAAWT,GAAY,KAE7DY,EAAY,CAACC,UAAO,cAAc,EAAGL,CAAS,EACjD,OAAO,OAAO,EACd,KAAK,GAAG,EAELM,EAAY,CAChBD,EAAAA,QAAO,oBAAoB,EAC3BH,EAAgBG,EAAAA,QAAO,iCAAiC,EAAI,GAC5DF,GAAiB,CAACR,EACdU,UAAO,iCAAiC,EACxC,GACJF,GAAiBR,EACbU,UAAO,qCAAqC,EAC5C,EAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEE,EAAAA,KAAC,MAAA,CAAI,UAAWH,EACb,SAAA,CAAAL,GAAa,MACZQ,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,MAAC,OAAI,UAAWJ,EAAAA,QAAO,8BAA8B,EAAG,cAAW,GAAC,EACpEI,EAAAA,IAACC,EAAAA,QAAA,CACC,UAAWL,EAAAA,QAAO,uBAAuB,EACzC,KAAK,UACL,QAAQ,UACR,aAAW,sBACX,WAAOM,UAAA,CAAK,KAAK,KAAK,MAAOF,MAACG,IAAU,EAAI,EAC5C,QAASb,CAAA,CAAA,CACX,EACF,EAGFQ,EAAAA,KAAC,MAAA,CAAI,UAAWD,EACd,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAAA,QAAO,oBAAoB,EACzC,SAAA,CAAAI,MAAC,IAAA,CAAE,UAAWJ,EAAAA,QAAO,yBAAyB,EAAI,SAAAhB,EAAS,QAC1D,IAAA,CAAE,UAAWgB,EAAAA,QAAO,qBAAqB,EAAI,SAAAf,EAAM,QACnD,IAAA,CAAE,UAAWe,EAAAA,QAAO,2BAA2B,EAAI,SAAAd,CAAA,CAAY,CAAA,EAClE,EAECW,GACCO,EAAAA,IAAC,MAAA,CAAI,UAAWJ,EAAAA,QAAO,yBAAyB,EAC9C,SAAAI,EAAAA,IAAC,MAAA,CACC,IAAKjB,EACL,IAAKC,EACL,UAAWY,EAAAA,QAAO,6BAA6B,CAAA,CAAA,EAEnD,EAGDF,GACCM,EAAAA,IAACI,EAAAA,QAAA,CACC,UAAWR,EAAAA,QAAO,6BAA6B,EAC/C,IAAKb,EACL,IAAKC,EACL,UAAWE,EACX,iBAAkBC,EAClB,WAAYC,EACZ,WAAYC,CAAA,CAAA,CACd,CAAA,CAEJ,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"LinkPreview.cjs","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport type { ReactNode } from 'react';\nimport ImagePreview from '@/components/image-preview/ImagePreview';\nimport type { ImagePreviewProps } from '@/components/image-preview/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?: ReactNode;\n /** The main link title. Accepts translated nodes. */\n title?: ReactNode;\n /** Description text. Accepts translated nodes. */\n description?: ReactNode;\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 /** Accessible name for the dismiss button. Default: \"Remove link preview\". */\n dismissLabel?: string;\n /** Label overrides for the large image preview. */\n imagePreviewLabels?: Pick<\n ImagePreviewProps,\n | 'showLabel'\n | 'showAriaLabel'\n | 'collapseLabel'\n | 'copyLinkLabel'\n | 'downloadLabel'\n >;\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 dismissLabel = 'Remove link preview',\n imagePreviewLabels,\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 className={styles['link-preview__dismiss-bridge']} aria-hidden />\n <IconButton\n className={styles['link-preview__dismiss']}\n size=\"x-small\"\n padding=\"compact\"\n aria-label={dismissLabel}\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 {...imagePreviewLabels}\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"],"names":["LinkPreview","siteName","title","description","imageSrc","imageAlt","imageSize","imageCollapsed","onToggleImageCollapse","onCopyImageLink","onDownloadImage","onDismiss","dismissLabel","imagePreviewLabels","className","resolvedImageSize","hasSmallImage","hasLargeImage","rootClass","styles","cardClass","jsxs","Fragment","jsx","IconButton","Icon","CloseIcon","ImagePreview"],"mappings":"0WAqDA,SAAwBA,EAAY,CAClC,SAAAC,EAAW,iBACX,MAAAC,EAAQ,gFACR,YAAAC,EAAc,oIACd,SAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,OACZ,eAAAC,EAAiB,GACjB,sBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,UAAAC,EACA,aAAAC,EAAe,sBACf,mBAAAC,EACA,UAAAC,EAAY,EACd,EAAqB,CACnB,MAAMC,EACJX,GAAY,MAAQE,IAAc,OAAS,QAAUA,EACjDU,EAAgBD,IAAsB,SAAWX,GAAY,KAC7Da,EAAgBF,IAAsB,SAAWX,GAAY,KAE7Dc,EAAY,CAACC,UAAO,cAAc,EAAGL,CAAS,EACjD,OAAO,OAAO,EACd,KAAK,GAAG,EAELM,EAAY,CAChBD,EAAAA,QAAO,oBAAoB,EAC3BH,EAAgBG,EAAAA,QAAO,iCAAiC,EAAI,GAC5DF,GAAiB,CAACV,EACdY,UAAO,iCAAiC,EACxC,GACJF,GAAiBV,EACbY,UAAO,qCAAqC,EAC5C,EAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEE,EAAAA,KAAC,MAAA,CAAI,UAAWH,EACb,SAAA,CAAAP,GAAa,MACZU,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,MAAC,OAAI,UAAWJ,EAAAA,QAAO,8BAA8B,EAAG,cAAW,GAAC,EACpEI,EAAAA,IAACC,EAAAA,QAAA,CACC,UAAWL,EAAAA,QAAO,uBAAuB,EACzC,KAAK,UACL,QAAQ,UACR,aAAYP,EACZ,WAAOa,UAAA,CAAK,KAAK,KAAK,MAAOF,MAACG,IAAU,EAAI,EAC5C,QAASf,CAAA,CAAA,CACX,EACF,EAGFU,EAAAA,KAAC,MAAA,CAAI,UAAWD,EACd,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAAA,QAAO,oBAAoB,EACzC,SAAA,CAAAI,MAAC,IAAA,CAAE,UAAWJ,EAAAA,QAAO,yBAAyB,EAAI,SAAAlB,EAAS,QAC1D,IAAA,CAAE,UAAWkB,EAAAA,QAAO,qBAAqB,EAAI,SAAAjB,EAAM,QACnD,IAAA,CAAE,UAAWiB,EAAAA,QAAO,2BAA2B,EAAI,SAAAhB,CAAA,CAAY,CAAA,EAClE,EAECa,GACCO,EAAAA,IAAC,MAAA,CAAI,UAAWJ,EAAAA,QAAO,yBAAyB,EAC9C,SAAAI,EAAAA,IAAC,MAAA,CACC,IAAKnB,EACL,IAAKC,EACL,UAAWc,EAAAA,QAAO,6BAA6B,CAAA,CAAA,EAEnD,EAGDF,GACCM,EAAAA,IAACI,EAAAA,QAAA,CACE,GAAGd,EACJ,UAAWM,EAAAA,QAAO,6BAA6B,EAC/C,IAAKf,EACL,IAAKC,EACL,UAAWE,EACX,iBAAkBC,EAClB,WAAYC,EACZ,WAAYC,CAAA,CAAA,CACd,CAAA,CAEJ,CAAA,EACF,CAEJ"}
@@ -1,11 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ import { ImagePreviewProps } from '../image-preview/ImagePreview';
1
3
  export type LinkPreviewImageSize = 'none' | 'small' | 'large';
2
4
  export interface LinkPreviewProps {
3
5
  /** The site/domain label shown above the title. */
4
- siteName?: string;
5
- /** The main link title. */
6
- title?: string;
7
- /** Description text. */
8
- description?: string;
6
+ siteName?: ReactNode;
7
+ /** The main link title. Accepts translated nodes. */
8
+ title?: ReactNode;
9
+ /** Description text. Accepts translated nodes. */
10
+ description?: ReactNode;
9
11
  /** Preview image URL. Pair with `imageSize` to choose layout. */
10
12
  imageSrc?: string;
11
13
  /** Alt text for the preview image. */
@@ -22,6 +24,10 @@ export interface LinkPreviewProps {
22
24
  onDownloadImage?: () => void;
23
25
  /** Called when the dismiss control is clicked. Shown on hover when provided. */
24
26
  onDismiss?: () => void;
27
+ /** Accessible name for the dismiss button. Default: "Remove link preview". */
28
+ dismissLabel?: string;
29
+ /** Label overrides for the large image preview. */
30
+ imagePreviewLabels?: Pick<ImagePreviewProps, 'showLabel' | 'showAriaLabel' | 'collapseLabel' | 'copyLinkLabel' | 'downloadLabel'>;
25
31
  /** Optional CSS class name. */
26
32
  className?: string;
27
33
  }
@@ -30,5 +36,5 @@ export interface LinkPreviewProps {
30
36
  * documentation page, a blog post, a product link. They give the recipient enough context to
31
37
  * decide whether to click without forcing them to open the link cold.
32
38
  */
33
- export default function LinkPreview({ siteName, title, description, imageSrc, imageAlt, imageSize, imageCollapsed, onToggleImageCollapse, onCopyImageLink, onDownloadImage, onDismiss, className, }: LinkPreviewProps): import("react/jsx-runtime").JSX.Element;
39
+ export default function LinkPreview({ siteName, title, description, imageSrc, imageAlt, imageSize, imageCollapsed, onToggleImageCollapse, onCopyImageLink, onDownloadImage, onDismiss, dismissLabel, imagePreviewLabels, className, }: LinkPreviewProps): import("react/jsx-runtime").JSX.Element;
34
40
  //# sourceMappingURL=LinkPreview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkPreview.d.ts","sourceRoot":"","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,QAA2B,EAC3B,KAAuF,EACvF,WAAiJ,EACjJ,QAAQ,EACR,QAAa,EACb,SAAkB,EAClB,cAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,SAAS,EACT,SAAc,GACf,EAAE,gBAAgB,2CAsElB"}
1
+ {"version":3,"file":"LinkPreview.d.ts","sourceRoot":"","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAIhF,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kDAAkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,IAAI,CACvB,iBAAiB,EACf,WAAW,GACX,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,CAClB,CAAC;IACF,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,QAA2B,EAC3B,KAAuF,EACvF,WAAiJ,EACjJ,QAAQ,EACR,QAAa,EACb,SAAkB,EAClB,cAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,SAAS,EACT,YAAoC,EACpC,kBAAkB,EAClB,SAAc,GACf,EAAE,gBAAgB,2CAuElB"}
@@ -1,10 +1,10 @@
1
- import { jsxs as r, Fragment as g, jsx as l } from "react/jsx-runtime";
2
- import N from "../icon/Icon.js";
3
- import I from "../icon-button/IconButton.js";
4
- import b from "../image-preview/ImagePreview.js";
5
- import __x from "@mattermost/compass-icons/components/close.js";const x=__x&&__x.default?__x.default:__x;
1
+ import { jsxs as r, Fragment as I, jsx as l } from "react/jsx-runtime";
2
+ import b from "../icon/Icon.js";
3
+ import x from "../icon-button/IconButton.js";
4
+ import j from "../image-preview/ImagePreview.js";
5
+ import __C from "@mattermost/compass-icons/components/close.js";const C=__C&&__C.default?__C.default:__C;
6
6
  import e from "./LinkPreview.module.scss.js";
7
- function z({
7
+ function F({
8
8
  siteName: p = "Mattermost.com",
9
9
  title: d = "Mattermost: Open-source, high-trust, developer-centric collaboration platform",
10
10
  description: v = "Mattermost is a secure, open source platform for communication, collaboration, and workflow orchestration across tools and teams.",
@@ -16,30 +16,32 @@ function z({
16
16
  onCopyImageLink: w,
17
17
  onDownloadImage: k,
18
18
  onDismiss: t,
19
- className: h = ""
19
+ dismissLabel: h = "Remove link preview",
20
+ imagePreviewLabels: u,
21
+ className: f = ""
20
22
  }) {
21
- const c = i != null && s === "none" ? "large" : s, m = c === "small" && i != null, o = c === "large" && i != null, u = [e["link-preview"], h].filter(Boolean).join(" "), f = [
23
+ const c = i != null && s === "none" ? "large" : s, m = c === "small" && i != null, o = c === "large" && i != null, g = [e["link-preview"], f].filter(Boolean).join(" "), N = [
22
24
  e["link-preview__card"],
23
25
  m ? e["link-preview__card--small-image"] : "",
24
26
  o && !a ? e["link-preview__card--large-image"] : "",
25
27
  o && a ? e["link-preview__card--collapsed-image"] : ""
26
28
  ].filter(Boolean).join(" ");
27
- return /* @__PURE__ */ r("div", { className: u, children: [
28
- t != null && /* @__PURE__ */ r(g, { children: [
29
+ return /* @__PURE__ */ r("div", { className: g, children: [
30
+ t != null && /* @__PURE__ */ r(I, { children: [
29
31
  /* @__PURE__ */ l("div", { className: e["link-preview__dismiss-bridge"], "aria-hidden": !0 }),
30
32
  /* @__PURE__ */ l(
31
- I,
33
+ x,
32
34
  {
33
35
  className: e["link-preview__dismiss"],
34
36
  size: "x-small",
35
37
  padding: "compact",
36
- "aria-label": "Remove link preview",
37
- icon: /* @__PURE__ */ l(N, { size: "12", glyph: /* @__PURE__ */ l(x, {}) }),
38
+ "aria-label": h,
39
+ icon: /* @__PURE__ */ l(b, { size: "12", glyph: /* @__PURE__ */ l(C, {}) }),
38
40
  onClick: t
39
41
  }
40
42
  )
41
43
  ] }),
42
- /* @__PURE__ */ r("div", { className: f, children: [
44
+ /* @__PURE__ */ r("div", { className: N, children: [
43
45
  /* @__PURE__ */ r("div", { className: e["link-preview__text"], children: [
44
46
  /* @__PURE__ */ l("p", { className: e["link-preview__site-name"], children: p }),
45
47
  /* @__PURE__ */ l("p", { className: e["link-preview__title"], children: d }),
@@ -54,8 +56,9 @@ function z({
54
56
  }
55
57
  ) }),
56
58
  o && /* @__PURE__ */ l(
57
- b,
59
+ j,
58
60
  {
61
+ ...u,
59
62
  className: e["link-preview__image-preview"],
60
63
  src: i,
61
64
  alt: n,
@@ -69,6 +72,6 @@ function z({
69
72
  ] });
70
73
  }
71
74
  export {
72
- z as default
75
+ F as default
73
76
  };
74
77
  //# sourceMappingURL=LinkPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkPreview.js","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport ImagePreview from '@/components/image-preview/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 className={styles['link-preview__dismiss-bridge']} aria-hidden />\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"],"names":["LinkPreview","siteName","title","description","imageSrc","imageAlt","imageSize","imageCollapsed","onToggleImageCollapse","onCopyImageLink","onDownloadImage","onDismiss","className","resolvedImageSize","hasSmallImage","hasLargeImage","rootClass","styles","cardClass","jsxs","Fragment","jsx","IconButton","Icon","CloseIcon","ImagePreview"],"mappings":";;;;;;AAwCA,SAAwBA,EAAY;AAAA,EAClC,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,gBAAAC,IAAiB;AAAA,EACjB,uBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAqB;AACnB,QAAMC,IACJT,KAAY,QAAQE,MAAc,SAAS,UAAUA,GACjDQ,IAAgBD,MAAsB,WAAWT,KAAY,MAC7DW,IAAgBF,MAAsB,WAAWT,KAAY,MAE7DY,IAAY,CAACC,EAAO,cAAc,GAAGL,CAAS,EACjD,OAAO,OAAO,EACd,KAAK,GAAG,GAELM,IAAY;AAAA,IAChBD,EAAO,oBAAoB;AAAA,IAC3BH,IAAgBG,EAAO,iCAAiC,IAAI;AAAA,IAC5DF,KAAiB,CAACR,IACdU,EAAO,iCAAiC,IACxC;AAAA,IACJF,KAAiBR,IACbU,EAAO,qCAAqC,IAC5C;AAAA,EAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAE,EAAC,OAAA,EAAI,WAAWH,GACb,UAAA;AAAA,IAAAL,KAAa,QACZ,gBAAAQ,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAWJ,EAAO,8BAA8B,GAAG,eAAW,IAAC;AAAA,MACpE,gBAAAI;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAWL,EAAO,uBAAuB;AAAA,UACzC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,cAAW;AAAA,UACX,wBAAOM,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAF,EAACG,KAAU,GAAI;AAAA,UAC5C,SAASb;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,GACF;AAAA,IAGF,gBAAAQ,EAAC,OAAA,EAAI,WAAWD,GACd,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWF,EAAO,oBAAoB,GACzC,UAAA;AAAA,QAAA,gBAAAI,EAAC,KAAA,EAAE,WAAWJ,EAAO,yBAAyB,GAAI,UAAAhB,GAAS;AAAA,0BAC1D,KAAA,EAAE,WAAWgB,EAAO,qBAAqB,GAAI,UAAAf,GAAM;AAAA,0BACnD,KAAA,EAAE,WAAWe,EAAO,2BAA2B,GAAI,UAAAd,EAAA,CAAY;AAAA,MAAA,GAClE;AAAA,MAECW,KACC,gBAAAO,EAAC,OAAA,EAAI,WAAWJ,EAAO,yBAAyB,GAC9C,UAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKjB;AAAA,UACL,KAAKC;AAAA,UACL,WAAWY,EAAO,6BAA6B;AAAA,QAAA;AAAA,MAAA,GAEnD;AAAA,MAGDF,KACC,gBAAAM;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,WAAWR,EAAO,6BAA6B;AAAA,UAC/C,KAAKb;AAAA,UACL,KAAKC;AAAA,UACL,WAAWE;AAAA,UACX,kBAAkBC;AAAA,UAClB,YAAYC;AAAA,UACZ,YAAYC;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"LinkPreview.js","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport type { ReactNode } from 'react';\nimport ImagePreview from '@/components/image-preview/ImagePreview';\nimport type { ImagePreviewProps } from '@/components/image-preview/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?: ReactNode;\n /** The main link title. Accepts translated nodes. */\n title?: ReactNode;\n /** Description text. Accepts translated nodes. */\n description?: ReactNode;\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 /** Accessible name for the dismiss button. Default: \"Remove link preview\". */\n dismissLabel?: string;\n /** Label overrides for the large image preview. */\n imagePreviewLabels?: Pick<\n ImagePreviewProps,\n | 'showLabel'\n | 'showAriaLabel'\n | 'collapseLabel'\n | 'copyLinkLabel'\n | 'downloadLabel'\n >;\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 dismissLabel = 'Remove link preview',\n imagePreviewLabels,\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 className={styles['link-preview__dismiss-bridge']} aria-hidden />\n <IconButton\n className={styles['link-preview__dismiss']}\n size=\"x-small\"\n padding=\"compact\"\n aria-label={dismissLabel}\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 {...imagePreviewLabels}\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"],"names":["LinkPreview","siteName","title","description","imageSrc","imageAlt","imageSize","imageCollapsed","onToggleImageCollapse","onCopyImageLink","onDownloadImage","onDismiss","dismissLabel","imagePreviewLabels","className","resolvedImageSize","hasSmallImage","hasLargeImage","rootClass","styles","cardClass","jsxs","Fragment","jsx","IconButton","Icon","CloseIcon","ImagePreview"],"mappings":";;;;;;AAqDA,SAAwBA,EAAY;AAAA,EAClC,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,gBAAAC,IAAiB;AAAA,EACjB,uBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,oBAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAqB;AACnB,QAAMC,IACJX,KAAY,QAAQE,MAAc,SAAS,UAAUA,GACjDU,IAAgBD,MAAsB,WAAWX,KAAY,MAC7Da,IAAgBF,MAAsB,WAAWX,KAAY,MAE7Dc,IAAY,CAACC,EAAO,cAAc,GAAGL,CAAS,EACjD,OAAO,OAAO,EACd,KAAK,GAAG,GAELM,IAAY;AAAA,IAChBD,EAAO,oBAAoB;AAAA,IAC3BH,IAAgBG,EAAO,iCAAiC,IAAI;AAAA,IAC5DF,KAAiB,CAACV,IACdY,EAAO,iCAAiC,IACxC;AAAA,IACJF,KAAiBV,IACbY,EAAO,qCAAqC,IAC5C;AAAA,EAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAE,EAAC,OAAA,EAAI,WAAWH,GACb,UAAA;AAAA,IAAAP,KAAa,QACZ,gBAAAU,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAWJ,EAAO,8BAA8B,GAAG,eAAW,IAAC;AAAA,MACpE,gBAAAI;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAWL,EAAO,uBAAuB;AAAA,UACzC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,cAAYP;AAAA,UACZ,wBAAOa,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAF,EAACG,KAAU,GAAI;AAAA,UAC5C,SAASf;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,GACF;AAAA,IAGF,gBAAAU,EAAC,OAAA,EAAI,WAAWD,GACd,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWF,EAAO,oBAAoB,GACzC,UAAA;AAAA,QAAA,gBAAAI,EAAC,KAAA,EAAE,WAAWJ,EAAO,yBAAyB,GAAI,UAAAlB,GAAS;AAAA,0BAC1D,KAAA,EAAE,WAAWkB,EAAO,qBAAqB,GAAI,UAAAjB,GAAM;AAAA,0BACnD,KAAA,EAAE,WAAWiB,EAAO,2BAA2B,GAAI,UAAAhB,EAAA,CAAY;AAAA,MAAA,GAClE;AAAA,MAECa,KACC,gBAAAO,EAAC,OAAA,EAAI,WAAWJ,EAAO,yBAAyB,GAC9C,UAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKnB;AAAA,UACL,KAAKC;AAAA,UACL,WAAWc,EAAO,6BAA6B;AAAA,QAAA;AAAA,MAAA,GAEnD;AAAA,MAGDF,KACC,gBAAAM;AAAA,QAACI;AAAA,QAAA;AAAA,UACE,GAAGd;AAAA,UACJ,WAAWM,EAAO,6BAA6B;AAAA,UAC/C,KAAKf;AAAA,UACL,KAAKC;AAAA,UACL,WAAWE;AAAA,UACX,kBAAkBC;AAAA,UAClB,YAAYC;AAAA,UACZ,YAAYC;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),a=require("../../utils/string.cjs"),t=require("./MentionBadge.module.scss.cjs");function u({className:s="",count:e,location:i="sidebar",size:o="small"}){const n=e>99?"99+":String(e),l=n.length,d=[t.default["mention-badge"],t.default[`mention-badge--size-${a.toKebab(o)}`],t.default[`mention-badge--digits-${l}`],i!=="sidebar"?t.default[`mention-badge--location-${a.toKebab(i)}`]:"",s].filter(Boolean).join(" ");return r.jsx("span",{className:d,"aria-label":`${e} mention${e===1?"":"s"}`,children:n})}exports.default=u;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("react/jsx-runtime"),o=require("../../utils/string.cjs"),t=require("./MentionBadge.module.scss.cjs"),b=e=>`${e} mention${e===1?"":"s"}`;function g({className:e="",count:n,location:i="sidebar",size:s="small",formatLabel:l=b}){const a=n>99?"99+":String(n),d=a.length,r=[t.default["mention-badge"],t.default[`mention-badge--size-${o.toKebab(s)}`],t.default[`mention-badge--digits-${d}`],i!=="sidebar"?t.default[`mention-badge--location-${o.toKebab(i)}`]:"",e].filter(Boolean).join(" ");return u.jsx("span",{className:r,"aria-label":l(n),children:a})}exports.default=g;
2
2
  //# sourceMappingURL=MentionBadge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MentionBadge.cjs","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"sourcesContent":["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"],"names":["MentionBadge","className","count","location","size","displayText","digitCount","rootClass","styles","toKebab","jsx"],"mappings":"iOA8BA,SAAwBA,EAAa,CACnC,UAAAC,EAAY,GACZ,MAAAC,EACA,SAAAC,EAAW,UACX,KAAAC,EAAO,OACT,EAAsB,CACpB,MAAMC,EAAcH,EAAQ,GAAK,MAAQ,OAAOA,CAAK,EAC/CI,EAAaD,EAAY,OAEzBE,EAAY,CAChBC,EAAAA,QAAO,eAAe,EACtBA,EAAAA,QAAO,uBAAuBC,EAAAA,QAAQL,CAAI,CAAC,EAAE,EAC7CI,EAAAA,QAAO,yBAAyBF,CAAU,EAAE,EAC5CH,IAAa,UACTK,EAAAA,QAAO,2BAA2BC,EAAAA,QAAQN,CAAQ,CAAC,EAAE,EACrD,GACJF,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACES,EAAAA,IAAC,OAAA,CACC,UAAWH,EACX,aAAY,GAAGL,CAAK,WAAWA,IAAU,EAAI,GAAK,GAAG,GAEpD,SAAAG,CAAA,CAAA,CAGP"}
1
+ {"version":3,"file":"MentionBadge.cjs","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"sourcesContent":["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 /** Accessible name. Default: `{count} mention(s)`. */\n formatLabel?: (count: number) => string;\n}\n\nconst defaultFormatMentionLabel = (count: number) =>\n `${count} mention${count === 1 ? '' : 's'}`;\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 formatLabel = defaultFormatMentionLabel,\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 className={rootClass} aria-label={formatLabel(count)}>\n {displayText}\n </span>\n );\n}\n"],"names":["defaultFormatMentionLabel","count","MentionBadge","className","location","size","formatLabel","displayText","digitCount","rootClass","styles","toKebab","jsx"],"mappings":"iOA0BMA,EAA6BC,GACjC,GAAGA,CAAK,WAAWA,IAAU,EAAI,GAAK,GAAG,GAQ3C,SAAwBC,EAAa,CACnC,UAAAC,EAAY,GACZ,MAAAF,EACA,SAAAG,EAAW,UACX,KAAAC,EAAO,QACP,YAAAC,EAAcN,CAChB,EAAsB,CACpB,MAAMO,EAAcN,EAAQ,GAAK,MAAQ,OAAOA,CAAK,EAC/CO,EAAaD,EAAY,OAEzBE,EAAY,CAChBC,EAAAA,QAAO,eAAe,EACtBA,EAAAA,QAAO,uBAAuBC,EAAAA,QAAQN,CAAI,CAAC,EAAE,EAC7CK,EAAAA,QAAO,yBAAyBF,CAAU,EAAE,EAC5CJ,IAAa,UACTM,EAAAA,QAAO,2BAA2BC,EAAAA,QAAQP,CAAQ,CAAC,EAAE,EACrD,GACJD,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACES,MAAC,QAAK,UAAWH,EAAW,aAAYH,EAAYL,CAAK,EACtD,SAAAM,CAAA,CACH,CAEJ"}
@@ -11,6 +11,8 @@ export interface MentionBadgeProps {
11
11
  location?: MentionBadgeLocation;
12
12
  /** Size variant. Figma: Size. Default: Small. */
13
13
  size?: MentionBadgeSize;
14
+ /** Accessible name. Default: `{count} mention(s)`. */
15
+ formatLabel?: (count: number) => string;
14
16
  }
15
17
  /**
16
18
  * Mention Badges show a numerical count of pending mentions. They appear next to channel
@@ -18,5 +20,5 @@ export interface MentionBadgeProps {
18
20
  * such as thread rows — small, high-contrast pills that pull the eye without dominating the
19
21
  * row.
20
22
  */
21
- export default function MentionBadge({ className, count, location, size, }: MentionBadgeProps): import("react/jsx-runtime").JSX.Element;
23
+ export default function MentionBadge({ className, count, location, size, formatLabel, }: MentionBadgeProps): import("react/jsx-runtime").JSX.Element;
22
24
  //# sourceMappingURL=MentionBadge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MentionBadge.d.ts","sourceRoot":"","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"names":[],"mappings":"AAGA,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,WAAW,GACX,aAAa,GACb,SAAS,CAAC;AAEd,gCAAgC;AAChC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,iDAAiD;IACjD,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,KAAK,EACL,QAAoB,EACpB,IAAc,GACf,EAAE,iBAAiB,2CAwBnB"}
1
+ {"version":3,"file":"MentionBadge.d.ts","sourceRoot":"","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"names":[],"mappings":"AAGA,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,WAAW,GACX,aAAa,GACb,SAAS,CAAC;AAEd,gCAAgC;AAChC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,iDAAiD;IACjD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,sDAAsD;IACtD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAKD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,KAAK,EACL,QAAoB,EACpB,IAAc,EACd,WAAuC,GACxC,EAAE,iBAAiB,2CAqBnB"}
@@ -1,29 +1,24 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { toKebab as o } from "../../utils/string.js";
3
- import i from "./MentionBadge.module.scss.js";
4
- function f({
5
- className: a = "",
6
- count: e,
7
- location: t = "sidebar",
8
- size: s = "small"
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ import { toKebab as a } from "../../utils/string.js";
3
+ import t from "./MentionBadge.module.scss.js";
4
+ const b = (e) => `${e} mention${e === 1 ? "" : "s"}`;
5
+ function $({
6
+ className: e = "",
7
+ count: n,
8
+ location: i = "sidebar",
9
+ size: s = "small",
10
+ formatLabel: r = b
9
11
  }) {
10
- const n = e > 99 ? "99+" : String(e), r = n.length, l = [
11
- i["mention-badge"],
12
- i[`mention-badge--size-${o(s)}`],
13
- i[`mention-badge--digits-${r}`],
14
- t !== "sidebar" ? i[`mention-badge--location-${o(t)}`] : "",
15
- a
12
+ const o = n > 99 ? "99+" : String(n), l = o.length, m = [
13
+ t["mention-badge"],
14
+ t[`mention-badge--size-${a(s)}`],
15
+ t[`mention-badge--digits-${l}`],
16
+ i !== "sidebar" ? t[`mention-badge--location-${a(i)}`] : "",
17
+ e
16
18
  ].filter(Boolean).join(" ");
17
- return /* @__PURE__ */ m(
18
- "span",
19
- {
20
- className: l,
21
- "aria-label": `${e} mention${e === 1 ? "" : "s"}`,
22
- children: n
23
- }
24
- );
19
+ return /* @__PURE__ */ d("span", { className: m, "aria-label": r(n), children: o });
25
20
  }
26
21
  export {
27
- f as default
22
+ $ as default
28
23
  };
29
24
  //# sourceMappingURL=MentionBadge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MentionBadge.js","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"sourcesContent":["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"],"names":["MentionBadge","className","count","location","size","displayText","digitCount","rootClass","styles","toKebab","jsx"],"mappings":";;;AA8BA,SAAwBA,EAAa;AAAA,EACnC,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AACT,GAAsB;AACpB,QAAMC,IAAcH,IAAQ,KAAK,QAAQ,OAAOA,CAAK,GAC/CI,IAAaD,EAAY,QAEzBE,IAAY;AAAA,IAChBC,EAAO,eAAe;AAAA,IACtBA,EAAO,uBAAuBC,EAAQL,CAAI,CAAC,EAAE;AAAA,IAC7CI,EAAO,yBAAyBF,CAAU,EAAE;AAAA,IAC5CH,MAAa,YACTK,EAAO,2BAA2BC,EAAQN,CAAQ,CAAC,EAAE,IACrD;AAAA,IACJF;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH;AAAA,MACX,cAAY,GAAGL,CAAK,WAAWA,MAAU,IAAI,KAAK,GAAG;AAAA,MAEpD,UAAAG;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"MentionBadge.js","sources":["../../../src/components/mention-badge/MentionBadge.tsx"],"sourcesContent":["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 /** Accessible name. Default: `{count} mention(s)`. */\n formatLabel?: (count: number) => string;\n}\n\nconst defaultFormatMentionLabel = (count: number) =>\n `${count} mention${count === 1 ? '' : 's'}`;\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 formatLabel = defaultFormatMentionLabel,\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 className={rootClass} aria-label={formatLabel(count)}>\n {displayText}\n </span>\n );\n}\n"],"names":["defaultFormatMentionLabel","count","MentionBadge","className","location","size","formatLabel","displayText","digitCount","rootClass","styles","toKebab","jsx"],"mappings":";;;AA0BA,MAAMA,IAA4B,CAACC,MACjC,GAAGA,CAAK,WAAWA,MAAU,IAAI,KAAK,GAAG;AAQ3C,SAAwBC,EAAa;AAAA,EACnC,WAAAC,IAAY;AAAA,EACZ,OAAAF;AAAA,EACA,UAAAG,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAcN;AAChB,GAAsB;AACpB,QAAMO,IAAcN,IAAQ,KAAK,QAAQ,OAAOA,CAAK,GAC/CO,IAAaD,EAAY,QAEzBE,IAAY;AAAA,IAChBC,EAAO,eAAe;AAAA,IACtBA,EAAO,uBAAuBC,EAAQN,CAAI,CAAC,EAAE;AAAA,IAC7CK,EAAO,yBAAyBF,CAAU,EAAE;AAAA,IAC5CJ,MAAa,YACTM,EAAO,2BAA2BC,EAAQP,CAAQ,CAAC,EAAE,IACrD;AAAA,IACJD;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAS,EAAC,UAAK,WAAWH,GAAW,cAAYH,EAAYL,CAAK,GACtD,UAAAM,EAAA,CACH;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuGroupHeading.cjs","sources":["../../../src/components/menu-group-heading/MenuGroupHeading.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport styles from './MenuGroupHeading.module.scss';\n\nexport interface MenuGroupHeadingProps extends HTMLAttributes<HTMLDivElement> {\n /** The section label text. Rendered in all-caps. */\n label: string;\n}\n\n/**\n * Menu Group Heading is an optional all-caps label that titles a grouped\n * section of Menu Items inside a dropdown or context menu.\n */\nexport default function MenuGroupHeading({\n label,\n className = '',\n ...rest\n}: MenuGroupHeadingProps) {\n return (\n <div\n className={[styles['menu-group-heading'], className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <span className={styles['menu-group-heading__label']}>{label}</span>\n </div>\n );\n}\n"],"names":["MenuGroupHeading","label","className","rest","jsx","styles"],"mappings":"iMAYA,SAAwBA,EAAiB,CACvC,MAAAC,EACA,UAAAC,EAAY,GACZ,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,IAAC,MAAA,CACC,UAAW,CAACC,UAAO,oBAAoB,EAAGH,CAAS,EAChD,OAAO,OAAO,EACd,KAAK,GAAG,EACV,GAAGC,EAEJ,eAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,2BAA2B,EAAI,SAAAJ,CAAA,CAAM,CAAA,CAAA,CAGnE"}
1
+ {"version":3,"file":"MenuGroupHeading.cjs","sources":["../../../src/components/menu-group-heading/MenuGroupHeading.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './MenuGroupHeading.module.scss';\n\nexport interface MenuGroupHeadingProps extends HTMLAttributes<HTMLDivElement> {\n /** The section label text. Rendered in all-caps. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n label: ReactNode;\n}\n\n/**\n * Menu Group Heading is an optional all-caps label that titles a grouped\n * section of Menu Items inside a dropdown or context menu.\n */\nexport default function MenuGroupHeading({\n label,\n className = '',\n ...rest\n}: MenuGroupHeadingProps) {\n return (\n <div\n className={[styles['menu-group-heading'], className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <span className={styles['menu-group-heading__label']}>{label}</span>\n </div>\n );\n}\n"],"names":["MenuGroupHeading","label","className","rest","jsx","styles"],"mappings":"iMAYA,SAAwBA,EAAiB,CACvC,MAAAC,EACA,UAAAC,EAAY,GACZ,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,IAAC,MAAA,CACC,UAAW,CAACC,UAAO,oBAAoB,EAAGH,CAAS,EAChD,OAAO,OAAO,EACd,KAAK,GAAG,EACV,GAAGC,EAEJ,eAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,2BAA2B,EAAI,SAAAJ,CAAA,CAAM,CAAA,CAAA,CAGnE"}
@@ -1,7 +1,7 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
2
  export interface MenuGroupHeadingProps extends HTMLAttributes<HTMLDivElement> {
3
- /** The section label text. Rendered in all-caps. */
4
- label: string;
3
+ /** The section label text. Rendered in all-caps. Accepts translated nodes (e.g. `<FormattedMessage/>`). */
4
+ label: ReactNode;
5
5
  }
6
6
  /**
7
7
  * Menu Group Heading is an optional all-caps label that titles a grouped
@@ -1 +1 @@
1
- {"version":3,"file":"MenuGroupHeading.d.ts","sourceRoot":"","sources":["../../../src/components/menu-group-heading/MenuGroupHeading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC3E,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,SAAc,EACd,GAAG,IAAI,EACR,EAAE,qBAAqB,2CAWvB"}
1
+ {"version":3,"file":"MenuGroupHeading.d.ts","sourceRoot":"","sources":["../../../src/components/menu-group-heading/MenuGroupHeading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC3E,2GAA2G;IAC3G,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,SAAc,EACd,GAAG,IAAI,EACR,EAAE,qBAAqB,2CAWvB"}