@mattermost/compass-ui 0.1.0-alpha.27 → 0.1.0-alpha.29

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 (373) hide show
  1. package/dist/compass-ui.css +20 -2
  2. package/dist/components/admin-console-footer/AdminConsoleFooter.css +1 -1
  3. package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.cjs +1 -1
  4. package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.js +7 -7
  5. package/dist/components/admin-console-header/AdminConsoleHeader.css +1 -1
  6. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.cjs +1 -1
  7. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.js +8 -8
  8. package/dist/components/admin-panel/AdminPanel.css +1 -1
  9. package/dist/components/admin-panel/AdminPanel.module.scss.cjs +1 -1
  10. package/dist/components/admin-panel/AdminPanel.module.scss.js +5 -5
  11. package/dist/components/admin-panel-footer/AdminPanelFooter.css +1 -1
  12. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.cjs +1 -1
  13. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.js +5 -5
  14. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  15. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  16. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  17. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +6 -0
  18. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  19. package/dist/components/admin-panel-header/AdminPanelHeader.js +145 -109
  20. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  21. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +11 -10
  23. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js.map +1 -1
  24. package/dist/components/attachment-card/AttachmentCard.css +1 -1
  25. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
  26. package/dist/components/attachment-card/AttachmentCard.module.scss.js +22 -19
  27. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
  28. package/dist/components/button/Button.css +1 -1
  29. package/dist/components/button/Button.module.scss.cjs +1 -1
  30. package/dist/components/button/Button.module.scss.js +20 -19
  31. package/dist/components/button/Button.module.scss.js.map +1 -1
  32. package/dist/components/card-button/CardButton.css +1 -1
  33. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  34. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  35. package/dist/components/card-button/CardButtonGroup.css +1 -1
  36. package/dist/components/card-button/CardButtonGroup.module.scss.cjs +1 -1
  37. package/dist/components/card-button/CardButtonGroup.module.scss.js +1 -1
  38. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.css +1 -1
  39. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.cjs +1 -1
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.js +8 -8
  41. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  42. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  43. package/dist/components/channel-sidebar-item/ChannelSidebarItem.css +1 -1
  44. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +66 -7
  45. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +163 -93
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +35 -22
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
  51. package/dist/components/checkbox/Checkbox.css +1 -1
  52. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  53. package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
  54. package/dist/components/chip/Chip.cjs +1 -1
  55. package/dist/components/chip/Chip.cjs.map +1 -1
  56. package/dist/components/chip/Chip.css +1 -1
  57. package/dist/components/chip/Chip.d.ts.map +1 -1
  58. package/dist/components/chip/Chip.js +8 -8
  59. package/dist/components/chip/Chip.js.map +1 -1
  60. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  61. package/dist/components/chip/Chip.module.scss.js +13 -10
  62. package/dist/components/chip/Chip.module.scss.js.map +1 -1
  63. package/dist/components/chip/ChipGroup.cjs +1 -1
  64. package/dist/components/chip/ChipGroup.cjs.map +1 -1
  65. package/dist/components/chip/ChipGroup.css +1 -1
  66. package/dist/components/chip/ChipGroup.d.ts +1 -1
  67. package/dist/components/chip/ChipGroup.d.ts.map +1 -1
  68. package/dist/components/chip/ChipGroup.js +30 -30
  69. package/dist/components/chip/ChipGroup.js.map +1 -1
  70. package/dist/components/chip/ChipGroup.module.scss.cjs +1 -1
  71. package/dist/components/chip/ChipGroup.module.scss.js +1 -1
  72. package/dist/components/combobox/Combobox.cjs +1 -1
  73. package/dist/components/combobox/Combobox.cjs.map +1 -1
  74. package/dist/components/combobox/Combobox.css +1 -1
  75. package/dist/components/combobox/Combobox.d.ts +10 -0
  76. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  77. package/dist/components/combobox/Combobox.js +269 -252
  78. package/dist/components/combobox/Combobox.js.map +1 -1
  79. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  80. package/dist/components/combobox/Combobox.module.scss.js +34 -31
  81. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  82. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  83. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  84. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  85. package/dist/components/date-range-picker/DateRangePicker.d.ts +14 -1
  86. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  87. package/dist/components/date-range-picker/DateRangePicker.js +217 -195
  88. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  89. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  90. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +29 -26
  91. package/dist/components/date-range-picker/DateRangePicker.module.scss.js.map +1 -1
  92. package/dist/components/divider/Divider.css +1 -1
  93. package/dist/components/divider/Divider.module.scss.cjs +1 -1
  94. package/dist/components/divider/Divider.module.scss.js +1 -1
  95. package/dist/components/dropdown/Dropdown.css +1 -1
  96. package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
  97. package/dist/components/dropdown/Dropdown.module.scss.js +23 -22
  98. package/dist/components/dropdown/Dropdown.module.scss.js.map +1 -1
  99. package/dist/components/emoji/Emoji.css +1 -1
  100. package/dist/components/emoji/Emoji.module.scss.cjs +1 -1
  101. package/dist/components/emoji/Emoji.module.scss.js +12 -12
  102. package/dist/components/emoji-button/EmojiButton.css +1 -1
  103. package/dist/components/emoji-button/EmojiButton.module.scss.cjs +1 -1
  104. package/dist/components/emoji-button/EmojiButton.module.scss.js +12 -9
  105. package/dist/components/emoji-button/EmojiButton.module.scss.js.map +1 -1
  106. package/dist/components/emoji-popover/EmojiPopover.css +1 -1
  107. package/dist/components/emoji-popover/EmojiPopover.module.scss.cjs +1 -1
  108. package/dist/components/emoji-popover/EmojiPopover.module.scss.js +21 -21
  109. package/dist/components/empty-state/EmptyState.css +1 -1
  110. package/dist/components/empty-state/EmptyState.module.scss.cjs +1 -1
  111. package/dist/components/empty-state/EmptyState.module.scss.js +7 -7
  112. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.css +1 -1
  113. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.cjs +1 -1
  114. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.js +9 -9
  115. package/dist/components/field/FieldClearButton.css +1 -1
  116. package/dist/components/field/FieldClearButton.module.scss.cjs +1 -1
  117. package/dist/components/field/FieldClearButton.module.scss.js +3 -3
  118. package/dist/components/field-message/FieldMessage.css +1 -1
  119. package/dist/components/field-message/FieldMessage.module.scss.cjs +1 -1
  120. package/dist/components/field-message/FieldMessage.module.scss.js +7 -7
  121. package/dist/components/global-banner/GlobalBanner.css +1 -1
  122. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
  123. package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
  124. package/dist/components/icon/Icon.css +1 -1
  125. package/dist/components/icon/Icon.module.scss.cjs +1 -1
  126. package/dist/components/icon/Icon.module.scss.js +13 -13
  127. package/dist/components/icon-button/IconButton.css +1 -1
  128. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  129. package/dist/components/icon-button/IconButton.module.scss.js +19 -16
  130. package/dist/components/icon-button/IconButton.module.scss.js.map +1 -1
  131. package/dist/components/illustration/Illustration.css +1 -1
  132. package/dist/components/illustration/Illustration.module.scss.cjs +1 -1
  133. package/dist/components/illustration/Illustration.module.scss.js +1 -1
  134. package/dist/components/image-preview/ImagePreview.css +1 -1
  135. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  136. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  137. package/dist/components/link-preview/LinkPreview.css +1 -1
  138. package/dist/components/link-preview/LinkPreview.module.scss.cjs +1 -1
  139. package/dist/components/link-preview/LinkPreview.module.scss.js +14 -14
  140. package/dist/components/mention-badge/MentionBadge.css +1 -1
  141. package/dist/components/mention-badge/MentionBadge.module.scss.cjs +1 -1
  142. package/dist/components/mention-badge/MentionBadge.module.scss.js +9 -9
  143. package/dist/components/menu-group-heading/MenuGroupHeading.css +1 -1
  144. package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.cjs +1 -1
  145. package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.js +2 -2
  146. package/dist/components/menu-item/MenuItem.css +1 -1
  147. package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
  148. package/dist/components/menu-item/MenuItem.module.scss.js +18 -18
  149. package/dist/components/message-actions/MessageActions.css +1 -1
  150. package/dist/components/message-actions/MessageActions.module.scss.cjs +1 -1
  151. package/dist/components/message-actions/MessageActions.module.scss.js +2 -2
  152. package/dist/components/message-header/MessageHeader.css +1 -1
  153. package/dist/components/message-header/MessageHeader.module.scss.cjs +1 -1
  154. package/dist/components/message-header/MessageHeader.module.scss.js +3 -3
  155. package/dist/components/message-separator/MessageSeparator.css +1 -1
  156. package/dist/components/message-separator/MessageSeparator.module.scss.cjs +1 -1
  157. package/dist/components/message-separator/MessageSeparator.module.scss.js +11 -11
  158. package/dist/components/modal/Modal.cjs +1 -1
  159. package/dist/components/modal/Modal.cjs.map +1 -1
  160. package/dist/components/modal/Modal.css +1 -1
  161. package/dist/components/modal/Modal.d.ts +11 -1
  162. package/dist/components/modal/Modal.d.ts.map +1 -1
  163. package/dist/components/modal/Modal.js +38 -36
  164. package/dist/components/modal/Modal.js.map +1 -1
  165. package/dist/components/modal/Modal.module.scss.cjs +1 -1
  166. package/dist/components/modal/Modal.module.scss.js +11 -11
  167. package/dist/components/modal/ModalOverlay.cjs.map +1 -1
  168. package/dist/components/modal/ModalOverlay.css +1 -1
  169. package/dist/components/modal/ModalOverlay.d.ts +1 -1
  170. package/dist/components/modal/ModalOverlay.js.map +1 -1
  171. package/dist/components/modal/ModalOverlay.module.scss.cjs +1 -1
  172. package/dist/components/modal/ModalOverlay.module.scss.js +5 -5
  173. package/dist/components/modal-footer/ModalFooter.css +1 -1
  174. package/dist/components/modal-footer/ModalFooter.module.scss.cjs +1 -1
  175. package/dist/components/modal-footer/ModalFooter.module.scss.js +11 -11
  176. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  177. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  178. package/dist/components/modal-header/ModalHeader.css +1 -1
  179. package/dist/components/modal-header/ModalHeader.d.ts +13 -3
  180. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  181. package/dist/components/modal-header/ModalHeader.js +61 -55
  182. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  183. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  184. package/dist/components/modal-header/ModalHeader.module.scss.js +18 -16
  185. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  186. package/dist/components/more-unreads-banner/MoreUnreadsBanner.css +1 -1
  187. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  188. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +8 -5
  189. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js.map +1 -1
  190. package/dist/components/new-message-banner/NewMessageBanner.css +1 -1
  191. package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs +1 -1
  192. package/dist/components/new-message-banner/NewMessageBanner.module.scss.js +9 -9
  193. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  194. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  195. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  196. package/dist/components/password-input/PasswordInput.css +1 -1
  197. package/dist/components/password-input/PasswordInput.module.scss.cjs +1 -1
  198. package/dist/components/password-input/PasswordInput.module.scss.js +15 -14
  199. package/dist/components/password-input/PasswordInput.module.scss.js.map +1 -1
  200. package/dist/components/permalink-preview/PermalinkPreview.css +1 -1
  201. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
  202. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -13
  203. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.css +1 -1
  204. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs +1 -1
  205. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js +7 -7
  206. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  207. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  208. package/dist/components/popover-menu/PopoverMenu.module.scss.js +13 -13
  209. package/dist/components/popover-notice/PopoverNotice.css +1 -1
  210. package/dist/components/popover-notice/PopoverNotice.module.scss.cjs +1 -1
  211. package/dist/components/popover-notice/PopoverNotice.module.scss.js +14 -14
  212. package/dist/components/profile-popover/ProfilePopover.css +1 -1
  213. package/dist/components/profile-popover/ProfilePopover.module.scss.cjs +1 -1
  214. package/dist/components/profile-popover/ProfilePopover.module.scss.js +33 -33
  215. package/dist/components/progress-bar/ProgressBar.css +1 -1
  216. package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
  217. package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -9
  218. package/dist/components/radio/Radio.css +1 -1
  219. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  220. package/dist/components/radio/Radio.module.scss.js +12 -12
  221. package/dist/components/reaction-button/ReactionButton.css +1 -1
  222. package/dist/components/reaction-button/ReactionButton.module.scss.cjs +1 -1
  223. package/dist/components/reaction-button/ReactionButton.module.scss.js +8 -8
  224. package/dist/components/reactions-row/ReactionsRow.css +1 -1
  225. package/dist/components/reactions-row/ReactionsRow.module.scss.cjs +1 -1
  226. package/dist/components/reactions-row/ReactionsRow.module.scss.js +8 -8
  227. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  228. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  229. package/dist/components/right-sidebar-header/RightSidebarHeader.css +1 -1
  230. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  231. package/dist/components/right-sidebar-header/RightSidebarHeader.js +39 -36
  232. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  233. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.cjs +1 -1
  234. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js +12 -13
  235. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js.map +1 -1
  236. package/dist/components/scrollbar/Scrollbar.css +1 -1
  237. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  238. package/dist/components/scrollbar/Scrollbar.module.scss.js +5 -5
  239. package/dist/components/search-input/SearchInput.css +1 -1
  240. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  241. package/dist/components/search-input/SearchInput.module.scss.js +15 -15
  242. package/dist/components/search-tip-banner/SearchTipBanner.css +1 -1
  243. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs +1 -1
  244. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js +3 -3
  245. package/dist/components/section-notice/SectionNotice.css +1 -1
  246. package/dist/components/section-notice/SectionNotice.module.scss.cjs +1 -1
  247. package/dist/components/section-notice/SectionNotice.module.scss.js +12 -12
  248. package/dist/components/segmented-control/SegmentedControl.cjs +2 -0
  249. package/dist/components/segmented-control/SegmentedControl.cjs.map +1 -0
  250. package/dist/components/segmented-control/SegmentedControl.css +1 -0
  251. package/dist/components/segmented-control/SegmentedControl.d.ts +71 -0
  252. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -0
  253. package/dist/components/segmented-control/SegmentedControl.js +173 -0
  254. package/dist/components/segmented-control/SegmentedControl.js.map +1 -0
  255. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs +2 -0
  256. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs.map +1 -0
  257. package/dist/components/segmented-control/SegmentedControl.module.scss.js +20 -0
  258. package/dist/components/segmented-control/SegmentedControl.module.scss.js.map +1 -0
  259. package/dist/components/segmented-control/index.cjs +2 -0
  260. package/dist/components/segmented-control/index.cjs.map +1 -0
  261. package/dist/components/segmented-control/index.d.ts +3 -0
  262. package/dist/components/segmented-control/index.d.ts.map +1 -0
  263. package/dist/components/segmented-control/index.js +5 -0
  264. package/dist/components/segmented-control/index.js.map +1 -0
  265. package/dist/components/select/Select.cjs +1 -1
  266. package/dist/components/select/Select.cjs.map +1 -1
  267. package/dist/components/select/Select.css +1 -1
  268. package/dist/components/select/Select.d.ts +14 -0
  269. package/dist/components/select/Select.d.ts.map +1 -1
  270. package/dist/components/select/Select.js +151 -130
  271. package/dist/components/select/Select.js.map +1 -1
  272. package/dist/components/select/Select.module.scss.cjs +1 -1
  273. package/dist/components/select/Select.module.scss.js +28 -26
  274. package/dist/components/select/Select.module.scss.js.map +1 -1
  275. package/dist/components/shortcut-tag/ShortcutTag.css +1 -1
  276. package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs +1 -1
  277. package/dist/components/shortcut-tag/ShortcutTag.module.scss.js +7 -7
  278. package/dist/components/spinner/Spinner.css +1 -1
  279. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  280. package/dist/components/spinner/Spinner.module.scss.js +2 -2
  281. package/dist/components/status-badge/StatusBadge.cjs +1 -1
  282. package/dist/components/status-badge/StatusBadge.cjs.map +1 -1
  283. package/dist/components/status-badge/StatusBadge.css +1 -1
  284. package/dist/components/status-badge/StatusBadge.d.ts +3 -1
  285. package/dist/components/status-badge/StatusBadge.d.ts.map +1 -1
  286. package/dist/components/status-badge/StatusBadge.js +16 -15
  287. package/dist/components/status-badge/StatusBadge.js.map +1 -1
  288. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  289. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  290. package/dist/components/switch/Switch.css +1 -1
  291. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  292. package/dist/components/switch/Switch.module.scss.js +8 -8
  293. package/dist/components/tabs/Tabs.css +1 -1
  294. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  295. package/dist/components/tabs/Tabs.module.scss.js +16 -13
  296. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  297. package/dist/components/tag/Tag.css +1 -1
  298. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  299. package/dist/components/tag/Tag.module.scss.js +11 -11
  300. package/dist/components/team-avatar/TeamAvatar.css +1 -1
  301. package/dist/components/team-avatar/TeamAvatar.module.scss.cjs +1 -1
  302. package/dist/components/team-avatar/TeamAvatar.module.scss.js +17 -17
  303. package/dist/components/text-area/TextArea.css +1 -1
  304. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  305. package/dist/components/text-area/TextArea.module.scss.js +12 -12
  306. package/dist/components/text-input/TextInput.css +1 -1
  307. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  308. package/dist/components/text-input/TextInput.module.scss.js +19 -19
  309. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  310. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  311. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  312. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  313. package/dist/components/thread-footer/ThreadFooter.js +14 -14
  314. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  315. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  316. package/dist/components/thread-footer/ThreadFooter.module.scss.js +19 -20
  317. package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
  318. package/dist/components/thread-list-item/ThreadListItem.css +1 -1
  319. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  320. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -26
  321. package/dist/components/tile-button/TileButton.css +1 -1
  322. package/dist/components/tile-button/TileButton.module.scss.cjs +1 -1
  323. package/dist/components/tile-button/TileButton.module.scss.js +6 -6
  324. package/dist/components/toast/Toast.css +1 -1
  325. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  326. package/dist/components/toast/Toast.module.scss.js +11 -11
  327. package/dist/components/tooltip/Tooltip.cjs +1 -1
  328. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  329. package/dist/components/tooltip/Tooltip.css +1 -1
  330. package/dist/components/tooltip/Tooltip.d.ts +10 -1
  331. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  332. package/dist/components/tooltip/Tooltip.js +29 -17
  333. package/dist/components/tooltip/Tooltip.js.map +1 -1
  334. package/dist/components/tooltip/Tooltip.module.scss.cjs +1 -1
  335. package/dist/components/tooltip/Tooltip.module.scss.js +7 -6
  336. package/dist/components/tooltip/Tooltip.module.scss.js.map +1 -1
  337. package/dist/components/tooltip/index.d.ts +1 -1
  338. package/dist/components/tooltip/index.d.ts.map +1 -1
  339. package/dist/components/tour-point/TourPoint.css +1 -1
  340. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  341. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  342. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  343. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  344. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  345. package/dist/components/user-avatar/UserAvatar.cjs +1 -1
  346. package/dist/components/user-avatar/UserAvatar.cjs.map +1 -1
  347. package/dist/components/user-avatar/UserAvatar.css +1 -1
  348. package/dist/components/user-avatar/UserAvatar.d.ts +18 -8
  349. package/dist/components/user-avatar/UserAvatar.d.ts.map +1 -1
  350. package/dist/components/user-avatar/UserAvatar.js +84 -52
  351. package/dist/components/user-avatar/UserAvatar.js.map +1 -1
  352. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  353. package/dist/components/user-avatar/UserAvatar.module.scss.js +33 -26
  354. package/dist/components/user-avatar/UserAvatar.module.scss.js.map +1 -1
  355. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  356. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  357. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  358. package/dist/hooks/use-anchored-popup-portal.cjs.map +1 -1
  359. package/dist/hooks/use-anchored-popup-portal.d.ts +1 -1
  360. package/dist/hooks/use-anchored-popup-portal.d.ts.map +1 -1
  361. package/dist/hooks/use-anchored-popup-portal.js.map +1 -1
  362. package/dist/index.cjs +1 -1
  363. package/dist/index.d.ts +1 -0
  364. package/dist/index.d.ts.map +1 -1
  365. package/dist/index.js +57 -55
  366. package/dist/index.js.map +1 -1
  367. package/dist/utils/anchoredPopupPlacement.cjs +1 -1
  368. package/dist/utils/anchoredPopupPlacement.cjs.map +1 -1
  369. package/dist/utils/anchoredPopupPlacement.d.ts +8 -4
  370. package/dist/utils/anchoredPopupPlacement.d.ts.map +1 -1
  371. package/dist/utils/anchoredPopupPlacement.js +18 -18
  372. package/dist/utils/anchoredPopupPlacement.js.map +1 -1
  373. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n FocusEventHandler,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\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 type {\n MenuItemOwnedProps,\n MenuItemPassthroughProps,\n} from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport TeamAvatar from '@/components/team-avatar/TeamAvatar';\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 { mergeMenuItemProps } from '@/utils/menuItemProps';\nimport type { BuiltInButtonProps, DataAttributes } 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\n// Combobox rows use `onClick`, so `onPointerUp` is left for callers.\ntype ComboboxMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onPointerUp'>\n>;\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 /**\n * Team avatar for the list row — a non-interactive `TeamAvatar` (`variant=\"menu\"`, 24px) with an\n * image or an initials fallback. The row's `label` names the team and `MenuItem` hides the\n * leading visual from assistive tech, so `alt` is optional. List rows only; chips don't render\n * it. With neither `src` nor `initials`, the fallback shows the first two letters of `label`.\n * `leadingVisual` and `leadingAvatar` take precedence.\n */\n leadingTeamAvatar?: { src?: string; initials?: string; alt?: string };\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Combobox; the props Combobox owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: ComboboxMenuItemProps;\n};\n\n/**\n * Native input attributes `Combobox` sets or can't honor, so they're left out\n * of `ComboboxProps`. The ones it renders (`role`, `type`, `autoComplete`,\n * `aria-expanded`, …) also win at runtime over anything spread onto the input.\n */\nexport type ComboboxOwnedInputProps =\n // Value model: Combobox's own `value` / `defaultValue` / `onChange` / `multiple` / `size`.\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'multiple'\n | 'size'\n | 'type'\n | 'children'\n | 'dangerouslySetInnerHTML'\n // Combobox semantics.\n | 'role'\n | 'autoComplete'\n | 'spellCheck'\n | 'list'\n | 'aria-expanded'\n | 'aria-controls'\n | 'aria-activedescendant'\n | 'aria-autocomplete'\n | 'aria-busy'\n | 'aria-haspopup'\n | 'aria-invalid'\n | 'aria-required'\n // First-class props with Combobox meaning (re-declared below).\n | 'required'\n // No form participation or constraint validation yet.\n | 'name'\n | 'form'\n | 'formAction'\n | 'formEncType'\n | 'formMethod'\n | 'formNoValidate'\n | 'formTarget'\n | 'readOnly'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'min'\n | 'max'\n | 'step'\n // Not meaningful for a text combobox.\n | 'accept'\n | 'alt'\n | 'capture'\n | 'checked'\n | 'defaultChecked'\n | 'height'\n | 'width'\n | 'src';\n\n/**\n * Extra native input attributes (`data-*`, `aria-describedby`,\n * `aria-errormessage`, `aria-labelledby`, `autoFocus`, `tabIndex`, `style`,\n * `onFocus`, …) go on the `<input role=\"combobox\">`, the element the ref\n * targets. `className` goes on the root. Attributes in\n * `ComboboxOwnedInputProps` can't be set.\n */\nexport interface ComboboxProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, ComboboxOwnedInputProps>,\n DataAttributes {\n options: ComboboxOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins. Not applied to the create row.\n */\n menuItemProps?: ComboboxMenuItemProps;\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 * Marks the field required for assistive tech (`aria-required=\"true\"`).\n * No native `required`, so the browser doesn't validate; the host does.\n * Safe in `multiple` mode, where the input is empty once chips are picked.\n * Default: false.\n */\n required?: 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 /**\n * Opens the menu when the input receives focus, including keyboard Tab focus,\n * `autoFocus` and focus handed back by the clear button. Off by default:\n * focus alone doesn't open the menu, which then opens on pointer press,\n * typing, or ↓ / ↑. Turn it on only for hosts that need the old\n * focus-to-open behavior.\n */\n openOnFocus?: boolean;\n /**\n * When false, Enter on the input with the menu closed is prevented and stops\n * propagating, so it can't submit a surrounding form or reach host key\n * listeners. Default: true (Enter with the menu closed behaves like Enter in a\n * text input). Enter with the menu open is always handled by Combobox.\n */\n submitOnEnter?: 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 /**\n * Runs after Combobox's own focus handling. Focus alone doesn't open the\n * menu. Also runs when the clear button hands focus back to the input.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own blur handling, on every input blur — including\n * when focus moves to the clear button or a chip's remove button. Not called\n * when those buttons blur.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own key handling. `event.defaultPrevented` is true\n * when Combobox handled the key (arrows, Home / End while open, Enter while\n * the menu is open (picking the highlighted row, if any), Enter with the menu\n * closed when `submitOnEnter` is false, Escape while open, Backspace removing\n * a chip); those Enter and Escape presses also stop propagating. Calling\n * `preventDefault()` here doesn't stop Combobox's handling. Any `onChange`\n * the key caused has already been called, but host state read here is\n * still from before that change.\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\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 if (option.leadingTeamAvatar != null) {\n return (\n <TeamAvatar\n src={option.leadingTeamAvatar.src}\n initials={\n option.leadingTeamAvatar.initials ??\n (option.leadingTeamAvatar.src\n ? undefined\n : Array.from(option.label).slice(0, 2).join(''))\n }\n alt={option.leadingTeamAvatar.alt}\n size=\"24\"\n variant=\"menu\"\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 menuItemProps,\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 openOnFocus = false,\n submitOnEnter = true,\n clearLabel = 'Clear',\n clearButtonProps,\n selectionsLabel,\n listboxLabel = 'Options',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n 'aria-describedby': describedBy,\n required = false,\n onFocus,\n onBlur,\n onKeyDown,\n portalContainer = null,\n zIndex,\n ...rest\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 // Hover moves the highlight without scrolling; only keyboard changes scroll the row into view.\n const activatedByPointer = useRef(false);\n const selectAllFrame = useRef<number | null>(null);\n const hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\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 activatedByPointer.current = false;\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 if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\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 cancelSelectAll();\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const cancelSelectAll = () => {\n if (selectAllFrame.current === null) return;\n cancelAnimationFrame(selectAllFrame.current);\n selectAllFrame.current = null;\n };\n\n useEffect(() => cancelSelectAll, []);\n\n const handleFocus = () => {\n setIsFocused(true);\n if (openOnFocus) open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n // Cancelled if the user types, navigates or leaves before the frame runs.\n if (!multiple && !isInputControlled && selectedOption) {\n cancelSelectAll();\n selectAllFrame.current = requestAnimationFrame(() => {\n selectAllFrame.current = null;\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 cancelSelectAll();\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n cancelSelectAll();\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) {\n // APG: opening with ArrowUp puts the highlight on the last option.\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n 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 // keyCode 229 covers older Safari, which doesn't set isComposing\n if (e.nativeEvent.isComposing || e.keyCode === 229) break;\n if (isOpen || !submitOnEnter) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\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 handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n handleFocus();\n onFocus?.(e);\n };\n\n const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {\n handleBlur(e);\n onBlur?.(e);\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n handleKeyDown(e);\n onKeyDown?.(e);\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 handlePopupMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // Text fields in a custom empty or loading message still need to take focus\n if (\n (e.target as HTMLElement).closest(\n 'input, textarea, select, [contenteditable=\"true\"]',\n )\n )\n return;\n e.preventDefault();\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 {...rest}\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-describedby={describedBy || undefined}\n aria-required={required ? true : undefined}\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={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\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 onKeyDown={(e) => {\n // preventDefault() cancels the native click, so clear here.\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n }\n clearButtonProps?.onKeyDown?.(e);\n }}\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 // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keeps focus on the input for presses anywhere in the menu\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 onMouseDown={handlePopupMouseDown}\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 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 onMouseEnter={() => hoverRow(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 {...mergeMenuItemProps(\n menuItemProps,\n option.menuItemProps,\n )}\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 onMouseEnter={() => hoverRow(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","TeamAvatar","Combobox","forwardRef","options","menuItemProps","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","clearable","openOnFocus","submitOnEnter","clearLabel","clearButtonProps","selectionsLabel","listboxLabel","className","idProp","ariaLabel","describedBy","required","onFocus","onBlur","onKeyDown","portalContainer","zIndex","rest","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","activatedByPointer","selectAllFrame","hoverRow","index","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","cancelSelectAll","handleFocus","handleBlur","related","handleKeyDown","handleInputFocus","handleInputBlur","handleInputKeyDown","handleWrapperMouseDown","handlePopupMouseDown","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","active","MenuItem","PlusIcon","selected","leading","mergeMenuItemProps","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 FocusEventHandler,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\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 {\n hasFieldMessage,\n isFieldInvalid,\n mergeFieldDescribedBy,\n} from '@/components/field/fieldDescribedBy';\nimport FieldMessage from '@/components/field-message/FieldMessage';\nimport type { FieldMessageTone } from '@/components/field-message/FieldMessage';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport type {\n MenuItemOwnedProps,\n MenuItemPassthroughProps,\n} from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport TeamAvatar from '@/components/team-avatar/TeamAvatar';\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 { mergeMenuItemProps } from '@/utils/menuItemProps';\nimport type { BuiltInButtonProps, DataAttributes } 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\n// Combobox rows use `onClick`, so `onPointerUp` is left for callers.\ntype ComboboxMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onPointerUp'>\n>;\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 /**\n * Team avatar for the list row — a non-interactive `TeamAvatar` (`variant=\"menu\"`, 24px) with an\n * image or an initials fallback. The row's `label` names the team and `MenuItem` hides the\n * leading visual from assistive tech, so `alt` is optional. List rows only; chips don't render\n * it. With neither `src` nor `initials`, the fallback shows the first two letters of `label`.\n * `leadingVisual` and `leadingAvatar` take precedence.\n */\n leadingTeamAvatar?: { src?: string; initials?: string; alt?: string };\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Combobox; the props Combobox owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: ComboboxMenuItemProps;\n};\n\n/**\n * Native input attributes `Combobox` sets or can't honor, so they're left out\n * of `ComboboxProps`. The ones it renders (`role`, `type`, `autoComplete`,\n * `aria-expanded`, …) also win at runtime over anything spread onto the input.\n */\nexport type ComboboxOwnedInputProps =\n // Value model: Combobox's own `value` / `defaultValue` / `onChange` / `multiple` / `size`.\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'multiple'\n | 'size'\n | 'type'\n | 'children'\n | 'dangerouslySetInnerHTML'\n // Combobox semantics.\n | 'role'\n | 'autoComplete'\n | 'spellCheck'\n | 'list'\n | 'aria-expanded'\n | 'aria-controls'\n | 'aria-activedescendant'\n | 'aria-autocomplete'\n | 'aria-busy'\n | 'aria-haspopup'\n | 'aria-invalid'\n | 'aria-required'\n // First-class props with Combobox meaning (re-declared below).\n | 'required'\n // No form participation or constraint validation yet.\n | 'name'\n | 'form'\n | 'formAction'\n | 'formEncType'\n | 'formMethod'\n | 'formNoValidate'\n | 'formTarget'\n | 'readOnly'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'min'\n | 'max'\n | 'step'\n // Not meaningful for a text combobox.\n | 'accept'\n | 'alt'\n | 'capture'\n | 'checked'\n | 'defaultChecked'\n | 'height'\n | 'width'\n | 'src';\n\n/**\n * Extra native input attributes (`data-*`, `aria-describedby`,\n * `aria-errormessage`, `aria-labelledby`, `autoFocus`, `tabIndex`, `style`,\n * `onFocus`, …) go on the `<input role=\"combobox\">`, the element the ref\n * targets. `className` goes on the root. Attributes in\n * `ComboboxOwnedInputProps` can't be set.\n */\nexport interface ComboboxProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, ComboboxOwnedInputProps>,\n DataAttributes {\n options: ComboboxOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins. Not applied to the create row.\n */\n menuItemProps?: ComboboxMenuItemProps;\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 /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /**\n * Field message under the field. Accepts translated nodes (e.g. `<FormattedMessage/>`).\n * Defaults to error tone (invalid chrome) when set without `messageTone`. It is linked to\n * the input with `aria-describedby`.\n */\n message?: ReactNode;\n /** Visual tone for `message`. Default: `error` when `message` is set. */\n messageTone?: FieldMessageTone;\n disabled?: boolean;\n /**\n * Marks the field required for assistive tech (`aria-required=\"true\"`).\n * No native `required`, so the browser doesn't validate; the host does.\n * Safe in `multiple` mode, where the input is empty once chips are picked.\n * Default: false.\n */\n required?: 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 /**\n * Opens the menu when the input receives focus, including keyboard Tab focus,\n * `autoFocus` and focus handed back by the clear button. Off by default:\n * focus alone doesn't open the menu, which then opens on pointer press,\n * typing, or ↓ / ↑. Turn it on only for hosts that need the old\n * focus-to-open behavior.\n */\n openOnFocus?: boolean;\n /**\n * When false, Enter on the input with the menu closed is prevented and stops\n * propagating, so it can't submit a surrounding form or reach host key\n * listeners. Default: true (Enter with the menu closed behaves like Enter in a\n * text input). Enter with the menu open is always handled by Combobox.\n */\n submitOnEnter?: 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 /**\n * Runs after Combobox's own focus handling. Focus alone doesn't open the\n * menu. Also runs when the clear button hands focus back to the input.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own blur handling, on every input blur — including\n * when focus moves to the clear button or a chip's remove button. Not called\n * when those buttons blur.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own key handling. `event.defaultPrevented` is true\n * when Combobox handled the key (arrows, Home / End while open, Enter while\n * the menu is open (picking the highlighted row, if any), Enter with the menu\n * closed when `submitOnEnter` is false, Escape while open, Backspace removing\n * a chip); those Enter and Escape presses also stop propagating. Calling\n * `preventDefault()` here doesn't stop Combobox's handling. Any `onChange`\n * the key caused has already been called, but host state read here is\n * still from before that change.\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\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 if (option.leadingTeamAvatar != null) {\n return (\n <TeamAvatar\n src={option.leadingTeamAvatar.src}\n initials={\n option.leadingTeamAvatar.initials ??\n (option.leadingTeamAvatar.src\n ? undefined\n : Array.from(option.label).slice(0, 2).join(''))\n }\n alt={option.leadingTeamAvatar.alt}\n size=\"24\"\n variant=\"menu\"\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 menuItemProps,\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 message,\n messageTone,\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 openOnFocus = false,\n submitOnEnter = true,\n clearLabel = 'Clear',\n clearButtonProps,\n selectionsLabel,\n listboxLabel = 'Options',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n 'aria-describedby': describedBy,\n required = false,\n onFocus,\n onBlur,\n onKeyDown,\n portalContainer = null,\n zIndex,\n ...rest\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 // Hover moves the highlight without scrolling; only keyboard changes scroll the row into view.\n const activatedByPointer = useRef(false);\n const selectAllFrame = useRef<number | null>(null);\n const hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\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 activatedByPointer.current = false;\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 if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\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 cancelSelectAll();\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const cancelSelectAll = () => {\n if (selectAllFrame.current === null) return;\n cancelAnimationFrame(selectAllFrame.current);\n selectAllFrame.current = null;\n };\n\n useEffect(() => cancelSelectAll, []);\n\n const handleFocus = () => {\n setIsFocused(true);\n if (openOnFocus) open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n // Cancelled if the user types, navigates or leaves before the frame runs.\n if (!multiple && !isInputControlled && selectedOption) {\n cancelSelectAll();\n selectAllFrame.current = requestAnimationFrame(() => {\n selectAllFrame.current = null;\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 cancelSelectAll();\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n cancelSelectAll();\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) {\n // APG: opening with ArrowUp puts the highlight on the last option.\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n 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 // keyCode 229 covers older Safari, which doesn't set isComposing\n if (e.nativeEvent.isComposing || e.keyCode === 229) break;\n if (isOpen || !submitOnEnter) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\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 handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n handleFocus();\n onFocus?.(e);\n };\n\n const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {\n handleBlur(e);\n onBlur?.(e);\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n handleKeyDown(e);\n onKeyDown?.(e);\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 handlePopupMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // Text fields in a custom empty or loading message still need to take focus\n if (\n (e.target as HTMLElement).closest(\n 'input, textarea, select, [contenteditable=\"true\"]',\n )\n )\n return;\n e.preventDefault();\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 showInvalid = isFieldInvalid(invalid, message, messageTone);\n const showMessage = hasFieldMessage(message);\n const messageId = showMessage ? `${id}-message` : undefined;\n const rootClass = [\n styles.combobox,\n sizeClass,\n showInvalid ? 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 {...rest}\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-describedby={mergeFieldDescribedBy(\n describedBy,\n messageId,\n undefined,\n )}\n aria-required={required ? true : undefined}\n aria-invalid={showInvalid ? 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={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\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 onKeyDown={(e) => {\n // preventDefault() cancels the native click, so clear here.\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n }\n clearButtonProps?.onKeyDown?.(e);\n }}\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 {showMessage && (\n <FieldMessage\n id={messageId}\n className={styles['combobox__message']}\n message={message}\n tone={messageTone ?? 'error'}\n />\n )}\n\n {popupMounted &&\n renderPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keeps focus on the input for presses anywhere in the menu\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 onMouseDown={handlePopupMouseDown}\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 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 onMouseEnter={() => hoverRow(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 {...mergeMenuItemProps(\n menuItemProps,\n option.menuItemProps,\n )}\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 onMouseEnter={() => hoverRow(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","TeamAvatar","Combobox","forwardRef","options","menuItemProps","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","placeholder","leadingIcon","size","invalid","message","messageTone","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","clearable","openOnFocus","submitOnEnter","clearLabel","clearButtonProps","selectionsLabel","listboxLabel","className","idProp","ariaLabel","describedBy","required","onFocus","onBlur","onKeyDown","portalContainer","zIndex","rest","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","activatedByPointer","selectAllFrame","hoverRow","index","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","cancelSelectAll","handleFocus","handleBlur","related","handleKeyDown","handleInputFocus","handleInputBlur","handleInputKeyDown","handleWrapperMouseDown","handlePopupMouseDown","hasSelection","hasInputText","showClearButton","labelFloated","activeRow","activeDescendant","chipOptions","fromOptions","listed","sizeClass","styles","toKebab","hasChips","showInvalid","isFieldInvalid","showMessage","hasFieldMessage","messageId","rootClass","jsxs","IconSlotContext","ChipGroup","Chip","ev","mergeFieldDescribedBy","mergeClassNames","Icon","CloseCircleIcon","ChevronDownIcon","FieldMessage","PopoverMenu","PopoverMenuScroll","active","MenuItem","PlusIcon","selected","leading","mergeMenuItemProps","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_2wg8l_2",_="_combobox__wrapper_2wg8l_8",b="_combobox__label_2wg8l_26",c="_combobox__inner_2wg8l_56",m="_combobox__value_2wg8l_72",l="_combobox__control_2wg8l_82",x="_combobox__clear_2wg8l_120",e="_combobox__popup_2wg8l_143",n="_combobox__menu_2wg8l_159",i="_combobox__empty_2wg8l_164",a="_combobox__loading_2wg8l_172",p="_combobox__list_2wg8l_182",t="_combobox__option_2wg8l_187",s={combobox:o,combobox__wrapper:_,"combobox--disabled":"_combobox--disabled_2wg8l_16",combobox__label:b,"combobox--label-floated":"_combobox--label-floated_2wg8l_47",combobox__inner:c,"combobox__leading-icon":"_combobox__leading-icon_2wg8l_64",combobox__value:m,combobox__control:l,"combobox__trailing-icon":"_combobox__trailing-icon_2wg8l_107","combobox--open":"_combobox--open_2wg8l_117",combobox__clear:x,combobox__popup:e,"combobox__popup--above":"_combobox__popup--above_2wg8l_150","combobox__popup--visible":"_combobox__popup--visible_2wg8l_153",combobox__menu:n,combobox__empty:i,combobox__loading:a,combobox__list:p,combobox__option:t,"combobox--size-small":"_combobox--size-small_2wg8l_191","combobox--has-chips":"_combobox--has-chips_2wg8l_198","combobox--has-leading-icon":"_combobox--has-leading-icon_2wg8l_201","combobox--size-medium":"_combobox--size-medium_2wg8l_218","combobox--size-large":"_combobox--size-large_2wg8l_249","combobox--invalid":"_combobox--invalid_2wg8l_281"};exports.combobox=o;exports.combobox__clear=x;exports.combobox__control=l;exports.combobox__empty=i;exports.combobox__inner=c;exports.combobox__label=b;exports.combobox__list=p;exports.combobox__loading=a;exports.combobox__menu=n;exports.combobox__option=t;exports.combobox__popup=e;exports.combobox__value=m;exports.combobox__wrapper=_;exports.default=s;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Combobox.css');const o="_combobox_kv957_13",_="_combobox__wrapper_kv957_19",b="_combobox__label_kv957_37",c="_combobox__message_kv957_67",m="_combobox__inner_kv957_70",x="_combobox__value_kv957_86",e="_combobox__control_kv957_96",n="_combobox__clear_kv957_134",l="_combobox__popup_kv957_168",i="_combobox__menu_kv957_184",s="_combobox__empty_kv957_189",a="_combobox__loading_kv957_197",p="_combobox__list_kv957_207",t="_combobox__option_kv957_212",v={combobox:o,combobox__wrapper:_,"combobox--disabled":"_combobox--disabled_kv957_27",combobox__label:b,"combobox--label-floated":"_combobox--label-floated_kv957_58",combobox__message:c,combobox__inner:m,"combobox__leading-icon":"_combobox__leading-icon_kv957_78",combobox__value:x,combobox__control:e,"combobox__trailing-icon":"_combobox__trailing-icon_kv957_121","combobox--open":"_combobox--open_kv957_131",combobox__clear:n,"focus-ring-in":"_focus-ring-in_kv957_1",combobox__popup:l,"combobox__popup--above":"_combobox__popup--above_kv957_175","combobox__popup--visible":"_combobox__popup--visible_kv957_178",combobox__menu:i,combobox__empty:s,combobox__loading:a,combobox__list:p,combobox__option:t,"combobox--size-small":"_combobox--size-small_kv957_216","combobox--has-chips":"_combobox--has-chips_kv957_224","combobox--has-leading-icon":"_combobox--has-leading-icon_kv957_227","combobox--size-medium":"_combobox--size-medium_kv957_244","combobox--size-large":"_combobox--size-large_kv957_277","combobox--invalid":"_combobox--invalid_kv957_310"};exports.combobox=o;exports.combobox__clear=n;exports.combobox__control=e;exports.combobox__empty=s;exports.combobox__inner=m;exports.combobox__label=b;exports.combobox__list=p;exports.combobox__loading=a;exports.combobox__menu=i;exports.combobox__message=c;exports.combobox__option=t;exports.combobox__popup=l;exports.combobox__value=x;exports.combobox__wrapper=_;exports.default=v;
