@mattermost/compass-ui 0.1.0-alpha.4 → 0.1.0-alpha.5

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 (226) hide show
  1. package/dist/compass-ui-standalone.css +10 -0
  2. package/dist/compass-ui.css +2 -0
  3. package/dist/components/action-button/ActionButton.cjs +1 -1
  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 +22 -12
  8. package/dist/components/action-button/ActionButton.js.map +1 -1
  9. package/dist/components/action-button/ActionButton.module.css +1 -1
  10. package/dist/components/action-button/ActionButton.module.scss.cjs +1 -1
  11. package/dist/components/action-button/ActionButton.module.scss.js +5 -5
  12. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  13. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  14. package/dist/components/attachment-card/AttachmentCard.d.ts +3 -1
  15. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  16. package/dist/components/attachment-card/AttachmentCard.js +92 -82
  17. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  18. package/dist/components/attachment-card/AttachmentCard.module.css +1 -1
  19. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
  20. package/dist/components/attachment-card/AttachmentCard.module.scss.js +19 -18
  21. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
  22. package/dist/components/button/Button.module.css +1 -1
  23. package/dist/components/button/Button.module.scss.cjs +1 -1
  24. package/dist/components/button/Button.module.scss.js +15 -15
  25. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  26. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  27. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +4 -1
  28. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  29. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +112 -92
  30. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  31. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -1
  32. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
  33. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +22 -20
  34. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
  35. package/dist/components/checkbox/Checkbox.cjs +1 -1
  36. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  37. package/dist/components/checkbox/Checkbox.d.ts +3 -3
  38. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  39. package/dist/components/checkbox/Checkbox.js +21 -20
  40. package/dist/components/checkbox/Checkbox.js.map +1 -1
  41. package/dist/components/checkbox/Checkbox.module.css +1 -1
  42. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  43. package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
  44. package/dist/components/chip/Chip.cjs +1 -1
  45. package/dist/components/chip/Chip.cjs.map +1 -1
  46. package/dist/components/chip/Chip.d.ts +3 -5
  47. package/dist/components/chip/Chip.d.ts.map +1 -1
  48. package/dist/components/chip/Chip.js +90 -48
  49. package/dist/components/chip/Chip.js.map +1 -1
  50. package/dist/components/chip/Chip.module.css +1 -1
  51. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  52. package/dist/components/chip/Chip.module.scss.js +9 -9
  53. package/dist/components/chip/ChipGroup.cjs +2 -0
  54. package/dist/components/chip/ChipGroup.cjs.map +1 -0
  55. package/dist/components/chip/ChipGroup.d.ts +16 -0
  56. package/dist/components/chip/ChipGroup.d.ts.map +1 -0
  57. package/dist/components/chip/ChipGroup.js +112 -0
  58. package/dist/components/chip/ChipGroup.js.map +1 -0
  59. package/dist/components/chip/ChipGroup.module.css +1 -0
  60. package/dist/components/chip/ChipGroup.module.scss.cjs +2 -0
  61. package/dist/components/chip/ChipGroup.module.scss.cjs.map +1 -0
  62. package/dist/components/chip/ChipGroup.module.scss.js +7 -0
  63. package/dist/components/chip/ChipGroup.module.scss.js.map +1 -0
  64. package/dist/components/chip/index.cjs +1 -1
  65. package/dist/components/chip/index.d.ts +2 -0
  66. package/dist/components/chip/index.d.ts.map +1 -1
  67. package/dist/components/chip/index.js +4 -2
  68. package/dist/components/chip/index.js.map +1 -1
  69. package/dist/components/combobox/Combobox.cjs +1 -1
  70. package/dist/components/combobox/Combobox.cjs.map +1 -1
  71. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  72. package/dist/components/combobox/Combobox.js +115 -109
  73. package/dist/components/combobox/Combobox.js.map +1 -1
  74. package/dist/components/combobox/Combobox.module.css +1 -1
  75. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  76. package/dist/components/combobox/Combobox.module.scss.js +27 -29
  77. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  78. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.js +154 -154
  80. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  81. package/dist/components/date-range-picker/DateRangePicker.module.css +1 -1
  82. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  83. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +28 -45
  84. package/dist/components/dropdown/Dropdown.cjs +1 -1
  85. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  86. package/dist/components/dropdown/Dropdown.js +1 -1
  87. package/dist/components/dropdown/Dropdown.js.map +1 -1
  88. package/dist/components/dropdown/Dropdown.module.css +1 -1
  89. package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
  90. package/dist/components/dropdown/Dropdown.module.scss.js +15 -16
  91. package/dist/components/global-banner/GlobalBanner.module.css +1 -1
  92. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
  93. package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
  94. package/dist/components/icon-button/IconButton.cjs +1 -1
  95. package/dist/components/icon-button/IconButton.cjs.map +1 -1
  96. package/dist/components/icon-button/IconButton.d.ts +1 -1
  97. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  98. package/dist/components/icon-button/IconButton.js +14 -14
  99. package/dist/components/icon-button/IconButton.js.map +1 -1
  100. package/dist/components/icon-button/IconButton.module.css +1 -1
  101. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  102. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  103. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  104. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  105. package/dist/components/image-preview/ImagePreview.d.ts +2 -1
  106. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  107. package/dist/components/image-preview/ImagePreview.js +70 -52
  108. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  109. package/dist/components/image-preview/ImagePreview.module.css +1 -1
  110. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  111. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  112. package/dist/components/menu-item/MenuItem.cjs +1 -1
  113. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  114. package/dist/components/menu-item/MenuItem.js +11 -11
  115. package/dist/components/menu-item/MenuItem.js.map +1 -1
  116. package/dist/components/menu-item/MenuItem.module.css +1 -1
  117. package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
  118. package/dist/components/menu-item/MenuItem.module.scss.js +16 -16
  119. package/dist/components/message/Message.module.css +1 -1
  120. package/dist/components/message/Message.module.scss.cjs +1 -1
  121. package/dist/components/message/Message.module.scss.js +20 -20
  122. package/dist/components/message-reactions/MessageReactions.module.css +1 -1
  123. package/dist/components/message-reactions/MessageReactions.module.scss.cjs +1 -1
  124. package/dist/components/message-reactions/MessageReactions.module.scss.js +12 -12
  125. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -1
  126. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  127. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +5 -5
  128. package/dist/components/pagination-dots/PaginationDots.module.css +1 -1
  129. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  130. package/dist/components/pagination-dots/PaginationDots.module.scss.js +8 -8
  131. package/dist/components/radio/Radio.cjs +1 -1
  132. package/dist/components/radio/Radio.cjs.map +1 -1
  133. package/dist/components/radio/Radio.d.ts +3 -3
  134. package/dist/components/radio/Radio.d.ts.map +1 -1
  135. package/dist/components/radio/Radio.js +11 -11
  136. package/dist/components/radio/Radio.js.map +1 -1
  137. package/dist/components/radio/Radio.module.css +1 -1
  138. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  139. package/dist/components/radio/Radio.module.scss.js +11 -11
  140. package/dist/components/search-input/SearchInput.cjs +1 -1
  141. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  142. package/dist/components/search-input/SearchInput.d.ts +2 -0
  143. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  144. package/dist/components/search-input/SearchInput.js +78 -64
  145. package/dist/components/search-input/SearchInput.js.map +1 -1
  146. package/dist/components/search-input/SearchInput.module.css +1 -1
  147. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  148. package/dist/components/search-input/SearchInput.module.scss.js +16 -23
  149. package/dist/components/search-input/SearchInput.module.scss.js.map +1 -1
  150. package/dist/components/select/Select.cjs +1 -1
  151. package/dist/components/select/Select.cjs.map +1 -1
  152. package/dist/components/select/Select.d.ts.map +1 -1
  153. package/dist/components/select/Select.js +64 -64
  154. package/dist/components/select/Select.js.map +1 -1
  155. package/dist/components/select/Select.module.css +1 -1
  156. package/dist/components/select/Select.module.scss.cjs +1 -1
  157. package/dist/components/select/Select.module.scss.js +24 -26
  158. package/dist/components/switch/Switch.cjs +1 -1
  159. package/dist/components/switch/Switch.cjs.map +1 -1
  160. package/dist/components/switch/Switch.d.ts.map +1 -1
  161. package/dist/components/switch/Switch.js +2 -2
  162. package/dist/components/switch/Switch.js.map +1 -1
  163. package/dist/components/switch/Switch.module.css +1 -1
  164. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  165. package/dist/components/switch/Switch.module.scss.js +15 -15
  166. package/dist/components/tabs/Tabs.cjs +1 -1
  167. package/dist/components/tabs/Tabs.cjs.map +1 -1
  168. package/dist/components/tabs/Tabs.d.ts +4 -0
  169. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  170. package/dist/components/tabs/Tabs.js +47 -31
  171. package/dist/components/tabs/Tabs.js.map +1 -1
  172. package/dist/components/tabs/Tabs.module.css +1 -1
  173. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  174. package/dist/components/tabs/Tabs.module.scss.js +8 -7
  175. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  176. package/dist/components/tag/Tag.module.css +1 -1
  177. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  178. package/dist/components/tag/Tag.module.scss.js +15 -15
  179. package/dist/components/text-area/TextArea.cjs +1 -1
  180. package/dist/components/text-area/TextArea.cjs.map +1 -1
  181. package/dist/components/text-area/TextArea.d.ts.map +1 -1
  182. package/dist/components/text-area/TextArea.js +57 -56
  183. package/dist/components/text-area/TextArea.js.map +1 -1
  184. package/dist/components/text-area/TextArea.module.css +1 -1
  185. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  186. package/dist/components/text-area/TextArea.module.scss.js +12 -17
  187. package/dist/components/text-input/TextInput.cjs +1 -1
  188. package/dist/components/text-input/TextInput.cjs.map +1 -1
  189. package/dist/components/text-input/TextInput.d.ts.map +1 -1
  190. package/dist/components/text-input/TextInput.js +59 -58
  191. package/dist/components/text-input/TextInput.js.map +1 -1
  192. package/dist/components/text-input/TextInput.module.css +1 -1
  193. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  194. package/dist/components/text-input/TextInput.module.scss.js +16 -24
  195. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  196. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  197. package/dist/components/thread-footer/ThreadFooter.d.ts +7 -8
  198. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  199. package/dist/components/thread-footer/ThreadFooter.js +59 -62
  200. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  201. package/dist/components/thread-footer/ThreadFooter.module.css +1 -1
  202. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  203. package/dist/components/thread-footer/ThreadFooter.module.scss.js +17 -17
  204. package/dist/components/thread-footer/index.d.ts +7 -1
  205. package/dist/components/thread-footer/index.d.ts.map +1 -1
  206. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  207. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  208. package/dist/components/thread-list-item/ThreadListItem.d.ts +1 -1
  209. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  210. package/dist/components/thread-list-item/ThreadListItem.js +102 -87
  211. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  212. package/dist/components/thread-list-item/ThreadListItem.module.css +1 -1
  213. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  214. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -23
  215. package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -1
  216. package/dist/components/toast/Toast.module.css +1 -1
  217. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  218. package/dist/components/toast/Toast.module.scss.js +6 -6
  219. package/dist/components/tour-point/TourPoint.module.css +1 -1
  220. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  221. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  222. package/dist/index.cjs +1 -1
  223. package/dist/index.css +31 -29
  224. package/dist/index.js +156 -154
  225. package/dist/index.js.map +1 -1
  226. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadFooter.js","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport Button from '@/components/button/Button';\nimport Icon from '@/components/icon/Icon';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport styles from './ThreadFooter.module.scss';\n\nexport type ThreadFooterBadge = 'none' | 'unread' | 'mention';\n\nexport interface AvatarData {\n src: string;\n alt: string;\n}\n\nexport interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Reply count. Default: 3. */\n replyCount?: number;\n /** Participant avatars (first 3 shown, overflow as +N). */\n avatars?: AvatarData[];\n /** Badge variant. Default: None. */\n badge?: ThreadFooterBadge;\n /** Whether the current user is following the thread. Default: false. */\n following?: boolean;\n /** Last reply timestamp label. Shown when following. */\n lastReplyTime?: string;\n /** Called when Reply is clicked. */\n onReply?: () => void;\n /** Called when Follow/Following is clicked. */\n onFollowToggle?: () => void;\n /** Hover / active state for button highlight. Default: false. */\n hovered?: boolean;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The Thread Footer is the reply summary bar at the bottom of a message. It shows\n * participants, reply count, follow state, and last-reply time — the information someone\n * needs to decide whether to dive in.\n */\nexport default function ThreadFooter({\n replyCount = 3,\n avatars = [],\n badge = 'none',\n following = false,\n lastReplyTime,\n onReply,\n onFollowToggle,\n hovered = false,\n className = '',\n ...rest\n}: ThreadFooterProps) {\n const rootClass = [styles['thread-footer'], className]\n .filter(Boolean)\n .join(' ');\n\n const MAX_VISIBLE = 3;\n const visibleAvatars = avatars.slice(0, MAX_VISIBLE);\n const overflowCount =\n avatars.length > MAX_VISIBLE ? avatars.length - MAX_VISIBLE : 0;\n\n return (\n <div className={rootClass} {...rest}>\n <div className={styles['thread-footer__inner']}>\n {/* Badge + Avatars */}\n <div className={styles['thread-footer__avatars-group']}>\n {badge === 'unread' && (\n <span\n className={styles['thread-footer__unread-dot']}\n aria-label=\"Unread replies\"\n />\n )}\n {badge === 'mention' && (\n <span className={styles['thread-footer__mention-badge']}>@</span>\n )}\n\n {/* Avatar stack */}\n {visibleAvatars.length > 0 && (\n <div className={styles['thread-footer__avatars']}>\n {visibleAvatars.map((av, i) => (\n <UserAvatar\n key={i}\n src={av.src}\n alt={av.alt}\n size=\"20\"\n className={styles['thread-footer__avatar']}\n />\n ))}\n {overflowCount > 0 && (\n <span className={styles['thread-footer__avatar-overflow']}>\n +{overflowCount}\n </span>\n )}\n </div>\n )}\n\n {/* Placeholder avatars when none provided */}\n {visibleAvatars.length === 0 && (\n <div className={styles['thread-footer__avatars']}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className={styles['thread-footer__avatar-placeholder']}\n />\n ))}\n <span className={styles['thread-footer__avatar-overflow']}>\n +2\n </span>\n </div>\n )}\n </div>\n\n {/* Buttons */}\n <div className={styles['thread-footer__buttons']}>\n {/* Reply button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__reply-btn'],\n hovered ? styles['thread-footer__reply-btn--hovered'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onReply}\n aria-label={`${replyCount} repl${replyCount === 1 ? 'y' : 'ies'}`}\n leadingIcon={<Icon size=\"12\" glyph={<ReplyOutlineIcon />} />}\n >\n <span className={styles['thread-footer__btn-label']}>\n {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </span>\n </Button>\n\n <div className={styles['thread-footer__divider']} aria-hidden />\n\n {/* Follow / Following button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__follow-btn'],\n following ? styles['thread-footer__follow-btn--following'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onFollowToggle}\n aria-pressed={following}\n aria-label={following ? 'Unfollow thread' : 'Follow thread'}\n >\n {following ? 'Following' : 'Follow'}\n </Button>\n\n {/* Last reply time — visible when following */}\n {following && lastReplyTime && (\n <>\n <div className={styles['thread-footer__divider']} aria-hidden />\n <span className={styles['thread-footer__last-reply']}>\n {lastReplyTime}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["ThreadFooter","replyCount","avatars","badge","following","lastReplyTime","onReply","onFollowToggle","hovered","className","rest","rootClass","styles","MAX_VISIBLE","visibleAvatars","overflowCount","jsx","jsxs","av","i","UserAvatar","Button","Icon","ReplyOutlineIcon","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadFooter.js","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport Button from '@/components/button/Button';\nimport Icon from '@/components/icon/Icon';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport MentionBadge from '@/components/mention-badge/MentionBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '@/components/user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadFooter.module.scss';\n\nexport type ThreadFooterBadge = 'none' | 'unread' | 'mention';\n\nexport interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Reply count. Default: 3. */\n replyCount?: number;\n /** Participant avatars. Rendered with User Avatar Group (first 3 shown, overflow as +N). */\n avatars?: UserAvatarGroupItem[];\n /** Badge variant. Default: None. */\n badge?: ThreadFooterBadge;\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Whether the current user is following the thread. Default: false. */\n following?: boolean;\n /** Last reply timestamp label. Shown on row hover when following. */\n lastReplyTime?: string;\n /** Called when Reply is clicked. */\n onReply?: () => void;\n /** Called when Follow/Following is clicked. */\n onFollowToggle?: () => void;\n /** Hover / active state for button highlight. Default: false. */\n hovered?: boolean;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The Thread Footer is the reply summary bar at the bottom of a message. It shows\n * participants, reply count, follow state, and last-reply time — the information someone\n * needs to decide whether to dive in.\n */\nexport default function ThreadFooter({\n replyCount = 3,\n avatars = [],\n badge = 'none',\n mentionCount = 1,\n following = false,\n lastReplyTime,\n onReply,\n onFollowToggle,\n hovered = false,\n className = '',\n ...rest\n}: ThreadFooterProps) {\n const rootClass = [\n styles['thread-footer'],\n following ? styles['thread-footer--following'] : '',\n hovered ? styles['thread-footer--hovered'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const badgeStatusHint =\n badge === 'mention'\n ? `${mentionCount} mention${mentionCount === 1 ? '' : 's'}`\n : badge === 'unread'\n ? 'Unread replies'\n : undefined;\n\n return (\n <div className={rootClass} {...rest}>\n <div className={styles['thread-footer__inner']}>\n <div className={styles['thread-footer__avatars-group']}>\n {badgeStatusHint && (\n <span className={styles['thread-footer__status-hint']}>\n {badgeStatusHint}\n </span>\n )}\n {badge === 'unread' && (\n <span\n className={styles['thread-footer__unread-dot']}\n aria-hidden\n />\n )}\n {badge === 'mention' && (\n <span\n className={styles['thread-footer__mention-badge']}\n aria-hidden\n >\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n\n {avatars.length > 0 && (\n <UserAvatarGroup avatars={avatars} max={3} size=\"20\" />\n )}\n </div>\n\n {/* Buttons */}\n <div className={styles['thread-footer__buttons']}>\n {/* Reply button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__reply-btn'],\n hovered ? styles['thread-footer__reply-btn--hovered'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onReply}\n aria-label={`${replyCount} repl${replyCount === 1 ? 'y' : 'ies'}`}\n leadingIcon={<Icon size=\"12\" glyph={<ReplyOutlineIcon />} />}\n >\n <span className={styles['thread-footer__btn-label']}>\n {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </span>\n </Button>\n\n <div className={styles['thread-footer__divider']} aria-hidden />\n\n {/* Follow / Following button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__follow-btn'],\n following ? styles['thread-footer__follow-btn--following'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onFollowToggle}\n aria-pressed={following}\n aria-label={following ? 'Unfollow thread' : 'Follow thread'}\n >\n {following ? 'Following' : 'Follow'}\n </Button>\n\n {/* Last reply time — revealed on row hover when following */}\n {following && lastReplyTime && (\n <div className={styles['thread-footer__last-reply-group']}>\n <div className={styles['thread-footer__divider']} aria-hidden />\n <span className={styles['thread-footer__last-reply']}>\n {lastReplyTime}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["ThreadFooter","replyCount","avatars","badge","mentionCount","following","lastReplyTime","onReply","onFollowToggle","hovered","className","rest","rootClass","styles","badgeStatusHint","jsx","jsxs","MentionBadge","UserAvatarGroup","Button","Icon","ReplyOutlineIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- ._thread-footer_v5ros_2{display:flex;flex-direction:column;align-items:flex-start;padding:var(--spacing-s) var(--spacing-l)}._thread-footer__inner_v5ros_8{display:inline-flex;align-items:center;padding:0 var(--spacing-s);border-radius:var(--radius-s)}._thread-footer__avatars-group_v5ros_14{display:inline-flex;align-items:center;gap:var(--spacing-xxxs);padding-right:var(--spacing-xxxs)}._thread-footer__unread-dot_v5ros_20{display:block;width:8px;height:8px;border-radius:var(--radius-full);background-color:var(--link-color);flex-shrink:0}._thread-footer__mention-badge_v5ros_28{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 var(--spacing-xxxs);border-radius:var(--radius-s);background-color:var(--mention-bg);color:var(--mention-color);font-family:var(--font-family-body);font-size:var(--font-size-25);font-weight:var(--font-weight-semibold);line-height:1}._thread-footer__avatars_v5ros_14{display:inline-flex;align-items:center;padding-right:3px}._thread-footer__avatar_v5ros_14{border:1px solid var(--center-channel-bg);border-radius:var(--radius-full);margin-right:-3px;flex-shrink:0}._thread-footer__avatar-placeholder_v5ros_54{display:block;width:24px;height:24px;border-radius:var(--radius-full);border:1px solid var(--center-channel-bg);background-color:rgba(var(--center-channel-color-rgb),.16);margin-right:-3px;flex-shrink:0}._thread-footer__avatar-overflow_v5ros_64{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--radius-full);border:1px solid var(--center-channel-bg);background-color:var(--center-channel-bg);color:rgba(var(--center-channel-color-rgb),.56);font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);margin-right:-3px;flex-shrink:0}._thread-footer__buttons_v5ros_80{display:inline-flex;align-items:center;gap:var(--spacing-xxxxs)}._thread-footer__reply-btn_v5ros_85{display:inline-flex;align-items:center;gap:var(--spacing-xxxs);padding:4.5px var(--spacing-s);border:none;border-radius:var(--radius-s);background-color:transparent;color:rgba(var(--center-channel-color-rgb),.75);cursor:pointer;transition:background-color var(--duration-quick) var(--ease-transition)}._thread-footer__reply-btn_v5ros_85:hover,._thread-footer__reply-btn--hovered_v5ros_97{background-color:rgba(var(--center-channel-color-rgb),.08)}._thread-footer__reply-btn_v5ros_85:focus-visible{outline:2px solid var(--link-color);outline-offset:1px}._thread-footer__btn-icon_v5ros_104{display:inline-flex;align-items:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.75)}._thread-footer__btn-label_v5ros_110{font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);line-height:15px;white-space:nowrap}._thread-footer__divider_v5ros_117{width:1px;height:16px;background-color:rgba(var(--center-channel-color-rgb),.16);flex-shrink:0}._thread-footer__follow-btn_v5ros_123{display:inline-flex;align-items:center;padding:4.5px var(--spacing-s);border:none;border-radius:var(--radius-s);background-color:transparent;color:rgba(var(--center-channel-color-rgb),.75);font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);line-height:15px;white-space:nowrap;cursor:pointer;transition:background-color var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition)}._thread-footer__follow-btn_v5ros_123:hover{background-color:rgba(var(--center-channel-color-rgb),.08)}._thread-footer__follow-btn_v5ros_123:focus-visible{outline:2px solid var(--link-color);outline-offset:1px}._thread-footer__follow-btn--following_v5ros_146{color:var(--link-color);background-color:rgba(var(--link-color-rgb),.08)}._thread-footer__follow-btn--following_v5ros_146:hover{background-color:rgba(var(--link-color-rgb),.12)}._thread-footer__last-reply_v5ros_153{padding:4.5px var(--spacing-s);color:rgba(var(--center-channel-color-rgb),.64);font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-regular);line-height:15px;white-space:nowrap}
