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

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 (360) hide show
  1. package/README.md +15 -3
  2. package/dist/compass-ui-standalone.css +270 -276
  3. package/dist/compass-ui.css +293 -290
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js.map +1 -1
  8. package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -1
  9. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts +3 -1
  10. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -1
  11. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
  12. package/dist/components/admin-panel/AdminPanel.cjs +1 -1
  13. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
  14. package/dist/components/admin-panel/AdminPanel.d.ts +13 -6
  15. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
  16. package/dist/components/admin-panel/AdminPanel.js +21 -15
  17. package/dist/components/admin-panel/AdminPanel.js.map +1 -1
  18. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
  19. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts +8 -4
  20. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
  21. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  23. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  24. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  25. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +11 -4
  26. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  27. package/dist/components/admin-panel-header/AdminPanelHeader.js +25 -23
  28. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  29. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  30. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +10 -10
  31. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  32. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  33. package/dist/components/attachment-card/AttachmentCard.d.ts +18 -5
  34. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  35. package/dist/components/attachment-card/AttachmentCard.js +85 -79
  36. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  37. package/dist/components/card-button/CardButton.css +1 -1
  38. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  39. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +1 -1
  41. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
  42. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts +5 -4
  43. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -1
  44. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +7 -7
  45. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +10 -4
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +64 -60
  51. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  52. package/dist/components/chip/Chip.cjs.map +1 -1
  53. package/dist/components/chip/Chip.css +1 -1
  54. package/dist/components/chip/Chip.d.ts +4 -0
  55. package/dist/components/chip/Chip.d.ts.map +1 -1
  56. package/dist/components/chip/Chip.js.map +1 -1
  57. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  58. package/dist/components/chip/Chip.module.scss.js +11 -11
  59. package/dist/components/combobox/Combobox.cjs +1 -1
  60. package/dist/components/combobox/Combobox.cjs.map +1 -1
  61. package/dist/components/combobox/Combobox.css +1 -1
  62. package/dist/components/combobox/Combobox.d.ts +24 -1
  63. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  64. package/dist/components/combobox/Combobox.js +307 -271
  65. package/dist/components/combobox/Combobox.js.map +1 -1
  66. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  67. package/dist/components/combobox/Combobox.module.scss.js +28 -26
  68. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  69. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  70. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  71. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  72. package/dist/components/date-range-picker/DateRangePicker.d.ts +18 -2
  73. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  74. package/dist/components/date-range-picker/DateRangePicker.js +134 -126
  75. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  76. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  77. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
  78. package/dist/components/emoji-popover/EmojiPopover.cjs +1 -1
  79. package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
  80. package/dist/components/emoji-popover/EmojiPopover.d.ts +25 -4
  81. package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
  82. package/dist/components/emoji-popover/EmojiPopover.js +84 -73
  83. package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
  84. package/dist/components/empty-state/EmptyState.cjs +1 -1
  85. package/dist/components/empty-state/EmptyState.cjs.map +1 -1
  86. package/dist/components/empty-state/EmptyState.d.ts +3 -3
  87. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  88. package/dist/components/empty-state/EmptyState.js +11 -9
  89. package/dist/components/empty-state/EmptyState.js.map +1 -1
  90. package/dist/components/error-message/ErrorMessage.cjs +1 -1
  91. package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
  92. package/dist/components/error-message/ErrorMessage.d.ts +3 -3
  93. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
  94. package/dist/components/error-message/ErrorMessage.js +10 -9
  95. package/dist/components/error-message/ErrorMessage.js.map +1 -1
  96. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -1
  97. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts +7 -6
  98. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -1
  99. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -1
  100. package/dist/components/global-banner/GlobalBanner.cjs +1 -1
  101. package/dist/components/global-banner/GlobalBanner.cjs.map +1 -1
  102. package/dist/components/global-banner/GlobalBanner.d.ts +10 -5
  103. package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -1
  104. package/dist/components/global-banner/GlobalBanner.js +33 -26
  105. package/dist/components/global-banner/GlobalBanner.js.map +1 -1
  106. package/dist/components/icon-button/IconButton.css +1 -1
  107. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  108. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  109. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  110. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  111. package/dist/components/image-preview/ImagePreview.css +1 -1
  112. package/dist/components/image-preview/ImagePreview.d.ts +12 -1
  113. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  114. package/dist/components/image-preview/ImagePreview.js +25 -20
  115. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  116. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  117. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  118. package/dist/components/link-preview/LinkPreview.cjs +1 -1
  119. package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
  120. package/dist/components/link-preview/LinkPreview.d.ts +12 -6
  121. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
  122. package/dist/components/link-preview/LinkPreview.js +19 -16
  123. package/dist/components/link-preview/LinkPreview.js.map +1 -1
  124. package/dist/components/mention-badge/MentionBadge.cjs +1 -1
  125. package/dist/components/mention-badge/MentionBadge.cjs.map +1 -1
  126. package/dist/components/mention-badge/MentionBadge.d.ts +3 -1
  127. package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -1
  128. package/dist/components/mention-badge/MentionBadge.js +18 -23
  129. package/dist/components/mention-badge/MentionBadge.js.map +1 -1
  130. package/dist/components/menu-group-heading/MenuGroupHeading.cjs.map +1 -1
  131. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts +3 -3
  132. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts.map +1 -1
  133. package/dist/components/menu-group-heading/MenuGroupHeading.js.map +1 -1
  134. package/dist/components/menu-item/MenuItem.cjs +1 -1
  135. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  136. package/dist/components/menu-item/MenuItem.d.ts +2 -0
  137. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  138. package/dist/components/menu-item/MenuItem.js +29 -28
  139. package/dist/components/menu-item/MenuItem.js.map +1 -1
  140. package/dist/components/message-actions/MessageActions.cjs +1 -1
  141. package/dist/components/message-actions/MessageActions.cjs.map +1 -1
  142. package/dist/components/message-actions/MessageActions.d.ts +26 -2
  143. package/dist/components/message-actions/MessageActions.d.ts.map +1 -1
  144. package/dist/components/message-actions/MessageActions.js +67 -55
  145. package/dist/components/message-actions/MessageActions.js.map +1 -1
  146. package/dist/components/message-header/MessageHeader.cjs.map +1 -1
  147. package/dist/components/message-header/MessageHeader.d.ts +5 -3
  148. package/dist/components/message-header/MessageHeader.d.ts.map +1 -1
  149. package/dist/components/message-header/MessageHeader.js.map +1 -1
  150. package/dist/components/message-separator/MessageSeparator.cjs +1 -1
  151. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
  152. package/dist/components/message-separator/MessageSeparator.d.ts +8 -4
  153. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
  154. package/dist/components/message-separator/MessageSeparator.js +16 -14
  155. package/dist/components/message-separator/MessageSeparator.js.map +1 -1
  156. package/dist/components/modal/Modal.cjs +1 -1
  157. package/dist/components/modal/Modal.cjs.map +1 -1
  158. package/dist/components/modal/Modal.d.ts +17 -3
  159. package/dist/components/modal/Modal.d.ts.map +1 -1
  160. package/dist/components/modal/Modal.js +38 -26
  161. package/dist/components/modal/Modal.js.map +1 -1
  162. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  163. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  164. package/dist/components/modal-header/ModalHeader.css +1 -1
  165. package/dist/components/modal-header/ModalHeader.d.ts +16 -1
  166. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  167. package/dist/components/modal-header/ModalHeader.js +72 -57
  168. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  169. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  170. package/dist/components/modal-header/ModalHeader.module.scss.js +15 -13
  171. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  172. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +1 -1
  173. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -1
  174. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts +4 -1
  175. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -1
  176. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +11 -10
  177. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -1
  178. package/dist/components/new-message-banner/NewMessageBanner.cjs +1 -1
  179. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
  180. package/dist/components/new-message-banner/NewMessageBanner.d.ts +15 -3
  181. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
  182. package/dist/components/new-message-banner/NewMessageBanner.js +30 -22
  183. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
  184. package/dist/components/pagination-dots/PaginationDots.cjs +1 -1
  185. package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -1
  186. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  187. package/dist/components/pagination-dots/PaginationDots.d.ts +5 -1
  188. package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -1
  189. package/dist/components/pagination-dots/PaginationDots.js +22 -19
  190. package/dist/components/pagination-dots/PaginationDots.js.map +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  193. package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
  194. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
  195. package/dist/components/permalink-preview/PermalinkPreview.d.ts +16 -5
  196. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
  197. package/dist/components/permalink-preview/PermalinkPreview.js +39 -35
  198. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
  199. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +1 -1
  200. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -1
  201. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts +8 -1
  202. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -1
  203. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +20 -17
  204. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -1
  205. package/dist/components/popover-notice/PopoverNotice.cjs +1 -1
  206. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
  207. package/dist/components/popover-notice/PopoverNotice.d.ts +13 -5
  208. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
  209. package/dist/components/popover-notice/PopoverNotice.js +58 -48
  210. package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
  211. package/dist/components/profile-popover/ProfilePopover.cjs +1 -1
  212. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
  213. package/dist/components/profile-popover/ProfilePopover.d.ts +34 -12
  214. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
  215. package/dist/components/profile-popover/ProfilePopover.js +122 -106
  216. package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
  217. package/dist/components/progress-bar/ProgressBar.cjs +1 -1
  218. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
  219. package/dist/components/progress-bar/ProgressBar.d.ts +4 -3
  220. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
  221. package/dist/components/progress-bar/ProgressBar.js +9 -7
  222. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  223. package/dist/components/radio/Radio.css +1 -1
  224. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  225. package/dist/components/radio/Radio.module.scss.js +12 -12
  226. package/dist/components/reaction-button/ReactionButton.cjs +1 -1
  227. package/dist/components/reaction-button/ReactionButton.cjs.map +1 -1
  228. package/dist/components/reaction-button/ReactionButton.d.ts +3 -1
  229. package/dist/components/reaction-button/ReactionButton.d.ts.map +1 -1
  230. package/dist/components/reaction-button/ReactionButton.js +20 -18
  231. package/dist/components/reaction-button/ReactionButton.js.map +1 -1
  232. package/dist/components/reactions-row/ReactionsRow.cjs +1 -1
  233. package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
  234. package/dist/components/reactions-row/ReactionsRow.d.ts +10 -2
  235. package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
  236. package/dist/components/reactions-row/ReactionsRow.js +33 -28
  237. package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
  238. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  239. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  240. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +15 -7
  241. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  242. package/dist/components/right-sidebar-header/RightSidebarHeader.js +23 -19
  243. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  244. package/dist/components/scrollbar/Scrollbar.cjs +1 -1
  245. package/dist/components/scrollbar/Scrollbar.cjs.map +1 -1
  246. package/dist/components/scrollbar/Scrollbar.css +1 -1
  247. package/dist/components/scrollbar/Scrollbar.d.ts +2 -2
  248. package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -1
  249. package/dist/components/scrollbar/Scrollbar.js +24 -15
  250. package/dist/components/scrollbar/Scrollbar.js.map +1 -1
  251. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  252. package/dist/components/scrollbar/Scrollbar.module.scss.js +4 -4
  253. package/dist/components/scrollbar/simplebar-vendor.css +1 -0
  254. package/dist/components/search-input/SearchInput.cjs +1 -1
  255. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  256. package/dist/components/search-input/SearchInput.d.ts +5 -0
  257. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  258. package/dist/components/search-input/SearchInput.js +92 -85
  259. package/dist/components/search-input/SearchInput.js.map +1 -1
  260. package/dist/components/search-tip-banner/SearchTipBanner.cjs +1 -1
  261. package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -1
  262. package/dist/components/search-tip-banner/SearchTipBanner.d.ts +8 -5
  263. package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -1
  264. package/dist/components/search-tip-banner/SearchTipBanner.js +17 -16
  265. package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -1
  266. package/dist/components/section-notice/SectionNotice.cjs +1 -1
  267. package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
  268. package/dist/components/section-notice/SectionNotice.d.ts +16 -3
  269. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
  270. package/dist/components/section-notice/SectionNotice.js +64 -48
  271. package/dist/components/section-notice/SectionNotice.js.map +1 -1
  272. package/dist/components/select/Select.cjs +1 -1
  273. package/dist/components/select/Select.cjs.map +1 -1
  274. package/dist/components/select/Select.d.ts +8 -1
  275. package/dist/components/select/Select.d.ts.map +1 -1
  276. package/dist/components/select/Select.js +81 -79
  277. package/dist/components/select/Select.js.map +1 -1
  278. package/dist/components/spinner/Spinner.cjs.map +1 -1
  279. package/dist/components/spinner/Spinner.css +1 -1
  280. package/dist/components/spinner/Spinner.d.ts +1 -0
  281. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  282. package/dist/components/spinner/Spinner.js.map +1 -1
  283. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  284. package/dist/components/spinner/Spinner.module.scss.js +5 -5
  285. package/dist/components/status-badge/StatusBadge.css +1 -1
  286. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  287. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  288. package/dist/components/switch/Switch.css +1 -1
  289. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  290. package/dist/components/switch/Switch.module.scss.js +14 -14
  291. package/dist/components/tabs/Tabs.cjs +1 -1
  292. package/dist/components/tabs/Tabs.cjs.map +1 -1
  293. package/dist/components/tabs/Tabs.css +1 -1
  294. package/dist/components/tabs/Tabs.d.ts +11 -3
  295. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  296. package/dist/components/tabs/Tabs.js +56 -53
  297. package/dist/components/tabs/Tabs.js.map +1 -1
  298. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  299. package/dist/components/tabs/Tabs.module.scss.js +9 -9
  300. package/dist/components/tag/Tag.cjs +1 -1
  301. package/dist/components/tag/Tag.cjs.map +1 -1
  302. package/dist/components/tag/Tag.d.ts +3 -3
  303. package/dist/components/tag/Tag.d.ts.map +1 -1
  304. package/dist/components/tag/Tag.js +12 -11
  305. package/dist/components/tag/Tag.js.map +1 -1
  306. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  307. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  308. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  309. package/dist/components/thread-footer/ThreadFooter.d.ts +19 -3
  310. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  311. package/dist/components/thread-footer/ThreadFooter.js +53 -48
  312. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  313. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  314. package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -18
  315. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  316. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  317. package/dist/components/thread-list-item/ThreadListItem.d.ts +15 -7
  318. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  319. package/dist/components/thread-list-item/ThreadListItem.js +66 -62
  320. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  321. package/dist/components/toast/Toast.cjs +1 -1
  322. package/dist/components/toast/Toast.cjs.map +1 -1
  323. package/dist/components/toast/Toast.d.ts +8 -3
  324. package/dist/components/toast/Toast.d.ts.map +1 -1
  325. package/dist/components/toast/Toast.js +47 -39
  326. package/dist/components/toast/Toast.js.map +1 -1
  327. package/dist/components/tour-point/TourPoint.cjs +1 -1
  328. package/dist/components/tour-point/TourPoint.cjs.map +1 -1
  329. package/dist/components/tour-point/TourPoint.css +1 -1
  330. package/dist/components/tour-point/TourPoint.d.ts +19 -5
  331. package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
  332. package/dist/components/tour-point/TourPoint.js +66 -54
  333. package/dist/components/tour-point/TourPoint.js.map +1 -1
  334. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  335. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  336. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  337. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  338. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  339. package/dist/components/user-avatar/UserAvatar.css +1 -1
  340. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  341. package/dist/components/user-avatar/UserAvatar.module.scss.js +26 -26
  342. package/dist/components/user-avatar-group/UserAvatarGroup.cjs +1 -1
  343. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
  344. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  345. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts +8 -1
  346. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
  347. package/dist/components/user-avatar-group/UserAvatarGroup.js +22 -18
  348. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
  349. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  350. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  351. package/dist/index.d.ts +1 -0
  352. package/dist/index.d.ts.map +1 -1
  353. package/dist/utils/props.cjs +2 -0
  354. package/dist/utils/props.cjs.map +1 -0
  355. package/dist/utils/props.d.ts +13 -0
  356. package/dist/utils/props.d.ts.map +1 -0
  357. package/dist/utils/props.js +7 -0
  358. package/dist/utils/props.js.map +1 -0
  359. package/package.json +1 -6
  360. package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Chip from '@/components/chip/Chip';\nimport ChipGroup from '@/components/chip/ChipGroup';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport { IconSlotContext } from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n /** Shown when there are no rows to pick from. Default: \"No results\". */\n emptyMessage?: ReactNode;\n /**\n * When true, the menu shows a loading row (with Spinner) in place of the\n * empty message. Set while async results are in flight.\n */\n loading?: boolean;\n /** Loading row text. Default: \"Loading…\". */\n loadingMessage?: ReactNode;\n /**\n * Option objects for the current value(s), used for chips and the\n * single-select label when a value is missing from `options` (e.g. an async\n * search that no longer returns it, or values preselected on load). Values\n * found in `options` resolve from there first.\n */\n selectedOptions?: ComboboxOption[];\n /**\n * When true, typed text that matches no option offers a create row. Created\n * values not found in `options` or `selectedOptions` display their raw value\n * as the label.\n */\n creatable?: boolean;\n /**\n * Called with the trimmed input when the create row is chosen. When set, the\n * host owns adding the value (`onChange` is not called). When omitted, the\n * input is committed as the value through `onChange`.\n */\n onCreateOption?: (inputValue: string) => void;\n /** Create row label. Default: `Create \"{inputValue}\"`. */\n formatCreateLabel?: (inputValue: string) => ReactNode;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\ntype ComboboxRow =\n | { kind: 'option'; option: ComboboxOption }\n | { kind: 'create'; inputValue: string };\n\nfunction defaultFormatCreateLabel(inputValue: string): ReactNode {\n return `Create \"${inputValue}\"`;\n}\n\nfunction isRowDisabled(row: ComboboxRow): boolean {\n return row.kind === 'option' && row.option.disabled === true;\n}\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(value: string | string[] | null | undefined): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n loading = false,\n loadingMessage = 'Loading…',\n selectedOptions,\n creatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = useMemo(\n () => (multiple ? toMultiValue(rawValue) : []),\n [multiple, rawValue],\n );\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const resolveOption = useCallback(\n (optionValue: string): ComboboxOption | undefined =>\n options.find((o) => o.value === optionValue) ??\n selectedOptions?.find((o) => o.value === optionValue) ??\n (creatable ? { value: optionValue, label: optionValue } : undefined),\n [options, selectedOptions, creatable],\n );\n\n const selectedOption = useMemo(\n () => (singleValue == null ? undefined : resolveOption(singleValue)),\n [resolveOption, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const createInput = creatable ? filterQuery.trim() : '';\n const showCreateRow = useMemo(() => {\n if (createInput === '') return false;\n const needle = createInput.toLowerCase();\n const matches = (text: string) => text.toLowerCase() === needle;\n const knownOptions = [...options, ...(selectedOptions ?? [])];\n if (knownOptions.some((o) => matches(o.label) || matches(o.value))) {\n return false;\n }\n const current = multiple\n ? multiValue\n : singleValue != null\n ? [singleValue]\n : [];\n return !current.some(matches);\n }, [\n createInput,\n options,\n selectedOptions,\n multiple,\n multiValue,\n singleValue,\n ]);\n\n const rows = useMemo<ComboboxRow[]>(\n () => [\n ...filteredOptions.map((option) => ({ kind: 'option' as const, option })),\n ...(showCreateRow\n ? [{ kind: 'create' as const, inputValue: createInput }]\n : []),\n ],\n [filteredOptions, showCreateRow, createInput],\n );\n\n const rowId = useCallback(\n (row: ComboboxRow) =>\n row.kind === 'option'\n ? `${listboxId}-option-${row.option.value}`\n : `${listboxId}-create`,\n [listboxId],\n );\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (rows.length === 0) return -1;\n if (prev >= 0 && prev < rows.length) return prev;\n const selectedIdx = rows.findIndex(\n (row) =>\n row.kind === 'option' &&\n (multiple\n ? multiValue.includes(row.option.value)\n : row.option.value === singleValue),\n );\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, rows, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple ? multiValue.includes(optionValue) : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const createValue = useCallback(\n (inputValue: string) => {\n if (onCreateOption) {\n onCreateOption(inputValue);\n } else if (multiple) {\n commitValue([...multiValue, inputValue]);\n } else {\n commitValue(inputValue);\n }\n\n if (multiple) {\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(inputValue);\n }\n close();\n },\n [\n onCreateOption,\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const selectRow = useCallback(\n (row: ComboboxRow) => {\n if (row.kind === 'create') createValue(row.inputValue);\n else selectOption(row.option);\n },\n [createValue, selectOption],\n );\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = rows\n .map((row, i) => ({ row, i }))\n .filter(({ row }) => !isRowDisabled(row));\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [rows],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const row = rows[activeIndex];\n if (!row) return;\n document.getElementById(rowId(row))?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, rows, rowId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n setActiveIndex(\n Math.max(\n 0,\n rows.findIndex((row) => !isRowDisabled(row)),\n ),\n );\n }\n break;\n case 'End':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n e.preventDefault();\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (multiple && displayInput === '' && multiValue.length > 0) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips or their remove buttons\n if ((e.target as HTMLElement).closest('[data-chip]')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeRow = activeIndex >= 0 ? rows[activeIndex] : undefined;\n const activeDescendant = activeRow != null ? rowId(activeRow) : undefined;\n\n // Without `selectedOptions`, values in `options` keep their list order (the\n // original behavior); with it, chips follow value order so they don't jump\n // around as async results change.\n const chipOptions = useMemo<ComboboxOption[]>(() => {\n if (!multiple) return [];\n if (selectedOptions == null) {\n const fromOptions = options.filter((o) => multiValue.includes(o.value));\n if (!creatable) return fromOptions;\n const listed = new Set(fromOptions.map((o) => o.value));\n return [\n ...fromOptions,\n ...multiValue\n .filter((v) => !listed.has(v))\n .map((v) => ({ value: v, label: v })),\n ];\n }\n return multiValue\n .map(resolveOption)\n .filter((o): o is ComboboxOption => o != null);\n }, [\n multiple,\n selectedOptions,\n options,\n multiValue,\n creatable,\n resolveOption,\n ]);\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && chipOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.combobox__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer convenience; the input owns keyboard interaction */}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && chipOptions.length > 0 && (\n <ChipGroup\n aria-label={\n typeof label === 'string' ? `${label} selections` : 'Selected'\n }\n disabled={disabled}\n >\n {chipOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && chipOptions.length > 0 ? undefined : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n aria-busy={loading || undefined}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {rows.length > 0 && (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {rows.map((row, index) => {\n const active = index === activeIndex;\n const preventBlur = (ev: MouseEvent) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n };\n if (row.kind === 'create') {\n return (\n <li\n key={rowId(row)}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={formatCreateLabel(row.inputValue)}\n leadingVisual={<Icon glyph={<PlusIcon />} />}\n active={active}\n aria-selected={false}\n onMouseDown={preventBlur}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => createValue(row.inputValue)}\n />\n </li>\n );\n }\n const { option } = row;\n const selected = isSelected(option.value);\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={preventBlur}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n {loading ? (\n <div className={styles.combobox__loading} role=\"status\">\n <Spinner size=\"16\" aria-hidden />\n <span>{loadingMessage}</span>\n </div>\n ) : (\n rows.length === 0 && (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n )\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","defaultFormatCreateLabel","inputValue","isRowDisabled","row","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","label","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","useMemo","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","resolveOption","optionValue","o","selectedOption","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","createInput","showCreateRow","needle","matches","text","rows","rowId","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","selectOption","v","_a","createValue","selectRow","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeRow","activeDescendant","chipOptions","fromOptions","listed","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","IconSlotContext","ChipGroup","Chip","ev","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","active","preventBlur","MenuItem","PlusIcon","selected","leading","Spinner"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Chip from '@/components/chip/Chip';\nimport ChipGroup from '@/components/chip/ChipGroup';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport { IconSlotContext } from '@/components/icon/Icon';\nimport type { IconSize } from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport type { BuiltInButtonProps } from '@/utils/props';\nimport { mergeClassNames } from '@/utils/props';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n /** Kept as `string`: the default filter, create-row matching, and the single-select input text all read it. */\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n /** Shown when there are no rows to pick from. Default: \"No results\". */\n emptyMessage?: ReactNode;\n /**\n * When true, the menu shows a loading row (with Spinner) in place of the\n * empty message. Set while async results are in flight.\n */\n loading?: boolean;\n /** Loading row text. Default: \"Loading…\". */\n loadingMessage?: ReactNode;\n /**\n * Option objects for the current value(s), used for chips and the\n * single-select label when a value is missing from `options` (e.g. an async\n * search that no longer returns it, or values preselected on load). Values\n * found in `options` resolve from there first.\n */\n selectedOptions?: ComboboxOption[];\n /**\n * When true, typed text that matches no option offers a create row. Created\n * values not found in `options` or `selectedOptions` display their raw value\n * as the label.\n */\n creatable?: boolean;\n /**\n * Called with the trimmed input when the create row is chosen. When set, the\n * host owns adding the value (`onChange` is not called). When omitted, the\n * input is committed as the value through `onChange`.\n */\n onCreateOption?: (inputValue: string) => void;\n /** Create row label. Default: `Create \"{inputValue}\"`. */\n formatCreateLabel?: (inputValue: string) => ReactNode;\n /**\n * Single mode: when a value is set, shows a clear button inside the control\n * that calls `onChange(null)`. Ignored with `multiple` (chips have their own\n * remove control). Default: false.\n */\n clearable?: boolean;\n /** Accessible name for the clear button. Default: \"Clear\". */\n clearLabel?: string;\n /** Extra attributes for the clear button (e.g. `data-testid`). */\n clearButtonProps?: BuiltInButtonProps;\n /**\n * Accessible name for the chip group in `multiple` mode. Default:\n * `{label} selections` when `label` is a string, otherwise \"Selected\".\n */\n selectionsLabel?: string;\n /**\n * Accessible name for the options list when `label` isn't a string and no\n * `aria-label` is set. Default: \"Options\".\n */\n listboxLabel?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nconst CLEAR_ICON_SIZE: Record<ComboboxSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '16',\n};\n\nfunction defaultSelectionsLabel(label: ReactNode): string {\n return typeof label === 'string' ? `${label} selections` : 'Selected';\n}\n\ntype ComboboxRow =\n | { kind: 'option'; option: ComboboxOption }\n | { kind: 'create'; inputValue: string };\n\nfunction defaultFormatCreateLabel(inputValue: string): ReactNode {\n return `Create \"${inputValue}\"`;\n}\n\nfunction isRowDisabled(row: ComboboxRow): boolean {\n return row.kind === 'option' && row.option.disabled === true;\n}\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(value: string | string[] | null | undefined): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n loading = false,\n loadingMessage = 'Loading…',\n selectedOptions,\n creatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n clearable = false,\n clearLabel = 'Clear',\n clearButtonProps,\n selectionsLabel,\n listboxLabel = 'Options',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = useMemo(\n () => (multiple ? toMultiValue(rawValue) : []),\n [multiple, rawValue],\n );\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const resolveOption = useCallback(\n (optionValue: string): ComboboxOption | undefined =>\n options.find((o) => o.value === optionValue) ??\n selectedOptions?.find((o) => o.value === optionValue) ??\n (creatable ? { value: optionValue, label: optionValue } : undefined),\n [options, selectedOptions, creatable],\n );\n\n const selectedOption = useMemo(\n () => (singleValue == null ? undefined : resolveOption(singleValue)),\n [resolveOption, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const createInput = creatable ? filterQuery.trim() : '';\n const showCreateRow = useMemo(() => {\n if (createInput === '') return false;\n const needle = createInput.toLowerCase();\n const matches = (text: string) => text.toLowerCase() === needle;\n const knownOptions = [...options, ...(selectedOptions ?? [])];\n if (knownOptions.some((o) => matches(o.label) || matches(o.value))) {\n return false;\n }\n const current = multiple\n ? multiValue\n : singleValue != null\n ? [singleValue]\n : [];\n return !current.some(matches);\n }, [\n createInput,\n options,\n selectedOptions,\n multiple,\n multiValue,\n singleValue,\n ]);\n\n const rows = useMemo<ComboboxRow[]>(\n () => [\n ...filteredOptions.map((option) => ({ kind: 'option' as const, option })),\n ...(showCreateRow\n ? [{ kind: 'create' as const, inputValue: createInput }]\n : []),\n ],\n [filteredOptions, showCreateRow, createInput],\n );\n\n const rowId = useCallback(\n (row: ComboboxRow) =>\n row.kind === 'option'\n ? `${listboxId}-option-${row.option.value}`\n : `${listboxId}-create`,\n [listboxId],\n );\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (rows.length === 0) return -1;\n if (prev >= 0 && prev < rows.length) return prev;\n const selectedIdx = rows.findIndex(\n (row) =>\n row.kind === 'option' &&\n (multiple\n ? multiValue.includes(row.option.value)\n : row.option.value === singleValue),\n );\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, rows, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple ? multiValue.includes(optionValue) : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const createValue = useCallback(\n (inputValue: string) => {\n if (onCreateOption) {\n onCreateOption(inputValue);\n } else if (multiple) {\n commitValue([...multiValue, inputValue]);\n } else {\n commitValue(inputValue);\n }\n\n if (multiple) {\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(inputValue);\n }\n close();\n },\n [\n onCreateOption,\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const selectRow = useCallback(\n (row: ComboboxRow) => {\n if (row.kind === 'create') createValue(row.inputValue);\n else selectOption(row.option);\n },\n [createValue, selectOption],\n );\n\n const clearValue = useCallback(() => {\n commitValue(null);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.('');\n }\n inputRef.current?.focus();\n }, [commitValue, isInputControlled, onInputChange]);\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = rows\n .map((row, i) => ({ row, i }))\n .filter(({ row }) => !isRowDisabled(row));\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [rows],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const row = rows[activeIndex];\n if (!row) return;\n document.getElementById(rowId(row))?.scrollIntoView?.({ block: 'nearest' });\n }, [isOpen, activeIndex, rows, rowId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n setActiveIndex(\n Math.max(\n 0,\n rows.findIndex((row) => !isRowDisabled(row)),\n ),\n );\n }\n break;\n case 'End':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n e.preventDefault();\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (multiple && displayInput === '' && multiValue.length > 0) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips, their remove buttons, or the clear button\n if ((e.target as HTMLElement).closest('[data-chip], [data-combobox-clear]'))\n return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const showClearButton = clearable && !multiple && hasSelection && !disabled;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeRow = activeIndex >= 0 ? rows[activeIndex] : undefined;\n const activeDescendant = activeRow != null ? rowId(activeRow) : undefined;\n\n // Without `selectedOptions`, values in `options` keep their list order (the\n // original behavior); with it, chips follow value order so they don't jump\n // around as async results change.\n const chipOptions = useMemo<ComboboxOption[]>(() => {\n if (!multiple) return [];\n if (selectedOptions == null) {\n const fromOptions = options.filter((o) => multiValue.includes(o.value));\n if (!creatable) return fromOptions;\n const listed = new Set(fromOptions.map((o) => o.value));\n return [\n ...fromOptions,\n ...multiValue\n .filter((v) => !listed.has(v))\n .map((v) => ({ value: v, label: v })),\n ];\n }\n return multiValue\n .map(resolveOption)\n .filter((o): o is ComboboxOption => o != null);\n }, [\n multiple,\n selectedOptions,\n options,\n multiValue,\n creatable,\n resolveOption,\n ]);\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && chipOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.combobox__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer convenience; the input owns keyboard interaction */}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && chipOptions.length > 0 && (\n <ChipGroup\n aria-label={selectionsLabel ?? defaultSelectionsLabel(label)}\n disabled={disabled}\n >\n {chipOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && chipOptions.length > 0 ? undefined : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n aria-busy={loading || undefined}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n {showClearButton && (\n <button\n {...clearButtonProps}\n type=\"button\"\n className={mergeClassNames(\n styles.combobox__clear,\n clearButtonProps?.className,\n )}\n aria-label={clearLabel}\n data-combobox-clear=\"\"\n onClick={clearValue}\n onBlur={(e) => {\n clearButtonProps?.onBlur?.(e);\n handleBlur(e);\n }}\n >\n <Icon size={CLEAR_ICON_SIZE[size]} glyph={<CloseCircleIcon />} />\n </button>\n )}\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {rows.length > 0 && (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? listboxLabel)\n }\n >\n {rows.map((row, index) => {\n const active = index === activeIndex;\n const preventBlur = (ev: MouseEvent) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n };\n if (row.kind === 'create') {\n return (\n <li\n key={rowId(row)}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={formatCreateLabel(row.inputValue)}\n leadingVisual={<Icon glyph={<PlusIcon />} />}\n active={active}\n aria-selected={false}\n onMouseDown={preventBlur}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => createValue(row.inputValue)}\n />\n </li>\n );\n }\n const { option } = row;\n const selected = isSelected(option.value);\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={preventBlur}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n {loading ? (\n <div className={styles.combobox__loading} role=\"status\">\n <Spinner size=\"16\" aria-hidden />\n <span>{loadingMessage}</span>\n </div>\n ) : (\n rows.length === 0 && (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n )\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","CLEAR_ICON_SIZE","defaultSelectionsLabel","label","defaultFormatCreateLabel","inputValue","isRowDisabled","row","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","clearable","clearLabel","clearButtonProps","selectionsLabel","listboxLabel","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","useMemo","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","resolveOption","optionValue","o","selectedOption","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","createInput","showCreateRow","needle","matches","text","rows","rowId","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","selectOption","v","_a","createValue","selectRow","clearValue","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","_b","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","showClearButton","labelFloated","activeRow","activeDescendant","chipOptions","fromOptions","listed","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","IconSlotContext","ChipGroup","Chip","ev","mergeClassNames","Icon","CloseCircleIcon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","active","preventBlur","MenuItem","PlusIcon","selected","leading","Spinner"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Combobox.css');const o="_combobox_14wpn_2",_="_combobox__wrapper_14wpn_8",b="_combobox__label_14wpn_26",c="_combobox__inner_14wpn_56",m="_combobox__value_14wpn_72",n="_combobox__control_14wpn_82",x="_combobox__popup_14wpn_120",p="_combobox__menu_14wpn_136",e="_combobox__empty_14wpn_141",l="_combobox__loading_14wpn_149",i="_combobox__list_14wpn_159",a="_combobox__option_14wpn_164",t={combobox:o,combobox__wrapper:_,"combobox--disabled":"_combobox--disabled_14wpn_16",combobox__label:b,"combobox--label-floated":"_combobox--label-floated_14wpn_47",combobox__inner:c,"combobox__leading-icon":"_combobox__leading-icon_14wpn_64",combobox__value:m,combobox__control:n,"combobox__trailing-icon":"_combobox__trailing-icon_14wpn_107","combobox--open":"_combobox--open_14wpn_117",combobox__popup:x,"combobox__popup--above":"_combobox__popup--above_14wpn_127","combobox__popup--visible":"_combobox__popup--visible_14wpn_130",combobox__menu:p,combobox__empty:e,combobox__loading:l,combobox__list:i,combobox__option:a,"combobox--size-small":"_combobox--size-small_14wpn_168","combobox--has-chips":"_combobox--has-chips_14wpn_175","combobox--size-medium":"_combobox--size-medium_14wpn_192","combobox--size-large":"_combobox--size-large_14wpn_220","combobox--invalid":"_combobox--invalid_14wpn_249","combobox--has-leading-icon":"_combobox--has-leading-icon_14wpn_261"};exports.combobox=o;exports.combobox__control=n;exports.combobox__empty=e;exports.combobox__inner=c;exports.combobox__label=b;exports.combobox__list=i;exports.combobox__loading=l;exports.combobox__menu=p;exports.combobox__option=a;exports.combobox__popup=x;exports.combobox__value=m;exports.combobox__wrapper=_;exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Combobox.css');const o="_combobox_ionfr_2",_="_combobox__wrapper_ionfr_8",b="_combobox__label_ionfr_26",c="_combobox__inner_ionfr_56",m="_combobox__value_ionfr_72",n="_combobox__control_ionfr_82",i="_combobox__clear_ionfr_120",x="_combobox__popup_ionfr_143",e="_combobox__menu_ionfr_159",l="_combobox__empty_ionfr_164",r="_combobox__loading_ionfr_172",a="_combobox__list_ionfr_182",p="_combobox__option_ionfr_187",t={combobox:o,combobox__wrapper:_,"combobox--disabled":"_combobox--disabled_ionfr_16",combobox__label:b,"combobox--label-floated":"_combobox--label-floated_ionfr_47",combobox__inner:c,"combobox__leading-icon":"_combobox__leading-icon_ionfr_64",combobox__value:m,combobox__control:n,"combobox__trailing-icon":"_combobox__trailing-icon_ionfr_107","combobox--open":"_combobox--open_ionfr_117",combobox__clear:i,combobox__popup:x,"combobox__popup--above":"_combobox__popup--above_ionfr_150","combobox__popup--visible":"_combobox__popup--visible_ionfr_153",combobox__menu:e,combobox__empty:l,combobox__loading:r,combobox__list:a,combobox__option:p,"combobox--size-small":"_combobox--size-small_ionfr_191","combobox--has-chips":"_combobox--has-chips_ionfr_198","combobox--size-medium":"_combobox--size-medium_ionfr_215","combobox--size-large":"_combobox--size-large_ionfr_243","combobox--invalid":"_combobox--invalid_ionfr_272","combobox--has-leading-icon":"_combobox--has-leading-icon_ionfr_284"};exports.combobox=o;exports.combobox__clear=i;exports.combobox__control=n;exports.combobox__empty=l;exports.combobox__inner=c;exports.combobox__label=b;exports.combobox__list=a;exports.combobox__loading=r;exports.combobox__menu=e;exports.combobox__option=p;exports.combobox__popup=x;exports.combobox__value=m;exports.combobox__wrapper=_;exports.default=t;
2
2
  //# sourceMappingURL=Combobox.module.scss.cjs.map
@@ -1,41 +1,43 @@
1
- import './Combobox.css';const o = "_combobox_14wpn_2", _ = "_combobox__wrapper_14wpn_8", b = "_combobox__label_14wpn_26", c = "_combobox__inner_14wpn_56", m = "_combobox__value_14wpn_72", n = "_combobox__control_14wpn_82", p = "_combobox__popup_14wpn_120", x = "_combobox__menu_14wpn_136", e = "_combobox__empty_14wpn_141", i = "_combobox__loading_14wpn_149", l = "_combobox__list_14wpn_159", a = "_combobox__option_14wpn_164", s = {
1
+ import './Combobox.css';const o = "_combobox_ionfr_2", _ = "_combobox__wrapper_ionfr_8", b = "_combobox__label_ionfr_26", c = "_combobox__inner_ionfr_56", m = "_combobox__value_ionfr_72", n = "_combobox__control_ionfr_82", i = "_combobox__clear_ionfr_120", x = "_combobox__popup_ionfr_143", e = "_combobox__menu_ionfr_159", l = "_combobox__empty_ionfr_164", r = "_combobox__loading_ionfr_172", a = "_combobox__list_ionfr_182", p = "_combobox__option_ionfr_187", s = {
2
2
  combobox: o,
3
3
  combobox__wrapper: _,
4
- "combobox--disabled": "_combobox--disabled_14wpn_16",
4
+ "combobox--disabled": "_combobox--disabled_ionfr_16",
5
5
  combobox__label: b,
6
- "combobox--label-floated": "_combobox--label-floated_14wpn_47",
6
+ "combobox--label-floated": "_combobox--label-floated_ionfr_47",
7
7
  combobox__inner: c,
8
- "combobox__leading-icon": "_combobox__leading-icon_14wpn_64",
8
+ "combobox__leading-icon": "_combobox__leading-icon_ionfr_64",
9
9
  combobox__value: m,
10
10
  combobox__control: n,
11
- "combobox__trailing-icon": "_combobox__trailing-icon_14wpn_107",
12
- "combobox--open": "_combobox--open_14wpn_117",
13
- combobox__popup: p,
14
- "combobox__popup--above": "_combobox__popup--above_14wpn_127",
15
- "combobox__popup--visible": "_combobox__popup--visible_14wpn_130",
16
- combobox__menu: x,
17
- combobox__empty: e,
18
- combobox__loading: i,
19
- combobox__list: l,
20
- combobox__option: a,
21
- "combobox--size-small": "_combobox--size-small_14wpn_168",
22
- "combobox--has-chips": "_combobox--has-chips_14wpn_175",
23
- "combobox--size-medium": "_combobox--size-medium_14wpn_192",
24
- "combobox--size-large": "_combobox--size-large_14wpn_220",
25
- "combobox--invalid": "_combobox--invalid_14wpn_249",
26
- "combobox--has-leading-icon": "_combobox--has-leading-icon_14wpn_261"
11
+ "combobox__trailing-icon": "_combobox__trailing-icon_ionfr_107",
12
+ "combobox--open": "_combobox--open_ionfr_117",
13
+ combobox__clear: i,
14
+ combobox__popup: x,
15
+ "combobox__popup--above": "_combobox__popup--above_ionfr_150",
16
+ "combobox__popup--visible": "_combobox__popup--visible_ionfr_153",
17
+ combobox__menu: e,
18
+ combobox__empty: l,
19
+ combobox__loading: r,
20
+ combobox__list: a,
21
+ combobox__option: p,
22
+ "combobox--size-small": "_combobox--size-small_ionfr_191",
23
+ "combobox--has-chips": "_combobox--has-chips_ionfr_198",
24
+ "combobox--size-medium": "_combobox--size-medium_ionfr_215",
25
+ "combobox--size-large": "_combobox--size-large_ionfr_243",
26
+ "combobox--invalid": "_combobox--invalid_ionfr_272",
27
+ "combobox--has-leading-icon": "_combobox--has-leading-icon_ionfr_284"
27
28
  };
28
29
  export {
29
30
  o as combobox,
31
+ i as combobox__clear,
30
32
  n as combobox__control,
31
- e as combobox__empty,
33
+ l as combobox__empty,
32
34
  c as combobox__inner,
33
35
  b as combobox__label,
34
- l as combobox__list,
35
- i as combobox__loading,
36
- x as combobox__menu,
37
- a as combobox__option,
38
- p as combobox__popup,
36
+ a as combobox__list,
37
+ r as combobox__loading,
38
+ e as combobox__menu,
39
+ p as combobox__option,
40
+ x as combobox__popup,
39
41
  m as combobox__value,
40
42
  _ as combobox__wrapper,
41
43
  s as default
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Combobox.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),s=require("react"),qe=require("../button/Button.cjs"),q=require("../icon-button/IconButton.cjs"),N=require("../icon/Icon.cjs"),__le=require("@mattermost/compass-icons/components/calendar-outline.js"),le=__le?.default??__le,__Ae=require("@mattermost/compass-icons/components/chevron-down.js"),Ae=__Ae?.default??__Ae,__Te=require("@mattermost/compass-icons/components/chevron-left.js"),Te=__Te?.default??__Te,__Fe=require("@mattermost/compass-icons/components/chevron-right.js"),Fe=__Fe?.default??__Fe,Be=require("../../hooks/use-anchored-popup-portal.cjs"),Oe=require("../../hooks/use-outside-close.cjs"),Pe=require("../../hooks/use-popover-transition.cjs"),l=require("./DateRangePicker.module.scss.cjs"),$e=360,ze=["Su","Mo","Tu","We","Th","Fr","Sa"],oe=["January","February","March","April","May","June","July","August","September","October","November","December"];function V(i){if(!i)return"";const[n,p,v]=i.split("-");return`${p}/${v}/${n}`}function W(i,n,p){return`${i}-${String(n+1).padStart(2,"0")}-${String(p).padStart(2,"0")}`}function J(i,n){return new Date(i,n+1,0).getDate()}function Le(i,n){return new Date(i,n,1).getDay()}function Z(i,n){return i===n}function Ye(i,n,p){if(!n||!p)return!1;const[v,x]=n<p?[n,p]:[p,n];return i>v&&i<x}function A(i,n,p){if(!i)return null;const[v,x,j]=i.split("-").map(Number);return v===n&&x===p+1?j:null}function Ke({className:i="",mode:n="date",value:p,startDate:v,endDate:x,onChange:j,onRangeChange:T,disabled:_,id:ce,portalContainer:ie=null,zIndex:ue}){const de=s.useId(),G=ce??de,Q=`${G}-popover`,F=s.useRef(null),B=s.useRef(null),O=s.useRef(null),S=new Date,P=W(S.getFullYear(),S.getMonth(),S.getDate()),[c,C]=s.useState(S.getFullYear()),[o,E]=s.useState(S.getMonth()),[u,$]=s.useState(!1),[z,D]=s.useState(1),[fe,pe]=s.useState(""),[ge,X]=s.useState(""),[he,ee]=s.useState(""),w=p??fe,d=v??ge,h=x??he,ke=n==="date"?!!w:!!d,{mounted:L,visible:Y}=Pe.usePopoverTransition(u),{placement:me,style:ye,portalRef:M,renderPortal:ve}=Be.useAnchoredPopupPortal(B,L,{preferredHeight:$e,portalContainer:ie,zIndex:ue,matchWidth:!1}),k=s.useCallback((e=!0)=>{var t;$(!1),e&&((t=B.current)==null||t.focus())},[]);Oe.useOutsideClose(F,u,()=>k(!0),M),s.useEffect(()=>{if(!u)return;function e(t){t.key==="Escape"&&(t.preventDefault(),k(!0))}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[u,k]),s.useEffect(()=>{if(!u)return;function e(t){var f,g;const r=t.target;r&&((f=F.current)!=null&&f.contains(r)||(g=M.current)!=null&&g.contains(r)||k(!1))}return document.addEventListener("focusin",e),()=>document.removeEventListener("focusin",e)},[u,k,M]);const y=J(c,o),_e=s.useCallback(()=>{if(n==="date"){const t=A(w,c,o);if(t)return t}else{const t=A(h,c,o);if(t)return t;const r=A(d,c,o);if(r)return r}const e=A(P,c,o);return e||1},[n,w,d,h,c,o,P]);s.useEffect(()=>{if(!u||!Y)return;const e=_e();D(e);const t=requestAnimationFrame(()=>{var r,f;(f=(r=O.current)==null?void 0:r.querySelector(`[data-day="${e}"]`))==null||f.focus()});return()=>cancelAnimationFrame(t)},[u,Y]);const m=s.useCallback(e=>{D(e),requestAnimationFrame(()=>{var t,r;(r=(t=O.current)==null?void 0:t.querySelector(`[data-day="${e}"]`))==null||r.focus()})},[]),K=s.useCallback(()=>{_||$(e=>!e)},[_]),De=s.useCallback(()=>{E(e=>e===0?(C(t=>t-1),11):e-1)},[]),be=s.useCallback(()=>{E(e=>e===11?(C(t=>t+1),0):e+1)},[]),b=s.useCallback((e,t)=>{const r=e===-1?o===0?11:o-1:o===11?0:o+1,f=e===-1?o===0?c-1:c:o===11?c+1:c,g=J(f,r);C(f),E(r),m(Math.min(t,g))},[o,c,m]),xe=s.useCallback(()=>{const e=new Date;C(e.getFullYear()),E(e.getMonth()),m(e.getDate())},[m]),H=s.useCallback((e,t)=>{if(n==="date")j?j(e):pe(e),k(!0);else if(!d||d&&h)X(e),ee(""),D(t);else{const[r,f]=e>=d?[d,e]:[e,d];T?T(r,f):(X(r),ee(f)),k(!0)}},[n,d,h,j,T,k]),I=s.useCallback(e=>{const t=z+e;if(t>=1&&t<=y){m(t);return}t<1?b(-1,J(o===0?c-1:c,o===0?11:o-1)+t):b(1,t-y)},[z,y,o,c,m,b]),je=s.useCallback((e,t)=>{switch(e.key){case"ArrowLeft":e.preventDefault(),I(-1);break;case"ArrowRight":e.preventDefault(),I(1);break;case"ArrowUp":e.preventDefault(),I(-7);break;case"ArrowDown":e.preventDefault(),I(7);break;case"Home":e.preventDefault(),m(1);break;case"End":e.preventDefault(),m(y);break;case"PageUp":e.preventDefault(),b(-1,t);break;case"PageDown":e.preventDefault(),b(1,t);break;case"Enter":case" ":e.preventDefault(),D(t),H(W(c,o,t),t);break}},[I,m,y,b,H,c,o]),Se=s.useCallback(e=>{if(!_)switch(e.key){case"Enter":case" ":e.preventDefault(),K();break;case"ArrowDown":u||(e.preventDefault(),$(!0));break;case"Escape":u&&(e.preventDefault(),k(!0));break}},[_,K,u,k]);s.useEffect(()=>{u&&D(e=>Math.min(Math.max(1,e),y))},[u,y,o,c]);const we=Le(c,o),R=[...Array(we).fill(null),...Array.from({length:y},(e,t)=>t+1)];for(;R.length%7!==0;)R.push(null);const te=[];for(let e=0;e<R.length;e+=7)te.push(R.slice(e,e+7));const Ie=n==="date"?V(w):d?`${V(d)}${h?` – ${V(h)}`:""}`:"",Ne=[l.default["date-range-picker"],u?l.default["date-range-picker--open"]:"",_?l.default["date-range-picker--disabled"]:"",i].filter(Boolean).join(" ");return a.jsxs("div",{ref:F,className:Ne,children:[a.jsxs("div",{ref:B,className:l.default["date-range-picker__trigger"],role:"button","aria-haspopup":"dialog","aria-expanded":u,"aria-controls":L?Q:void 0,"aria-disabled":_||void 0,tabIndex:_?-1:0,id:G,"data-has-value":ke?"":void 0,onClick:K,onKeyDown:Se,children:[a.jsx("span",{className:l.default["date-range-picker__calendar-icon"],"aria-hidden":!0,children:a.jsx(N.default,{size:"16",glyph:a.jsx(le,{})})}),a.jsx("span",{className:l.default["date-range-picker__value"],children:Ie||"mm/dd/yyyy"}),a.jsx("span",{className:l.default["date-range-picker__chevron"],"aria-hidden":!0,children:a.jsx(N.default,{size:"16",glyph:a.jsx(Ae,{})})})]}),L&&ve(a.jsxs("div",{ref:M,id:Q,className:[l.default["date-range-picker__popover"],me==="above"?l.default["date-range-picker__popover--above"]:"",Y?l.default["date-range-picker__popover--visible"]:""].filter(Boolean).join(" "),style:ye,role:"dialog","aria-modal":"false","aria-label":"Date picker",children:[a.jsxs("div",{className:l.default["date-range-picker__header"],children:[a.jsxs("span",{className:l.default["date-range-picker__month-label"],"aria-live":"polite",children:[oe[o]," ",c]}),a.jsxs("div",{className:l.default["date-range-picker__header-actions"],children:[a.jsx(qe.default,{emphasis:"quaternary",size:"small",leadingIcon:a.jsx(N.default,{size:"16",glyph:a.jsx(le,{})}),onClick:xe,children:"Today"}),a.jsxs("div",{className:l.default["date-range-picker__nav-buttons"],children:[a.jsx(q.default,{size:"medium",padding:"compact",icon:a.jsx(N.default,{size:q.ICON_BUTTON_ICON_SIZES.medium,glyph:a.jsx(Te,{})}),onClick:De,"aria-label":"Previous month"}),a.jsx(q.default,{size:"medium",padding:"compact",icon:a.jsx(N.default,{size:q.ICON_BUTTON_ICON_SIZES.medium,glyph:a.jsx(Fe,{})}),onClick:be,"aria-label":"Next month"})]})]})]}),a.jsx("div",{className:l.default["date-range-picker__weekdays"],"aria-hidden":!0,children:ze.map(e=>a.jsx("span",{className:l.default["date-range-picker__weekday"],children:e},e))}),a.jsx("div",{ref:O,className:l.default["date-range-picker__grid"],role:"grid","aria-label":`${oe[o]} ${c}`,children:te.map((e,t)=>a.jsx("div",{className:l.default["date-range-picker__week"],role:"row",children:e.map((r,f)=>{if(r==null)return a.jsx("span",{className:l.default["date-range-picker__day-empty"],role:"gridcell"},f);const g=W(c,o,r),ae=g===P,ne=n==="range"&&Z(g,d),re=n==="range"&&!!h&&Z(g,h),U=n==="date"?Z(g,w):ne||re,Ce=n==="range"&&Ye(g,d,h),se=n==="range"&&!!d&&!!h&&d!==h,Ee=[l.default["date-range-picker__day-cell"],Ce?l.default["date-range-picker__day-cell--in-range"]:"",se&&ne?l.default["date-range-picker__day-cell--range-start"]:"",se&&re?l.default["date-range-picker__day-cell--range-end"]:""].filter(Boolean).join(" "),Me=[l.default["date-range-picker__day"],U?l.default["date-range-picker__day--selected"]:"",ae&&!U?l.default["date-range-picker__day--today"]:""].filter(Boolean).join(" ");return a.jsx("div",{className:Ee,role:"gridcell",children:a.jsx("button",{type:"button",className:Me,"data-day":r,tabIndex:z===r?0:-1,onClick:()=>H(g,r),onFocus:()=>D(r),onKeyDown:Re=>je(Re,r),"aria-label":g,"aria-pressed":U,"aria-current":ae?"date":void 0,children:r})},f)})},t))})]}))]})}exports.default=Ke;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),s=require("react"),Pe=require("../button/Button.cjs"),q=require("../icon-button/IconButton.cjs"),C=require("../icon/Icon.cjs"),__oe=require("@mattermost/compass-icons/components/calendar-outline.js"),oe=__oe?.default??__oe,__$e=require("@mattermost/compass-icons/components/chevron-down.js"),$e=__$e?.default??__$e,__ze=require("@mattermost/compass-icons/components/chevron-left.js"),ze=__ze?.default??__ze,__Le=require("@mattermost/compass-icons/components/chevron-right.js"),Le=__Le?.default??__Le,Ye=require("../../hooks/use-anchored-popup-portal.cjs"),Ke=require("../../hooks/use-outside-close.cjs"),He=require("../../hooks/use-popover-transition.cjs"),l=require("./DateRangePicker.module.scss.cjs"),Ue=360,Ve=["Su","Mo","Tu","We","Th","Fr","Sa"],We=["January","February","March","April","May","June","July","August","September","October","November","December"];function Je(i){if(!i)return"";const[n,p,v]=i.split("-");return`${p}/${v}/${n}`}function W(i,n,p){return`${i}-${String(n+1).padStart(2,"0")}-${String(p).padStart(2,"0")}`}function J(i,n){return new Date(i,n+1,0).getDate()}function Ze(i,n){return new Date(i,n,1).getDay()}function Z(i,n){return i===n}function Ge(i,n,p){if(!n||!p)return!1;const[v,j]=n<p?[n,p]:[p,n];return i>v&&i<j}function A(i,n,p){if(!i)return null;const[v,j,S]=i.split("-").map(Number);return v===n&&j===p+1?S:null}function Qe({className:i="",mode:n="date",value:p,startDate:v,endDate:j,onChange:S,onRangeChange:T,disabled:_,id:ce,portalContainer:ie=null,zIndex:ue,placeholder:de="mm/dd/yyyy",formatDate:F=Je,monthNames:G=We,weekdayNames:fe=Ve,dialogLabel:pe="Date picker",todayLabel:ge="Today",previousMonthLabel:he="Previous month",nextMonthLabel:ke="Next month"}){const ye=s.useId(),Q=ce??ye,X=`${Q}-popover`,B=s.useRef(null),O=s.useRef(null),P=s.useRef(null),w=new Date,$=W(w.getFullYear(),w.getMonth(),w.getDate()),[c,N]=s.useState(w.getFullYear()),[o,E]=s.useState(w.getMonth()),[u,z]=s.useState(!1),[L,D]=s.useState(1),[me,ve]=s.useState(""),[_e,ee]=s.useState(""),[De,te]=s.useState(""),b=p??me,d=v??_e,h=j??De,be=n==="date"?!!b:!!d,{mounted:Y,visible:K}=He.usePopoverTransition(u),{placement:xe,style:je,portalRef:M,renderPortal:Se}=Ye.useAnchoredPopupPortal(O,Y,{preferredHeight:Ue,portalContainer:ie,zIndex:ue,matchWidth:!1}),k=s.useCallback((e=!0)=>{var t;z(!1),e&&((t=O.current)==null||t.focus())},[]);Ke.useOutsideClose(B,u,()=>k(!0),M),s.useEffect(()=>{if(!u)return;function e(t){t.key==="Escape"&&(t.preventDefault(),k(!0))}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[u,k]),s.useEffect(()=>{if(!u)return;function e(t){var f,g;const r=t.target;r&&((f=B.current)!=null&&f.contains(r)||(g=M.current)!=null&&g.contains(r)||k(!1))}return document.addEventListener("focusin",e),()=>document.removeEventListener("focusin",e)},[u,k,M]);const m=J(c,o),we=s.useCallback(()=>{if(n==="date"){const t=A(b,c,o);if(t)return t}else{const t=A(h,c,o);if(t)return t;const r=A(d,c,o);if(r)return r}const e=A($,c,o);return e||1},[n,b,d,h,c,o,$]);s.useEffect(()=>{if(!u||!K)return;const e=we();D(e);const t=requestAnimationFrame(()=>{var r,f;(f=(r=P.current)==null?void 0:r.querySelector(`[data-day="${e}"]`))==null||f.focus()});return()=>cancelAnimationFrame(t)},[u,K]);const y=s.useCallback(e=>{D(e),requestAnimationFrame(()=>{var t,r;(r=(t=P.current)==null?void 0:t.querySelector(`[data-day="${e}"]`))==null||r.focus()})},[]),H=s.useCallback(()=>{_||z(e=>!e)},[_]),Ie=s.useCallback(()=>{E(e=>e===0?(N(t=>t-1),11):e-1)},[]),Ce=s.useCallback(()=>{E(e=>e===11?(N(t=>t+1),0):e+1)},[]),x=s.useCallback((e,t)=>{const r=e===-1?o===0?11:o-1:o===11?0:o+1,f=e===-1?o===0?c-1:c:o===11?c+1:c,g=J(f,r);N(f),E(r),y(Math.min(t,g))},[o,c,y]),Ne=s.useCallback(()=>{const e=new Date;N(e.getFullYear()),E(e.getMonth()),y(e.getDate())},[y]),U=s.useCallback((e,t)=>{if(n==="date")S?S(e):ve(e),k(!0);else if(!d||d&&h)ee(e),te(""),D(t);else{const[r,f]=e>=d?[d,e]:[e,d];T?T(r,f):(ee(r),te(f)),k(!0)}},[n,d,h,S,T,k]),I=s.useCallback(e=>{const t=L+e;if(t>=1&&t<=m){y(t);return}t<1?x(-1,J(o===0?c-1:c,o===0?11:o-1)+t):x(1,t-m)},[L,m,o,c,y,x]),Ee=s.useCallback((e,t)=>{switch(e.key){case"ArrowLeft":e.preventDefault(),I(-1);break;case"ArrowRight":e.preventDefault(),I(1);break;case"ArrowUp":e.preventDefault(),I(-7);break;case"ArrowDown":e.preventDefault(),I(7);break;case"Home":e.preventDefault(),y(1);break;case"End":e.preventDefault(),y(m);break;case"PageUp":e.preventDefault(),x(-1,t);break;case"PageDown":e.preventDefault(),x(1,t);break;case"Enter":case" ":e.preventDefault(),D(t),U(W(c,o,t),t);break}},[I,y,m,x,U,c,o]),Me=s.useCallback(e=>{if(!_)switch(e.key){case"Enter":case" ":e.preventDefault(),H();break;case"ArrowDown":u||(e.preventDefault(),z(!0));break;case"Escape":u&&(e.preventDefault(),k(!0));break}},[_,H,u,k]);s.useEffect(()=>{u&&D(e=>Math.min(Math.max(1,e),m))},[u,m,o,c]);const Re=Ze(c,o),R=[...Array(Re).fill(null),...Array.from({length:m},(e,t)=>t+1)];for(;R.length%7!==0;)R.push(null);const ae=[];for(let e=0;e<R.length;e+=7)ae.push(R.slice(e,e+7));const qe=n==="date"?b?F(b):"":d?`${F(d)}${h?` – ${F(h)}`:""}`:"",Ae=[l.default["date-range-picker"],u?l.default["date-range-picker--open"]:"",_?l.default["date-range-picker--disabled"]:"",i].filter(Boolean).join(" ");return a.jsxs("div",{ref:B,className:Ae,children:[a.jsxs("div",{ref:O,className:l.default["date-range-picker__trigger"],role:"button","aria-haspopup":"dialog","aria-expanded":u,"aria-controls":Y?X:void 0,"aria-disabled":_||void 0,tabIndex:_?-1:0,id:Q,"data-has-value":be?"":void 0,onClick:H,onKeyDown:Me,children:[a.jsx("span",{className:l.default["date-range-picker__calendar-icon"],"aria-hidden":!0,children:a.jsx(C.default,{size:"16",glyph:a.jsx(oe,{})})}),a.jsx("span",{className:l.default["date-range-picker__value"],children:qe||de}),a.jsx("span",{className:l.default["date-range-picker__chevron"],"aria-hidden":!0,children:a.jsx(C.default,{size:"16",glyph:a.jsx($e,{})})})]}),Y&&Se(a.jsxs("div",{ref:M,id:X,className:[l.default["date-range-picker__popover"],xe==="above"?l.default["date-range-picker__popover--above"]:"",K?l.default["date-range-picker__popover--visible"]:""].filter(Boolean).join(" "),style:je,role:"dialog","aria-modal":"false","aria-label":pe,children:[a.jsxs("div",{className:l.default["date-range-picker__header"],children:[a.jsxs("span",{className:l.default["date-range-picker__month-label"],"aria-live":"polite",children:[G[o]," ",c]}),a.jsxs("div",{className:l.default["date-range-picker__header-actions"],children:[a.jsx(Pe.default,{emphasis:"quaternary",size:"small",leadingIcon:a.jsx(C.default,{size:"16",glyph:a.jsx(oe,{})}),onClick:Ne,children:ge}),a.jsxs("div",{className:l.default["date-range-picker__nav-buttons"],children:[a.jsx(q.default,{size:"medium",padding:"compact",icon:a.jsx(C.default,{size:q.ICON_BUTTON_ICON_SIZES.medium,glyph:a.jsx(ze,{})}),onClick:Ie,"aria-label":he}),a.jsx(q.default,{size:"medium",padding:"compact",icon:a.jsx(C.default,{size:q.ICON_BUTTON_ICON_SIZES.medium,glyph:a.jsx(Le,{})}),onClick:Ce,"aria-label":ke})]})]})]}),a.jsx("div",{className:l.default["date-range-picker__weekdays"],"aria-hidden":!0,children:fe.map((e,t)=>a.jsx("span",{className:l.default["date-range-picker__weekday"],children:e},t))}),a.jsx("div",{ref:P,className:l.default["date-range-picker__grid"],role:"grid","aria-label":`${G[o]} ${c}`,children:ae.map((e,t)=>a.jsx("div",{className:l.default["date-range-picker__week"],role:"row",children:e.map((r,f)=>{if(r==null)return a.jsx("span",{className:l.default["date-range-picker__day-empty"],role:"gridcell"},f);const g=W(c,o,r),ne=g===$,re=n==="range"&&Z(g,d),se=n==="range"&&!!h&&Z(g,h),V=n==="date"?Z(g,b):re||se,Te=n==="range"&&Ge(g,d,h),le=n==="range"&&!!d&&!!h&&d!==h,Fe=[l.default["date-range-picker__day-cell"],Te?l.default["date-range-picker__day-cell--in-range"]:"",le&&re?l.default["date-range-picker__day-cell--range-start"]:"",le&&se?l.default["date-range-picker__day-cell--range-end"]:""].filter(Boolean).join(" "),Be=[l.default["date-range-picker__day"],V?l.default["date-range-picker__day--selected"]:"",ne&&!V?l.default["date-range-picker__day--today"]:""].filter(Boolean).join(" ");return a.jsx("div",{className:Fe,role:"gridcell",children:a.jsx("button",{type:"button",className:Be,"data-day":r,tabIndex:L===r?0:-1,onClick:()=>U(g,r),onFocus:()=>D(r),onKeyDown:Oe=>Ee(Oe,r),"aria-label":g,"aria-pressed":V,"aria-current":ne?"date":void 0,children:r})},f)})},t))})]}))]})}exports.default=Qe;
2
2
  //# sourceMappingURL=DateRangePicker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.cjs","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(\n -1,\n getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next,\n );\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` – ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span\n className={styles['date-range-picker__calendar-icon']}\n aria-hidden\n >\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || 'mm/dd/yyyy'}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker\"\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span\n className={styles['date-range-picker__month-label']}\n aria-live=\"polite\"\n >\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n }\n onClick={handleToday}\n >\n Today\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {WEEKDAYS.map((d) => (\n <span key={d} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${MONTHS[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected\n ? styles['date-range-picker__day--selected']\n : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.cjs","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent, ReactNode } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n /** Trigger text when no date is selected. Default: \"mm/dd/yyyy\". */\n placeholder?: string;\n /** Formats an ISO `yyyy-mm-dd` date for the trigger. Default: `mm/dd/yyyy`. */\n formatDate?: (iso: string) => string;\n /** Twelve month names, January first. Default: English. */\n monthNames?: string[];\n /** Seven short weekday names, Sunday first. Default: \"Su\" … \"Sa\". */\n weekdayNames?: string[];\n /** Accessible name for the calendar dialog. Default: \"Date picker\". */\n dialogLabel?: string;\n /** Today button text. Default: \"Today\". */\n todayLabel?: ReactNode;\n /** Accessible name for the previous-month button. Default: \"Previous month\". */\n previousMonthLabel?: string;\n /** Accessible name for the next-month button. Default: \"Next month\". */\n nextMonthLabel?: string;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n placeholder = 'mm/dd/yyyy',\n formatDate = formatDateDisplay,\n monthNames = MONTHS,\n weekdayNames = WEEKDAYS,\n dialogLabel = 'Date picker',\n todayLabel = 'Today',\n previousMonthLabel = 'Previous month',\n nextMonthLabel = 'Next month',\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(\n -1,\n getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next,\n );\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? selectedDate\n ? formatDate(selectedDate)\n : ''\n : selectedStart\n ? `${formatDate(selectedStart)}${selectedEnd ? ` – ${formatDate(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span\n className={styles['date-range-picker__calendar-icon']}\n aria-hidden\n >\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || placeholder}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={dialogLabel}\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span\n className={styles['date-range-picker__month-label']}\n aria-live=\"polite\"\n >\n {monthNames[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n }\n onClick={handleToday}\n >\n {todayLabel}\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label={previousMonthLabel}\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label={nextMonthLabel}\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {weekdayNames.map((d, i) => (\n <span key={i} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${monthNames[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected\n ? styles['date-range-picker__day--selected']\n : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","placeholder","formatDate","monthNames","weekdayNames","dialogLabel","todayLabel","previousMonthLabel","nextMonthLabel","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":"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"}