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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/README.md +15 -3
  2. package/dist/compass-ui-standalone.css +270 -276
  3. package/dist/compass-ui.css +293 -290
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js.map +1 -1
  8. package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -1
  9. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts +3 -1
  10. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -1
  11. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
  12. package/dist/components/admin-panel/AdminPanel.cjs +1 -1
  13. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
  14. package/dist/components/admin-panel/AdminPanel.d.ts +13 -6
  15. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
  16. package/dist/components/admin-panel/AdminPanel.js +21 -15
  17. package/dist/components/admin-panel/AdminPanel.js.map +1 -1
  18. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
  19. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts +8 -4
  20. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
  21. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  23. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  24. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  25. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +11 -4
  26. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  27. package/dist/components/admin-panel-header/AdminPanelHeader.js +25 -23
  28. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  29. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  30. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +10 -10
  31. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  32. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  33. package/dist/components/attachment-card/AttachmentCard.d.ts +18 -5
  34. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  35. package/dist/components/attachment-card/AttachmentCard.js +85 -79
  36. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  37. package/dist/components/card-button/CardButton.css +1 -1
  38. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  39. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +1 -1
  41. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
  42. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts +5 -4
  43. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -1
  44. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +7 -7
  45. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +10 -4
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +67 -62
  51. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  52. package/dist/components/checkbox/Checkbox.css +1 -1
  53. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  54. package/dist/components/checkbox/Checkbox.module.scss.js +10 -10
  55. package/dist/components/chip/Chip.cjs.map +1 -1
  56. package/dist/components/chip/Chip.css +1 -1
  57. package/dist/components/chip/Chip.d.ts +4 -0
  58. package/dist/components/chip/Chip.d.ts.map +1 -1
  59. package/dist/components/chip/Chip.js.map +1 -1
  60. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  61. package/dist/components/chip/Chip.module.scss.js +11 -11
  62. package/dist/components/combobox/Combobox.cjs +1 -1
  63. package/dist/components/combobox/Combobox.cjs.map +1 -1
  64. package/dist/components/combobox/Combobox.css +1 -1
  65. package/dist/components/combobox/Combobox.d.ts +24 -1
  66. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  67. package/dist/components/combobox/Combobox.js +307 -271
  68. package/dist/components/combobox/Combobox.js.map +1 -1
  69. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  70. package/dist/components/combobox/Combobox.module.scss.js +28 -26
  71. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  72. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  73. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  74. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  75. package/dist/components/date-range-picker/DateRangePicker.d.ts +18 -2
  76. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  77. package/dist/components/date-range-picker/DateRangePicker.js +134 -126
  78. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  80. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
  81. package/dist/components/emoji-popover/EmojiPopover.cjs +1 -1
  82. package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
  83. package/dist/components/emoji-popover/EmojiPopover.d.ts +25 -4
  84. package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
  85. package/dist/components/emoji-popover/EmojiPopover.js +84 -73
  86. package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
  87. package/dist/components/empty-state/EmptyState.cjs +1 -1
  88. package/dist/components/empty-state/EmptyState.cjs.map +1 -1
  89. package/dist/components/empty-state/EmptyState.d.ts +3 -3
  90. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  91. package/dist/components/empty-state/EmptyState.js +11 -9
  92. package/dist/components/empty-state/EmptyState.js.map +1 -1
  93. package/dist/components/error-message/ErrorMessage.cjs +1 -1
  94. package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
  95. package/dist/components/error-message/ErrorMessage.d.ts +3 -3
  96. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
  97. package/dist/components/error-message/ErrorMessage.js +10 -9
  98. package/dist/components/error-message/ErrorMessage.js.map +1 -1
  99. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -1
  100. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts +7 -6
  101. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -1
  102. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -1
  103. package/dist/components/global-banner/GlobalBanner.cjs +1 -1
  104. package/dist/components/global-banner/GlobalBanner.cjs.map +1 -1
  105. package/dist/components/global-banner/GlobalBanner.d.ts +10 -5
  106. package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -1
  107. package/dist/components/global-banner/GlobalBanner.js +33 -26
  108. package/dist/components/global-banner/GlobalBanner.js.map +1 -1
  109. package/dist/components/icon-button/IconButton.css +1 -1
  110. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  111. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  112. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  113. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  114. package/dist/components/image-preview/ImagePreview.css +1 -1
  115. package/dist/components/image-preview/ImagePreview.d.ts +12 -1
  116. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  117. package/dist/components/image-preview/ImagePreview.js +25 -20
  118. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  119. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  120. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  121. package/dist/components/link-preview/LinkPreview.cjs +1 -1
  122. package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
  123. package/dist/components/link-preview/LinkPreview.d.ts +12 -6
  124. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
  125. package/dist/components/link-preview/LinkPreview.js +19 -16
  126. package/dist/components/link-preview/LinkPreview.js.map +1 -1
  127. package/dist/components/mention-badge/MentionBadge.cjs +1 -1
  128. package/dist/components/mention-badge/MentionBadge.cjs.map +1 -1
  129. package/dist/components/mention-badge/MentionBadge.d.ts +3 -1
  130. package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -1
  131. package/dist/components/mention-badge/MentionBadge.js +18 -23
  132. package/dist/components/mention-badge/MentionBadge.js.map +1 -1
  133. package/dist/components/menu-group-heading/MenuGroupHeading.cjs.map +1 -1
  134. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts +3 -3
  135. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts.map +1 -1
  136. package/dist/components/menu-group-heading/MenuGroupHeading.js.map +1 -1
  137. package/dist/components/menu-item/MenuItem.cjs +1 -1
  138. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  139. package/dist/components/menu-item/MenuItem.d.ts +2 -0
  140. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  141. package/dist/components/menu-item/MenuItem.js +29 -28
  142. package/dist/components/menu-item/MenuItem.js.map +1 -1
  143. package/dist/components/message-actions/MessageActions.cjs +1 -1
  144. package/dist/components/message-actions/MessageActions.cjs.map +1 -1
  145. package/dist/components/message-actions/MessageActions.d.ts +26 -2
  146. package/dist/components/message-actions/MessageActions.d.ts.map +1 -1
  147. package/dist/components/message-actions/MessageActions.js +67 -55
  148. package/dist/components/message-actions/MessageActions.js.map +1 -1
  149. package/dist/components/message-header/MessageHeader.cjs.map +1 -1
  150. package/dist/components/message-header/MessageHeader.d.ts +5 -3
  151. package/dist/components/message-header/MessageHeader.d.ts.map +1 -1
  152. package/dist/components/message-header/MessageHeader.js.map +1 -1
  153. package/dist/components/message-separator/MessageSeparator.cjs +1 -1
  154. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
  155. package/dist/components/message-separator/MessageSeparator.d.ts +8 -4
  156. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
  157. package/dist/components/message-separator/MessageSeparator.js +16 -14
  158. package/dist/components/message-separator/MessageSeparator.js.map +1 -1
  159. package/dist/components/modal/Modal.cjs +1 -1
  160. package/dist/components/modal/Modal.cjs.map +1 -1
  161. package/dist/components/modal/Modal.css +1 -1
  162. package/dist/components/modal/Modal.d.ts +40 -4
  163. package/dist/components/modal/Modal.d.ts.map +1 -1
  164. package/dist/components/modal/Modal.js +105 -56
  165. package/dist/components/modal/Modal.js.map +1 -1
  166. package/dist/components/modal/Modal.module.scss.cjs +1 -1
  167. package/dist/components/modal/Modal.module.scss.js +14 -12
  168. package/dist/components/modal/Modal.module.scss.js.map +1 -1
  169. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  170. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  171. package/dist/components/modal-header/ModalHeader.css +1 -1
  172. package/dist/components/modal-header/ModalHeader.d.ts +16 -1
  173. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  174. package/dist/components/modal-header/ModalHeader.js +72 -57
  175. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  176. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  177. package/dist/components/modal-header/ModalHeader.module.scss.js +15 -13
  178. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  179. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +1 -1
  180. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -1
  181. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts +4 -1
  182. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -1
  183. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +11 -10
  184. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -1
  185. package/dist/components/new-message-banner/NewMessageBanner.cjs +1 -1
  186. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
  187. package/dist/components/new-message-banner/NewMessageBanner.d.ts +15 -3
  188. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
  189. package/dist/components/new-message-banner/NewMessageBanner.js +30 -22
  190. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -1
  193. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  194. package/dist/components/pagination-dots/PaginationDots.d.ts +5 -1
  195. package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -1
  196. package/dist/components/pagination-dots/PaginationDots.js +22 -19
  197. package/dist/components/pagination-dots/PaginationDots.js.map +1 -1
  198. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  199. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  200. package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
  201. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
  202. package/dist/components/permalink-preview/PermalinkPreview.d.ts +16 -5
  203. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
  204. package/dist/components/permalink-preview/PermalinkPreview.js +39 -35
  205. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
  206. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +1 -1
  207. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -1
  208. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts +8 -1
  209. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -1
  210. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +20 -17
  211. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -1
  212. package/dist/components/popover-menu/PopoverMenu.cjs +1 -1
  213. package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
  214. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  215. package/dist/components/popover-menu/PopoverMenu.d.ts +9 -1
  216. package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
  217. package/dist/components/popover-menu/PopoverMenu.js +39 -28
  218. package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
  219. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  220. package/dist/components/popover-menu/PopoverMenu.module.scss.js +12 -10
  221. package/dist/components/popover-menu/PopoverMenu.module.scss.js.map +1 -1
  222. package/dist/components/popover-notice/PopoverNotice.cjs +1 -1
  223. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
  224. package/dist/components/popover-notice/PopoverNotice.d.ts +13 -5
  225. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
  226. package/dist/components/popover-notice/PopoverNotice.js +58 -48
  227. package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
  228. package/dist/components/profile-popover/ProfilePopover.cjs +1 -1
  229. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
  230. package/dist/components/profile-popover/ProfilePopover.d.ts +34 -12
  231. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
  232. package/dist/components/profile-popover/ProfilePopover.js +122 -106
  233. package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
  234. package/dist/components/progress-bar/ProgressBar.cjs +1 -1
  235. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
  236. package/dist/components/progress-bar/ProgressBar.d.ts +4 -3
  237. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
  238. package/dist/components/progress-bar/ProgressBar.js +9 -7
  239. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  240. package/dist/components/radio/Radio.css +1 -1
  241. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  242. package/dist/components/radio/Radio.module.scss.js +11 -11
  243. package/dist/components/reaction-button/ReactionButton.cjs +1 -1
  244. package/dist/components/reaction-button/ReactionButton.cjs.map +1 -1
  245. package/dist/components/reaction-button/ReactionButton.d.ts +3 -1
  246. package/dist/components/reaction-button/ReactionButton.d.ts.map +1 -1
  247. package/dist/components/reaction-button/ReactionButton.js +20 -18
  248. package/dist/components/reaction-button/ReactionButton.js.map +1 -1
  249. package/dist/components/reactions-row/ReactionsRow.cjs +1 -1
  250. package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
  251. package/dist/components/reactions-row/ReactionsRow.d.ts +10 -2
  252. package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
  253. package/dist/components/reactions-row/ReactionsRow.js +33 -28
  254. package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
  255. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  256. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  257. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +15 -7
  258. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  259. package/dist/components/right-sidebar-header/RightSidebarHeader.js +23 -19
  260. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  261. package/dist/components/scrollbar/Scrollbar.cjs +1 -1
  262. package/dist/components/scrollbar/Scrollbar.cjs.map +1 -1
  263. package/dist/components/scrollbar/Scrollbar.css +1 -1
  264. package/dist/components/scrollbar/Scrollbar.d.ts +2 -2
  265. package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -1
  266. package/dist/components/scrollbar/Scrollbar.js +24 -15
  267. package/dist/components/scrollbar/Scrollbar.js.map +1 -1
  268. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  269. package/dist/components/scrollbar/Scrollbar.module.scss.js +4 -4
  270. package/dist/components/scrollbar/simplebar-vendor.css +1 -0
  271. package/dist/components/search-input/SearchInput.cjs +1 -1
  272. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  273. package/dist/components/search-input/SearchInput.d.ts +5 -0
  274. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  275. package/dist/components/search-input/SearchInput.js +92 -85
  276. package/dist/components/search-input/SearchInput.js.map +1 -1
  277. package/dist/components/search-tip-banner/SearchTipBanner.cjs +1 -1
  278. package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -1
  279. package/dist/components/search-tip-banner/SearchTipBanner.d.ts +8 -5
  280. package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -1
  281. package/dist/components/search-tip-banner/SearchTipBanner.js +17 -16
  282. package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -1
  283. package/dist/components/section-notice/SectionNotice.cjs +1 -1
  284. package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
  285. package/dist/components/section-notice/SectionNotice.d.ts +16 -3
  286. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
  287. package/dist/components/section-notice/SectionNotice.js +64 -48
  288. package/dist/components/section-notice/SectionNotice.js.map +1 -1
  289. package/dist/components/select/Select.cjs +1 -1
  290. package/dist/components/select/Select.cjs.map +1 -1
  291. package/dist/components/select/Select.d.ts +8 -1
  292. package/dist/components/select/Select.d.ts.map +1 -1
  293. package/dist/components/select/Select.js +81 -79
  294. package/dist/components/select/Select.js.map +1 -1
  295. package/dist/components/spinner/Spinner.cjs.map +1 -1
  296. package/dist/components/spinner/Spinner.css +1 -1
  297. package/dist/components/spinner/Spinner.d.ts +1 -0
  298. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  299. package/dist/components/spinner/Spinner.js.map +1 -1
  300. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  301. package/dist/components/spinner/Spinner.module.scss.js +5 -5
  302. package/dist/components/status-badge/StatusBadge.css +1 -1
  303. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  304. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  305. package/dist/components/switch/Switch.css +1 -1
  306. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  307. package/dist/components/switch/Switch.module.scss.js +17 -17
  308. package/dist/components/tabs/Tabs.cjs +1 -1
  309. package/dist/components/tabs/Tabs.cjs.map +1 -1
  310. package/dist/components/tabs/Tabs.css +1 -1
  311. package/dist/components/tabs/Tabs.d.ts +14 -3
  312. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  313. package/dist/components/tabs/Tabs.js +62 -53
  314. package/dist/components/tabs/Tabs.js.map +1 -1
  315. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  316. package/dist/components/tabs/Tabs.module.scss.js +13 -12
  317. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  318. package/dist/components/tabs/index.d.ts +1 -1
  319. package/dist/components/tabs/index.d.ts.map +1 -1
  320. package/dist/components/tag/Tag.cjs +1 -1
  321. package/dist/components/tag/Tag.cjs.map +1 -1
  322. package/dist/components/tag/Tag.d.ts +3 -3
  323. package/dist/components/tag/Tag.d.ts.map +1 -1
  324. package/dist/components/tag/Tag.js +12 -11
  325. package/dist/components/tag/Tag.js.map +1 -1
  326. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  327. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  328. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  329. package/dist/components/thread-footer/ThreadFooter.d.ts +19 -3
  330. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  331. package/dist/components/thread-footer/ThreadFooter.js +53 -48
  332. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  333. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  334. package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -18
  335. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  336. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  337. package/dist/components/thread-list-item/ThreadListItem.d.ts +15 -7
  338. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  339. package/dist/components/thread-list-item/ThreadListItem.js +66 -62
  340. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  341. package/dist/components/toast/Toast.cjs +1 -1
  342. package/dist/components/toast/Toast.cjs.map +1 -1
  343. package/dist/components/toast/Toast.d.ts +8 -3
  344. package/dist/components/toast/Toast.d.ts.map +1 -1
  345. package/dist/components/toast/Toast.js +47 -39
  346. package/dist/components/toast/Toast.js.map +1 -1
  347. package/dist/components/tour-point/TourPoint.cjs +1 -1
  348. package/dist/components/tour-point/TourPoint.cjs.map +1 -1
  349. package/dist/components/tour-point/TourPoint.css +1 -1
  350. package/dist/components/tour-point/TourPoint.d.ts +19 -5
  351. package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
  352. package/dist/components/tour-point/TourPoint.js +66 -54
  353. package/dist/components/tour-point/TourPoint.js.map +1 -1
  354. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  355. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  356. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  357. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  358. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  359. package/dist/components/user-avatar/UserAvatar.css +1 -1
  360. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  361. package/dist/components/user-avatar/UserAvatar.module.scss.js +26 -26
  362. package/dist/components/user-avatar-group/UserAvatarGroup.cjs +1 -1
  363. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
  364. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  365. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts +8 -1
  366. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
  367. package/dist/components/user-avatar-group/UserAvatarGroup.js +22 -18
  368. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
  369. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  370. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  371. package/dist/hooks/use-modal-focus.cjs +2 -0
  372. package/dist/hooks/use-modal-focus.cjs.map +1 -0
  373. package/dist/hooks/use-modal-focus.d.ts +26 -0
  374. package/dist/hooks/use-modal-focus.d.ts.map +1 -0
  375. package/dist/hooks/use-modal-focus.js +91 -0
  376. package/dist/hooks/use-modal-focus.js.map +1 -0
  377. package/dist/hooks/use-popover-transition.cjs +1 -1
  378. package/dist/hooks/use-popover-transition.cjs.map +1 -1
  379. package/dist/hooks/use-popover-transition.d.ts +6 -4
  380. package/dist/hooks/use-popover-transition.d.ts.map +1 -1
  381. package/dist/hooks/use-popover-transition.js +19 -15
  382. package/dist/hooks/use-popover-transition.js.map +1 -1
  383. package/dist/index.d.ts +1 -0
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/utils/duration.cjs +2 -0
  386. package/dist/utils/duration.cjs.map +1 -0
  387. package/dist/utils/duration.d.ts +8 -0
  388. package/dist/utils/duration.d.ts.map +1 -0
  389. package/dist/utils/duration.js +11 -0
  390. package/dist/utils/duration.js.map +1 -0
  391. package/dist/utils/props.cjs +2 -0
  392. package/dist/utils/props.cjs.map +1 -0
  393. package/dist/utils/props.d.ts +13 -0
  394. package/dist/utils/props.d.ts.map +1 -0
  395. package/dist/utils/props.js +7 -0
  396. package/dist/utils/props.js.map +1 -0
  397. package/package.json +4 -6
  398. package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(\n -1,\n getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next,\n );\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` – ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span\n className={styles['date-range-picker__calendar-icon']}\n aria-hidden\n >\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || 'mm/dd/yyyy'}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker\"\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span\n className={styles['date-range-picker__month-label']}\n aria-live=\"polite\"\n >\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n }\n onClick={handleToday}\n >\n Today\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {WEEKDAYS.map((d) => (\n <span key={d} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${MONTHS[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected\n ? styles['date-range-picker__day--selected']\n : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent, ReactNode } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n /** Trigger text when no date is selected. Default: \"mm/dd/yyyy\". */\n placeholder?: string;\n /** Formats an ISO `yyyy-mm-dd` date for the trigger. Default: `mm/dd/yyyy`. */\n formatDate?: (iso: string) => string;\n /** Twelve month names, January first. Default: English. */\n monthNames?: string[];\n /** Seven short weekday names, Sunday first. Default: \"Su\" â€Ļ \"Sa\". */\n weekdayNames?: string[];\n /** Accessible name for the calendar dialog. Default: \"Date picker\". */\n dialogLabel?: string;\n /** Today button text. Default: \"Today\". */\n todayLabel?: ReactNode;\n /** Accessible name for the previous-month button. Default: \"Previous month\". */\n previousMonthLabel?: string;\n /** Accessible name for the next-month button. Default: \"Next month\". */\n nextMonthLabel?: string;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n placeholder = 'mm/dd/yyyy',\n formatDate = formatDateDisplay,\n monthNames = MONTHS,\n weekdayNames = WEEKDAYS,\n dialogLabel = 'Date picker',\n todayLabel = 'Today',\n previousMonthLabel = 'Previous month',\n nextMonthLabel = 'Next month',\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(\n -1,\n getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next,\n );\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? selectedDate\n ? formatDate(selectedDate)\n : ''\n : selectedStart\n ? `${formatDate(selectedStart)}${selectedEnd ? ` – ${formatDate(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span\n className={styles['date-range-picker__calendar-icon']}\n aria-hidden\n >\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || placeholder}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={dialogLabel}\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span\n className={styles['date-range-picker__month-label']}\n aria-live=\"polite\"\n >\n {monthNames[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n }\n onClick={handleToday}\n >\n {todayLabel}\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label={previousMonthLabel}\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label={nextMonthLabel}\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {weekdayNames.map((d, i) => (\n <span key={i} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${monthNames[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected\n ? styles['date-range-picker__day--selected']\n : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","placeholder","formatDate","monthNames","weekdayNames","dialogLabel","todayLabel","previousMonthLabel","nextMonthLabel","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./DateRangePicker.css');const e={"date-range-picker":"_date-range-picker_18hzd_2","date-range-picker__trigger":"_date-range-picker__trigger_18hzd_9","date-range-picker--disabled":"_date-range-picker--disabled_18hzd_21","date-range-picker--open":"_date-range-picker--open_18hzd_21","date-range-picker__calendar-icon":"_date-range-picker__calendar-icon_18hzd_38","date-range-picker__value":"_date-range-picker__value_18hzd_50","date-range-picker__chevron":"_date-range-picker__chevron_18hzd_68","date-range-picker__popover":"_date-range-picker__popover_18hzd_84","date-range-picker__popover--above":"_date-range-picker__popover--above_18hzd_103","date-range-picker__popover--visible":"_date-range-picker__popover--visible_18hzd_106","date-range-picker__header":"_date-range-picker__header_18hzd_112","date-range-picker__month-label":"_date-range-picker__month-label_18hzd_118","date-range-picker__header-actions":"_date-range-picker__header-actions_18hzd_129","date-range-picker__nav-buttons":"_date-range-picker__nav-buttons_18hzd_135","date-range-picker__weekdays":"_date-range-picker__weekdays_18hzd_139","date-range-picker__weekday":"_date-range-picker__weekday_18hzd_139","date-range-picker__grid":"_date-range-picker__grid_18hzd_159","date-range-picker__week":"_date-range-picker__week_18hzd_139","date-range-picker__day-empty":"_date-range-picker__day-empty_18hzd_169","date-range-picker__day-cell":"_date-range-picker__day-cell_18hzd_173","date-range-picker__day-cell--in-range":"_date-range-picker__day-cell--in-range_18hzd_182","date-range-picker__day-cell--range-start":"_date-range-picker__day-cell--range-start_18hzd_182","date-range-picker__day-cell--range-end":"_date-range-picker__day-cell--range-end_18hzd_182","date-range-picker__day":"_date-range-picker__day_18hzd_169","date-range-picker__day--selected":"_date-range-picker__day--selected_18hzd_225","date-range-picker__day--today":"_date-range-picker__day--today_18hzd_238"};exports.default=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./DateRangePicker.css');const e={"date-range-picker":"_date-range-picker_212m8_2","date-range-picker__trigger":"_date-range-picker__trigger_212m8_9","date-range-picker--disabled":"_date-range-picker--disabled_212m8_21","date-range-picker--open":"_date-range-picker--open_212m8_21","date-range-picker__calendar-icon":"_date-range-picker__calendar-icon_212m8_38","date-range-picker__value":"_date-range-picker__value_212m8_50","date-range-picker__chevron":"_date-range-picker__chevron_212m8_68","date-range-picker__popover":"_date-range-picker__popover_212m8_84","date-range-picker__popover--above":"_date-range-picker__popover--above_212m8_103","date-range-picker__popover--visible":"_date-range-picker__popover--visible_212m8_106","date-range-picker__header":"_date-range-picker__header_212m8_112","date-range-picker__month-label":"_date-range-picker__month-label_212m8_118","date-range-picker__header-actions":"_date-range-picker__header-actions_212m8_129","date-range-picker__nav-buttons":"_date-range-picker__nav-buttons_212m8_135","date-range-picker__weekdays":"_date-range-picker__weekdays_212m8_139","date-range-picker__weekday":"_date-range-picker__weekday_212m8_139","date-range-picker__grid":"_date-range-picker__grid_212m8_159","date-range-picker__week":"_date-range-picker__week_212m8_139","date-range-picker__day-empty":"_date-range-picker__day-empty_212m8_169","date-range-picker__day-cell":"_date-range-picker__day-cell_212m8_173","date-range-picker__day-cell--in-range":"_date-range-picker__day-cell--in-range_212m8_182","date-range-picker__day-cell--range-start":"_date-range-picker__day-cell--range-start_212m8_182","date-range-picker__day-cell--range-end":"_date-range-picker__day-cell--range-end_212m8_182","date-range-picker__day":"_date-range-picker__day_212m8_169","date-range-picker__day--selected":"_date-range-picker__day--selected_212m8_225","date-range-picker__day--today":"_date-range-picker__day--today_212m8_238"};exports.default=e;
2
2
  //# sourceMappingURL=DateRangePicker.module.scss.cjs.map
@@ -1,30 +1,30 @@
1
1
  import './DateRangePicker.css';const e = {
2
- "date-range-picker": "_date-range-picker_18hzd_2",
3
- "date-range-picker__trigger": "_date-range-picker__trigger_18hzd_9",
4
- "date-range-picker--disabled": "_date-range-picker--disabled_18hzd_21",
5
- "date-range-picker--open": "_date-range-picker--open_18hzd_21",
6
- "date-range-picker__calendar-icon": "_date-range-picker__calendar-icon_18hzd_38",
7
- "date-range-picker__value": "_date-range-picker__value_18hzd_50",
8
- "date-range-picker__chevron": "_date-range-picker__chevron_18hzd_68",
9
- "date-range-picker__popover": "_date-range-picker__popover_18hzd_84",
10
- "date-range-picker__popover--above": "_date-range-picker__popover--above_18hzd_103",
11
- "date-range-picker__popover--visible": "_date-range-picker__popover--visible_18hzd_106",
12
- "date-range-picker__header": "_date-range-picker__header_18hzd_112",
13
- "date-range-picker__month-label": "_date-range-picker__month-label_18hzd_118",
14
- "date-range-picker__header-actions": "_date-range-picker__header-actions_18hzd_129",
15
- "date-range-picker__nav-buttons": "_date-range-picker__nav-buttons_18hzd_135",
16
- "date-range-picker__weekdays": "_date-range-picker__weekdays_18hzd_139",
17
- "date-range-picker__weekday": "_date-range-picker__weekday_18hzd_139",
18
- "date-range-picker__grid": "_date-range-picker__grid_18hzd_159",
19
- "date-range-picker__week": "_date-range-picker__week_18hzd_139",
20
- "date-range-picker__day-empty": "_date-range-picker__day-empty_18hzd_169",
21
- "date-range-picker__day-cell": "_date-range-picker__day-cell_18hzd_173",
22
- "date-range-picker__day-cell--in-range": "_date-range-picker__day-cell--in-range_18hzd_182",
23
- "date-range-picker__day-cell--range-start": "_date-range-picker__day-cell--range-start_18hzd_182",
24
- "date-range-picker__day-cell--range-end": "_date-range-picker__day-cell--range-end_18hzd_182",
25
- "date-range-picker__day": "_date-range-picker__day_18hzd_169",
26
- "date-range-picker__day--selected": "_date-range-picker__day--selected_18hzd_225",
27
- "date-range-picker__day--today": "_date-range-picker__day--today_18hzd_238"
2
+ "date-range-picker": "_date-range-picker_212m8_2",
3
+ "date-range-picker__trigger": "_date-range-picker__trigger_212m8_9",
4
+ "date-range-picker--disabled": "_date-range-picker--disabled_212m8_21",
5
+ "date-range-picker--open": "_date-range-picker--open_212m8_21",
6
+ "date-range-picker__calendar-icon": "_date-range-picker__calendar-icon_212m8_38",
7
+ "date-range-picker__value": "_date-range-picker__value_212m8_50",
8
+ "date-range-picker__chevron": "_date-range-picker__chevron_212m8_68",
9
+ "date-range-picker__popover": "_date-range-picker__popover_212m8_84",
10
+ "date-range-picker__popover--above": "_date-range-picker__popover--above_212m8_103",
11
+ "date-range-picker__popover--visible": "_date-range-picker__popover--visible_212m8_106",
12
+ "date-range-picker__header": "_date-range-picker__header_212m8_112",
13
+ "date-range-picker__month-label": "_date-range-picker__month-label_212m8_118",
14
+ "date-range-picker__header-actions": "_date-range-picker__header-actions_212m8_129",
15
+ "date-range-picker__nav-buttons": "_date-range-picker__nav-buttons_212m8_135",
16
+ "date-range-picker__weekdays": "_date-range-picker__weekdays_212m8_139",
17
+ "date-range-picker__weekday": "_date-range-picker__weekday_212m8_139",
18
+ "date-range-picker__grid": "_date-range-picker__grid_212m8_159",
19
+ "date-range-picker__week": "_date-range-picker__week_212m8_139",
20
+ "date-range-picker__day-empty": "_date-range-picker__day-empty_212m8_169",
21
+ "date-range-picker__day-cell": "_date-range-picker__day-cell_212m8_173",
22
+ "date-range-picker__day-cell--in-range": "_date-range-picker__day-cell--in-range_212m8_182",
23
+ "date-range-picker__day-cell--range-start": "_date-range-picker__day-cell--range-start_212m8_182",
24
+ "date-range-picker__day-cell--range-end": "_date-range-picker__day-cell--range-end_212m8_182",
25
+ "date-range-picker__day": "_date-range-picker__day_212m8_169",
26
+ "date-range-picker__day--selected": "_date-range-picker__day--selected_212m8_225",
27
+ "date-range-picker__day--today": "_date-range-picker__day--today_212m8_238"
28
28
  };
29
29
  export {
30
30
  e as default
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),r=require("react"),__U=require("@mattermost/compass-icons/components/close.js"),U=__U?.default??__U,W=require("../button/Button.cjs"),X=require("../emoji/Emoji.cjs"),v=require("../emoji-button/EmojiButton.cjs"),Y=require("../empty-state/EmptyState.cjs"),B=require("../icon/Icon.cjs"),T=require("../icon-button/IconButton.cjs"),E=require("../menu-group-heading/MenuGroupHeading.cjs"),Z=require("../scrollbar/Scrollbar.cjs"),ee=require("../search-input/SearchInput.cjs"),oe=require("../../illustrations/search.svg.cjs"),s=require("./EmojiPopover.module.scss.cjs"),z=["đŸ–ī¸","🖐đŸģ","🖐đŸŧ","🖐đŸŊ","🖐🏾","🖐đŸŋ"],se=["","đŸģ","đŸŧ","đŸŊ","🏾","đŸŋ"],ie=new Set(["👋","🤚","✋","đŸ–ī¸","🖖","👌","🤌","🤏","âœŒī¸","🤞","đŸĢ°","🤟","🤘","🤙","👈","👉","👆","👇","â˜ī¸","đŸĢĩ","👍","👎","✊","👊","🤛","🤜","👏","🙌","đŸĢļ","👐","🤲","🙏","💅","đŸ¤ŗ","đŸ’Ē","đŸĻĩ","đŸĻļ","👂","đŸĻģ","👃"]);function re(n,t){return!t||!ie.has(n)?n:n.replace("ī¸","")+t}function te({className:n="",categories:t,shortcodes:c={},defaultQuery:M="",autoFocus:h=!1,onEmojiSelect:u,onSearch:p,onCustomEmojiClick:_,customEmojiLabel:P="Custom emoji"}){var R;const[l,O]=r.useState(M),[D,H]=r.useState(((R=t[0])==null?void 0:R.id)??""),[x,g]=r.useState(null),[$,k]=r.useState(null),[m,A]=r.useState(0),[a,f]=r.useState(!1),N=r.useRef(null),S=`${r.useId()}-skin-tone-picker`,F=se[m],y=r.useRef(null),I=r.useRef({});r.useEffect(()=>{var o;h&&((o=N.current)==null||o.focus())},[h]);const b=o=>{O(o),p==null||p(o)},K=[...new Set(t.flatMap(o=>o.emojis))],C=l?K.filter(o=>(c[o]??"").includes(l.toLowerCase())||o===l):[],j=l?C.length>0?"search-results":"empty":"default";function L(o){return c[o]?`:${c[o]}:`:o}function Q(o){const i=I.current[o],d=y.current;if(!i||!d)return;const J=i.getBoundingClientRect().top-d.getBoundingClientRect().top+d.scrollTop;d.scrollTo({top:J,behavior:"smooth"})}const G=[s.default["emoji-popover"],n].filter(Boolean).join(" "),V={"aria-label":"",width:"80px",height:"60px",children:e.jsx(oe.default,{})},q=o=>{const i=re(o,F);return e.jsx(v.default,{emoji:i,size:"medium",padding:"compact","aria-label":i,onMouseEnter:()=>{g(i),k(o)},onMouseLeave:()=>{g(null),k(null)},onClick:()=>u==null?void 0:u(i)},o)},w=()=>j==="empty"?e.jsx(Y.default,{illustration:V,title:"No emojis found",description:"Try a different search term."}):j==="search-results"?e.jsx("div",{className:s.default["emoji-popover__emoji-list"],children:e.jsxs("div",{className:s.default["emoji-popover__group"],children:[e.jsx(E.default,{label:"Search Results"}),e.jsx("div",{className:s.default["emoji-popover__emoji-row"],children:C.map(q)})]})}):e.jsx("div",{className:s.default["emoji-popover__emoji-list"],children:t.map(o=>e.jsxs("div",{ref:i=>{I.current[o.id]=i},className:s.default["emoji-popover__group"],children:[e.jsx(E.default,{label:o.label}),e.jsx("div",{className:[s.default["emoji-popover__emoji-row"],o.wrap===!1?s.default["emoji-popover__emoji-row--nowrap"]:""].filter(Boolean).join(" "),children:o.emojis.map(q)})]},o.id))});return e.jsxs("div",{className:G,children:[e.jsxs("div",{className:s.default["emoji-popover__header"],children:[e.jsxs("div",{className:s.default["emoji-popover__header-panels"],children:[e.jsx("div",{className:[s.default["emoji-popover__header-main"],a?s.default["emoji-popover__header-main--hidden"]:""].filter(Boolean).join(" "),inert:a,"aria-hidden":a||void 0,children:e.jsxs("div",{className:s.default["emoji-popover__search-row"],children:[e.jsx(ee.default,{ref:N,placeholder:"Search emojis",size:"small",className:s.default["emoji-popover__search-input"],value:l,onChange:o=>b(o.target.value),onClear:()=>b("")}),!l&&e.jsx(v.default,{emoji:z[m],size:"small","aria-label":"Select skin tone","aria-expanded":a,"aria-controls":S,onClick:()=>f(!0)})]})}),e.jsxs("div",{id:S,className:[s.default["emoji-popover__skin-tone-picker"],a?s.default["emoji-popover__skin-tone-picker--visible"]:""].filter(Boolean).join(" "),inert:!a,"aria-hidden":!a||void 0,children:[e.jsx("span",{className:s.default["emoji-popover__skin-tone-label"],children:"Skin tone"}),e.jsx("div",{className:s.default["emoji-popover__skin-tone-options"],children:z.map((o,i)=>e.jsx(v.default,{emoji:o,size:"small",toggled:m===i,"aria-label":i===0?"Default skin tone":`Skin tone ${i}`,onClick:()=>{A(i),f(!1)}},i))}),e.jsx(T.default,{size:"small",padding:"compact",icon:e.jsx(B.default,{glyph:e.jsx(U,{}),size:"16"}),"aria-label":"Close skin tone picker",onClick:()=>f(!1)})]})]}),!l&&e.jsx("div",{className:s.default["emoji-popover__categories"],children:t.map(o=>e.jsx(T.default,{size:"small",padding:"compact",icon:e.jsx(B.default,{glyph:e.jsx(o.icon,{}),size:"16"}),"aria-label":o.label,active:D===o.id,onClick:()=>{H(o.id),Q(o.id)}},o.id))})]}),e.jsx("div",{className:s.default["emoji-popover__scroll-view"],children:j==="empty"?w():e.jsx(Z.default,{alwaysVisible:!0,ref:y,children:w()})}),e.jsxs("div",{className:s.default["emoji-popover__footer"],children:[e.jsx("div",{className:s.default["emoji-popover__footer-preview"],children:x?e.jsxs(e.Fragment,{children:[e.jsx(X.default,{emoji:x,size:"32"}),e.jsx("span",{className:s.default["emoji-popover__footer-shortcode"],children:L($??"")})]}):e.jsx("span",{className:s.default["emoji-popover__footer-hint"],children:"Select an Emoji"})}),_&&e.jsx(W.default,{emphasis:"tertiary",size:"small",onClick:_,children:P})]})]})}exports.default=te;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),t=require("react"),__re=require("@mattermost/compass-icons/components/close.js"),re=__re?.default??__re,le=require("../button/Button.cjs"),ae=require("../emoji/Emoji.cjs"),v=require("../emoji-button/EmojiButton.cjs"),ne=require("../empty-state/EmptyState.cjs"),T=require("../icon/Icon.cjs"),B=require("../icon-button/IconButton.cjs"),E=require("../menu-group-heading/MenuGroupHeading.cjs"),de=require("../scrollbar/Scrollbar.cjs"),ce=require("../search-input/SearchInput.cjs"),ue=require("../../illustrations/search.svg.cjs"),s=require("./EmojiPopover.module.scss.cjs"),pe=r=>r===0?"Default skin tone":`Skin tone ${r}`,z=["đŸ–ī¸","🖐đŸģ","🖐đŸŧ","🖐đŸŊ","🖐🏾","🖐đŸŋ"],me=["","đŸģ","đŸŧ","đŸŊ","🏾","đŸŋ"],fe=new Set(["👋","🤚","✋","đŸ–ī¸","🖖","👌","🤌","🤏","âœŒī¸","🤞","đŸĢ°","🤟","🤘","🤙","👈","👉","👆","👇","â˜ī¸","đŸĢĩ","👍","👎","✊","👊","🤛","🤜","👏","🙌","đŸĢļ","👐","🤲","🙏","💅","đŸ¤ŗ","đŸ’Ē","đŸĻĩ","đŸĻļ","👂","đŸĻģ","👃"]);function je(r,l){return!l||!fe.has(r)?r:r.replace("ī¸","")+l}function ve({className:r="",categories:l,shortcodes:c={},defaultQuery:M="",autoFocus:h=!1,onEmojiSelect:u,onSearch:p,onCustomEmojiClick:_,customEmojiLabel:P="Custom emoji",searchPlaceholder:O="Search emojis",searchClearLabel:L,searchResultsLabel:D="Search Results",emptyTitle:F="No emojis found",emptyDescription:H="Try a different search term.",previewHintLabel:$="Select an Emoji",skinToneButtonLabel:A="Select skin tone",skinToneLabel:K="Skin tone",formatSkinToneLabel:Q=pe,closeSkinTonePickerLabel:G="Close skin tone picker"}){var R;const[a,V]=t.useState(M),[J,U]=t.useState(((R=l[0])==null?void 0:R.id)??""),[x,k]=t.useState(null),[W,g]=t.useState(null),[m,X]=t.useState(0),[n,f]=t.useState(!1),N=t.useRef(null),S=`${t.useId()}-skin-tone-picker`,Y=me[m],y=t.useRef(null),b=t.useRef({});t.useEffect(()=>{var o;h&&((o=N.current)==null||o.focus())},[h]);const I=o=>{V(o),p==null||p(o)},Z=[...new Set(l.flatMap(o=>o.emojis))],C=a?Z.filter(o=>(c[o]??"").includes(a.toLowerCase())||o===a):[],j=a?C.length>0?"search-results":"empty":"default";function ee(o){return c[o]?`:${c[o]}:`:o}function oe(o){const i=b.current[o],d=y.current;if(!i||!d)return;const te=i.getBoundingClientRect().top-d.getBoundingClientRect().top+d.scrollTop;d.scrollTo({top:te,behavior:"smooth"})}const se=[s.default["emoji-popover"],r].filter(Boolean).join(" "),ie={"aria-label":"",width:"80px",height:"60px",children:e.jsx(ue.default,{})},q=o=>{const i=je(o,Y);return e.jsx(v.default,{emoji:i,size:"medium",padding:"compact","aria-label":i,onMouseEnter:()=>{k(i),g(o)},onMouseLeave:()=>{k(null),g(null)},onClick:()=>u==null?void 0:u(i)},o)},w=()=>j==="empty"?e.jsx(ne.default,{illustration:ie,title:F,description:H}):j==="search-results"?e.jsx("div",{className:s.default["emoji-popover__emoji-list"],children:e.jsxs("div",{className:s.default["emoji-popover__group"],children:[e.jsx(E.default,{label:D}),e.jsx("div",{className:s.default["emoji-popover__emoji-row"],children:C.map(q)})]})}):e.jsx("div",{className:s.default["emoji-popover__emoji-list"],children:l.map(o=>e.jsxs("div",{ref:i=>{b.current[o.id]=i},className:s.default["emoji-popover__group"],children:[e.jsx(E.default,{label:o.label}),e.jsx("div",{className:[s.default["emoji-popover__emoji-row"],o.wrap===!1?s.default["emoji-popover__emoji-row--nowrap"]:""].filter(Boolean).join(" "),children:o.emojis.map(q)})]},o.id))});return e.jsxs("div",{className:se,children:[e.jsxs("div",{className:s.default["emoji-popover__header"],children:[e.jsxs("div",{className:s.default["emoji-popover__header-panels"],children:[e.jsx("div",{className:[s.default["emoji-popover__header-main"],n?s.default["emoji-popover__header-main--hidden"]:""].filter(Boolean).join(" "),inert:n,"aria-hidden":n||void 0,children:e.jsxs("div",{className:s.default["emoji-popover__search-row"],children:[e.jsx(ce.default,{ref:N,placeholder:O,size:"small",className:s.default["emoji-popover__search-input"],value:a,onChange:o=>I(o.target.value),onClear:()=>I(""),clearLabel:L}),!a&&e.jsx(v.default,{emoji:z[m],size:"small","aria-label":A,"aria-expanded":n,"aria-controls":S,onClick:()=>f(!0)})]})}),e.jsxs("div",{id:S,className:[s.default["emoji-popover__skin-tone-picker"],n?s.default["emoji-popover__skin-tone-picker--visible"]:""].filter(Boolean).join(" "),inert:!n,"aria-hidden":!n||void 0,children:[e.jsx("span",{className:s.default["emoji-popover__skin-tone-label"],children:K}),e.jsx("div",{className:s.default["emoji-popover__skin-tone-options"],children:z.map((o,i)=>e.jsx(v.default,{emoji:o,size:"small",toggled:m===i,"aria-label":Q(i),onClick:()=>{X(i),f(!1)}},i))}),e.jsx(B.default,{size:"small",padding:"compact",icon:e.jsx(T.default,{glyph:e.jsx(re,{}),size:"16"}),"aria-label":G,onClick:()=>f(!1)})]})]}),!a&&e.jsx("div",{className:s.default["emoji-popover__categories"],children:l.map(o=>e.jsx(B.default,{size:"small",padding:"compact",icon:e.jsx(T.default,{glyph:e.jsx(o.icon,{}),size:"16"}),"aria-label":o.label,active:J===o.id,onClick:()=>{U(o.id),oe(o.id)}},o.id))})]}),e.jsx("div",{className:s.default["emoji-popover__scroll-view"],children:j==="empty"?w():e.jsx(de.default,{alwaysVisible:!0,ref:y,children:w()})}),e.jsxs("div",{className:s.default["emoji-popover__footer"],children:[e.jsx("div",{className:s.default["emoji-popover__footer-preview"],children:x?e.jsxs(e.Fragment,{children:[e.jsx(ae.default,{emoji:x,size:"32"}),e.jsx("span",{className:s.default["emoji-popover__footer-shortcode"],children:ee(W??"")})]}):e.jsx("span",{className:s.default["emoji-popover__footer-hint"],children:$})}),_&&e.jsx(le.default,{emphasis:"tertiary",size:"small",onClick:_,children:P})]})]})}exports.default=ve;
2
2
  //# sourceMappingURL=EmojiPopover.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPopover.cjs","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"sourcesContent":["import { useEffect, useId, useRef, useState } from 'react';\nimport type { ComponentType } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport Button from '@/components/button/Button';\nimport Emoji from '@/components/emoji/Emoji';\nimport EmojiButton from '@/components/emoji-button/EmojiButton';\nimport EmptyState from '@/components/empty-state/EmptyState';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport MenuGroupHeading from '@/components/menu-group-heading/MenuGroupHeading';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport SearchInput from '@/components/search-input/SearchInput';\nimport SearchIllustration from '@/illustrations/search';\nimport styles from './EmojiPopover.module.scss';\n\nexport interface EmojiCategory {\n id: string;\n label: string;\n /** Icon component rendered in the category navigation bar. */\n icon: ComponentType;\n emojis: string[];\n /** When false the row does not wrap (e.g. Recently Used). @default true */\n wrap?: boolean;\n}\n\nexport interface EmojiPopoverProps {\n className?: string;\n /** Emoji categories to display, supplied by the host. */\n categories: EmojiCategory[];\n /** Map of base emoji → shortcode name used for footer display. */\n shortcodes?: Record<string, string>;\n /** Pre-seeds the search field. Useful for static specimen demos. */\n defaultQuery?: string;\n /** Focus the search field on mount. */\n autoFocus?: boolean;\n /** Called with the selected emoji character. */\n onEmojiSelect?: (emoji: string) => void;\n /**\n * Called on every query change. Use this to trigger async custom-emoji\n * searches on the host side; local filtering over `categories` always runs.\n */\n onSearch?: (query: string) => void;\n /** Shows a tertiary button in the footer right. Omit to hide the button. */\n onCustomEmojiClick?: () => void;\n /** Label for the custom emoji button. @default 'Custom emoji' */\n customEmojiLabel?: string;\n}\n\nconst SKIN_TONES = ['đŸ–ī¸', '🖐đŸģ', '🖐đŸŧ', '🖐đŸŊ', '🖐🏾', '🖐đŸŋ'];\nconst SKIN_TONE_MODIFIERS = [\n '',\n '\\u{1F3FB}',\n '\\u{1F3FC}',\n '\\u{1F3FD}',\n '\\u{1F3FE}',\n '\\u{1F3FF}',\n];\n\nconst MODIFIER_BASES = new Set([\n '👋',\n '🤚',\n '✋',\n 'đŸ–ī¸',\n '🖖',\n '👌',\n '🤌',\n '🤏',\n 'âœŒī¸',\n '🤞',\n 'đŸĢ°',\n '🤟',\n '🤘',\n '🤙',\n '👈',\n '👉',\n '👆',\n '👇',\n 'â˜ī¸',\n 'đŸĢĩ',\n '👍',\n '👎',\n '✊',\n '👊',\n '🤛',\n '🤜',\n '👏',\n '🙌',\n 'đŸĢļ',\n '👐',\n '🤲',\n '🙏',\n '💅',\n 'đŸ¤ŗ',\n 'đŸ’Ē',\n 'đŸĻĩ',\n 'đŸĻļ',\n '👂',\n 'đŸĻģ',\n '👃',\n]);\n\nfunction applyModifier(emoji: string, modifier: string): string {\n if (!modifier || !MODIFIER_BASES.has(emoji)) return emoji;\n // Strip VS16 before the modifier so composed sequences render correctly\n return emoji.replace('ī¸', '') + modifier;\n}\n\nexport default function EmojiPopover({\n className = '',\n categories,\n shortcodes = {},\n defaultQuery = '',\n autoFocus = false,\n onEmojiSelect,\n onSearch,\n onCustomEmojiClick,\n customEmojiLabel = 'Custom emoji',\n}: EmojiPopoverProps) {\n const [query, setQuery] = useState(defaultQuery);\n const [activeCategoryId, setActiveCategoryId] = useState(\n categories[0]?.id ?? '',\n );\n const [hoveredEmoji, setHoveredEmoji] = useState<string | null>(null);\n const [hoveredBase, setHoveredBase] = useState<string | null>(null);\n const [skinToneIndex, setSkinToneIndex] = useState(0);\n const [showSkinTonePicker, setShowSkinTonePicker] = useState(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const generatedId = useId();\n const skinTonePickerId = `${generatedId}-skin-tone-picker`;\n const skinToneModifier = SKIN_TONE_MODIFIERS[skinToneIndex];\n const scrollRef = useRef<HTMLDivElement>(null);\n const groupRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n useEffect(() => {\n if (autoFocus) searchRef.current?.focus();\n }, [autoFocus]);\n\n const handleQueryChange = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n\n const allEmojis = [...new Set(categories.flatMap((c) => c.emojis))];\n const searchResults = query\n ? allEmojis.filter((emoji) => {\n const name = shortcodes[emoji] ?? '';\n return name.includes(query.toLowerCase()) || emoji === query;\n })\n : [];\n\n const computedState = query\n ? searchResults.length > 0\n ? 'search-results'\n : 'empty'\n : 'default';\n\n function getShortcode(emoji: string): string {\n return shortcodes[emoji] ? `:${shortcodes[emoji]}:` : emoji;\n }\n\n function scrollToCategory(id: string) {\n const group = groupRefs.current[id];\n const scroller = scrollRef.current;\n if (!group || !scroller) return;\n const top =\n group.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className]\n .filter(Boolean)\n .join(' ');\n\n const emptyIllustration = {\n 'aria-label': '' as const,\n width: '80px',\n height: '60px',\n children: <SearchIllustration />,\n };\n\n const renderEmoji = (emoji: string) => {\n const displayed = applyModifier(emoji, skinToneModifier);\n return (\n <EmojiButton\n key={emoji}\n emoji={displayed}\n size=\"medium\"\n padding=\"compact\"\n aria-label={displayed}\n onMouseEnter={() => {\n setHoveredEmoji(displayed);\n setHoveredBase(emoji);\n }}\n onMouseLeave={() => {\n setHoveredEmoji(null);\n setHoveredBase(null);\n }}\n onClick={() => onEmojiSelect?.(displayed)}\n />\n );\n };\n\n const renderBody = () => {\n if (computedState === 'empty') {\n return (\n <EmptyState\n illustration={emptyIllustration}\n title=\"No emojis found\"\n description=\"Try a different search term.\"\n />\n );\n }\n\n if (computedState === 'search-results') {\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n <div className={styles['emoji-popover__group']}>\n <MenuGroupHeading label=\"Search Results\" />\n <div className={styles['emoji-popover__emoji-row']}>\n {searchResults.map(renderEmoji)}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n {categories.map((cat) => (\n <div\n key={cat.id}\n ref={(el) => {\n groupRefs.current[cat.id] = el;\n }}\n className={styles['emoji-popover__group']}\n >\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false\n ? styles['emoji-popover__emoji-row--nowrap']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {cat.emojis.map(renderEmoji)}\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={rootClass}>\n <div className={styles['emoji-popover__header']}>\n <div className={styles['emoji-popover__header-panels']}>\n <div\n className={[\n styles['emoji-popover__header-main'],\n showSkinTonePicker\n ? styles['emoji-popover__header-main--hidden']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={showSkinTonePicker}\n aria-hidden={showSkinTonePicker || undefined}\n >\n <div className={styles['emoji-popover__search-row']}>\n <SearchInput\n ref={searchRef}\n placeholder=\"Search emojis\"\n size=\"small\"\n className={styles['emoji-popover__search-input']}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n onClear={() => handleQueryChange('')}\n />\n {!query && (\n <EmojiButton\n emoji={SKIN_TONES[skinToneIndex]}\n size=\"small\"\n aria-label=\"Select skin tone\"\n aria-expanded={showSkinTonePicker}\n aria-controls={skinTonePickerId}\n onClick={() => setShowSkinTonePicker(true)}\n />\n )}\n </div>\n </div>\n\n <div\n id={skinTonePickerId}\n className={[\n styles['emoji-popover__skin-tone-picker'],\n showSkinTonePicker\n ? styles['emoji-popover__skin-tone-picker--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>\n Skin tone\n </span>\n <div className={styles['emoji-popover__skin-tone-options']}>\n {SKIN_TONES.map((emoji, i) => (\n <EmojiButton\n key={i}\n emoji={emoji}\n size=\"small\"\n toggled={skinToneIndex === i}\n aria-label={i === 0 ? 'Default skin tone' : `Skin tone ${i}`}\n onClick={() => {\n setSkinToneIndex(i);\n setShowSkinTonePicker(false);\n }}\n />\n ))}\n </div>\n <IconButton\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n aria-label=\"Close skin tone picker\"\n onClick={() => setShowSkinTonePicker(false)}\n />\n </div>\n </div>\n\n {!query && (\n <div className={styles['emoji-popover__categories']}>\n {categories.map((cat) => (\n <IconButton\n key={cat.id}\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<cat.icon />} size=\"16\" />}\n aria-label={cat.label}\n active={activeCategoryId === cat.id}\n onClick={() => {\n setActiveCategoryId(cat.id);\n scrollToCategory(cat.id);\n }}\n />\n ))}\n </div>\n )}\n </div>\n\n <div className={styles['emoji-popover__scroll-view']}>\n {computedState === 'empty' ? (\n renderBody()\n ) : (\n <Scrollbar alwaysVisible ref={scrollRef}>\n {renderBody()}\n </Scrollbar>\n )}\n </div>\n\n <div className={styles['emoji-popover__footer']}>\n <div className={styles['emoji-popover__footer-preview']}>\n {hoveredEmoji ? (\n <>\n <Emoji emoji={hoveredEmoji} size=\"32\" />\n <span className={styles['emoji-popover__footer-shortcode']}>\n {getShortcode(hoveredBase ?? '')}\n </span>\n </>\n ) : (\n <span className={styles['emoji-popover__footer-hint']}>\n Select an Emoji\n </span>\n )}\n </div>\n {onCustomEmojiClick && (\n <Button emphasis=\"tertiary\" size=\"small\" onClick={onCustomEmojiClick}>\n {customEmojiLabel}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["SKIN_TONES","SKIN_TONE_MODIFIERS","MODIFIER_BASES","applyModifier","emoji","modifier","EmojiPopover","className","categories","shortcodes","defaultQuery","autoFocus","onEmojiSelect","onSearch","onCustomEmojiClick","customEmojiLabel","query","setQuery","useState","activeCategoryId","setActiveCategoryId","_a","hoveredEmoji","setHoveredEmoji","hoveredBase","setHoveredBase","skinToneIndex","setSkinToneIndex","showSkinTonePicker","setShowSkinTonePicker","searchRef","useRef","skinTonePickerId","useId","skinToneModifier","scrollRef","groupRefs","useEffect","handleQueryChange","next","allEmojis","c","searchResults","computedState","getShortcode","scrollToCategory","id","group","scroller","top","rootClass","styles","emptyIllustration","SearchIllustration","renderEmoji","displayed","jsx","EmojiButton","renderBody","EmptyState","jsxs","MenuGroupHeading","cat","el","SearchInput","e","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":"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"}
1
+ {"version":3,"file":"EmojiPopover.cjs","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"sourcesContent":["import { useEffect, useId, useRef, useState } from 'react';\nimport type { ComponentType, ReactNode } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport Button from '@/components/button/Button';\nimport Emoji from '@/components/emoji/Emoji';\nimport EmojiButton from '@/components/emoji-button/EmojiButton';\nimport EmptyState from '@/components/empty-state/EmptyState';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport MenuGroupHeading from '@/components/menu-group-heading/MenuGroupHeading';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport SearchInput from '@/components/search-input/SearchInput';\nimport SearchIllustration from '@/illustrations/search';\nimport styles from './EmojiPopover.module.scss';\n\nexport interface EmojiCategory {\n id: string;\n /** Group heading and category button name. Kept as `string`: it's the button's `aria-label`. */\n label: string;\n /** Icon component rendered in the category navigation bar. */\n icon: ComponentType;\n emojis: string[];\n /** When false the row does not wrap (e.g. Recently Used). @default true */\n wrap?: boolean;\n}\n\nexport interface EmojiPopoverProps {\n className?: string;\n /** Emoji categories to display, supplied by the host. */\n categories: EmojiCategory[];\n /** Map of base emoji → shortcode name used for footer display. */\n shortcodes?: Record<string, string>;\n /** Pre-seeds the search field. Useful for static specimen demos. */\n defaultQuery?: string;\n /** Focus the search field on mount. */\n autoFocus?: boolean;\n /** Called with the selected emoji character. */\n onEmojiSelect?: (emoji: string) => void;\n /**\n * Called on every query change. Use this to trigger async custom-emoji\n * searches on the host side; local filtering over `categories` always runs.\n */\n onSearch?: (query: string) => void;\n /** Shows a tertiary button in the footer right. Omit to hide the button. */\n onCustomEmojiClick?: () => void;\n /** Label for the custom emoji button. Accepts translated nodes. @default 'Custom emoji' */\n customEmojiLabel?: ReactNode;\n /** Search field placeholder. @default 'Search emojis' */\n searchPlaceholder?: string;\n /** Accessible name for the search clear button. @default 'Clear search' */\n searchClearLabel?: string;\n /** Heading above search results. @default 'Search Results' */\n searchResultsLabel?: ReactNode;\n /** Empty search title. @default 'No emojis found' */\n emptyTitle?: ReactNode;\n /** Empty search description. @default 'Try a different search term.' */\n emptyDescription?: ReactNode;\n /** Footer hint when no emoji is hovered. @default 'Select an Emoji' */\n previewHintLabel?: ReactNode;\n /** Accessible name for the skin tone button. @default 'Select skin tone' */\n skinToneButtonLabel?: string;\n /** Skin tone picker heading. @default 'Skin tone' */\n skinToneLabel?: ReactNode;\n /** Accessible name per skin tone (0 = default). @default 'Default skin tone' / `Skin tone {index}` */\n formatSkinToneLabel?: (index: number) => string;\n /** Accessible name for closing the skin tone picker. @default 'Close skin tone picker' */\n closeSkinTonePickerLabel?: string;\n}\n\nconst defaultFormatSkinToneLabel = (index: number) =>\n index === 0 ? 'Default skin tone' : `Skin tone ${index}`;\n\nconst SKIN_TONES = ['đŸ–ī¸', '🖐đŸģ', '🖐đŸŧ', '🖐đŸŊ', '🖐🏾', '🖐đŸŋ'];\nconst SKIN_TONE_MODIFIERS = [\n '',\n '\\u{1F3FB}',\n '\\u{1F3FC}',\n '\\u{1F3FD}',\n '\\u{1F3FE}',\n '\\u{1F3FF}',\n];\n\nconst MODIFIER_BASES = new Set([\n '👋',\n '🤚',\n '✋',\n 'đŸ–ī¸',\n '🖖',\n '👌',\n '🤌',\n '🤏',\n 'âœŒī¸',\n '🤞',\n 'đŸĢ°',\n '🤟',\n '🤘',\n '🤙',\n '👈',\n '👉',\n '👆',\n '👇',\n 'â˜ī¸',\n 'đŸĢĩ',\n '👍',\n '👎',\n '✊',\n '👊',\n '🤛',\n '🤜',\n '👏',\n '🙌',\n 'đŸĢļ',\n '👐',\n '🤲',\n '🙏',\n '💅',\n 'đŸ¤ŗ',\n 'đŸ’Ē',\n 'đŸĻĩ',\n 'đŸĻļ',\n '👂',\n 'đŸĻģ',\n '👃',\n]);\n\nfunction applyModifier(emoji: string, modifier: string): string {\n if (!modifier || !MODIFIER_BASES.has(emoji)) return emoji;\n // Strip VS16 before the modifier so composed sequences render correctly\n return emoji.replace('ī¸', '') + modifier;\n}\n\nexport default function EmojiPopover({\n className = '',\n categories,\n shortcodes = {},\n defaultQuery = '',\n autoFocus = false,\n onEmojiSelect,\n onSearch,\n onCustomEmojiClick,\n customEmojiLabel = 'Custom emoji',\n searchPlaceholder = 'Search emojis',\n searchClearLabel,\n searchResultsLabel = 'Search Results',\n emptyTitle = 'No emojis found',\n emptyDescription = 'Try a different search term.',\n previewHintLabel = 'Select an Emoji',\n skinToneButtonLabel = 'Select skin tone',\n skinToneLabel = 'Skin tone',\n formatSkinToneLabel = defaultFormatSkinToneLabel,\n closeSkinTonePickerLabel = 'Close skin tone picker',\n}: EmojiPopoverProps) {\n const [query, setQuery] = useState(defaultQuery);\n const [activeCategoryId, setActiveCategoryId] = useState(\n categories[0]?.id ?? '',\n );\n const [hoveredEmoji, setHoveredEmoji] = useState<string | null>(null);\n const [hoveredBase, setHoveredBase] = useState<string | null>(null);\n const [skinToneIndex, setSkinToneIndex] = useState(0);\n const [showSkinTonePicker, setShowSkinTonePicker] = useState(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const generatedId = useId();\n const skinTonePickerId = `${generatedId}-skin-tone-picker`;\n const skinToneModifier = SKIN_TONE_MODIFIERS[skinToneIndex];\n const scrollRef = useRef<HTMLDivElement>(null);\n const groupRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n useEffect(() => {\n if (autoFocus) searchRef.current?.focus();\n }, [autoFocus]);\n\n const handleQueryChange = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n\n const allEmojis = [...new Set(categories.flatMap((c) => c.emojis))];\n const searchResults = query\n ? allEmojis.filter((emoji) => {\n const name = shortcodes[emoji] ?? '';\n return name.includes(query.toLowerCase()) || emoji === query;\n })\n : [];\n\n const computedState = query\n ? searchResults.length > 0\n ? 'search-results'\n : 'empty'\n : 'default';\n\n function getShortcode(emoji: string): string {\n return shortcodes[emoji] ? `:${shortcodes[emoji]}:` : emoji;\n }\n\n function scrollToCategory(id: string) {\n const group = groupRefs.current[id];\n const scroller = scrollRef.current;\n if (!group || !scroller) return;\n const top =\n group.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className]\n .filter(Boolean)\n .join(' ');\n\n const emptyIllustration = {\n 'aria-label': '' as const,\n width: '80px',\n height: '60px',\n children: <SearchIllustration />,\n };\n\n const renderEmoji = (emoji: string) => {\n const displayed = applyModifier(emoji, skinToneModifier);\n return (\n <EmojiButton\n key={emoji}\n emoji={displayed}\n size=\"medium\"\n padding=\"compact\"\n aria-label={displayed}\n onMouseEnter={() => {\n setHoveredEmoji(displayed);\n setHoveredBase(emoji);\n }}\n onMouseLeave={() => {\n setHoveredEmoji(null);\n setHoveredBase(null);\n }}\n onClick={() => onEmojiSelect?.(displayed)}\n />\n );\n };\n\n const renderBody = () => {\n if (computedState === 'empty') {\n return (\n <EmptyState\n illustration={emptyIllustration}\n title={emptyTitle}\n description={emptyDescription}\n />\n );\n }\n\n if (computedState === 'search-results') {\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n <div className={styles['emoji-popover__group']}>\n <MenuGroupHeading label={searchResultsLabel} />\n <div className={styles['emoji-popover__emoji-row']}>\n {searchResults.map(renderEmoji)}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n {categories.map((cat) => (\n <div\n key={cat.id}\n ref={(el) => {\n groupRefs.current[cat.id] = el;\n }}\n className={styles['emoji-popover__group']}\n >\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false\n ? styles['emoji-popover__emoji-row--nowrap']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {cat.emojis.map(renderEmoji)}\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={rootClass}>\n <div className={styles['emoji-popover__header']}>\n <div className={styles['emoji-popover__header-panels']}>\n <div\n className={[\n styles['emoji-popover__header-main'],\n showSkinTonePicker\n ? styles['emoji-popover__header-main--hidden']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={showSkinTonePicker}\n aria-hidden={showSkinTonePicker || undefined}\n >\n <div className={styles['emoji-popover__search-row']}>\n <SearchInput\n ref={searchRef}\n placeholder={searchPlaceholder}\n size=\"small\"\n className={styles['emoji-popover__search-input']}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n onClear={() => handleQueryChange('')}\n clearLabel={searchClearLabel}\n />\n {!query && (\n <EmojiButton\n emoji={SKIN_TONES[skinToneIndex]}\n size=\"small\"\n aria-label={skinToneButtonLabel}\n aria-expanded={showSkinTonePicker}\n aria-controls={skinTonePickerId}\n onClick={() => setShowSkinTonePicker(true)}\n />\n )}\n </div>\n </div>\n\n <div\n id={skinTonePickerId}\n className={[\n styles['emoji-popover__skin-tone-picker'],\n showSkinTonePicker\n ? styles['emoji-popover__skin-tone-picker--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>\n {skinToneLabel}\n </span>\n <div className={styles['emoji-popover__skin-tone-options']}>\n {SKIN_TONES.map((emoji, i) => (\n <EmojiButton\n key={i}\n emoji={emoji}\n size=\"small\"\n toggled={skinToneIndex === i}\n aria-label={formatSkinToneLabel(i)}\n onClick={() => {\n setSkinToneIndex(i);\n setShowSkinTonePicker(false);\n }}\n />\n ))}\n </div>\n <IconButton\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n aria-label={closeSkinTonePickerLabel}\n onClick={() => setShowSkinTonePicker(false)}\n />\n </div>\n </div>\n\n {!query && (\n <div className={styles['emoji-popover__categories']}>\n {categories.map((cat) => (\n <IconButton\n key={cat.id}\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<cat.icon />} size=\"16\" />}\n aria-label={cat.label}\n active={activeCategoryId === cat.id}\n onClick={() => {\n setActiveCategoryId(cat.id);\n scrollToCategory(cat.id);\n }}\n />\n ))}\n </div>\n )}\n </div>\n\n <div className={styles['emoji-popover__scroll-view']}>\n {computedState === 'empty' ? (\n renderBody()\n ) : (\n <Scrollbar alwaysVisible ref={scrollRef}>\n {renderBody()}\n </Scrollbar>\n )}\n </div>\n\n <div className={styles['emoji-popover__footer']}>\n <div className={styles['emoji-popover__footer-preview']}>\n {hoveredEmoji ? (\n <>\n <Emoji emoji={hoveredEmoji} size=\"32\" />\n <span className={styles['emoji-popover__footer-shortcode']}>\n {getShortcode(hoveredBase ?? '')}\n </span>\n </>\n ) : (\n <span className={styles['emoji-popover__footer-hint']}>\n {previewHintLabel}\n </span>\n )}\n </div>\n {onCustomEmojiClick && (\n <Button emphasis=\"tertiary\" size=\"small\" onClick={onCustomEmojiClick}>\n {customEmojiLabel}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["defaultFormatSkinToneLabel","index","SKIN_TONES","SKIN_TONE_MODIFIERS","MODIFIER_BASES","applyModifier","emoji","modifier","EmojiPopover","className","categories","shortcodes","defaultQuery","autoFocus","onEmojiSelect","onSearch","onCustomEmojiClick","customEmojiLabel","searchPlaceholder","searchClearLabel","searchResultsLabel","emptyTitle","emptyDescription","previewHintLabel","skinToneButtonLabel","skinToneLabel","formatSkinToneLabel","closeSkinTonePickerLabel","query","setQuery","useState","activeCategoryId","setActiveCategoryId","_a","hoveredEmoji","setHoveredEmoji","hoveredBase","setHoveredBase","skinToneIndex","setSkinToneIndex","showSkinTonePicker","setShowSkinTonePicker","searchRef","useRef","skinTonePickerId","useId","skinToneModifier","scrollRef","groupRefs","useEffect","handleQueryChange","next","allEmojis","c","searchResults","computedState","getShortcode","scrollToCategory","id","group","scroller","top","rootClass","styles","emptyIllustration","SearchIllustration","renderEmoji","displayed","jsx","EmojiButton","renderBody","EmptyState","jsxs","MenuGroupHeading","cat","el","SearchInput","e","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { ComponentType } from 'react';
1
+ import { ComponentType, ReactNode } from 'react';
2
2
  export interface EmojiCategory {
3
3
  id: string;
4
+ /** Group heading and category button name. Kept as `string`: it's the button's `aria-label`. */
4
5
  label: string;
5
6
  /** Icon component rendered in the category navigation bar. */
6
7
  icon: ComponentType;
@@ -27,8 +28,28 @@ export interface EmojiPopoverProps {
27
28
  onSearch?: (query: string) => void;
28
29
  /** Shows a tertiary button in the footer right. Omit to hide the button. */
29
30
  onCustomEmojiClick?: () => void;
30
- /** Label for the custom emoji button. @default 'Custom emoji' */
31
- customEmojiLabel?: string;
31
+ /** Label for the custom emoji button. Accepts translated nodes. @default 'Custom emoji' */
32
+ customEmojiLabel?: ReactNode;
33
+ /** Search field placeholder. @default 'Search emojis' */
34
+ searchPlaceholder?: string;
35
+ /** Accessible name for the search clear button. @default 'Clear search' */
36
+ searchClearLabel?: string;
37
+ /** Heading above search results. @default 'Search Results' */
38
+ searchResultsLabel?: ReactNode;
39
+ /** Empty search title. @default 'No emojis found' */
40
+ emptyTitle?: ReactNode;
41
+ /** Empty search description. @default 'Try a different search term.' */
42
+ emptyDescription?: ReactNode;
43
+ /** Footer hint when no emoji is hovered. @default 'Select an Emoji' */
44
+ previewHintLabel?: ReactNode;
45
+ /** Accessible name for the skin tone button. @default 'Select skin tone' */
46
+ skinToneButtonLabel?: string;
47
+ /** Skin tone picker heading. @default 'Skin tone' */
48
+ skinToneLabel?: ReactNode;
49
+ /** Accessible name per skin tone (0 = default). @default 'Default skin tone' / `Skin tone {index}` */
50
+ formatSkinToneLabel?: (index: number) => string;
51
+ /** Accessible name for closing the skin tone picker. @default 'Close skin tone picker' */
52
+ closeSkinTonePickerLabel?: string;
32
53
  }
33
- export default function EmojiPopover({ className, categories, shortcodes, defaultQuery, autoFocus, onEmojiSelect, onSearch, onCustomEmojiClick, customEmojiLabel, }: EmojiPopoverProps): import("react/jsx-runtime").JSX.Element;
54
+ export default function EmojiPopover({ className, categories, shortcodes, defaultQuery, autoFocus, onEmojiSelect, onSearch, onCustomEmojiClick, customEmojiLabel, searchPlaceholder, searchClearLabel, searchResultsLabel, emptyTitle, emptyDescription, previewHintLabel, skinToneButtonLabel, skinToneLabel, formatSkinToneLabel, closeSkinTonePickerLabel, }: EmojiPopoverProps): import("react/jsx-runtime").JSX.Element;
34
55
  //# sourceMappingURL=EmojiPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPopover.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAc3C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA6DD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,UAAU,EACV,UAAe,EACf,YAAiB,EACjB,SAAiB,EACjB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,gBAAiC,GAClC,EAAE,iBAAiB,2CAkRnB"}
1
+ {"version":3,"file":"EmojiPopover.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AActD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,qDAAqD;IACrD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,0FAA0F;IAC1F,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAgED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,UAAU,EACV,UAAe,EACf,YAAiB,EACjB,SAAiB,EACjB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,gBAAiC,EACjC,iBAAmC,EACnC,gBAAgB,EAChB,kBAAqC,EACrC,UAA8B,EAC9B,gBAAiD,EACjD,gBAAoC,EACpC,mBAAwC,EACxC,aAA2B,EAC3B,mBAAgD,EAChD,wBAAmD,GACpD,EAAE,iBAAiB,2CAmRnB"}