1
+ ._thread-footer_953ir_2{--thread-footer-focus-ring-color: var(--focus-ring-color);display:flex;flex-direction:column;align-items:flex-start;padding:var(--spacing-s) var(--spacing-l)}._thread-footer__inner_953ir_9{display:inline-flex;align-items:center;padding:0 var(--spacing-s);border-radius:var(--radius-s)}._thread-footer__avatars-group_953ir_15{display:inline-flex;align-items:center;gap:var(--spacing-xxxs);padding-right:var(--spacing-xxxs)}._thread-footer__status-hint_953ir_21{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}._thread-footer__unread-dot_953ir_32{display:block;width:8px;height:8px;border-radius:var(--radius-full);background-color:var(--link-color);flex-shrink:0}._thread-footer__mention-badge_953ir_40{display:inline-flex;flex-shrink:0}._thread-footer__buttons_953ir_44{display:inline-flex;align-items:center;gap:0}._thread-footer__reply-btn_953ir_49,._thread-footer__follow-btn_953ir_49{--focus-ring-color: var(--thread-footer-focus-ring-color)}._thread-footer_953ir_2 ._thread-footer__reply-btn_953ir_49[class*=button--emphasis-quaternary],._thread-footer_953ir_2 ._thread-footer__follow-btn_953ir_49:not(._thread-footer__follow-btn--following_953ir_52)[class*=button--emphasis-quaternary]{color:rgba(var(--center-channel-color-rgb),.75)}._thread-footer_953ir_2 ._thread-footer__reply-btn_953ir_49[class*=button--emphasis-quaternary]:hover:not(:disabled),._thread-footer_953ir_2 ._thread-footer__follow-btn_953ir_49:not(._thread-footer__follow-btn--following_953ir_52)[class*=button--emphasis-quaternary]:hover:not(:disabled){background-color:rgba(var(--center-channel-color-rgb),.08)}._thread-footer_953ir_2 ._thread-footer__reply-btn--hovered_953ir_58[class*=button--emphasis-quaternary]{background-color:rgba(var(--center-channel-color-rgb),.08)}._thread-footer_953ir_2 ._thread-footer__follow-btn--following_953ir_52[class*=button--emphasis-quaternary]{color:var(--link-color);background-color:rgba(var(--link-color-rgb),.08)}._thread-footer_953ir_2 ._thread-footer__follow-btn--following_953ir_52[class*=button--emphasis-quaternary]:hover:not(:disabled){background-color:rgba(var(--link-color-rgb),.12)}._thread-footer__btn-label_953ir_68{font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);line-height:15px;white-space:nowrap}._thread-footer__divider_953ir_75{box-sizing:border-box;width:1px;min-width:1px;max-width:1px;height:16px;padding:0;margin:0;border:0;background-color:rgba(var(--center-channel-color-rgb),.16);flex-shrink:0;transition:opacity var(--duration-quick) var(--ease-transition)}._thread-footer__buttons_953ir_44:has(._thread-footer__follow-btn--following_953ir_52)>._thread-footer__divider_953ir_75:first-of-type,._thread-footer__buttons_953ir_44:has(._thread-footer__follow-btn--following_953ir_52)>._thread-footer__last-reply-group_953ir_88>._thread-footer__divider_953ir_75{opacity:0}._thread-footer__buttons_953ir_44:not(:has(._thread-footer__follow-btn--following_953ir_52)):has(._thread-footer__reply-btn_953ir_49:hover,._thread-footer__reply-btn--hovered_953ir_58,._thread-footer__reply-btn_953ir_49:focus-visible,._thread-footer__follow-btn_953ir_49:hover,._thread-footer__follow-btn_953ir_49:focus-visible)>._thread-footer__divider_953ir_75:first-of-type{opacity:0}._thread-footer__last-reply-group_953ir_88{display:inline-flex;align-items:center;gap:0;overflow:hidden;max-width:0;opacity:0;transition:max-width var(--duration-quick) var(--ease-transition),opacity var(--duration-quick) var(--ease-transition)}._thread-footer--following_953ir_107:hover ._thread-footer__last-reply-group_953ir_88,._thread-footer--following_953ir_107:focus-within ._thread-footer__last-reply-group_953ir_88,._thread-footer--following_953ir_107._thread-footer--hovered_953ir_107 ._thread-footer__last-reply-group_953ir_88{max-width:10rem;opacity:1}._thread-footer__last-reply_953ir_88{padding:4.5px var(--spacing-s);color:rgba(var(--center-channel-color-rgb),.64);font-family:var(--font-family-body);font-size:var(--font-size-75);font-weight:var(--font-weight-regular);line-height:15px;white-space:nowrap}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ThreadFooter.module.css');const r={"thread-footer":"_thread-footer_v5ros_2","thread-footer__inner":"_thread-footer__inner_v5ros_8","thread-footer__avatars-group":"_thread-footer__avatars-group_v5ros_14","thread-footer__unread-dot":"_thread-footer__unread-dot_v5ros_20","thread-footer__mention-badge":"_thread-footer__mention-badge_v5ros_28","thread-footer__avatars":"_thread-footer__avatars_v5ros_14","thread-footer__avatar":"_thread-footer__avatar_v5ros_14","thread-footer__avatar-placeholder":"_thread-footer__avatar-placeholder_v5ros_54","thread-footer__avatar-overflow":"_thread-footer__avatar-overflow_v5ros_64","thread-footer__buttons":"_thread-footer__buttons_v5ros_80","thread-footer__reply-btn":"_thread-footer__reply-btn_v5ros_85","thread-footer__reply-btn--hovered":"_thread-footer__reply-btn--hovered_v5ros_97","thread-footer__btn-label":"_thread-footer__btn-label_v5ros_110","thread-footer__divider":"_thread-footer__divider_v5ros_117","thread-footer__follow-btn":"_thread-footer__follow-btn_v5ros_123","thread-footer__follow-btn--following":"_thread-footer__follow-btn--following_v5ros_146","thread-footer__last-reply":"_thread-footer__last-reply_v5ros_153"};exports.default=r;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ThreadFooter.module.css');const r={"thread-footer":"_thread-footer_953ir_2","thread-footer__inner":"_thread-footer__inner_953ir_9","thread-footer__avatars-group":"_thread-footer__avatars-group_953ir_15","thread-footer__status-hint":"_thread-footer__status-hint_953ir_21","thread-footer__unread-dot":"_thread-footer__unread-dot_953ir_32","thread-footer__mention-badge":"_thread-footer__mention-badge_953ir_40","thread-footer__buttons":"_thread-footer__buttons_953ir_44","thread-footer__reply-btn":"_thread-footer__reply-btn_953ir_49","thread-footer__follow-btn":"_thread-footer__follow-btn_953ir_49","thread-footer__follow-btn--following":"_thread-footer__follow-btn--following_953ir_52","thread-footer__reply-btn--hovered":"_thread-footer__reply-btn--hovered_953ir_58","thread-footer__btn-label":"_thread-footer__btn-label_953ir_68","thread-footer__divider":"_thread-footer__divider_953ir_75","thread-footer__last-reply-group":"_thread-footer__last-reply-group_953ir_88","thread-footer--following":"_thread-footer--following_953ir_107","thread-footer--hovered":"_thread-footer--hovered_953ir_107","thread-footer__last-reply":"_thread-footer__last-reply_953ir_88"};exports.default=r;
2
2
  //# sourceMappingURL=ThreadFooter.module.scss.cjs.map