2
2
  //# sourceMappingURL=Combobox.module.scss.cjs.map
@@ -1,45 +1,48 @@
1
- import './Combobox.css';const o = "_combobox_2wg8l_2", _ = "_combobox__wrapper_2wg8l_8", b = "_combobox__label_2wg8l_26", c = "_combobox__inner_2wg8l_56", m = "_combobox__value_2wg8l_72", l = "_combobox__control_2wg8l_82", x = "_combobox__clear_2wg8l_120", e = "_combobox__popup_2wg8l_143", n = "_combobox__menu_2wg8l_159", i = "_combobox__empty_2wg8l_164", a = "_combobox__loading_2wg8l_172", p = "_combobox__list_2wg8l_182", s = "_combobox__option_2wg8l_187", g = {
1
+ import './Combobox.css';const o = "_combobox_kv957_13", _ = "_combobox__wrapper_kv957_19", b = "_combobox__label_kv957_37", c = "_combobox__message_kv957_67", m = "_combobox__inner_kv957_70", x = "_combobox__value_kv957_86", e = "_combobox__control_kv957_96", n = "_combobox__clear_kv957_134", i = "_combobox__popup_kv957_168", l = "_combobox__menu_kv957_184", s = "_combobox__empty_kv957_189", a = "_combobox__loading_kv957_197", p = "_combobox__list_kv957_207", v = "_combobox__option_kv957_212", t = {
2
2
  combobox: o,
3
3
  combobox__wrapper: _,
4
- "combobox--disabled": "_combobox--disabled_2wg8l_16",
4
+ "combobox--disabled": "_combobox--disabled_kv957_27",
5
5
  combobox__label: b,
6
- "combobox--label-floated": "_combobox--label-floated_2wg8l_47",
7
- combobox__inner: c,
8
- "combobox__leading-icon": "_combobox__leading-icon_2wg8l_64",
9
- combobox__value: m,
10
- combobox__control: l,
11
- "combobox__trailing-icon": "_combobox__trailing-icon_2wg8l_107",
12
- "combobox--open": "_combobox--open_2wg8l_117",
13
- combobox__clear: x,
14
- combobox__popup: e,
15
- "combobox__popup--above": "_combobox__popup--above_2wg8l_150",
16
- "combobox__popup--visible": "_combobox__popup--visible_2wg8l_153",
17
- combobox__menu: n,
18
- combobox__empty: i,
6
+ "combobox--label-floated": "_combobox--label-floated_kv957_58",
7
+ combobox__message: c,
8
+ combobox__inner: m,
9
+ "combobox__leading-icon": "_combobox__leading-icon_kv957_78",
10
+ combobox__value: x,
11
+ combobox__control: e,
12
+ "combobox__trailing-icon": "_combobox__trailing-icon_kv957_121",
13
+ "combobox--open": "_combobox--open_kv957_131",
14
+ combobox__clear: n,
15
+ "focus-ring-in": "_focus-ring-in_kv957_1",
16
+ combobox__popup: i,
17
+ "combobox__popup--above": "_combobox__popup--above_kv957_175",
18
+ "combobox__popup--visible": "_combobox__popup--visible_kv957_178",
19
+ combobox__menu: l,
20
+ combobox__empty: s,
19
21
  combobox__loading: a,
20
22
  combobox__list: p,
21
- combobox__option: s,
22
- "combobox--size-small": "_combobox--size-small_2wg8l_191",
23
- "combobox--has-chips": "_combobox--has-chips_2wg8l_198",
24
- "combobox--has-leading-icon": "_combobox--has-leading-icon_2wg8l_201",
25
- "combobox--size-medium": "_combobox--size-medium_2wg8l_218",
26
- "combobox--size-large": "_combobox--size-large_2wg8l_249",
27
- "combobox--invalid": "_combobox--invalid_2wg8l_281"
23
+ combobox__option: v,
24
+ "combobox--size-small": "_combobox--size-small_kv957_216",
25
+ "combobox--has-chips": "_combobox--has-chips_kv957_224",
26
+ "combobox--has-leading-icon": "_combobox--has-leading-icon_kv957_227",
27
+ "combobox--size-medium": "_combobox--size-medium_kv957_244",
28
+ "combobox--size-large": "_combobox--size-large_kv957_277",
29
+ "combobox--invalid": "_combobox--invalid_kv957_310"
28
30
  };
29
31
  export {
30
32
  o as combobox,
31
- x as combobox__clear,
32
- l as combobox__control,
33
- i as combobox__empty,
34
- c as combobox__inner,
33
+ n as combobox__clear,
34
+ e as combobox__control,
35
+ s as combobox__empty,
36
+ m as combobox__inner,
35
37
  b as combobox__label,
36
38
  p as combobox__list,
37
39
  a as combobox__loading,
38
- n as combobox__menu,
39
- s as combobox__option,
40
- e as combobox__popup,
41
- m as combobox__value,
40
+ l as combobox__menu,
41
+ c as combobox__message,
42
+ v as combobox__option,
43
+ i as combobox__popup,
44
+ x as combobox__value,
42
45
  _ as combobox__wrapper,
43
- g as default
46
+ t as default
44
47
  };
45
48
  //# sourceMappingURL=Combobox.module.scss.js.map
@@ -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"),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;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),s=require("react"),Xe=require("../button/Button.cjs"),$=require("../icon-button/IconButton.cjs"),N=require("../icon/Icon.cjs"),__De=require("@mattermost/compass-icons/components/calendar-outline.js"),De=__De?.default??__De,__ea=require("@mattermost/compass-icons/components/chevron-down.js"),ea=__ea?.default??__ea,__aa=require("@mattermost/compass-icons/components/chevron-left.js"),aa=__aa?.default??__aa,__ta=require("@mattermost/compass-icons/components/chevron-right.js"),ta=__ta?.default??__ta,na=require("../../hooks/use-anchored-popup-portal.cjs"),ra=require("../../hooks/use-outside-close.cjs"),sa=require("../../hooks/use-popover-transition.cjs"),n=require("./DateRangePicker.module.scss.cjs"),la=360,oa=["Su","Mo","Tu","We","Th","Fr","Sa"],ne=["January","February","March","April","May","June","July","August","September","October","November","December"];function ca(i){if(!i)return"";const[r,p,m]=i.split("-");return`${p}/${m}/${r}`}function re(i,r,p){return`${i}-${String(r+1).padStart(2,"0")}-${String(p).padStart(2,"0")}`}function se(i,r){return new Date(i,r+1,0).getDate()}function ia(i,r){return new Date(i,r,1).getDay()}function le(i,r){return i===r}function ua(i,r,p){if(!r||!p)return!1;const[m,j]=r<p?[r,p]:[p,r];return i>m&&i<j}function F(i,r,p){if(!i)return null;const[m,j,S]=i.split("-").map(Number);return m===r&&j===p+1?S:null}function da({className:i="",mode:r="date",value:p,startDate:m,endDate:j,onChange:S,onRangeChange:O,disabled:_,required:xe,onFocus:P,onBlur:B,label:E,id:je,"aria-label":oe,"aria-labelledby":ce,"aria-describedby":Se,portalContainer:Ie=null,zIndex:we,placeholder:z="mm/dd/yyyy",formatDate:Y=ca,monthNames:K=ne,shortMonthNames:Ce=K===ne?ne.map(H=>H.slice(0,3)):K,weekdayNames:Ne=oa,dialogLabel:ie="Date picker",todayLabel:Ee="Today",previousMonthLabel:Me="Previous month",nextMonthLabel:qe="Next month"}){const H=s.useId(),M=je??H,ue=`${M}-popover`,de=`${M}-label`,fe=`${M}-value`,I=E!=null&&typeof E!="boolean"&&E!=="",L=s.useRef(null),U=s.useRef(null),V=s.useRef(null),w=new Date,W=re(w.getFullYear(),w.getMonth(),w.getDate()),[c,q]=s.useState(w.getFullYear()),[o,R]=s.useState(w.getMonth()),[u,J]=s.useState(!1),[Re,pe]=s.useState(!1),[Z,b]=s.useState(1),[Ae,Te]=s.useState(""),[$e,ge]=s.useState(""),[Fe,he]=s.useState(""),D=p??Ae,d=m??$e,h=j??Fe,ke=r==="date"?!!D:!!d,{mounted:G,visible:Q}=sa.usePopoverTransition(u),{placement:Oe,style:Pe,portalRef:A,renderPortal:Be}=na.useAnchoredPopupPortal(U,G,{preferredHeight:la,portalContainer:Ie,zIndex:we,matchWidth:!1}),k=s.useCallback((e=!0)=>{var a;J(!1),e&&((a=U.current)==null||a.focus())},[]);ra.useOutsideClose(L,u,()=>k(!0),A),s.useEffect(()=>{if(!u)return;function e(a){a.key==="Escape"&&(a.preventDefault(),k(!0))}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[u,k]),s.useEffect(()=>{if(!u)return;function e(a){var f,g;const l=a.target;l&&((f=L.current)!=null&&f.contains(l)||(g=A.current)!=null&&g.contains(l)||k(!1))}return document.addEventListener("focusin",e),()=>document.removeEventListener("focusin",e)},[u,k,A]);const v=se(c,o),ze=s.useCallback(()=>{if(r==="date"){const a=F(D,c,o);if(a)return a}else{const a=F(h,c,o);if(a)return a;const l=F(d,c,o);if(l)return l}const e=F(W,c,o);return e||1},[r,D,d,h,c,o,W]);s.useEffect(()=>{if(!u||!Q)return;const e=ze();b(e);const a=requestAnimationFrame(()=>{var l,f;(f=(l=V.current)==null?void 0:l.querySelector(`[data-day="${e}"]`))==null||f.focus()});return()=>cancelAnimationFrame(a)},[u,Q]);const y=s.useCallback(e=>{b(e),requestAnimationFrame(()=>{var a,l;(l=(a=V.current)==null?void 0:a.querySelector(`[data-day="${e}"]`))==null||l.focus()})},[]),X=s.useCallback(()=>{_||J(e=>!e)},[_]),Ye=s.useCallback(()=>{R(e=>e===0?(q(a=>a-1),11):e-1)},[]),Ke=s.useCallback(()=>{R(e=>e===11?(q(a=>a+1),0):e+1)},[]),x=s.useCallback((e,a)=>{const l=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=se(f,l);q(f),R(l),y(Math.min(a,g))},[o,c,y]),He=s.useCallback(()=>{const e=new Date;q(e.getFullYear()),R(e.getMonth()),y(e.getDate())},[y]),ee=s.useCallback((e,a)=>{if(r==="date")S?S(e):Te(e),k(!0);else if(!d||d&&h)ge(e),he(""),b(a);else{const[l,f]=e>=d?[d,e]:[e,d];O?O(l,f):(ge(l),he(f)),k(!0)}},[r,d,h,S,O,k]),C=s.useCallback(e=>{const a=Z+e;if(a>=1&&a<=v){y(a);return}a<1?x(-1,se(o===0?c-1:c,o===0?11:o-1)+a):x(1,a-v)},[Z,v,o,c,y,x]),Le=s.useCallback((e,a)=>{switch(e.key){case"ArrowLeft":e.preventDefault(),C(-1);break;case"ArrowRight":e.preventDefault(),C(1);break;case"ArrowUp":e.preventDefault(),C(-7);break;case"ArrowDown":e.preventDefault(),C(7);break;case"Home":e.preventDefault(),y(1);break;case"End":e.preventDefault(),y(v);break;case"PageUp":e.preventDefault(),x(-1,a);break;case"PageDown":e.preventDefault(),x(1,a);break;case"Enter":case" ":e.preventDefault(),b(a),ee(re(c,o,a),a);break}},[C,y,v,x,ee,c,o]),Ue=s.useCallback(e=>{if(!_)switch(e.key){case"Enter":case" ":e.preventDefault(),X();break;case"ArrowDown":u||(e.preventDefault(),J(!0));break;case"Escape":u&&(e.preventDefault(),k(!0));break}},[_,X,u,k]);s.useEffect(()=>{u&&b(e=>Math.min(Math.max(1,e),v))},[u,v,o,c]);const Ve=ia(c,o),T=[...Array(Ve).fill(null),...Array.from({length:v},(e,a)=>a+1)];for(;T.length%7!==0;)T.push(null);const ye=[];for(let e=0;e<T.length;e+=7)ye.push(T.slice(e,e+7));const ae=r==="date"?D?Y(D):"":d?`${Y(d)}${h?` – ${Y(h)}`:""}`:"",We=[n.default["date-range-picker"],u?n.default["date-range-picker--open"]:"",_?n.default["date-range-picker--disabled"]:"",I?n.default["date-range-picker--has-label"]:"",I&&(u||Re||ke)?n.default["date-range-picker--label-floated"]:"",i].filter(Boolean).join(" ");return t.jsxs("div",{ref:L,className:We,children:[I&&t.jsx("span",{id:de,className:n.default["date-range-picker__label"],children:E}),t.jsxs("div",{ref:U,className:n.default["date-range-picker__trigger"],role:"combobox","aria-haspopup":"dialog","aria-expanded":u,"aria-controls":G?ue:void 0,"aria-disabled":_||void 0,"aria-required":xe||void 0,"aria-label":oe??(ce==null&&!I&&!ae&&!z?ie:void 0),"aria-labelledby":ce??(oe==null?I?de:ae||z?fe:void 0:void 0),"aria-describedby":Se,tabIndex:_?-1:0,id:M,"data-has-value":ke?"":void 0,onClick:X,onKeyDown:Ue,onFocus:e=>{pe(!0),P==null||P(e)},onBlur:e=>{pe(!1),B==null||B(e)},children:[t.jsx("span",{className:n.default["date-range-picker__calendar-icon"],"aria-hidden":!0,children:t.jsx(N.default,{size:"16",glyph:t.jsx(De,{})})}),t.jsx("span",{id:fe,className:n.default["date-range-picker__value"],children:ae||z}),t.jsx("span",{className:n.default["date-range-picker__chevron"],"aria-hidden":!0,children:t.jsx(N.default,{size:"12",glyph:t.jsx(ea,{})})})]}),G&&Be(t.jsxs("div",{ref:A,id:ue,className:[n.default["date-range-picker__popover"],Oe==="above"?n.default["date-range-picker__popover--above"]:"",Q?n.default["date-range-picker__popover--visible"]:""].filter(Boolean).join(" "),style:Pe,role:"dialog","aria-modal":"false","aria-label":ie,children:[t.jsxs("div",{className:n.default["date-range-picker__header"],children:[t.jsxs("span",{className:n.default["date-range-picker__month-label"],"aria-live":"polite",children:[Ce[o]," ",c]}),t.jsxs("div",{className:n.default["date-range-picker__header-actions"],children:[t.jsx(Xe.default,{emphasis:"quaternary",size:"small",compact:!0,leadingIcon:t.jsx(N.default,{size:"16",glyph:t.jsx(De,{})}),onClick:He,children:Ee}),t.jsxs("div",{className:n.default["date-range-picker__nav-buttons"],children:[t.jsx($.default,{size:"medium",padding:"compact",icon:t.jsx(N.default,{size:$.ICON_BUTTON_ICON_SIZES.medium,glyph:t.jsx(aa,{})}),onClick:Ye,"aria-label":Me}),t.jsx($.default,{size:"medium",padding:"compact",icon:t.jsx(N.default,{size:$.ICON_BUTTON_ICON_SIZES.medium,glyph:t.jsx(ta,{})}),onClick:Ke,"aria-label":qe})]})]})]}),t.jsx("div",{className:n.default["date-range-picker__weekdays"],"aria-hidden":!0,children:Ne.map((e,a)=>t.jsx("span",{className:n.default["date-range-picker__weekday"],children:e},a))}),t.jsx("div",{ref:V,className:n.default["date-range-picker__grid"],role:"grid","aria-label":`${K[o]} ${c}`,children:ye.map((e,a)=>t.jsx("div",{className:n.default["date-range-picker__week"],role:"row",children:e.map((l,f)=>{if(l==null)return t.jsx("span",{className:n.default["date-range-picker__day-empty"],role:"gridcell"},f);const g=re(c,o,l),ve=g===W,me=r==="range"&&le(g,d),_e=r==="range"&&!!h&&le(g,h),te=r==="date"?le(g,D):me||_e,Je=r==="range"&&ua(g,d,h),be=r==="range"&&!!d&&!!h&&d!==h,Ze=[n.default["date-range-picker__day-cell"],Je?n.default["date-range-picker__day-cell--in-range"]:"",be&&me?n.default["date-range-picker__day-cell--range-start"]:"",be&&_e?n.default["date-range-picker__day-cell--range-end"]:""].filter(Boolean).join(" "),Ge=[n.default["date-range-picker__day"],te?n.default["date-range-picker__day--selected"]:"",ve&&!te?n.default["date-range-picker__day--today"]:""].filter(Boolean).join(" ");return t.jsx("div",{className:Ze,role:"gridcell",children:t.jsx("button",{type:"button",className:Ge,"data-day":l,tabIndex:Z===l?0:-1,onClick:()=>ee(g,l),onFocus:()=>b(l),onKeyDown:Qe=>Le(Qe,l),"aria-label":g,"aria-pressed":te,"aria-current":ve?"date":void 0,children:l})},f)})},a))})]}))]})}exports.default=da;
2
2
  //# sourceMappingURL=DateRangePicker.cjs.map