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

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 (458) hide show
  1. package/README.md +5 -4
  2. package/dist/components/action-button/ActionButton.cjs +1 -1
  3. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  4. package/dist/components/action-button/ActionButton.d.ts +2 -1
  5. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  6. package/dist/components/action-button/ActionButton.js +36 -31
  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.map +1 -1
  10. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
  11. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
  12. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
  13. package/dist/components/admin-panel/AdminPanel.js.map +1 -1
  14. package/dist/components/admin-panel/index.d.ts +1 -1
  15. package/dist/components/admin-panel/index.d.ts.map +1 -1
  16. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
  17. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
  18. package/dist/components/admin-panel-footer/AdminPanelFooter.js +1 -8
  19. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
  20. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  21. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.js +2 -16
  23. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  24. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  25. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  26. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  27. package/dist/components/button/Button.cjs +1 -1
  28. package/dist/components/button/Button.cjs.map +1 -1
  29. package/dist/components/button/Button.d.ts +4 -3
  30. package/dist/components/button/Button.d.ts.map +1 -1
  31. package/dist/components/button/Button.js +39 -23
  32. package/dist/components/button/Button.js.map +1 -1
  33. package/dist/components/card-button/CardButton.cjs +1 -1
  34. package/dist/components/card-button/CardButton.cjs.map +1 -1
  35. package/dist/components/card-button/CardButton.d.ts +2 -1
  36. package/dist/components/card-button/CardButton.d.ts.map +1 -1
  37. package/dist/components/card-button/CardButton.js +47 -42
  38. package/dist/components/card-button/CardButton.js.map +1 -1
  39. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
  41. package/dist/components/checkbox/Checkbox.cjs +1 -1
  42. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  43. package/dist/components/checkbox/Checkbox.d.ts +2 -1
  44. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  45. package/dist/components/checkbox/Checkbox.js +39 -37
  46. package/dist/components/checkbox/Checkbox.js.map +1 -1
  47. package/dist/components/chip/Chip.cjs.map +1 -1
  48. package/dist/components/chip/Chip.d.ts.map +1 -1
  49. package/dist/components/chip/Chip.js.map +1 -1
  50. package/dist/components/chip/ChipGroup.cjs.map +1 -1
  51. package/dist/components/chip/ChipGroup.d.ts.map +1 -1
  52. package/dist/components/chip/ChipGroup.js.map +1 -1
  53. package/dist/components/combobox/Combobox.cjs +1 -1
  54. package/dist/components/combobox/Combobox.cjs.map +1 -1
  55. package/dist/components/combobox/Combobox.css +1 -1
  56. package/dist/components/combobox/Combobox.d.ts +30 -1
  57. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  58. package/dist/components/combobox/Combobox.js +381 -276
  59. package/dist/components/combobox/Combobox.js.map +1 -1
  60. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  61. package/dist/components/combobox/Combobox.module.scss.js +24 -22
  62. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  63. package/dist/components/combobox/index.d.ts +1 -1
  64. package/dist/components/combobox/index.d.ts.map +1 -1
  65. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  66. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  67. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  68. package/dist/components/date-range-picker/DateRangePicker.js +27 -10
  69. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  70. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  71. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
  72. package/dist/components/emoji/Emoji.cjs.map +1 -1
  73. package/dist/components/emoji/Emoji.d.ts.map +1 -1
  74. package/dist/components/emoji/Emoji.js +1 -5
  75. package/dist/components/emoji/Emoji.js.map +1 -1
  76. package/dist/components/emoji-button/EmojiButton.cjs.map +1 -1
  77. package/dist/components/emoji-button/EmojiButton.d.ts.map +1 -1
  78. package/dist/components/emoji-button/EmojiButton.js +10 -1
  79. package/dist/components/emoji-button/EmojiButton.js.map +1 -1
  80. package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
  81. package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
  82. package/dist/components/emoji-popover/EmojiPopover.js +34 -17
  83. package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
  84. package/dist/components/empty-state/EmptyState.cjs.map +1 -1
  85. package/dist/components/empty-state/EmptyState.d.ts +2 -2
  86. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  87. package/dist/components/empty-state/EmptyState.js.map +1 -1
  88. package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
  89. package/dist/components/error-message/ErrorMessage.d.ts +3 -2
  90. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
  91. package/dist/components/error-message/ErrorMessage.js.map +1 -1
  92. package/dist/components/icon/Icon.js +2 -2
  93. package/dist/components/icon/index.d.ts +1 -1
  94. package/dist/components/icon/index.d.ts.map +1 -1
  95. package/dist/components/icon-button/IconButton.cjs +1 -1
  96. package/dist/components/icon-button/IconButton.cjs.map +1 -1
  97. package/dist/components/icon-button/IconButton.d.ts +2 -1
  98. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  99. package/dist/components/icon-button/IconButton.js +61 -57
  100. package/dist/components/icon-button/IconButton.js.map +1 -1
  101. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  102. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  103. package/dist/components/image-preview/ImagePreview.js +8 -1
  104. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  105. package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
  106. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
  107. package/dist/components/link-preview/LinkPreview.js +1 -7
  108. package/dist/components/link-preview/LinkPreview.js.map +1 -1
  109. package/dist/components/link-preview/index.d.ts +1 -1
  110. package/dist/components/link-preview/index.d.ts.map +1 -1
  111. package/dist/components/menu-item/MenuItem.cjs +1 -1
  112. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  113. package/dist/components/menu-item/MenuItem.d.ts +4 -3
  114. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  115. package/dist/components/menu-item/MenuItem.js +55 -43
  116. package/dist/components/menu-item/MenuItem.js.map +1 -1
  117. package/dist/components/message-actions/index.d.ts +1 -1
  118. package/dist/components/message-actions/index.d.ts.map +1 -1
  119. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
  120. package/dist/components/message-separator/MessageSeparator.css +1 -1
  121. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
  122. package/dist/components/message-separator/MessageSeparator.js +8 -1
  123. package/dist/components/message-separator/MessageSeparator.js.map +1 -1
  124. package/dist/components/message-separator/MessageSeparator.module.scss.cjs +1 -1
  125. package/dist/components/message-separator/MessageSeparator.module.scss.js +11 -11
  126. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
  127. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
  128. package/dist/components/new-message-banner/NewMessageBanner.js +1 -5
  129. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
  130. package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
  131. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
  132. package/dist/components/permalink-preview/PermalinkPreview.css +1 -1
  133. package/dist/components/permalink-preview/PermalinkPreview.d.ts +9 -2
  134. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
  135. package/dist/components/permalink-preview/PermalinkPreview.js +66 -25
  136. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
  137. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
  138. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -9
  139. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js.map +1 -1
  140. package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
  141. package/dist/components/popover-menu/PopoverMenu.d.ts +1 -2
  142. package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
  143. package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
  144. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
  145. package/dist/components/popover-notice/PopoverNotice.d.ts +4 -3
  146. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
  147. package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
  148. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
  149. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
  150. package/dist/components/profile-popover/ProfilePopover.js +14 -1
  151. package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
  152. package/dist/components/progress-bar/ProgressBar.cjs +1 -1
  153. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
  154. package/dist/components/progress-bar/ProgressBar.css +1 -1
  155. package/dist/components/progress-bar/ProgressBar.d.ts +6 -1
  156. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
  157. package/dist/components/progress-bar/ProgressBar.js +21 -15
  158. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  159. package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
  160. package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -8
  161. package/dist/components/progress-bar/ProgressBar.module.scss.js.map +1 -1
  162. package/dist/components/radio/Radio.cjs +1 -1
  163. package/dist/components/radio/Radio.cjs.map +1 -1
  164. package/dist/components/radio/Radio.d.ts +2 -1
  165. package/dist/components/radio/Radio.d.ts.map +1 -1
  166. package/dist/components/radio/Radio.js +15 -13
  167. package/dist/components/radio/Radio.js.map +1 -1
  168. package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
  169. package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
  170. package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
  171. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  172. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  173. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +4 -2
  174. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  175. package/dist/components/right-sidebar-header/RightSidebarHeader.js +51 -43
  176. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  177. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  178. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  179. package/dist/components/search-input/SearchInput.js.map +1 -1
  180. package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
  181. package/dist/components/section-notice/SectionNotice.d.ts +4 -4
  182. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
  183. package/dist/components/section-notice/SectionNotice.js.map +1 -1
  184. package/dist/components/select/Select.cjs.map +1 -1
  185. package/dist/components/select/Select.d.ts.map +1 -1
  186. package/dist/components/select/Select.js.map +1 -1
  187. package/dist/components/switch/Switch.cjs +1 -1
  188. package/dist/components/switch/Switch.cjs.map +1 -1
  189. package/dist/components/switch/Switch.d.ts +2 -1
  190. package/dist/components/switch/Switch.d.ts.map +1 -1
  191. package/dist/components/switch/Switch.js +31 -29
  192. package/dist/components/switch/Switch.js.map +1 -1
  193. package/dist/components/tabs/Tabs.cjs +1 -1
  194. package/dist/components/tabs/Tabs.cjs.map +1 -1
  195. package/dist/components/tabs/Tabs.css +1 -1
  196. package/dist/components/tabs/Tabs.d.ts +6 -2
  197. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  198. package/dist/components/tabs/Tabs.js +47 -39
  199. package/dist/components/tabs/Tabs.js.map +1 -1
  200. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  201. package/dist/components/tabs/Tabs.module.scss.js +13 -12
  202. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  203. package/dist/components/tag/Tag.cjs.map +1 -1
  204. package/dist/components/tag/Tag.css +1 -1
  205. package/dist/components/tag/Tag.d.ts +2 -2
  206. package/dist/components/tag/Tag.d.ts.map +1 -1
  207. package/dist/components/tag/Tag.js.map +1 -1
  208. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  209. package/dist/components/tag/Tag.module.scss.js +11 -11
  210. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  211. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  212. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  213. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  214. package/dist/components/thread-footer/ThreadFooter.js +39 -43
  215. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  216. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  217. package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -17
  218. package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
  219. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  220. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  221. package/dist/components/thread-list-item/ThreadListItem.js +3 -1
  222. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  223. package/dist/components/toast/Toast.cjs.map +1 -1
  224. package/dist/components/toast/Toast.d.ts +3 -2
  225. package/dist/components/toast/Toast.d.ts.map +1 -1
  226. package/dist/components/toast/Toast.js.map +1 -1
  227. package/dist/components/tooltip/Tooltip.cjs +1 -1
  228. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  229. package/dist/components/tooltip/Tooltip.d.ts +3 -3
  230. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  231. package/dist/components/tooltip/Tooltip.js +9 -9
  232. package/dist/components/tooltip/Tooltip.js.map +1 -1
  233. package/dist/components/tour-point/TourPoint.cjs.map +1 -1
  234. package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
  235. package/dist/components/tour-point/TourPoint.js +8 -6
  236. package/dist/components/tour-point/TourPoint.js.map +1 -1
  237. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
  238. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
  239. package/dist/components/user-avatar-group/UserAvatarGroup.js +23 -30
  240. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
  241. package/dist/hooks/use-anchored-popup-portal.cjs.map +1 -1
  242. package/dist/hooks/use-anchored-popup-portal.d.ts.map +1 -1
  243. package/dist/hooks/use-anchored-popup-portal.js +1 -3
  244. package/dist/hooks/use-anchored-popup-portal.js.map +1 -1
  245. package/dist/illustrations/incoming-webhook.svg.cjs +1 -1
  246. package/dist/illustrations/incoming-webhook.svg.cjs.map +1 -1
  247. package/dist/illustrations/incoming-webhook.svg.js +1 -1
  248. package/dist/illustrations/incoming-webhook.svg.js.map +1 -1
  249. package/dist/index.cjs +1 -1
  250. package/dist/index.d.ts +0 -14
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +170 -204
  253. package/dist/index.js.map +1 -1
  254. package/dist/utils/anchoredPopupPlacement.cjs.map +1 -1
  255. package/dist/utils/anchoredPopupPlacement.d.ts.map +1 -1
  256. package/dist/utils/anchoredPopupPlacement.js +4 -1
  257. package/dist/utils/anchoredPopupPlacement.js.map +1 -1
  258. package/package.json +1 -44
  259. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs +0 -2
  260. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs.map +0 -1
  261. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.css +0 -1
  262. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.d.ts +0 -12
  263. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.d.ts.map +0 -1
  264. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js +0 -122
  265. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js.map +0 -1
  266. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs +0 -2
  267. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs.map +0 -1
  268. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js +0 -20
  269. package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js.map +0 -1
  270. package/dist/components/admin-console-sidebar/adminConsoleSidebarModel.d.ts +0 -14
  271. package/dist/components/admin-console-sidebar/adminConsoleSidebarModel.d.ts.map +0 -1
  272. package/dist/components/admin-console-sidebar/index.cjs +0 -2
  273. package/dist/components/admin-console-sidebar/index.cjs.map +0 -1
  274. package/dist/components/admin-console-sidebar/index.d.ts +0 -4
  275. package/dist/components/admin-console-sidebar/index.d.ts.map +0 -1
  276. package/dist/components/admin-console-sidebar/index.js +0 -5
  277. package/dist/components/admin-console-sidebar/index.js.map +0 -1
  278. package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs +0 -2
  279. package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs.map +0 -1
  280. package/dist/components/channel-category-menu/ChannelCategoryMenu.css +0 -1
  281. package/dist/components/channel-category-menu/ChannelCategoryMenu.d.ts +0 -10
  282. package/dist/components/channel-category-menu/ChannelCategoryMenu.d.ts.map +0 -1
  283. package/dist/components/channel-category-menu/ChannelCategoryMenu.js +0 -103
  284. package/dist/components/channel-category-menu/ChannelCategoryMenu.js.map +0 -1
  285. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs +0 -2
  286. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs.map +0 -1
  287. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js +0 -8
  288. package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js.map +0 -1
  289. package/dist/components/channel-category-menu/index.cjs +0 -2
  290. package/dist/components/channel-category-menu/index.cjs.map +0 -1
  291. package/dist/components/channel-category-menu/index.d.ts +0 -3
  292. package/dist/components/channel-category-menu/index.d.ts.map +0 -1
  293. package/dist/components/channel-category-menu/index.js +0 -5
  294. package/dist/components/channel-category-menu/index.js.map +0 -1
  295. package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs +0 -2
  296. package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs.map +0 -1
  297. package/dist/components/channel-header-menu/ChannelHeaderMenu.d.ts +0 -8
  298. package/dist/components/channel-header-menu/ChannelHeaderMenu.d.ts.map +0 -1
  299. package/dist/components/channel-header-menu/ChannelHeaderMenu.js +0 -115
  300. package/dist/components/channel-header-menu/ChannelHeaderMenu.js.map +0 -1
  301. package/dist/components/channel-header-menu/index.cjs +0 -2
  302. package/dist/components/channel-header-menu/index.cjs.map +0 -1
  303. package/dist/components/channel-header-menu/index.d.ts +0 -3
  304. package/dist/components/channel-header-menu/index.d.ts.map +0 -1
  305. package/dist/components/channel-header-menu/index.js +0 -5
  306. package/dist/components/channel-header-menu/index.js.map +0 -1
  307. package/dist/components/channel-menu/ChannelMenu.cjs +0 -2
  308. package/dist/components/channel-menu/ChannelMenu.cjs.map +0 -1
  309. package/dist/components/channel-menu/ChannelMenu.d.ts +0 -8
  310. package/dist/components/channel-menu/ChannelMenu.d.ts.map +0 -1
  311. package/dist/components/channel-menu/ChannelMenu.js +0 -91
  312. package/dist/components/channel-menu/ChannelMenu.js.map +0 -1
  313. package/dist/components/channel-menu/index.cjs +0 -2
  314. package/dist/components/channel-menu/index.cjs.map +0 -1
  315. package/dist/components/channel-menu/index.d.ts +0 -3
  316. package/dist/components/channel-menu/index.d.ts.map +0 -1
  317. package/dist/components/channel-menu/index.js +0 -5
  318. package/dist/components/channel-menu/index.js.map +0 -1
  319. package/dist/components/channels-sidebar/ChannelsSidebar.cjs +0 -2
  320. package/dist/components/channels-sidebar/ChannelsSidebar.cjs.map +0 -1
  321. package/dist/components/channels-sidebar/ChannelsSidebar.css +0 -1
  322. package/dist/components/channels-sidebar/ChannelsSidebar.d.ts +0 -57
  323. package/dist/components/channels-sidebar/ChannelsSidebar.d.ts.map +0 -1
  324. package/dist/components/channels-sidebar/ChannelsSidebar.js +0 -177
  325. package/dist/components/channels-sidebar/ChannelsSidebar.js.map +0 -1
  326. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs +0 -2
  327. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs.map +0 -1
  328. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js +0 -35
  329. package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js.map +0 -1
  330. package/dist/components/channels-sidebar/channelsSidebarModel.cjs +0 -2
  331. package/dist/components/channels-sidebar/channelsSidebarModel.cjs.map +0 -1
  332. package/dist/components/channels-sidebar/channelsSidebarModel.d.ts +0 -22
  333. package/dist/components/channels-sidebar/channelsSidebarModel.d.ts.map +0 -1
  334. package/dist/components/channels-sidebar/channelsSidebarModel.js +0 -20
  335. package/dist/components/channels-sidebar/channelsSidebarModel.js.map +0 -1
  336. package/dist/components/channels-sidebar/index.cjs +0 -2
  337. package/dist/components/channels-sidebar/index.cjs.map +0 -1
  338. package/dist/components/channels-sidebar/index.d.ts +0 -6
  339. package/dist/components/channels-sidebar/index.d.ts.map +0 -1
  340. package/dist/components/channels-sidebar/index.js +0 -12
  341. package/dist/components/channels-sidebar/index.js.map +0 -1
  342. package/dist/components/global-header/GlobalHeader.cjs +0 -2
  343. package/dist/components/global-header/GlobalHeader.cjs.map +0 -1
  344. package/dist/components/global-header/GlobalHeader.css +0 -1
  345. package/dist/components/global-header/GlobalHeader.d.ts +0 -28
  346. package/dist/components/global-header/GlobalHeader.d.ts.map +0 -1
  347. package/dist/components/global-header/GlobalHeader.js +0 -157
  348. package/dist/components/global-header/GlobalHeader.js.map +0 -1
  349. package/dist/components/global-header/GlobalHeader.module.scss.cjs +0 -2
  350. package/dist/components/global-header/GlobalHeader.module.scss.cjs.map +0 -1
  351. package/dist/components/global-header/GlobalHeader.module.scss.js +0 -20
  352. package/dist/components/global-header/GlobalHeader.module.scss.js.map +0 -1
  353. package/dist/components/global-header/index.cjs +0 -2
  354. package/dist/components/global-header/index.cjs.map +0 -1
  355. package/dist/components/global-header/index.d.ts +0 -3
  356. package/dist/components/global-header/index.d.ts.map +0 -1
  357. package/dist/components/global-header/index.js +0 -5
  358. package/dist/components/global-header/index.js.map +0 -1
  359. package/dist/components/help-menu/HelpMenu.cjs +0 -2
  360. package/dist/components/help-menu/HelpMenu.cjs.map +0 -1
  361. package/dist/components/help-menu/HelpMenu.d.ts +0 -8
  362. package/dist/components/help-menu/HelpMenu.d.ts.map +0 -1
  363. package/dist/components/help-menu/HelpMenu.js +0 -64
  364. package/dist/components/help-menu/HelpMenu.js.map +0 -1
  365. package/dist/components/help-menu/index.cjs +0 -2
  366. package/dist/components/help-menu/index.cjs.map +0 -1
  367. package/dist/components/help-menu/index.d.ts +0 -3
  368. package/dist/components/help-menu/index.d.ts.map +0 -1
  369. package/dist/components/help-menu/index.js +0 -5
  370. package/dist/components/help-menu/index.js.map +0 -1
  371. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs +0 -2
  372. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs.map +0 -1
  373. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.d.ts +0 -12
  374. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.d.ts.map +0 -1
  375. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js +0 -172
  376. package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js.map +0 -1
  377. package/dist/components/message-more-options-menu/index.cjs +0 -2
  378. package/dist/components/message-more-options-menu/index.cjs.map +0 -1
  379. package/dist/components/message-more-options-menu/index.d.ts +0 -3
  380. package/dist/components/message-more-options-menu/index.d.ts.map +0 -1
  381. package/dist/components/message-more-options-menu/index.js +0 -5
  382. package/dist/components/message-more-options-menu/index.js.map +0 -1
  383. package/dist/components/plus-menu/PlusMenu.cjs +0 -2
  384. package/dist/components/plus-menu/PlusMenu.cjs.map +0 -1
  385. package/dist/components/plus-menu/PlusMenu.d.ts +0 -8
  386. package/dist/components/plus-menu/PlusMenu.d.ts.map +0 -1
  387. package/dist/components/plus-menu/PlusMenu.js +0 -69
  388. package/dist/components/plus-menu/PlusMenu.js.map +0 -1
  389. package/dist/components/plus-menu/index.cjs +0 -2
  390. package/dist/components/plus-menu/index.cjs.map +0 -1
  391. package/dist/components/plus-menu/index.d.ts +0 -3
  392. package/dist/components/plus-menu/index.d.ts.map +0 -1
  393. package/dist/components/plus-menu/index.js +0 -5
  394. package/dist/components/plus-menu/index.js.map +0 -1
  395. package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs +0 -2
  396. package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs.map +0 -1
  397. package/dist/components/product-switcher-menu/ProductSwitcherMenu.css +0 -1
  398. package/dist/components/product-switcher-menu/ProductSwitcherMenu.d.ts +0 -47
  399. package/dist/components/product-switcher-menu/ProductSwitcherMenu.d.ts.map +0 -1
  400. package/dist/components/product-switcher-menu/ProductSwitcherMenu.js +0 -110
  401. package/dist/components/product-switcher-menu/ProductSwitcherMenu.js.map +0 -1
  402. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs +0 -2
  403. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs.map +0 -1
  404. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js +0 -8
  405. package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js.map +0 -1
  406. package/dist/components/product-switcher-menu/index.cjs +0 -2
  407. package/dist/components/product-switcher-menu/index.cjs.map +0 -1
  408. package/dist/components/product-switcher-menu/index.d.ts +0 -4
  409. package/dist/components/product-switcher-menu/index.d.ts.map +0 -1
  410. package/dist/components/product-switcher-menu/index.js +0 -6
  411. package/dist/components/product-switcher-menu/index.js.map +0 -1
  412. package/dist/components/team-menu/TeamMenu.cjs +0 -2
  413. package/dist/components/team-menu/TeamMenu.cjs.map +0 -1
  414. package/dist/components/team-menu/TeamMenu.css +0 -1
  415. package/dist/components/team-menu/TeamMenu.d.ts +0 -15
  416. package/dist/components/team-menu/TeamMenu.d.ts.map +0 -1
  417. package/dist/components/team-menu/TeamMenu.js +0 -107
  418. package/dist/components/team-menu/TeamMenu.js.map +0 -1
  419. package/dist/components/team-menu/TeamMenu.module.scss.cjs +0 -2
  420. package/dist/components/team-menu/TeamMenu.module.scss.cjs.map +0 -1
  421. package/dist/components/team-menu/TeamMenu.module.scss.js +0 -7
  422. package/dist/components/team-menu/TeamMenu.module.scss.js.map +0 -1
  423. package/dist/components/team-menu/index.cjs +0 -2
  424. package/dist/components/team-menu/index.cjs.map +0 -1
  425. package/dist/components/team-menu/index.d.ts +0 -3
  426. package/dist/components/team-menu/index.d.ts.map +0 -1
  427. package/dist/components/team-menu/index.js +0 -5
  428. package/dist/components/team-menu/index.js.map +0 -1
  429. package/dist/components/team-sidebar/TeamSidebar.cjs +0 -2
  430. package/dist/components/team-sidebar/TeamSidebar.cjs.map +0 -1
  431. package/dist/components/team-sidebar/TeamSidebar.css +0 -1
  432. package/dist/components/team-sidebar/TeamSidebar.d.ts +0 -21
  433. package/dist/components/team-sidebar/TeamSidebar.d.ts.map +0 -1
  434. package/dist/components/team-sidebar/TeamSidebar.js +0 -85
  435. package/dist/components/team-sidebar/TeamSidebar.js.map +0 -1
  436. package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs +0 -2
  437. package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs.map +0 -1
  438. package/dist/components/team-sidebar/TeamSidebar.module.scss.js +0 -13
  439. package/dist/components/team-sidebar/TeamSidebar.module.scss.js.map +0 -1
  440. package/dist/components/team-sidebar/index.cjs +0 -2
  441. package/dist/components/team-sidebar/index.cjs.map +0 -1
  442. package/dist/components/team-sidebar/index.d.ts +0 -3
  443. package/dist/components/team-sidebar/index.d.ts.map +0 -1
  444. package/dist/components/team-sidebar/index.js +0 -5
  445. package/dist/components/team-sidebar/index.js.map +0 -1
  446. package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs +0 -2
  447. package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs.map +0 -1
  448. package/dist/components/thread-actions-menu/ThreadActionsMenu.d.ts +0 -8
  449. package/dist/components/thread-actions-menu/ThreadActionsMenu.d.ts.map +0 -1
  450. package/dist/components/thread-actions-menu/ThreadActionsMenu.js +0 -77
  451. package/dist/components/thread-actions-menu/ThreadActionsMenu.js.map +0 -1
  452. package/dist/components/thread-actions-menu/index.cjs +0 -2
  453. package/dist/components/thread-actions-menu/index.cjs.map +0 -1
  454. package/dist/components/thread-actions-menu/index.d.ts +0 -3
  455. package/dist/components/thread-actions-menu/index.d.ts.map +0 -1
  456. package/dist/components/thread-actions-menu/index.js +0 -5
  457. package/dist/components/thread-actions-menu/index.js.map +0 -1
  458. package/dist/index.css +0 -162