@@ -1,21 +1,21 @@
1
1
  import './ThreadFooter.module.css';const r = {
2
- "thread-footer": "_thread-footer_v5ros_2",
3
- "thread-footer__inner": "_thread-footer__inner_v5ros_8",
4
- "thread-footer__avatars-group": "_thread-footer__avatars-group_v5ros_14",
5
- "thread-footer__unread-dot": "_thread-footer__unread-dot_v5ros_20",
6
- "thread-footer__mention-badge": "_thread-footer__mention-badge_v5ros_28",
7
- "thread-footer__avatars": "_thread-footer__avatars_v5ros_14",
8
- "thread-footer__avatar": "_thread-footer__avatar_v5ros_14",
9
- "thread-footer__avatar-placeholder": "_thread-footer__avatar-placeholder_v5ros_54",
10
- "thread-footer__avatar-overflow": "_thread-footer__avatar-overflow_v5ros_64",
11
- "thread-footer__buttons": "_thread-footer__buttons_v5ros_80",
12
- "thread-footer__reply-btn": "_thread-footer__reply-btn_v5ros_85",
13
- "thread-footer__reply-btn--hovered": "_thread-footer__reply-btn--hovered_v5ros_97",
14
- "thread-footer__btn-label": "_thread-footer__btn-label_v5ros_110",
15
- "thread-footer__divider": "_thread-footer__divider_v5ros_117",
16
- "thread-footer__follow-btn": "_thread-footer__follow-btn_v5ros_123",
17
- "thread-footer__follow-btn--following": "_thread-footer__follow-btn--following_v5ros_146",
18
- "thread-footer__last-reply": "_thread-footer__last-reply_v5ros_153"
2
+ "thread-footer": "_thread-footer_953ir_2",
3
+ "thread-footer__inner": "_thread-footer__inner_953ir_9",
4
+ "thread-footer__avatars-group": "_thread-footer__avatars-group_953ir_15",
5
+ "thread-footer__status-hint": "_thread-footer__status-hint_953ir_21",
6
+ "thread-footer__unread-dot": "_thread-footer__unread-dot_953ir_32",
7
+ "thread-footer__mention-badge": "_thread-footer__mention-badge_953ir_40",
8
+ "thread-footer__buttons": "_thread-footer__buttons_953ir_44",
9
+ "thread-footer__reply-btn": "_thread-footer__reply-btn_953ir_49",
10
+ "thread-footer__follow-btn": "_thread-footer__follow-btn_953ir_49",
11
+ "thread-footer__follow-btn--following": "_thread-footer__follow-btn--following_953ir_52",
12
+ "thread-footer__reply-btn--hovered": "_thread-footer__reply-btn--hovered_953ir_58",
13
+ "thread-footer__btn-label": "_thread-footer__btn-label_953ir_68",
14
+ "thread-footer__divider": "_thread-footer__divider_953ir_75",
15
+ "thread-footer__last-reply-group": "_thread-footer__last-reply-group_953ir_88",
16
+ "thread-footer--following": "_thread-footer--following_953ir_107",
17
+ "thread-footer--hovered": "_thread-footer--hovered_953ir_107",
18
+ "thread-footer__last-reply": "_thread-footer__last-reply_953ir_88"
19
19
  };
20
20
  export {
21
21
  r as default
@@ -1,3 +1,9 @@
1
1
  export { default as ThreadFooter } from './ThreadFooter';
2
- export type { ThreadFooterProps, AvatarData } from './ThreadFooter';
2
+ export type { ThreadFooterProps } from './ThreadFooter';
3
+ export type { UserAvatarGroupItem } from '../user-avatar-group/UserAvatarGroup';
4
+ /** @deprecated Use `UserAvatarGroupItem` (`key`, `name`, optional `src`). */
5
+ export interface AvatarData {
6
+ src: string;
7
+ alt: string;
8
+ }
3
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/thread-footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/thread-footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),__g=require("@mattermost/compass-icons/components/dots-horizontal.js"),g=__g?.default??__g,w=require("react"),b=require("../icon/Icon.cjs"),q=require("../icon-button/IconButton.cjs"),I=require("../tag/Tag.cjs"),T=require("../mention-badge/MentionBadge.cjs"),A=require("../unread-badge/UnreadBadge.cjs"),R=require("../user-avatar-group/UserAvatarGroup.cjs"),t=require("./ThreadListItem.module.scss.cjs"),B=[{key:"leonard",name:"Leonard Riley"},{key:"aiko",name:"Aiko Tan"},{key:"arjun",name:"Arjun Patel"},{key:"marco",name:"Marco Rinaldi"},{key:"sofia",name:"Sofia Bauer"}];function D({active:r=!1,badge:i="none",mentionCount:m=1,authorName:h="Martin Kraft",channelLabel:_="ENTERPRISE TEAM",previewText:f="Do we have a guideline for what minimum width we should support in the system console? I know that…",timestamp:p="5 mins ago",replyCount:d=3,participants:n,threadTitle:o,className:j="",onClick:a,onMenuClick:l}){const c=n===void 0?B:n,x=c.length>0,u=!r&&(i==="unread"||i==="mention"),N=d===1?"1 reply":`${d} replies`,v=[t.default["thread-list-item"],r?t.default["thread-list-item--active"]:"",j].filter(Boolean).join(" "),y=w.useCallback(s=>{a&&(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),a())},[a]);return e.jsxs("div",{className:v,onClick:a,role:a?"button":void 0,tabIndex:a?0:void 0,onKeyDown:a?y:void 0,children:[e.jsx("div",{className:t.default["thread-list-item__thread"],children:e.jsxs("div",{className:t.default["thread-list-item__container"],children:[e.jsxs("div",{className:t.default["thread-list-item__post-content"],children:[e.jsxs("div",{className:t.default["thread-list-item__gutter"],children:[u&&i==="unread"&&e.jsx(A.default,{className:t.default["thread-list-item__unread-badge"],context:"icon-button"}),u&&i==="mention"&&e.jsx("span",{className:t.default["thread-list-item__mention-gutter"],children:e.jsx(T.default,{count:m,location:"channel",size:"medium"})})]}),e.jsx("div",{className:t.default["thread-list-item__post-body"],children:e.jsxs("div",{className:t.default["thread-list-item__post-body-content"],children:[e.jsxs("div",{className:t.default["thread-list-item__name-row"],children:[e.jsxs("div",{className:t.default["thread-list-item__name-group"],children:[e.jsx("span",{className:t.default["thread-list-item__author"],children:h}),e.jsx(I.default,{casing:"all-caps",label:_})]}),e.jsx("span",{className:t.default["thread-list-item__timestamp"],children:p})]}),o!=null&&e.jsx("div",{className:t.default["thread-list-item__title-row"],children:e.jsx("p",{className:t.default["thread-list-item__title"],children:o})}),e.jsx("p",{className:t.default["thread-list-item__preview"],children:f})]})})]}),e.jsx("div",{className:t.default["thread-list-item__replies"],children:e.jsxs("div",{className:t.default["thread-list-item__replies-inner"],children:[x&&e.jsx(R.default,{avatars:c,className:t.default["thread-list-item__avatar-group"],max:3,size:"20"}),e.jsx("span",{className:t.default["thread-list-item__reply-count"],children:N})]})})]})}),e.jsx("div",{className:t.default["thread-list-item__actions"],children:e.jsx("span",{className:t.default["thread-list-item__menu-button"],children:e.jsx(q.default,{"aria-label":"Thread actions",icon:e.jsx(b.default,{size:"16",glyph:e.jsx(g,{})}),padding:"compact",size:"small",style:"default",type:"button",onClick:s=>{s.stopPropagation(),l==null||l(s)}})})})]})}exports.default=D;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),__I=require("@mattermost/compass-icons/components/dots-horizontal.js"),I=__I?.default??__I,q=require("../icon/Icon.cjs"),A=require("../icon-button/IconButton.cjs"),b=require("../tag/Tag.cjs"),R=require("../mention-badge/MentionBadge.cjs"),M=require("../unread-badge/UnreadBadge.cjs"),S=require("../user-avatar-group/UserAvatarGroup.cjs"),t=require("./ThreadListItem.module.scss.cjs"),B=[{key:"leonard",name:"Leonard Riley"},{key:"aiko",name:"Aiko Tan"},{key:"arjun",name:"Arjun Patel"},{key:"marco",name:"Marco Rinaldi"},{key:"sofia",name:"Sofia Bauer"}];function D({active:l=!1,badge:i="none",mentionCount:n=1,authorName:f="Martin Kraft",channelLabel:p="ENTERPRISE TEAM",previewText:j="Do we have a guideline for what minimum width we should support in the system console? I know that…",timestamp:x="5 mins ago",replyCount:d=3,participants:o,threadTitle:u,className:N="",onClick:a,onMenuClick:c}){const m=o===void 0?B:o,v=m.length>0,h=!l&&(i==="unread"||i==="mention"),g=d===1?"1 reply":`${d} replies`,y=[t.default["thread-list-item"],l?t.default["thread-list-item--active"]:"",N].filter(Boolean).join(" "),_=i==="mention"?`${n} mention${n===1?"":"s"}`:i==="unread"?"unread":void 0,w=s=>{const r=window.getSelection();(r==null?void 0:r.type)==="Range"&&r.toString().length>0&&s.currentTarget.contains(r.getRangeAt(0).commonAncestorContainer)||a==null||a()},T=s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),a==null||a())};return e.jsxs("div",{className:y,children:[e.jsx("div",{className:t.default["thread-list-item__main"],role:a?"button":void 0,tabIndex:a?0:void 0,onClick:a?w:void 0,onKeyDown:a?T:void 0,"aria-current":l?!0:void 0,children:e.jsx("div",{className:t.default["thread-list-item__thread"],children:e.jsxs("div",{className:t.default["thread-list-item__container"],children:[e.jsxs("div",{className:t.default["thread-list-item__post-content"],children:[e.jsxs("div",{className:t.default["thread-list-item__gutter"],children:[h&&i==="unread"&&e.jsx("span",{className:t.default["thread-list-item__unread-gutter"],"aria-hidden":!0,children:e.jsx(M.default,{className:t.default["thread-list-item__unread-badge"],context:"icon-button"})}),h&&i==="mention"&&e.jsx("span",{className:t.default["thread-list-item__mention-gutter"],"aria-hidden":!0,children:e.jsx(R.default,{count:n,location:"channel",size:"medium"})})]}),e.jsx("div",{className:t.default["thread-list-item__post-body"],children:e.jsxs("div",{className:t.default["thread-list-item__post-body-content"],children:[e.jsxs("div",{className:t.default["thread-list-item__name-row"],children:[e.jsxs("div",{className:t.default["thread-list-item__name-group"],children:[e.jsx("span",{className:t.default["thread-list-item__author"],children:f}),e.jsx(b.default,{casing:"all-caps",label:p}),_&&e.jsx("span",{className:t.default["thread-list-item__status-hint"],children:_})]}),e.jsx("span",{className:t.default["thread-list-item__timestamp"],children:x})]}),u!=null&&e.jsx("div",{className:t.default["thread-list-item__title-row"],children:e.jsx("p",{className:t.default["thread-list-item__title"],children:u})}),e.jsx("p",{className:t.default["thread-list-item__preview"],children:j})]})})]}),e.jsx("div",{className:t.default["thread-list-item__replies"],children:e.jsxs("div",{className:t.default["thread-list-item__replies-inner"],children:[v&&e.jsx(S.default,{avatars:m,className:t.default["thread-list-item__avatar-group"],max:3,size:"20"}),e.jsx("span",{className:t.default["thread-list-item__reply-count"],children:g})]})})]})})}),c&&e.jsx("div",{className:t.default["thread-list-item__actions"],children:e.jsx("span",{className:t.default["thread-list-item__menu-button"],children:e.jsx(A.default,{"aria-label":"Thread actions",icon:e.jsx(q.default,{size:"16",glyph:e.jsx(I,{})}),padding:"compact",size:"small",style:"default",type:"button",onClick:s=>{s.stopPropagation(),c(s)}})})})]})}exports.default=D;
2
2
  //# sourceMappingURL=ThreadListItem.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItem.cjs","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"sourcesContent":["import DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport { type KeyboardEvent, type MouseEvent, useCallback } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport Tag from '@/components/tag/Tag';\nimport MentionBadge from '../mention-badge/MentionBadge';\nimport UnreadBadge from '../unread-badge/UnreadBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '../user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadListItem.module.scss';\n\nconst DEFAULT_PARTICIPANTS: UserAvatarGroupItem[] = [\n { key: 'leonard', name: 'Leonard Riley' },\n { key: 'aiko', name: 'Aiko Tan' },\n { key: 'arjun', name: 'Arjun Patel' },\n { key: 'marco', name: 'Marco Rinaldi' },\n { key: 'sofia', name: 'Sofia Bauer' },\n];\n\nexport interface ThreadListItemProps {\n /** Whether this item is the active/selected thread. */\n active?: boolean;\n /** Badge in the left gutter. Default: None. Hidden when `active` is true. */\n badge?: 'none' | 'unread' | 'mention';\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Author name. */\n authorName?: string;\n /** Channel/team label. */\n channelLabel?: string;\n /** Message preview text. */\n previewText?: string;\n /** Timestamp label. */\n timestamp?: string;\n /** Number of replies. */\n replyCount?: number;\n /** Stacked avatars for recent participants. Pass `[]` to hide. When omitted, uses demo participants. */\n participants?: UserAvatarGroupItem[];\n /** Optional thread title. */\n threadTitle?: string;\n /** Optional CSS class name. */\n className?: string;\n /** Click handler. */\n onClick?: () => void;\n /** Thread overflow menu handler. */\n onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * The Thread List Item is a single entry in the Threads view. Each row gives the user enough\n * context — who, where, what, when — to decide whether to open the thread without opening\n * it.\n */\nexport default function ThreadListItem({\n active = false,\n badge = 'none',\n mentionCount = 1,\n authorName = 'Martin Kraft',\n channelLabel = 'ENTERPRISE TEAM',\n previewText = 'Do we have a guideline for what minimum width we should support in the system console? I know that…',\n timestamp = '5 mins ago',\n replyCount = 3,\n participants: participantsProp,\n threadTitle,\n className = '',\n onClick,\n onMenuClick,\n}: ThreadListItemProps) {\n const participants =\n participantsProp === undefined ? DEFAULT_PARTICIPANTS : participantsProp;\n const showParticipants = participants.length > 0;\n const showGutterBadge =\n !active && (badge === 'unread' || badge === 'mention');\n const replyLabel = replyCount === 1 ? '1 reply' : `${replyCount} replies`;\n\n const rootClass = [\n styles['thread-list-item'],\n active ? styles['thread-list-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (!onClick) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onClick();\n }\n },\n [onClick],\n );\n\n return (\n <div\n className={rootClass}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className={styles['thread-list-item__thread']}>\n <div className={styles['thread-list-item__container']}>\n <div className={styles['thread-list-item__post-content']}>\n <div className={styles['thread-list-item__gutter']}>\n {showGutterBadge && badge === 'unread' && (\n <UnreadBadge\n className={styles['thread-list-item__unread-badge']}\n context=\"icon-button\"\n />\n )}\n {showGutterBadge && badge === 'mention' && (\n <span className={styles['thread-list-item__mention-gutter']}>\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n </div>\n <div className={styles['thread-list-item__post-body']}>\n <div className={styles['thread-list-item__post-body-content']}>\n <div className={styles['thread-list-item__name-row']}>\n <div className={styles['thread-list-item__name-group']}>\n <span className={styles['thread-list-item__author']}>\n {authorName}\n </span>\n <Tag\n casing=\"all-caps\"\n label={channelLabel}\n />\n </div>\n <span className={styles['thread-list-item__timestamp']}>\n {timestamp}\n </span>\n </div>\n {threadTitle != null && (\n <div className={styles['thread-list-item__title-row']}>\n <p className={styles['thread-list-item__title']}>\n {threadTitle}\n </p>\n </div>\n )}\n <p className={styles['thread-list-item__preview']}>\n {previewText}\n </p>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__replies']}>\n <div className={styles['thread-list-item__replies-inner']}>\n {showParticipants && (\n <UserAvatarGroup\n avatars={participants}\n className={styles['thread-list-item__avatar-group']}\n max={3}\n size=\"20\"\n />\n )}\n <span className={styles['thread-list-item__reply-count']}>\n {replyLabel}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__actions']}>\n <span className={styles['thread-list-item__menu-button']}>\n <IconButton\n aria-label=\"Thread actions\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n padding=\"compact\"\n size=\"small\"\n style=\"default\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onMenuClick?.(e);\n }}\n />\n </span>\n </div>\n </div>\n );\n}\n"],"names":["DEFAULT_PARTICIPANTS","ThreadListItem","active","badge","mentionCount","authorName","channelLabel","previewText","timestamp","replyCount","participantsProp","threadTitle","className","onClick","onMenuClick","participants","showParticipants","showGutterBadge","replyLabel","rootClass","styles","handleKeyDown","useCallback","event","jsxs","jsx","UnreadBadge","MentionBadge","Tag","UserAvatarGroup","IconButton","Icon","DotsHorizontalIcon","e"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadListItem.cjs","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"sourcesContent":["import DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport Tag from '@/components/tag/Tag';\nimport MentionBadge from '../mention-badge/MentionBadge';\nimport UnreadBadge from '../unread-badge/UnreadBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '../user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadListItem.module.scss';\n\nconst DEFAULT_PARTICIPANTS: UserAvatarGroupItem[] = [\n { key: 'leonard', name: 'Leonard Riley' },\n { key: 'aiko', name: 'Aiko Tan' },\n { key: 'arjun', name: 'Arjun Patel' },\n { key: 'marco', name: 'Marco Rinaldi' },\n { key: 'sofia', name: 'Sofia Bauer' },\n];\n\nexport interface ThreadListItemProps {\n /** Whether this item is the active/selected thread. */\n active?: boolean;\n /** Badge in the left gutter. Default: None. Hidden when `active` is true. */\n badge?: 'none' | 'unread' | 'mention';\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Author name. */\n authorName?: string;\n /** Channel/team label. */\n channelLabel?: string;\n /** Message preview text. */\n previewText?: string;\n /** Timestamp label. */\n timestamp?: string;\n /** Number of replies. */\n replyCount?: number;\n /** Stacked avatars for recent participants. Pass `[]` to hide. When omitted, uses demo participants. */\n participants?: UserAvatarGroupItem[];\n /** Optional thread title. */\n threadTitle?: string;\n /** Optional CSS class name. */\n className?: string;\n /** Opens the thread. Sibling of the overflow menu for keyboard reachability. */\n onClick?: () => void;\n /** Thread overflow menu handler. */\n onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * The Thread List Item is a single entry in the Threads view. Each row gives the user enough\n * context — who, where, what, when — to decide whether to open the thread without opening\n * it.\n */\nexport default function ThreadListItem({\n active = false,\n badge = 'none',\n mentionCount = 1,\n authorName = 'Martin Kraft',\n channelLabel = 'ENTERPRISE TEAM',\n previewText = 'Do we have a guideline for what minimum width we should support in the system console? I know that…',\n timestamp = '5 mins ago',\n replyCount = 3,\n participants: participantsProp,\n threadTitle,\n className = '',\n onClick,\n onMenuClick,\n}: ThreadListItemProps) {\n const participants =\n participantsProp === undefined ? DEFAULT_PARTICIPANTS : participantsProp;\n const showParticipants = participants.length > 0;\n const showGutterBadge =\n !active && (badge === 'unread' || badge === 'mention');\n const replyLabel = replyCount === 1 ? '1 reply' : `${replyCount} replies`;\n\n const rootClass = [\n styles['thread-list-item'],\n active ? styles['thread-list-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const statusHint =\n badge === 'mention'\n ? `${mentionCount} mention${mentionCount === 1 ? '' : 's'}`\n : badge === 'unread'\n ? 'unread'\n : undefined;\n\n const handleMainClick = (event: MouseEvent<HTMLDivElement>) => {\n const selection = window.getSelection();\n if (\n selection?.type === 'Range' &&\n selection.toString().length > 0 &&\n event.currentTarget.contains(selection.getRangeAt(0).commonAncestorContainer)\n ) {\n return;\n }\n onClick?.();\n };\n\n const handleMainKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n event.preventDefault();\n onClick?.();\n };\n\n return (\n <div className={rootClass}>\n <div\n className={styles['thread-list-item__main']}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick ? handleMainClick : undefined}\n onKeyDown={onClick ? handleMainKeyDown : undefined}\n aria-current={active ? true : undefined}\n >\n <div className={styles['thread-list-item__thread']}>\n <div className={styles['thread-list-item__container']}>\n <div className={styles['thread-list-item__post-content']}>\n <div className={styles['thread-list-item__gutter']}>\n {showGutterBadge && badge === 'unread' && (\n <span\n className={styles['thread-list-item__unread-gutter']}\n aria-hidden\n >\n <UnreadBadge\n className={styles['thread-list-item__unread-badge']}\n context=\"icon-button\"\n />\n </span>\n )}\n {showGutterBadge && badge === 'mention' && (\n <span\n className={styles['thread-list-item__mention-gutter']}\n aria-hidden\n >\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n </div>\n <div className={styles['thread-list-item__post-body']}>\n <div className={styles['thread-list-item__post-body-content']}>\n <div className={styles['thread-list-item__name-row']}>\n <div className={styles['thread-list-item__name-group']}>\n <span className={styles['thread-list-item__author']}>\n {authorName}\n </span>\n <Tag casing=\"all-caps\" label={channelLabel} />\n {statusHint && (\n <span\n className={styles['thread-list-item__status-hint']}\n >\n {statusHint}\n </span>\n )}\n </div>\n <span className={styles['thread-list-item__timestamp']}>\n {timestamp}\n </span>\n </div>\n {threadTitle != null && (\n <div className={styles['thread-list-item__title-row']}>\n <p className={styles['thread-list-item__title']}>\n {threadTitle}\n </p>\n </div>\n )}\n <p className={styles['thread-list-item__preview']}>\n {previewText}\n </p>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__replies']}>\n <div className={styles['thread-list-item__replies-inner']}>\n {showParticipants && (\n <UserAvatarGroup\n avatars={participants}\n className={styles['thread-list-item__avatar-group']}\n max={3}\n size=\"20\"\n />\n )}\n <span className={styles['thread-list-item__reply-count']}>\n {replyLabel}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n {onMenuClick && (\n <div className={styles['thread-list-item__actions']}>\n <span className={styles['thread-list-item__menu-button']}>\n <IconButton\n aria-label=\"Thread actions\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n padding=\"compact\"\n size=\"small\"\n style=\"default\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onMenuClick(event);\n }}\n />\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":["DEFAULT_PARTICIPANTS","ThreadListItem","active","badge","mentionCount","authorName","channelLabel","previewText","timestamp","replyCount","participantsProp","threadTitle","className","onClick","onMenuClick","participants","showParticipants","showGutterBadge","replyLabel","rootClass","styles","statusHint","handleMainClick","event","selection","handleMainKeyDown","jsxs","jsx","UnreadBadge","MentionBadge","Tag","UserAvatarGroup","IconButton","Icon","DotsHorizontalIcon"],"mappings":"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"}