@@ -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(-1, getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next);\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` – ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['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 className={styles['date-range-picker__calendar-icon']} aria-hidden>\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 className={styles['date-range-picker__month-label']} aria-live=\"polite\">\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={<Icon size=\"16\" glyph={<CalendarOutlineIcon />} />}\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 ? styles['date-range-picker__day--selected'] : '',\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 } 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,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_10fcv_2","date-range-picker__trigger":"_date-range-picker__trigger_10fcv_11","date-range-picker--disabled":"_date-range-picker--disabled_10fcv_23","date-range-picker--open":"_date-range-picker--open_10fcv_23","date-range-picker__calendar-icon":"_date-range-picker__calendar-icon_10fcv_40","date-range-picker__value":"_date-range-picker__value_10fcv_52","date-range-picker__chevron":"_date-range-picker__chevron_10fcv_70","date-range-picker__popover":"_date-range-picker__popover_10fcv_86","date-range-picker__popover--above":"_date-range-picker__popover--above_10fcv_105","date-range-picker__popover--visible":"_date-range-picker__popover--visible_10fcv_108","date-range-picker__header":"_date-range-picker__header_10fcv_114","date-range-picker__month-label":"_date-range-picker__month-label_10fcv_120","date-range-picker__header-actions":"_date-range-picker__header-actions_10fcv_131","date-range-picker__nav-buttons":"_date-range-picker__nav-buttons_10fcv_137","date-range-picker__weekdays":"_date-range-picker__weekdays_10fcv_141","date-range-picker__weekday":"_date-range-picker__weekday_10fcv_141","date-range-picker__grid":"_date-range-picker__grid_10fcv_161","date-range-picker__week":"_date-range-picker__week_10fcv_141","date-range-picker__day-empty":"_date-range-picker__day-empty_10fcv_171","date-range-picker__day-cell":"_date-range-picker__day-cell_10fcv_175","date-range-picker__day-cell--in-range":"_date-range-picker__day-cell--in-range_10fcv_184","date-range-picker__day-cell--range-start":"_date-range-picker__day-cell--range-start_10fcv_184","date-range-picker__day-cell--range-end":"_date-range-picker__day-cell--range-end_10fcv_184","date-range-picker__day":"_date-range-picker__day_10fcv_171","date-range-picker__day--selected":"_date-range-picker__day--selected_10fcv_227","date-range-picker__day--today":"_date-range-picker__day--today_10fcv_240"};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_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;
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_10fcv_2",
3
- "date-range-picker__trigger": "_date-range-picker__trigger_10fcv_11",
4
- "date-range-picker--disabled": "_date-range-picker--disabled_10fcv_23",
5
- "date-range-picker--open": "_date-range-picker--open_10fcv_23",
6
- "date-range-picker__calendar-icon": "_date-range-picker__calendar-icon_10fcv_40",
7
- "date-range-picker__value": "_date-range-picker__value_10fcv_52",
8
- "date-range-picker__chevron": "_date-range-picker__chevron_10fcv_70",
9
- "date-range-picker__popover": "_date-range-picker__popover_10fcv_86",
10
- "date-range-picker__popover--above": "_date-range-picker__popover--above_10fcv_105",
11
- "date-range-picker__popover--visible": "_date-range-picker__popover--visible_10fcv_108",
12
- "date-range-picker__header": "_date-range-picker__header_10fcv_114",
13
- "date-range-picker__month-label": "_date-range-picker__month-label_10fcv_120",
14
- "date-range-picker__header-actions": "_date-range-picker__header-actions_10fcv_131",
15
- "date-range-picker__nav-buttons": "_date-range-picker__nav-buttons_10fcv_137",
16
- "date-range-picker__weekdays": "_date-range-picker__weekdays_10fcv_141",
17
- "date-range-picker__weekday": "_date-range-picker__weekday_10fcv_141",
18
- "date-range-picker__grid": "_date-range-picker__grid_10fcv_161",
19
- "date-range-picker__week": "_date-range-picker__week_10fcv_141",
20
- "date-range-picker__day-empty": "_date-range-picker__day-empty_10fcv_171",
21
- "date-range-picker__day-cell": "_date-range-picker__day-cell_10fcv_175",
22
- "date-range-picker__day-cell--in-range": "_date-range-picker__day-cell--in-range_10fcv_184",
23
- "date-range-picker__day-cell--range-start": "_date-range-picker__day-cell--range-start_10fcv_184",
24
- "date-range-picker__day-cell--range-end": "_date-range-picker__day-cell--range-end_10fcv_184",
25
- "date-range-picker__day": "_date-range-picker__day_10fcv_171",
26
- "date-range-picker__day--selected": "_date-range-picker__day--selected_10fcv_227",
27
- "date-range-picker__day--today": "_date-range-picker__day--today_10fcv_240"
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"
28
28
  };
29
29
  export {
30
30
  e as default
@@ -1 +1 @@
1
- {"version":3,"file":"Emoji.cjs","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status — on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [\n styles.emoji,\n sizeClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":"sLAwBMA,EAA4C,CAChD,GAAMC,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,IAAOA,EAAAA,QAAO,iBAAiB,CACjC,EAQA,SAAwBC,EAAM,CAC5B,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,IACT,EAAe,CACb,MAAMC,EAAYN,EAAeK,CAAI,EAC/BE,EAAY,CAChBN,EAAAA,QAAO,MACPK,EACAH,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEK,MAAC,QAAK,UAAWD,EAAW,KAAK,MAAM,cAAW,GAC/C,SAAAH,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"Emoji.cjs","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status — on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [styles.emoji, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":"sLAwBMA,EAA4C,CAChD,GAAMC,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,IAAOA,EAAAA,QAAO,iBAAiB,CACjC,EAQA,SAAwBC,EAAM,CAC5B,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,IACT,EAAe,CACb,MAAMC,EAAYN,EAAeK,CAAI,EAC/BE,EAAY,CAACN,UAAO,MAAOK,EAAWH,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEK,MAAC,QAAK,UAAWD,EAAW,KAAK,MAAM,cAAW,GAC/C,SAAAH,CAAA,CACH,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../src/components/emoji/Emoji.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAgBD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAc,EACd,KAAK,EACL,IAAW,GACZ,EAAE,UAAU,2CAeZ"}
1
+ {"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../src/components/emoji/Emoji.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAgBD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAc,EACd,KAAK,EACL,IAAW,GACZ,EAAE,UAAU,2CAWZ"}
@@ -18,11 +18,7 @@ function a({
18
18
  emoji: o,
19
19
  size: s = "24"
20
20
  }) {
21
- const m = t[s], j = [
22
- e.emoji,
23
- m,
24
- i
25
- ].filter(Boolean).join(" ");
21
+ const m = t[s], j = [e.emoji, m, i].filter(Boolean).join(" ");
26
22
  return /* @__PURE__ */ r("span", { className: j, role: "img", "aria-hidden": !0, children: o });
27
23
  }
28
24
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Emoji.js","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status — on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [\n styles.emoji,\n sizeClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":";;AAwBA,MAAMA,IAA4C;AAAA,EAChD,IAAMC,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,KAAOA,EAAO,iBAAiB;AACjC;AAQA,SAAwBC,EAAM;AAAA,EAC5B,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AACT,GAAe;AACb,QAAMC,IAAYN,EAAeK,CAAI,GAC/BE,IAAY;AAAA,IAChBN,EAAO;AAAA,IACPK;AAAA,IACAH;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAK,EAAC,UAAK,WAAWD,GAAW,MAAK,OAAM,eAAW,IAC/C,UAAAH,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"Emoji.js","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status — on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [styles.emoji, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":";;AAwBA,MAAMA,IAA4C;AAAA,EAChD,IAAMC,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,KAAOA,EAAO,iBAAiB;AACjC;AAQA,SAAwBC,EAAM;AAAA,EAC5B,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AACT,GAAe;AACb,QAAMC,IAAYN,EAAeK,CAAI,GAC/BE,IAAY,CAACN,EAAO,OAAOK,GAAWH,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAK,EAAC,UAAK,WAAWD,GAAW,MAAK,OAAM,eAAW,IAC/C,UAAAH,EAAA,CACH;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiButton.cjs","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual — the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass = padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type={type} className={rootClass} aria-pressed={toggled !== undefined ? toggled : undefined} {...rest}>\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":"gQASaA,EAA+D,CAC1E,UAAW,KACX,MAAO,KACP,OAAQ,KACR,MAAO,IACT,EA2BA,SAAwBC,EAAY,CAClC,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,QACP,QAAAC,EAAU,UACV,OAAAC,EAAS,GACT,QAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAYC,EAAAA,QAAO,sBAAsBC,EAAAA,QAAQR,CAAI,CAAC,EAAE,EACxDS,EAAeR,IAAY,UAAYM,EAAAA,QAAO,+BAA+B,EAAI,GACjFG,EAAcR,EAASK,UAAO,sBAAsB,EAAI,GACxDI,EAAeR,EAAUI,UAAO,uBAAuB,EAAI,GAE3DK,EAAY,CAChBL,EAAAA,QAAO,cAAc,EACrBD,EACAG,EACAC,EACAC,EACAb,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEe,EAAAA,IAAC,SAAA,CAAO,KAAAT,EAAY,UAAWQ,EAAW,eAAcT,IAAY,OAAYA,EAAU,OAAY,GAAGE,EACvG,SAAAQ,EAAAA,IAAC,QAAK,UAAWN,EAAAA,QAAO,qBAAqB,EAC3C,SAAAM,EAAAA,IAACC,EAAAA,QAAA,CAAM,MAAAf,EAAc,KAAMH,EAAyBI,CAAI,CAAA,CAAG,CAAA,CAC7D,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"EmojiButton.cjs","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual — the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n type={type}\n className={rootClass}\n aria-pressed={toggled !== undefined ? toggled : undefined}\n {...rest}\n >\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":"gQASaA,EAA+D,CAC1E,UAAW,KACX,MAAO,KACP,OAAQ,KACR,MAAO,IACT,EA2BA,SAAwBC,EAAY,CAClC,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,QACP,QAAAC,EAAU,UACV,OAAAC,EAAS,GACT,QAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAYC,EAAAA,QAAO,sBAAsBC,EAAAA,QAAQR,CAAI,CAAC,EAAE,EACxDS,EACJR,IAAY,UAAYM,EAAAA,QAAO,+BAA+B,EAAI,GAC9DG,EAAcR,EAASK,UAAO,sBAAsB,EAAI,GACxDI,EAAeR,EAAUI,UAAO,uBAAuB,EAAI,GAE3DK,EAAY,CAChBL,EAAAA,QAAO,cAAc,EACrBD,EACAG,EACAC,EACAC,EACAb,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEe,EAAAA,IAAC,SAAA,CACC,KAAAT,EACA,UAAWQ,EACX,eAAcT,IAAY,OAAYA,EAAU,OAC/C,GAAGE,EAEJ,SAAAQ,EAAAA,IAAC,OAAA,CAAK,UAAWN,EAAAA,QAAO,qBAAqB,EAC3C,SAAAM,EAAAA,IAACC,EAAAA,QAAA,CAAM,MAAAf,EAAc,KAAMH,EAAyBI,CAAI,EAAG,CAAA,CAC7D,CAAA,CAAA,CAGN"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiButton.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,0GAA0G;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAKvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAc,EACd,KAAK,EACL,IAAc,EACd,OAAmB,EACnB,MAAc,EACd,OAAO,EACP,IAAe,EACf,GAAG,IAAI,EACR,EAAE,gBAAgB,2CAwBlB"}
1
+ {"version":3,"file":"EmojiButton.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,0GAA0G;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAKvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAc,EACd,KAAK,EACL,IAAc,EACd,OAAmB,EACnB,MAAc,EACd,OAAO,EACP,IAAe,EACf,GAAG,IAAI,EACR,EAAE,gBAAgB,2CA8BlB"}
@@ -26,7 +26,16 @@ function x({
26
26
  j,
27
27
  e
28
28
  ].filter(Boolean).join(" ");
29
- return /* @__PURE__ */ s("button", { type: l, className: p, "aria-pressed": t !== void 0 ? t : void 0, ...r, children: /* @__PURE__ */ s("span", { className: o["emoji-button__emoji"], children: /* @__PURE__ */ s(f, { emoji: i, size: C[a] }) }) });
29
+ return /* @__PURE__ */ s(
30
+ "button",
31
+ {
32
+ type: l,
33
+ className: p,
34
+ "aria-pressed": t !== void 0 ? t : void 0,
35
+ ...r,
36
+ children: /* @__PURE__ */ s("span", { className: o["emoji-button__emoji"], children: /* @__PURE__ */ s(f, { emoji: i, size: C[a] }) })
37
+ }
38
+ );
30
39
  }
31
40
  export {
32
41
  C as EMOJI_BUTTON_EMOJI_SIZES,
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiButton.js","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual — the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass = padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type={type} className={rootClass} aria-pressed={toggled !== undefined ? toggled : undefined} {...rest}>\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":";;;;AASO,MAAMA,IAA+D;AAAA,EAC1E,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AA2BA,SAAwBC,EAAY;AAAA,EAClC,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAYC,EAAO,sBAAsBC,EAAQR,CAAI,CAAC,EAAE,GACxDS,IAAeR,MAAY,YAAYM,EAAO,+BAA+B,IAAI,IACjFG,IAAcR,IAASK,EAAO,sBAAsB,IAAI,IACxDI,IAAeR,IAAUI,EAAO,uBAAuB,IAAI,IAE3DK,IAAY;AAAA,IAChBL,EAAO,cAAc;AAAA,IACrBD;AAAA,IACAG;AAAA,IACAC;AAAA,IACAC;AAAA,IACAb;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAe,EAAC,UAAA,EAAO,MAAAT,GAAY,WAAWQ,GAAW,gBAAcT,MAAY,SAAYA,IAAU,QAAY,GAAGE,GACvG,UAAA,gBAAAQ,EAAC,UAAK,WAAWN,EAAO,qBAAqB,GAC3C,UAAA,gBAAAM,EAACC,GAAA,EAAM,OAAAf,GAAc,MAAMH,EAAyBI,CAAI,EAAA,CAAG,EAAA,CAC7D,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"EmojiButton.js","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"👍\", \"🎉\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual — the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n type={type}\n className={rootClass}\n aria-pressed={toggled !== undefined ? toggled : undefined}\n {...rest}\n >\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":";;;;AASO,MAAMA,IAA+D;AAAA,EAC1E,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AA2BA,SAAwBC,EAAY;AAAA,EAClC,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAYC,EAAO,sBAAsBC,EAAQR,CAAI,CAAC,EAAE,GACxDS,IACJR,MAAY,YAAYM,EAAO,+BAA+B,IAAI,IAC9DG,IAAcR,IAASK,EAAO,sBAAsB,IAAI,IACxDI,IAAeR,IAAUI,EAAO,uBAAuB,IAAI,IAE3DK,IAAY;AAAA,IAChBL,EAAO,cAAc;AAAA,IACrBD;AAAA,IACAG;AAAA,IACAC;AAAA,IACAC;AAAA,IACAb;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,WAAWQ;AAAA,MACX,gBAAcT,MAAY,SAAYA,IAAU;AAAA,MAC/C,GAAGE;AAAA,MAEJ,UAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAWN,EAAO,qBAAqB,GAC3C,UAAA,gBAAAM,EAACC,GAAA,EAAM,OAAAf,GAAc,MAAMH,EAAyBI,CAAI,GAAG,EAAA,CAC7D;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -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 = ['', '\\u{1F3FB}', '\\u{1F3FC}', '\\u{1F3FD}', '\\u{1F3FE}', '\\u{1F3FF}'];\n\nconst MODIFIER_BASES = new Set([\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(categories[0]?.id ?? '');\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 ? 'search-results' : '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 = group.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className].filter(Boolean).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={() => { setHoveredEmoji(displayed); setHoveredBase(emoji); }}\n onMouseLeave={() => { setHoveredEmoji(null); setHoveredBase(null); }}\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 key={cat.id} ref={(el) => { groupRefs.current[cat.id] = el; }} className={styles['emoji-popover__group']}>\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false ? styles['emoji-popover__emoji-row--nowrap'] : '',\n ].filter(Boolean).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 ? styles['emoji-popover__header-main--hidden'] : '',\n ].filter(Boolean).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 ? styles['emoji-popover__skin-tone-picker--visible'] : '',\n ].filter(Boolean).join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>Skin tone</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={() => { setSkinToneIndex(i); setShowSkinTonePicker(false); }}\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={() => { setActiveCategoryId(cat.id); scrollToCategory(cat.id); }}\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}>{renderBody()}</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 } 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 +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;AAkBD,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,2CAuOnB"}
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"}
@@ -12,7 +12,14 @@ import ne from "../scrollbar/Scrollbar.js";
12
12
  import se from "../search-input/SearchInput.js";
13
13
  import le from "../../illustrations/search.svg.js";
14
14
  import i from "./EmojiPopover.module.scss.js";
15
- const P = ["đŸ–ī¸", "🖐đŸģ", "🖐đŸŧ", "🖐đŸŊ", "🖐🏾", "🖐đŸŋ"], ae = ["", "đŸģ", "đŸŧ", "đŸŊ", "🏾", "đŸŋ"], te = /* @__PURE__ */ new Set([
15
+ const P = ["đŸ–ī¸", "🖐đŸģ", "🖐đŸŧ", "🖐đŸŊ", "🖐🏾", "🖐đŸŋ"], ae = [
16
+ "",
17
+ "đŸģ",
18
+ "đŸŧ",
19
+ "đŸŊ",
20
+ "🏾",
21
+ "đŸŋ"
22
+ ], te = /* @__PURE__ */ new Set([
16
23
  "👋",
17
24
  "🤚",
18
25
  "✋",
@@ -69,7 +76,9 @@ function Ce({
69
76
  customEmojiLabel: H = "Custom emoji"
70
77
  }) {
71
78
  var R;
72
- const [l, $] = t(D), [A, F] = t(((R = s[0]) == null ? void 0 : R.id) ?? ""), [N, y] = t(null), [K, I] = t(null), [v, L] = t(0), [a, h] = t(!1), S = _(null), C = `${Y()}-skin-tone-picker`, Q = ae[v], b = _(null), w = _({});
79
+ const [l, $] = t(D), [A, F] = t(
80
+ ((R = s[0]) == null ? void 0 : R.id) ?? ""
81
+ ), [N, y] = t(null), [K, I] = t(null), [v, L] = t(0), [a, h] = t(!1), S = _(null), C = `${Y()}-skin-tone-picker`, Q = ae[v], b = _(null), w = _({});
73
82
  Z(() => {
74
83
  var e;
75
84
  k && ((e = S.current) == null || e.focus());
@@ -120,21 +129,29 @@ function Ce({
120
129
  ) : f === "search-results" ? /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: /* @__PURE__ */ n("div", { className: i["emoji-popover__group"], children: [
121
130
  /* @__PURE__ */ o(O, { label: "Search Results" }),
122
131
  /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-row"], children: T.map(E) })
123
- ] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: s.map((e) => /* @__PURE__ */ n("div", { ref: (r) => {
124
- w.current[e.id] = r;
125
- }, className: i["emoji-popover__group"], children: [
126
- /* @__PURE__ */ o(O, { label: e.label }),
127
- /* @__PURE__ */ o(
128
- "div",
129
- {
130
- className: [
131
- i["emoji-popover__emoji-row"],
132
- e.wrap === !1 ? i["emoji-popover__emoji-row--nowrap"] : ""
133
- ].filter(Boolean).join(" "),
134
- children: e.emojis.map(E)
135
- }
136
- )
137
- ] }, e.id)) });
132
+ ] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: s.map((e) => /* @__PURE__ */ n(
133
+ "div",
134
+ {
135
+ ref: (r) => {
136
+ w.current[e.id] = r;
137
+ },
138
+ className: i["emoji-popover__group"],
139
+ children: [
140
+ /* @__PURE__ */ o(O, { label: e.label }),
141
+ /* @__PURE__ */ o(
142
+ "div",
143
+ {
144
+ className: [
145
+ i["emoji-popover__emoji-row"],
146
+ e.wrap === !1 ? i["emoji-popover__emoji-row--nowrap"] : ""
147
+ ].filter(Boolean).join(" "),
148
+ children: e.emojis.map(E)
149
+ }
150
+ )
151
+ ]
152
+ },
153
+ e.id
154
+ )) });
138
155
  return /* @__PURE__ */ n("div", { className: J, children: [
139
156
  /* @__PURE__ */ n("div", { className: i["emoji-popover__header"], children: [
140
157
  /* @__PURE__ */ n("div", { className: i["emoji-popover__header-panels"], children: [