@@ -23,7 +23,7 @@ export interface ThreadListItemProps {
23
23
  threadTitle?: string;
24
24
  /** Optional CSS class name. */
25
25
  className?: string;
26
- /** Click handler. */
26
+ /** Opens the thread. Sibling of the overflow menu for keyboard reachability. */
27
27
  onClick?: () => void;
28
28
  /** Thread overflow menu handler. */
29
29
  onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItem.d.ts","sourceRoot":"","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,UAAU,EAAe,MAAM,OAAO,CAAC;AAMzE,OAAwB,EACtB,KAAK,mBAAmB,EACzB,MAAM,oCAAoC,CAAC;AAW5C,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wGAAwG;IACxG,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CAC9D;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAc,EACd,KAAc,EACd,YAAgB,EAChB,UAA2B,EAC3B,YAAgC,EAChC,WAAmH,EACnH,SAAwB,EACxB,UAAc,EACd,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EACX,SAAc,EACd,OAAO,EACP,WAAW,GACZ,EAAE,mBAAmB,2CAuHrB"}
1
+ {"version":3,"file":"ThreadListItem.d.ts","sourceRoot":"","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,OAAO,CAAC;AAMvD,OAAwB,EACtB,KAAK,mBAAmB,EACzB,MAAM,oCAAoC,CAAC;AAW5C,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wGAAwG;IACxG,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CAC9D;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAc,EACd,KAAc,EACd,YAAgB,EAChB,UAA2B,EAC3B,YAAgC,EAChC,WAAmH,EACnH,SAAwB,EACxB,UAAc,EACd,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EACX,SAAc,EACd,OAAO,EACP,WAAW,GACZ,EAAE,mBAAmB,2CAwJrB"}
@@ -1,123 +1,138 @@
1
- import { jsxs as a, jsx as t } from "react/jsx-runtime";
2
- import __I from "@mattermost/compass-icons/components/dots-horizontal.js";const I=__I&&__I.default?__I.default:__I;
3
- import { useCallback as T } from "react";
4
- import A from "../icon/Icon.js";
5
- import x from "../icon-button/IconButton.js";
6
- import B from "../tag/Tag.js";
7
- import D from "../mention-badge/MentionBadge.js";
8
- import E from "../unread-badge/UnreadBadge.js";
9
- import j from "../user-avatar-group/UserAvatarGroup.js";
1
+ import { jsxs as s, jsx as t } from "react/jsx-runtime";
2
+ import __b from "@mattermost/compass-icons/components/dots-horizontal.js";const b=__b&&__b.default?__b.default:__b;
3
+ import x from "../icon/Icon.js";
4
+ import B from "../icon-button/IconButton.js";
5
+ import D from "../tag/Tag.js";
6
+ import E from "../mention-badge/MentionBadge.js";
7
+ import j from "../unread-badge/UnreadBadge.js";
8
+ import z from "../user-avatar-group/UserAvatarGroup.js";
10
9
  import e from "./ThreadListItem.module.scss.js";
11
- const z = [
10
+ const M = [
12
11
  { key: "leonard", name: "Leonard Riley" },
13
12
  { key: "aiko", name: "Aiko Tan" },
14
13
  { key: "arjun", name: "Arjun Patel" },
15
14
  { key: "marco", name: "Marco Rinaldi" },
16
15
  { key: "sofia", name: "Sofia Bauer" }
17
16
  ];
18
- function $({
19
- active: n = !1,
17
+ function q({
18
+ active: l = !1,
20
19
  badge: r = "none",
21
- mentionCount: p = 1,
22
- authorName: _ = "Martin Kraft",
23
- channelLabel: u = "ENTERPRISE TEAM",
24
- previewText: N = "Do we have a guideline for what minimum width we should support in the system console? I know that…",
25
- timestamp: f = "5 mins ago",
20
+ mentionCount: d = 1,
21
+ authorName: N = "Martin Kraft",
22
+ channelLabel: v = "ENTERPRISE TEAM",
23
+ previewText: f = "Do we have a guideline for what minimum width we should support in the system console? I know that…",
24
+ timestamp: y = "5 mins ago",
26
25
  replyCount: o = 3,
27
26
  participants: m,
28
- threadTitle: d,
29
- className: v = "",
30
- onClick: i,
31
- onMenuClick: l
27
+ threadTitle: c,
28
+ className: g = "",
29
+ onClick: a,
30
+ onMenuClick: h
32
31
  }) {
33
- const c = m === void 0 ? z : m, y = c.length > 0, h = !n && (r === "unread" || r === "mention"), g = o === 1 ? "1 reply" : `${o} replies`, w = [
32
+ const _ = m === void 0 ? M : m, w = _.length > 0, p = !l && (r === "unread" || r === "mention"), A = o === 1 ? "1 reply" : `${o} replies`, I = [
34
33
  e["thread-list-item"],
35
- n ? e["thread-list-item--active"] : "",
36
- v
37
- ].filter(Boolean).join(" "), b = T(
38
- (s) => {
39
- i && (s.key === "Enter" || s.key === " ") && (s.preventDefault(), i());
40
- },
41
- [i]
42
- );
43
- return /* @__PURE__ */ a(
44
- "div",
45
- {
46
- className: w,
47
- onClick: i,
48
- role: i ? "button" : void 0,
49
- tabIndex: i ? 0 : void 0,
50
- onKeyDown: i ? b : void 0,
51
- children: [
52
- /* @__PURE__ */ t("div", { className: e["thread-list-item__thread"], children: /* @__PURE__ */ a("div", { className: e["thread-list-item__container"], children: [
53
- /* @__PURE__ */ a("div", { className: e["thread-list-item__post-content"], children: [
54
- /* @__PURE__ */ a("div", { className: e["thread-list-item__gutter"], children: [
55
- h && r === "unread" && /* @__PURE__ */ t(
56
- E,
34
+ l ? e["thread-list-item--active"] : "",
35
+ g
36
+ ].filter(Boolean).join(" "), u = r === "mention" ? `${d} mention${d === 1 ? "" : "s"}` : r === "unread" ? "unread" : void 0, T = (i) => {
37
+ const n = window.getSelection();
38
+ (n == null ? void 0 : n.type) === "Range" && n.toString().length > 0 && i.currentTarget.contains(n.getRangeAt(0).commonAncestorContainer) || a == null || a();
39
+ }, R = (i) => {
40
+ i.key !== "Enter" && i.key !== " " || (i.preventDefault(), a == null || a());
41
+ };
42
+ return /* @__PURE__ */ s("div", { className: I, children: [
43
+ /* @__PURE__ */ t(
44
+ "div",
45
+ {
46
+ className: e["thread-list-item__main"],
47
+ role: a ? "button" : void 0,
48
+ tabIndex: a ? 0 : void 0,
49
+ onClick: a ? T : void 0,
50
+ onKeyDown: a ? R : void 0,
51
+ "aria-current": l ? !0 : void 0,
52
+ children: /* @__PURE__ */ t("div", { className: e["thread-list-item__thread"], children: /* @__PURE__ */ s("div", { className: e["thread-list-item__container"], children: [
53
+ /* @__PURE__ */ s("div", { className: e["thread-list-item__post-content"], children: [
54
+ /* @__PURE__ */ s("div", { className: e["thread-list-item__gutter"], children: [
55
+ p && r === "unread" && /* @__PURE__ */ t(
56
+ "span",
57
57
  {
58
- className: e["thread-list-item__unread-badge"],
59
- context: "icon-button"
58
+ className: e["thread-list-item__unread-gutter"],
59
+ "aria-hidden": !0,
60
+ children: /* @__PURE__ */ t(
61
+ j,
62
+ {
63
+ className: e["thread-list-item__unread-badge"],
64
+ context: "icon-button"
65
+ }
66
+ )
60
67
  }
61
68
  ),
62
- h && r === "mention" && /* @__PURE__ */ t("span", { className: e["thread-list-item__mention-gutter"], children: /* @__PURE__ */ t(
63
- D,
69
+ p && r === "mention" && /* @__PURE__ */ t(
70
+ "span",
64
71
  {
65
- count: p,
66
- location: "channel",
67
- size: "medium"
72
+ className: e["thread-list-item__mention-gutter"],
73
+ "aria-hidden": !0,
74
+ children: /* @__PURE__ */ t(
75
+ E,
76
+ {
77
+ count: d,
78
+ location: "channel",
79
+ size: "medium"
80
+ }
81
+ )
68
82
  }
69
- ) })
83
+ )
70
84
  ] }),
71
- /* @__PURE__ */ t("div", { className: e["thread-list-item__post-body"], children: /* @__PURE__ */ a("div", { className: e["thread-list-item__post-body-content"], children: [
72
- /* @__PURE__ */ a("div", { className: e["thread-list-item__name-row"], children: [
73
- /* @__PURE__ */ a("div", { className: e["thread-list-item__name-group"], children: [
74
- /* @__PURE__ */ t("span", { className: e["thread-list-item__author"], children: _ }),
75
- /* @__PURE__ */ t(
76
- B,
85
+ /* @__PURE__ */ t("div", { className: e["thread-list-item__post-body"], children: /* @__PURE__ */ s("div", { className: e["thread-list-item__post-body-content"], children: [
86
+ /* @__PURE__ */ s("div", { className: e["thread-list-item__name-row"], children: [
87
+ /* @__PURE__ */ s("div", { className: e["thread-list-item__name-group"], children: [
88
+ /* @__PURE__ */ t("span", { className: e["thread-list-item__author"], children: N }),
89
+ /* @__PURE__ */ t(D, { casing: "all-caps", label: v }),
90
+ u && /* @__PURE__ */ t(
91
+ "span",
77
92
  {
78
- casing: "all-caps",
79
- label: u
93
+ className: e["thread-list-item__status-hint"],
94
+ children: u
80
95
  }
81
96
  )
82
97
  ] }),
83
- /* @__PURE__ */ t("span", { className: e["thread-list-item__timestamp"], children: f })
98
+ /* @__PURE__ */ t("span", { className: e["thread-list-item__timestamp"], children: y })
84
99
  ] }),
85
- d != null && /* @__PURE__ */ t("div", { className: e["thread-list-item__title-row"], children: /* @__PURE__ */ t("p", { className: e["thread-list-item__title"], children: d }) }),
86
- /* @__PURE__ */ t("p", { className: e["thread-list-item__preview"], children: N })
100
+ c != null && /* @__PURE__ */ t("div", { className: e["thread-list-item__title-row"], children: /* @__PURE__ */ t("p", { className: e["thread-list-item__title"], children: c }) }),
101
+ /* @__PURE__ */ t("p", { className: e["thread-list-item__preview"], children: f })
87
102
  ] }) })
88
103
  ] }),
89
- /* @__PURE__ */ t("div", { className: e["thread-list-item__replies"], children: /* @__PURE__ */ a("div", { className: e["thread-list-item__replies-inner"], children: [
90
- y && /* @__PURE__ */ t(
91
- j,
104
+ /* @__PURE__ */ t("div", { className: e["thread-list-item__replies"], children: /* @__PURE__ */ s("div", { className: e["thread-list-item__replies-inner"], children: [
105
+ w && /* @__PURE__ */ t(
106
+ z,
92
107
  {
93
- avatars: c,
108
+ avatars: _,
94
109
  className: e["thread-list-item__avatar-group"],
95
110
  max: 3,
96
111
  size: "20"
97
112
  }
98
113
  ),
99
- /* @__PURE__ */ t("span", { className: e["thread-list-item__reply-count"], children: g })
114
+ /* @__PURE__ */ t("span", { className: e["thread-list-item__reply-count"], children: A })
100
115
  ] }) })
101
- ] }) }),
102
- /* @__PURE__ */ t("div", { className: e["thread-list-item__actions"], children: /* @__PURE__ */ t("span", { className: e["thread-list-item__menu-button"], children: /* @__PURE__ */ t(
103
- x,
104
- {
105
- "aria-label": "Thread actions",
106
- icon: /* @__PURE__ */ t(A, { size: "16", glyph: /* @__PURE__ */ t(I, {}) }),
107
- padding: "compact",
108
- size: "small",
109
- style: "default",
110
- type: "button",
111
- onClick: (s) => {
112
- s.stopPropagation(), l == null || l(s);
113
- }
114
- }
115
- ) }) })
116
- ]
117
- }
118
- );
116
+ ] }) })
117
+ }
118
+ ),
119
+ h && /* @__PURE__ */ t("div", { className: e["thread-list-item__actions"], children: /* @__PURE__ */ t("span", { className: e["thread-list-item__menu-button"], children: /* @__PURE__ */ t(
120
+ B,
121
+ {
122
+ "aria-label": "Thread actions",
123
+ icon: /* @__PURE__ */ t(x, { size: "16", glyph: /* @__PURE__ */ t(b, {}) }),
124
+ padding: "compact",
125
+ size: "small",
126
+ style: "default",
127
+ type: "button",
128
+ onClick: (i) => {
129
+ i.stopPropagation(), h(i);
130
+ }
131
+ }
132
+ ) }) })
133
+ ] });
119
134
  }
120
135
  export {
121
- $ as default
136
+ q as default
122
137
  };
123
138
  //# sourceMappingURL=ThreadListItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItem.js","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"sourcesContent":["import DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport { type KeyboardEvent, type MouseEvent, useCallback } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport Tag from '@/components/tag/Tag';\nimport MentionBadge from '../mention-badge/MentionBadge';\nimport UnreadBadge from '../unread-badge/UnreadBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '../user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadListItem.module.scss';\n\nconst DEFAULT_PARTICIPANTS: UserAvatarGroupItem[] = [\n { key: 'leonard', name: 'Leonard Riley' },\n { key: 'aiko', name: 'Aiko Tan' },\n { key: 'arjun', name: 'Arjun Patel' },\n { key: 'marco', name: 'Marco Rinaldi' },\n { key: 'sofia', name: 'Sofia Bauer' },\n];\n\nexport interface ThreadListItemProps {\n /** Whether this item is the active/selected thread. */\n active?: boolean;\n /** Badge in the left gutter. Default: None. Hidden when `active` is true. */\n badge?: 'none' | 'unread' | 'mention';\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Author name. */\n authorName?: string;\n /** Channel/team label. */\n channelLabel?: string;\n /** Message preview text. */\n previewText?: string;\n /** Timestamp label. */\n timestamp?: string;\n /** Number of replies. */\n replyCount?: number;\n /** Stacked avatars for recent participants. Pass `[]` to hide. When omitted, uses demo participants. */\n participants?: UserAvatarGroupItem[];\n /** Optional thread title. */\n threadTitle?: string;\n /** Optional CSS class name. */\n className?: string;\n /** Click handler. */\n onClick?: () => void;\n /** Thread overflow menu handler. */\n onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * The Thread List Item is a single entry in the Threads view. Each row gives the user enough\n * context — who, where, what, when — to decide whether to open the thread without opening\n * it.\n */\nexport default function ThreadListItem({\n active = false,\n badge = 'none',\n mentionCount = 1,\n authorName = 'Martin Kraft',\n channelLabel = 'ENTERPRISE TEAM',\n previewText = 'Do we have a guideline for what minimum width we should support in the system console? I know that…',\n timestamp = '5 mins ago',\n replyCount = 3,\n participants: participantsProp,\n threadTitle,\n className = '',\n onClick,\n onMenuClick,\n}: ThreadListItemProps) {\n const participants =\n participantsProp === undefined ? DEFAULT_PARTICIPANTS : participantsProp;\n const showParticipants = participants.length > 0;\n const showGutterBadge =\n !active && (badge === 'unread' || badge === 'mention');\n const replyLabel = replyCount === 1 ? '1 reply' : `${replyCount} replies`;\n\n const rootClass = [\n styles['thread-list-item'],\n active ? styles['thread-list-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (!onClick) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onClick();\n }\n },\n [onClick],\n );\n\n return (\n <div\n className={rootClass}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className={styles['thread-list-item__thread']}>\n <div className={styles['thread-list-item__container']}>\n <div className={styles['thread-list-item__post-content']}>\n <div className={styles['thread-list-item__gutter']}>\n {showGutterBadge && badge === 'unread' && (\n <UnreadBadge\n className={styles['thread-list-item__unread-badge']}\n context=\"icon-button\"\n />\n )}\n {showGutterBadge && badge === 'mention' && (\n <span className={styles['thread-list-item__mention-gutter']}>\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n </div>\n <div className={styles['thread-list-item__post-body']}>\n <div className={styles['thread-list-item__post-body-content']}>\n <div className={styles['thread-list-item__name-row']}>\n <div className={styles['thread-list-item__name-group']}>\n <span className={styles['thread-list-item__author']}>\n {authorName}\n </span>\n <Tag\n casing=\"all-caps\"\n label={channelLabel}\n />\n </div>\n <span className={styles['thread-list-item__timestamp']}>\n {timestamp}\n </span>\n </div>\n {threadTitle != null && (\n <div className={styles['thread-list-item__title-row']}>\n <p className={styles['thread-list-item__title']}>\n {threadTitle}\n </p>\n </div>\n )}\n <p className={styles['thread-list-item__preview']}>\n {previewText}\n </p>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__replies']}>\n <div className={styles['thread-list-item__replies-inner']}>\n {showParticipants && (\n <UserAvatarGroup\n avatars={participants}\n className={styles['thread-list-item__avatar-group']}\n max={3}\n size=\"20\"\n />\n )}\n <span className={styles['thread-list-item__reply-count']}>\n {replyLabel}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__actions']}>\n <span className={styles['thread-list-item__menu-button']}>\n <IconButton\n aria-label=\"Thread actions\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n padding=\"compact\"\n size=\"small\"\n style=\"default\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onMenuClick?.(e);\n }}\n />\n </span>\n </div>\n </div>\n );\n}\n"],"names":["DEFAULT_PARTICIPANTS","ThreadListItem","active","badge","mentionCount","authorName","channelLabel","previewText","timestamp","replyCount","participantsProp","threadTitle","className","onClick","onMenuClick","participants","showParticipants","showGutterBadge","replyLabel","rootClass","styles","handleKeyDown","useCallback","event","jsxs","jsx","UnreadBadge","MentionBadge","Tag","UserAvatarGroup","IconButton","Icon","DotsHorizontalIcon","e"],"mappings":";;;;;;;;;;AAYA,MAAMA,IAA8C;AAAA,EAClD,EAAE,KAAK,WAAW,MAAM,gBAAA;AAAA,EACxB,EAAE,KAAK,QAAQ,MAAM,WAAA;AAAA,EACrB,EAAE,KAAK,SAAS,MAAM,cAAA;AAAA,EACtB,EAAE,KAAK,SAAS,MAAM,gBAAA;AAAA,EACtB,EAAE,KAAK,SAAS,MAAM,cAAA;AACxB;AAoCA,SAAwBC,EAAe;AAAA,EACrC,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,cAAAC,IAAe;AAAA,EACf,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,cAAcC;AAAA,EACd,aAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,SAAAC;AAAA,EACA,aAAAC;AACF,GAAwB;AACtB,QAAMC,IACJL,MAAqB,SAAYV,IAAuBU,GACpDM,IAAmBD,EAAa,SAAS,GACzCE,IACJ,CAACf,MAAWC,MAAU,YAAYA,MAAU,YACxCe,IAAaT,MAAe,IAAI,YAAY,GAAGA,CAAU,YAEzDU,IAAY;AAAA,IAChBC,EAAO,kBAAkB;AAAA,IACzBlB,IAASkB,EAAO,0BAA0B,IAAI;AAAA,IAC9CR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAgBC;AAAA,IACpB,CAACC,MAAyC;AACxC,MAAKV,MACDU,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACzCA,EAAM,eAAA,GACNV,EAAA;AAAA,IAEJ;AAAA,IACA,CAACA,CAAO;AAAA,EAAA;AAGV,SACE,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWL;AAAA,MACX,SAAAN;AAAA,MACA,MAAMA,IAAU,WAAW;AAAA,MAC3B,UAAUA,IAAU,IAAI;AAAA,MACxB,WAAWA,IAAUQ,IAAgB;AAAA,MAErC,UAAA;AAAA,QAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWL,EAAO,0BAA0B,GAC/C,4BAAC,OAAA,EAAI,WAAWA,EAAO,6BAA6B,GAClD,UAAA;AAAA,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,gCAAgC,GACrD,UAAA;AAAA,YAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,0BAA0B,GAC9C,UAAA;AAAA,cAAAH,KAAmBd,MAAU,YAC5B,gBAAAsB;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,WAAWN,EAAO,gCAAgC;AAAA,kBAClD,SAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGXH,KAAmBd,MAAU,aAC5B,gBAAAsB,EAAC,UAAK,WAAWL,EAAO,kCAAkC,GACxD,UAAA,gBAAAK;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAOvB;AAAA,kBACP,UAAS;AAAA,kBACT,MAAK;AAAA,gBAAA;AAAA,cAAA,EACP,CACF;AAAA,YAAA,GAEJ;AAAA,YACA,gBAAAqB,EAAC,OAAA,EAAI,WAAWL,EAAO,6BAA6B,GAClD,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,qCAAqC,GAC1D,UAAA;AAAA,cAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,4BAA4B,GACjD,UAAA;AAAA,gBAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,8BAA8B,GACnD,UAAA;AAAA,kBAAA,gBAAAK,EAAC,QAAA,EAAK,WAAWL,EAAO,0BAA0B,GAC/C,UAAAf,GACH;AAAA,kBACA,gBAAAoB;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,QAAO;AAAA,sBACP,OAAOtB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACT,GACF;AAAA,kCACC,QAAA,EAAK,WAAWc,EAAO,6BAA6B,GAClD,UAAAZ,EAAA,CACH;AAAA,cAAA,GACF;AAAA,cACCG,KAAe,QACd,gBAAAc,EAAC,OAAA,EAAI,WAAWL,EAAO,6BAA6B,GAClD,UAAA,gBAAAK,EAAC,OAAE,WAAWL,EAAO,yBAAyB,GAC3C,aACH,GACF;AAAA,gCAED,KAAA,EAAE,WAAWA,EAAO,2BAA2B,GAC7C,UAAAb,EAAA,CACH;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UACA,gBAAAkB,EAAC,OAAA,EAAI,WAAWL,EAAO,2BAA2B,GAChD,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWJ,EAAO,iCAAiC,GACrD,UAAA;AAAA,YAAAJ,KACC,gBAAAS;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,SAASd;AAAA,gBACT,WAAWK,EAAO,gCAAgC;AAAA,gBAClD,KAAK;AAAA,gBACL,MAAK;AAAA,cAAA;AAAA,YAAA;AAAA,8BAGR,QAAA,EAAK,WAAWA,EAAO,+BAA+B,GACpD,UAAAF,EAAA,CACH;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QACA,gBAAAO,EAAC,OAAA,EAAI,WAAWL,EAAO,2BAA2B,GAChD,UAAA,gBAAAK,EAAC,QAAA,EAAK,WAAWL,EAAO,+BAA+B,GACrD,UAAA,gBAAAK;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,wBAAOC,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAN,EAACO,KAAmB,GAAI;AAAA,YACrD,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,MAAK;AAAA,YACL,SAAS,CAACC,MAAM;AACd,cAAAA,EAAE,gBAAA,GACFnB,KAAA,QAAAA,EAAcmB;AAAA,YAChB;AAAA,UAAA;AAAA,QAAA,GAEJ,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"ThreadListItem.js","sources":["../../../src/components/thread-list-item/ThreadListItem.tsx"],"sourcesContent":["import DotsHorizontalIcon from '@mattermost/compass-icons/components/dots-horizontal';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport Tag from '@/components/tag/Tag';\nimport MentionBadge from '../mention-badge/MentionBadge';\nimport UnreadBadge from '../unread-badge/UnreadBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '../user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadListItem.module.scss';\n\nconst DEFAULT_PARTICIPANTS: UserAvatarGroupItem[] = [\n { key: 'leonard', name: 'Leonard Riley' },\n { key: 'aiko', name: 'Aiko Tan' },\n { key: 'arjun', name: 'Arjun Patel' },\n { key: 'marco', name: 'Marco Rinaldi' },\n { key: 'sofia', name: 'Sofia Bauer' },\n];\n\nexport interface ThreadListItemProps {\n /** Whether this item is the active/selected thread. */\n active?: boolean;\n /** Badge in the left gutter. Default: None. Hidden when `active` is true. */\n badge?: 'none' | 'unread' | 'mention';\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Author name. */\n authorName?: string;\n /** Channel/team label. */\n channelLabel?: string;\n /** Message preview text. */\n previewText?: string;\n /** Timestamp label. */\n timestamp?: string;\n /** Number of replies. */\n replyCount?: number;\n /** Stacked avatars for recent participants. Pass `[]` to hide. When omitted, uses demo participants. */\n participants?: UserAvatarGroupItem[];\n /** Optional thread title. */\n threadTitle?: string;\n /** Optional CSS class name. */\n className?: string;\n /** Opens the thread. Sibling of the overflow menu for keyboard reachability. */\n onClick?: () => void;\n /** Thread overflow menu handler. */\n onMenuClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * The Thread List Item is a single entry in the Threads view. Each row gives the user enough\n * context — who, where, what, when — to decide whether to open the thread without opening\n * it.\n */\nexport default function ThreadListItem({\n active = false,\n badge = 'none',\n mentionCount = 1,\n authorName = 'Martin Kraft',\n channelLabel = 'ENTERPRISE TEAM',\n previewText = 'Do we have a guideline for what minimum width we should support in the system console? I know that…',\n timestamp = '5 mins ago',\n replyCount = 3,\n participants: participantsProp,\n threadTitle,\n className = '',\n onClick,\n onMenuClick,\n}: ThreadListItemProps) {\n const participants =\n participantsProp === undefined ? DEFAULT_PARTICIPANTS : participantsProp;\n const showParticipants = participants.length > 0;\n const showGutterBadge =\n !active && (badge === 'unread' || badge === 'mention');\n const replyLabel = replyCount === 1 ? '1 reply' : `${replyCount} replies`;\n\n const rootClass = [\n styles['thread-list-item'],\n active ? styles['thread-list-item--active'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const statusHint =\n badge === 'mention'\n ? `${mentionCount} mention${mentionCount === 1 ? '' : 's'}`\n : badge === 'unread'\n ? 'unread'\n : undefined;\n\n const handleMainClick = (event: MouseEvent<HTMLDivElement>) => {\n const selection = window.getSelection();\n if (\n selection?.type === 'Range' &&\n selection.toString().length > 0 &&\n event.currentTarget.contains(selection.getRangeAt(0).commonAncestorContainer)\n ) {\n return;\n }\n onClick?.();\n };\n\n const handleMainKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n event.preventDefault();\n onClick?.();\n };\n\n return (\n <div className={rootClass}>\n <div\n className={styles['thread-list-item__main']}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick ? handleMainClick : undefined}\n onKeyDown={onClick ? handleMainKeyDown : undefined}\n aria-current={active ? true : undefined}\n >\n <div className={styles['thread-list-item__thread']}>\n <div className={styles['thread-list-item__container']}>\n <div className={styles['thread-list-item__post-content']}>\n <div className={styles['thread-list-item__gutter']}>\n {showGutterBadge && badge === 'unread' && (\n <span\n className={styles['thread-list-item__unread-gutter']}\n aria-hidden\n >\n <UnreadBadge\n className={styles['thread-list-item__unread-badge']}\n context=\"icon-button\"\n />\n </span>\n )}\n {showGutterBadge && badge === 'mention' && (\n <span\n className={styles['thread-list-item__mention-gutter']}\n aria-hidden\n >\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n </div>\n <div className={styles['thread-list-item__post-body']}>\n <div className={styles['thread-list-item__post-body-content']}>\n <div className={styles['thread-list-item__name-row']}>\n <div className={styles['thread-list-item__name-group']}>\n <span className={styles['thread-list-item__author']}>\n {authorName}\n </span>\n <Tag casing=\"all-caps\" label={channelLabel} />\n {statusHint && (\n <span\n className={styles['thread-list-item__status-hint']}\n >\n {statusHint}\n </span>\n )}\n </div>\n <span className={styles['thread-list-item__timestamp']}>\n {timestamp}\n </span>\n </div>\n {threadTitle != null && (\n <div className={styles['thread-list-item__title-row']}>\n <p className={styles['thread-list-item__title']}>\n {threadTitle}\n </p>\n </div>\n )}\n <p className={styles['thread-list-item__preview']}>\n {previewText}\n </p>\n </div>\n </div>\n </div>\n <div className={styles['thread-list-item__replies']}>\n <div className={styles['thread-list-item__replies-inner']}>\n {showParticipants && (\n <UserAvatarGroup\n avatars={participants}\n className={styles['thread-list-item__avatar-group']}\n max={3}\n size=\"20\"\n />\n )}\n <span className={styles['thread-list-item__reply-count']}>\n {replyLabel}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n {onMenuClick && (\n <div className={styles['thread-list-item__actions']}>\n <span className={styles['thread-list-item__menu-button']}>\n <IconButton\n aria-label=\"Thread actions\"\n icon={<Icon size=\"16\" glyph={<DotsHorizontalIcon />} />}\n padding=\"compact\"\n size=\"small\"\n style=\"default\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onMenuClick(event);\n }}\n />\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":["DEFAULT_PARTICIPANTS","ThreadListItem","active","badge","mentionCount","authorName","channelLabel","previewText","timestamp","replyCount","participantsProp","threadTitle","className","onClick","onMenuClick","participants","showParticipants","showGutterBadge","replyLabel","rootClass","styles","statusHint","handleMainClick","event","selection","handleMainKeyDown","jsxs","jsx","UnreadBadge","MentionBadge","Tag","UserAvatarGroup","IconButton","Icon","DotsHorizontalIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- ._thread-list-item_1fxzs_2{position:relative;display:flex;flex-direction:column;align-items:flex-end;background-color:var(--center-channel-bg);border-bottom:1px solid rgba(var(--center-channel-color-rgb),.08);cursor:default}._thread-list-item_1fxzs_2[role=button]{cursor:pointer}._thread-list-item_1fxzs_2:hover,._thread-list-item_1fxzs_2:focus-within{background-color:rgba(var(--center-channel-color-rgb),.08)}._thread-list-item_1fxzs_2:hover ._thread-list-item__menu-button_1fxzs_17,._thread-list-item_1fxzs_2:focus-within ._thread-list-item__menu-button_1fxzs_17{display:flex}._thread-list-item_1fxzs_2:hover ._thread-list-item__timestamp_1fxzs_20,._thread-list-item_1fxzs_2:focus-within ._thread-list-item__timestamp_1fxzs_20{display:none}._thread-list-item_1fxzs_2:focus-visible{outline:none;box-shadow:inset 0 0 0 2px rgba(var(--center-channel-color-rgb),.32)}._thread-list-item--active_1fxzs_27{background-color:rgba(var(--button-bg-rgb),.04)}._thread-list-item--active_1fxzs_27:hover{background-color:rgba(var(--button-bg-rgb),.08)}._thread-list-item__thread_1fxzs_33{display:flex;flex-direction:column;align-items:flex-start;padding:var(--spacing-l);width:100%}._thread-list-item__container_1fxzs_40{display:flex;flex-direction:column;gap:var(--spacing-s);align-items:flex-start;border-radius:var(--radius-s);width:100%}._thread-list-item__post-content_1fxzs_48{display:flex;gap:var(--spacing-xxxxs, 4px);align-items:flex-start;width:100%}._thread-list-item__gutter_1fxzs_54{position:relative;flex-shrink:0;width:8px;min-height:21px;display:flex;align-items:flex-start;justify-content:flex-start}._thread-list-item__unread-badge_1fxzs_63{position:absolute;top:var(--spacing-xxs);left:-4px}._thread-list-item__mention-gutter_1fxzs_68{position:absolute;top:1px;left:-12px;display:flex;align-items:center;justify-content:center}._thread-list-item__post-body_1fxzs_76{display:flex;flex-direction:column;flex:1 0 0;align-items:flex-start;min-width:0}._thread-list-item__post-body-content_1fxzs_83{display:flex;flex-direction:column;gap:var(--spacing-xxxxs, 4px);align-items:flex-start;width:100%}._thread-list-item__name-row_1fxzs_90{position:relative;height:20px;width:100%;display:flex;align-items:center;justify-content:space-between;overflow:hidden}._thread-list-item__name-group_1fxzs_99{display:flex;gap:var(--spacing-xs);align-items:center;overflow:hidden}._thread-list-item__author_1fxzs_105{font-size:var(--font-size-100);font-weight:var(--font-weight-semibold);line-height:var(--line-height-100);color:var(--center-channel-color);white-space:nowrap;flex-shrink:0}._thread-list-item__timestamp_1fxzs_20{font-size:var(--font-size-75);font-weight:var(--font-weight-regular);line-height:var(--line-height-25);color:rgba(var(--center-channel-color-rgb),.64);white-space:nowrap;flex-shrink:0}._thread-list-item__title-row_1fxzs_121{display:flex;align-items:center;width:100%}._thread-list-item__title_1fxzs_121{flex:1 0 0;font-size:var(--font-size-200);font-weight:var(--font-weight-semibold);line-height:var(--line-height-200);color:var(--center-channel-color);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}._thread-list-item__preview_1fxzs_137{font-size:var(--font-size-100);font-weight:var(--font-weight-regular);line-height:var(--line-height-100);color:var(--center-channel-color);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;width:100%}._thread-list-item__replies_1fxzs_148{display:flex;flex-direction:column;align-items:flex-start;padding-left:var(--spacing-m)}._thread-list-item__replies-inner_1fxzs_154{display:flex;align-items:center;gap:var(--spacing-xxxxs, 4px);min-height:24px;border-radius:var(--radius-s)}._thread-list-item__avatar-group_1fxzs_161{flex-shrink:0}._thread-list-item__reply-count_1fxzs_164{font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);line-height:var(--line-height-25);color:rgba(var(--center-channel-color-rgb),.64);padding:4.5px var(--spacing-s)}._thread-list-item__actions_1fxzs_171{position:absolute;top:var(--spacing-m);right:var(--spacing-m);z-index:1;pointer-events:none}._thread-list-item__actions_1fxzs_171 ._thread-list-item__menu-button_1fxzs_17{pointer-events:auto}._thread-list-item__menu-button_1fxzs_17{display:none;align-items:center;justify-content:center}
1
+ ._thread-list-item_5rzhy_2{position:relative;display:flex;flex-direction:column;align-items:flex-end;background-color:var(--center-channel-bg);border-bottom:1px solid rgba(var(--center-channel-color-rgb),.08)}._thread-list-item__actions_5rzhy_10{position:absolute;top:var(--spacing-m);right:var(--spacing-m);z-index:2}._thread-list-item_5rzhy_2:hover ._thread-list-item__timestamp_5rzhy_16,._thread-list-item_5rzhy_2:focus-within ._thread-list-item__timestamp_5rzhy_16{visibility:hidden}._thread-list-item__menu-button_5rzhy_19{display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity var(--duration-quick) var(--ease-transition)}._thread-list-item_5rzhy_2:hover ._thread-list-item__menu-button_5rzhy_19,._thread-list-item_5rzhy_2:focus-within ._thread-list-item__menu-button_5rzhy_19{opacity:1;pointer-events:auto}._thread-list-item_5rzhy_2:not(:hover):not(:focus-within) ._thread-list-item__menu-button_5rzhy_19{pointer-events:none}._thread-list-item_5rzhy_2:hover:not(._thread-list-item--active_5rzhy_33),._thread-list-item_5rzhy_2:focus-within:not(._thread-list-item--active_5rzhy_33){background-color:rgba(var(--center-channel-color-rgb),.04)}._thread-list-item__main_5rzhy_36{position:relative;z-index:0;display:flex;flex-direction:column;align-items:flex-end;width:100%;padding:0;cursor:pointer;font:inherit;color:inherit;text-align:left;-webkit-user-select:text;user-select:text}._thread-list-item__main_5rzhy_36:focus{outline:none}._thread-list-item__main_5rzhy_36:focus-visible{box-shadow:inset 0 0 0 2px rgba(var(--center-channel-color-rgb),.32)}._thread-list-item--active_5rzhy_33{background-color:rgba(var(--button-bg-rgb),.04)}._thread-list-item--active_5rzhy_33:hover,._thread-list-item--active_5rzhy_33:focus-within{background-color:rgba(var(--button-bg-rgb),.08)}._thread-list-item__thread_5rzhy_62{display:flex;flex-direction:column;align-items:flex-start;padding:var(--spacing-l);width:100%}._thread-list-item__container_5rzhy_69{display:flex;flex-direction:column;gap:var(--spacing-s);align-items:flex-start;border-radius:var(--radius-s);width:100%}._thread-list-item__post-content_5rzhy_77{display:flex;gap:var(--spacing-xxxxs, 4px);align-items:flex-start;width:100%}._thread-list-item__gutter_5rzhy_83{position:relative;flex-shrink:0;width:8px;min-height:21px;display:flex;align-items:flex-start;justify-content:flex-start}._thread-list-item__unread-gutter_5rzhy_92{position:absolute;top:var(--spacing-xxs);left:-4px;display:flex;align-items:center;justify-content:center}._thread-list-item__unread-badge_5rzhy_100{position:static}._thread-list-item__mention-gutter_5rzhy_103{position:absolute;top:1px;left:-12px;display:flex;align-items:center;justify-content:center}._thread-list-item__post-body_5rzhy_111{display:flex;flex-direction:column;flex:1 0 0;align-items:flex-start;min-width:0}._thread-list-item__post-body-content_5rzhy_118{display:flex;flex-direction:column;gap:var(--spacing-xxxxs, 4px);align-items:flex-start;width:100%}._thread-list-item__name-row_5rzhy_125{position:relative;height:20px;width:100%;display:flex;align-items:center;justify-content:space-between;overflow:hidden}._thread-list-item__name-group_5rzhy_134{display:flex;gap:var(--spacing-xs);align-items:center;overflow:hidden}._thread-list-item__author_5rzhy_140{font-size:var(--font-size-100);font-weight:var(--font-weight-semibold);line-height:var(--line-height-100);color:var(--center-channel-color);white-space:nowrap;flex-shrink:0}._thread-list-item__status-hint_5rzhy_148{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}._thread-list-item__timestamp_5rzhy_16{font-size:var(--font-size-75);font-weight:var(--font-weight-regular);line-height:var(--line-height-25);color:rgba(var(--center-channel-color-rgb),.64);white-space:nowrap;flex-shrink:0}._thread-list-item__title-row_5rzhy_167{display:flex;align-items:center;width:100%}._thread-list-item__title_5rzhy_167{flex:1 0 0;font-size:var(--font-size-200);font-weight:var(--font-weight-semibold);line-height:var(--line-height-200);color:var(--center-channel-color);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}._thread-list-item__preview_5rzhy_183{font-size:var(--font-size-100);font-weight:var(--font-weight-regular);line-height:var(--line-height-100);color:var(--center-channel-color);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;width:100%}._thread-list-item__replies_5rzhy_194{display:flex;flex-direction:column;align-items:flex-start;padding-left:var(--spacing-m)}._thread-list-item__replies-inner_5rzhy_200{display:flex;align-items:center;gap:var(--spacing-xxxxs, 4px);min-height:24px;border-radius:var(--radius-s)}._thread-list-item__avatar-group_5rzhy_207{flex-shrink:0}._thread-list-item__reply-count_5rzhy_210{font-size:var(--font-size-75);font-weight:var(--font-weight-semibold);line-height:var(--line-height-25);color:rgba(var(--center-channel-color-rgb),.64);padding:4.5px var(--spacing-s)}