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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/dist/compass-ui.css +16 -0
  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.css +1 -1
  168. package/dist/components/modal/ModalOverlay.module.scss.cjs +1 -1
  169. package/dist/components/modal/ModalOverlay.module.scss.js +5 -5
  170. package/dist/components/modal-footer/ModalFooter.css +1 -1
  171. package/dist/components/modal-footer/ModalFooter.module.scss.cjs +1 -1
  172. package/dist/components/modal-footer/ModalFooter.module.scss.js +11 -11
  173. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  174. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  175. package/dist/components/modal-header/ModalHeader.css +1 -1
  176. package/dist/components/modal-header/ModalHeader.d.ts +13 -3
  177. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  178. package/dist/components/modal-header/ModalHeader.js +61 -55
  179. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  180. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  181. package/dist/components/modal-header/ModalHeader.module.scss.js +18 -16
  182. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  183. package/dist/components/more-unreads-banner/MoreUnreadsBanner.css +1 -1
  184. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  185. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +8 -5
  186. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js.map +1 -1
  187. package/dist/components/new-message-banner/NewMessageBanner.css +1 -1
  188. package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs +1 -1
  189. package/dist/components/new-message-banner/NewMessageBanner.module.scss.js +9 -9
  190. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  193. package/dist/components/password-input/PasswordInput.css +1 -1
  194. package/dist/components/password-input/PasswordInput.module.scss.cjs +1 -1
  195. package/dist/components/password-input/PasswordInput.module.scss.js +15 -14
  196. package/dist/components/password-input/PasswordInput.module.scss.js.map +1 -1
  197. package/dist/components/permalink-preview/PermalinkPreview.css +1 -1
  198. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
  199. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -13
  200. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.css +1 -1
  201. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs +1 -1
  202. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js +7 -7
  203. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  204. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  205. package/dist/components/popover-menu/PopoverMenu.module.scss.js +13 -13
  206. package/dist/components/popover-notice/PopoverNotice.css +1 -1
  207. package/dist/components/popover-notice/PopoverNotice.module.scss.cjs +1 -1
  208. package/dist/components/popover-notice/PopoverNotice.module.scss.js +14 -14
  209. package/dist/components/profile-popover/ProfilePopover.css +1 -1
  210. package/dist/components/profile-popover/ProfilePopover.module.scss.cjs +1 -1
  211. package/dist/components/profile-popover/ProfilePopover.module.scss.js +33 -33
  212. package/dist/components/progress-bar/ProgressBar.css +1 -1
  213. package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
  214. package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -9
  215. package/dist/components/radio/Radio.css +1 -1
  216. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  217. package/dist/components/radio/Radio.module.scss.js +12 -12
  218. package/dist/components/reaction-button/ReactionButton.css +1 -1
  219. package/dist/components/reaction-button/ReactionButton.module.scss.cjs +1 -1
  220. package/dist/components/reaction-button/ReactionButton.module.scss.js +8 -8
  221. package/dist/components/reactions-row/ReactionsRow.css +1 -1
  222. package/dist/components/reactions-row/ReactionsRow.module.scss.cjs +1 -1
  223. package/dist/components/reactions-row/ReactionsRow.module.scss.js +8 -8
  224. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  225. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  226. package/dist/components/right-sidebar-header/RightSidebarHeader.css +1 -1
  227. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  228. package/dist/components/right-sidebar-header/RightSidebarHeader.js +39 -36
  229. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  230. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.cjs +1 -1
  231. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js +12 -13
  232. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js.map +1 -1
  233. package/dist/components/scrollbar/Scrollbar.css +1 -1
  234. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  235. package/dist/components/scrollbar/Scrollbar.module.scss.js +5 -5
  236. package/dist/components/search-input/SearchInput.css +1 -1
  237. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  238. package/dist/components/search-input/SearchInput.module.scss.js +15 -15
  239. package/dist/components/search-tip-banner/SearchTipBanner.css +1 -1
  240. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs +1 -1
  241. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js +3 -3
  242. package/dist/components/section-notice/SectionNotice.css +1 -1
  243. package/dist/components/section-notice/SectionNotice.module.scss.cjs +1 -1
  244. package/dist/components/section-notice/SectionNotice.module.scss.js +12 -12
  245. package/dist/components/segmented-control/SegmentedControl.cjs +2 -0
  246. package/dist/components/segmented-control/SegmentedControl.cjs.map +1 -0
  247. package/dist/components/segmented-control/SegmentedControl.css +1 -0
  248. package/dist/components/segmented-control/SegmentedControl.d.ts +71 -0
  249. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -0
  250. package/dist/components/segmented-control/SegmentedControl.js +173 -0
  251. package/dist/components/segmented-control/SegmentedControl.js.map +1 -0
  252. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs +2 -0
  253. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs.map +1 -0
  254. package/dist/components/segmented-control/SegmentedControl.module.scss.js +20 -0
  255. package/dist/components/segmented-control/SegmentedControl.module.scss.js.map +1 -0
  256. package/dist/components/segmented-control/index.cjs +2 -0
  257. package/dist/components/segmented-control/index.cjs.map +1 -0
  258. package/dist/components/segmented-control/index.d.ts +3 -0
  259. package/dist/components/segmented-control/index.d.ts.map +1 -0
  260. package/dist/components/segmented-control/index.js +5 -0
  261. package/dist/components/segmented-control/index.js.map +1 -0
  262. package/dist/components/select/Select.cjs +1 -1
  263. package/dist/components/select/Select.cjs.map +1 -1
  264. package/dist/components/select/Select.css +1 -1
  265. package/dist/components/select/Select.d.ts +14 -0
  266. package/dist/components/select/Select.d.ts.map +1 -1
  267. package/dist/components/select/Select.js +151 -130
  268. package/dist/components/select/Select.js.map +1 -1
  269. package/dist/components/select/Select.module.scss.cjs +1 -1
  270. package/dist/components/select/Select.module.scss.js +28 -26
  271. package/dist/components/select/Select.module.scss.js.map +1 -1
  272. package/dist/components/shortcut-tag/ShortcutTag.css +1 -1
  273. package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs +1 -1
  274. package/dist/components/shortcut-tag/ShortcutTag.module.scss.js +7 -7
  275. package/dist/components/spinner/Spinner.css +1 -1
  276. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  277. package/dist/components/spinner/Spinner.module.scss.js +2 -2
  278. package/dist/components/status-badge/StatusBadge.cjs +1 -1
  279. package/dist/components/status-badge/StatusBadge.cjs.map +1 -1
  280. package/dist/components/status-badge/StatusBadge.css +1 -1
  281. package/dist/components/status-badge/StatusBadge.d.ts +3 -1
  282. package/dist/components/status-badge/StatusBadge.d.ts.map +1 -1
  283. package/dist/components/status-badge/StatusBadge.js +16 -15
  284. package/dist/components/status-badge/StatusBadge.js.map +1 -1
  285. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  286. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  287. package/dist/components/switch/Switch.css +1 -1
  288. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  289. package/dist/components/switch/Switch.module.scss.js +8 -8
  290. package/dist/components/tabs/Tabs.css +1 -1
  291. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  292. package/dist/components/tabs/Tabs.module.scss.js +16 -13
  293. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  294. package/dist/components/tag/Tag.css +1 -1
  295. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  296. package/dist/components/tag/Tag.module.scss.js +11 -11
  297. package/dist/components/team-avatar/TeamAvatar.css +1 -1
  298. package/dist/components/team-avatar/TeamAvatar.module.scss.cjs +1 -1
  299. package/dist/components/team-avatar/TeamAvatar.module.scss.js +17 -17
  300. package/dist/components/text-area/TextArea.css +1 -1
  301. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  302. package/dist/components/text-area/TextArea.module.scss.js +12 -12
  303. package/dist/components/text-input/TextInput.css +1 -1
  304. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  305. package/dist/components/text-input/TextInput.module.scss.js +19 -19
  306. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  307. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  308. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  309. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  310. package/dist/components/thread-footer/ThreadFooter.js +14 -14
  311. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  312. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  313. package/dist/components/thread-footer/ThreadFooter.module.scss.js +19 -20
  314. package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
  315. package/dist/components/thread-list-item/ThreadListItem.css +1 -1
  316. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  317. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -26
  318. package/dist/components/tile-button/TileButton.css +1 -1
  319. package/dist/components/tile-button/TileButton.module.scss.cjs +1 -1
  320. package/dist/components/tile-button/TileButton.module.scss.js +6 -6
  321. package/dist/components/toast/Toast.css +1 -1
  322. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  323. package/dist/components/toast/Toast.module.scss.js +11 -11
  324. package/dist/components/tooltip/Tooltip.cjs +1 -1
  325. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  326. package/dist/components/tooltip/Tooltip.css +1 -1
  327. package/dist/components/tooltip/Tooltip.d.ts +10 -1
  328. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  329. package/dist/components/tooltip/Tooltip.js +29 -17
  330. package/dist/components/tooltip/Tooltip.js.map +1 -1
  331. package/dist/components/tooltip/Tooltip.module.scss.cjs +1 -1
  332. package/dist/components/tooltip/Tooltip.module.scss.js +7 -6
  333. package/dist/components/tooltip/Tooltip.module.scss.js.map +1 -1
  334. package/dist/components/tooltip/index.d.ts +1 -1
  335. package/dist/components/tooltip/index.d.ts.map +1 -1
  336. package/dist/components/tour-point/TourPoint.css +1 -1
  337. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  338. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  339. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  340. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  341. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  342. package/dist/components/user-avatar/UserAvatar.cjs +1 -1
  343. package/dist/components/user-avatar/UserAvatar.cjs.map +1 -1
  344. package/dist/components/user-avatar/UserAvatar.css +1 -1
  345. package/dist/components/user-avatar/UserAvatar.d.ts +18 -8
  346. package/dist/components/user-avatar/UserAvatar.d.ts.map +1 -1
  347. package/dist/components/user-avatar/UserAvatar.js +84 -52
  348. package/dist/components/user-avatar/UserAvatar.js.map +1 -1
  349. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  350. package/dist/components/user-avatar/UserAvatar.module.scss.js +33 -26
  351. package/dist/components/user-avatar/UserAvatar.module.scss.js.map +1 -1
  352. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  353. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  354. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  355. package/dist/index.cjs +1 -1
  356. package/dist/index.d.ts +1 -0
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js +57 -55
  359. package/dist/index.js.map +1 -1
  360. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Select.cjs","sources":["../../../src/components/select/Select.tsx"],"sourcesContent":["import type { KeyboardEvent, ReactNode } 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 Icon from '@/components/icon/Icon';\nimport { IconSlotContext } 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 PopoverMenuDivider,\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\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 { toKebab } from '@/utils/string';\nimport styles from './Select.module.scss';\n\nexport type SelectSize = 'small' | 'medium' | 'large';\n\n// Select rows use `onPointerUp`, so `onClick` is left for callers.\ntype SelectMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onClick'>\n>;\n\nexport type SelectOption = {\n value: string;\n /** Kept as `string` like `ComboboxOption.label` (which drives filtering), so option lists can be shared. */\n label: string;\n disabled?: boolean;\n leadingVisual?: ReactNode;\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /** When true, renders a menu divider after this option. */\n dividerAfter?: boolean;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Select; the props Select owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: SelectMenuItemProps;\n};\n\nexport interface SelectProps {\n options: SelectOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins.\n */\n menuItemProps?: SelectMenuItemProps;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Shown on the trigger when no value is selected. Empty-value options are not listed in the menu. */\n placeholder?: string;\n label?: ReactNode;\n /** Leading icon — pass `<Icon glyph={<SomeIcon />} />`; Select provides the correct size via context. */\n leadingIcon?: ReactNode;\n size?: SelectSize;\n invalid?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n 'aria-label'?: 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 /** 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\nfunction SelectOptionRow({\n option,\n menuItemProps,\n listboxId,\n selected,\n active,\n onSelect,\n onHover,\n dividerAfter = false,\n}: {\n option: SelectOption;\n menuItemProps?: SelectMenuItemProps;\n listboxId: string;\n selected: boolean;\n active: boolean;\n onSelect: (option: SelectOption) => void;\n onHover: () => void;\n dividerAfter?: boolean;\n}) {\n return (\n <>\n <li className={styles.select__option} role=\"presentation\">\n <MenuItem\n {...mergeMenuItemProps(menuItemProps, option.menuItemProps)}\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={option.leadingVisual != null}\n leadingVisual={option.leadingVisual}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => ev.preventDefault()}\n onMouseEnter={onHover}\n onPointerUp={() => {\n if (!option.disabled) onSelect(option);\n }}\n />\n </li>\n {dividerAfter ? (\n <li role=\"presentation\">\n <PopoverMenuDivider aria-hidden=\"true\" />\n </li>\n ) : null}\n </>\n );\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, ];\n */\nconst Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n menuItemProps,\n value: valueProp,\n defaultValue = '',\n onChange,\n placeholder,\n label,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n id: idProp,\n name,\n className = '',\n 'aria-label': ariaLabel,\n listboxLabel = 'Options',\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const setButtonRef = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const value = isControlled ? valueProp! : uncontrolledValue;\n\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 hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value],\n );\n\n const listOptions = useMemo(\n () => options.filter((o) => o.value !== ''),\n [options],\n );\n\n const hasValue = value !== '';\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 }, []);\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 (listOptions.length === 0) return -1;\n if (prev >= 0 && prev < listOptions.length) return prev;\n const selectedIdx = listOptions.findIndex((o) => o.value === value);\n if (selectedIdx >= 0) return selectedIdx;\n const firstEnabled = listOptions.findIndex((o) => !o.disabled);\n return firstEnabled >= 0 ? firstEnabled : 0;\n });\n }, [isOpen, listOptions, value]);\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n const selectOption = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n commitValue(option.value);\n close();\n buttonRef.current?.focus();\n },\n [commitValue, close],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n activatedByPointer.current = false;\n const enabled = listOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\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 [listOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\n const option = listOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(`${listboxId}-option-${option.value}`);\n el?.scrollIntoView?.({ block: 'nearest' });\n }, [isOpen, activeIndex, listOptions, listboxId]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n const idx = listOptions.findIndex((o) => !o.disabled);\n setActiveIndex(idx >= 0 ? idx : 0);\n }\n break;\n case 'End':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n for (let i = listOptions.length - 1; i >= 0; i--) {\n if (!listOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && activeIndex >= 0 && listOptions[activeIndex]) {\n selectOption(listOptions[activeIndex]);\n } else if (!isOpen) {\n open();\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const labelFloated = isFocused || isOpen || hasValue;\n const displayLabel = selectedOption?.label ?? placeholder ?? '';\n const showPlaceholderStyle = !hasValue && displayLabel !== '';\n\n const activeOption = activeIndex >= 0 ? listOptions[activeIndex] : undefined;\n const activeDescendant =\n isOpen && activeOption != null\n ? `${listboxId}-option-${activeOption.value}`\n : undefined;\n\n const sizeClass = styles[`select--size-${toKebab(size)}`];\n const rootClass = [\n styles.select,\n sizeClass,\n invalid ? styles['select--invalid'] : '',\n label != null && labelFloated ? styles['select--label-floated'] : '',\n leadingIcon != null ? styles['select--has-leading-icon'] : '',\n isOpen ? styles['select--open'] : '',\n disabled ? styles['select--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClass = [\n styles.select__control,\n showPlaceholderStyle ? styles['select__control--placeholder'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.select__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.select__label} htmlFor={id}>\n {label}\n </label>\n )}\n <button\n ref={setButtonRef}\n id={id}\n type=\"button\"\n role=\"combobox\"\n className={controlClass}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendant}\n aria-invalid={invalid ? true : undefined}\n aria-label={ariaLabel}\n onClick={() => (isOpen ? close() : open())}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n >\n {leadingIcon != null && (\n <span className={styles['select__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <span className={styles.select__value}>{displayLabel}</span>\n <span className={styles['select__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </button>\n </div>\n\n {name != null && !disabled && (\n <input type=\"hidden\" name={name} value={value} />\n )}\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.select__popup,\n placement === 'above' ? styles['select__popup--above'] : '',\n popupVisible ? styles['select__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.select__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n <ul\n id={listboxId}\n className={styles.select__list}\n role=\"listbox\"\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? listboxLabel)\n }\n >\n {listOptions.map((option, index) => (\n <SelectOptionRow\n key={option.value}\n option={option}\n menuItemProps={menuItemProps}\n listboxId={listboxId}\n selected={option.value === value}\n active={index === activeIndex}\n onSelect={selectOption}\n onHover={() => hoverRow(index)}\n dividerAfter={option.dividerAfter}\n />\n ))}\n </ul>\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Select;\n"],"names":["POPUP_MAX_HEIGHT","SelectOptionRow","option","menuItemProps","listboxId","selected","active","onSelect","onHover","dividerAfter","jsxs","Fragment","jsx","styles","MenuItem","mergeMenuItemProps","ev","PopoverMenuDivider","Select","forwardRef","options","valueProp","defaultValue","onChange","placeholder","label","leadingIcon","size","invalid","disabled","idProp","name","className","ariaLabel","listboxLabel","portalContainer","zIndex","ref","generatedId","useId","id","rootRef","useRef","anchorRef","buttonRef","setButtonRef","useCallback","node","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","activatedByPointer","hoverRow","index","selectedOption","useMemo","o","listOptions","hasValue","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","firstEnabled","commitValue","next","selectOption","_a","moveActive","delta","enabled","currentPos","i","nextPos","el","handleKeyDown","idx","labelFloated","displayLabel","showPlaceholderStyle","activeOption","activeDescendant","sizeClass","toKebab","rootClass","controlClass","IconSlotContext","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll"],"mappings":"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"}
1
+ {"version":3,"file":"Select.cjs","sources":["../../../src/components/select/Select.tsx"],"sourcesContent":["import type { KeyboardEvent, ReactNode } 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 Icon from '@/components/icon/Icon';\nimport { IconSlotContext } 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 PopoverMenuDivider,\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\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 { toKebab } from '@/utils/string';\nimport styles from './Select.module.scss';\n\nexport type SelectSize = 'small' | 'medium' | 'large';\n\n// Select rows use `onPointerUp`, so `onClick` is left for callers.\ntype SelectMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onClick'>\n>;\n\nexport type SelectOption = {\n value: string;\n /** Kept as `string` like `ComboboxOption.label` (which drives filtering), so option lists can be shared. */\n label: string;\n disabled?: boolean;\n leadingVisual?: ReactNode;\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /** When true, renders a menu divider after this option. */\n dividerAfter?: boolean;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Select; the props Select owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: SelectMenuItemProps;\n};\n\nexport interface SelectProps {\n options: SelectOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins.\n */\n menuItemProps?: SelectMenuItemProps;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Shown on the trigger when no value is selected. Empty-value options are not listed in the menu. */\n placeholder?: string;\n label?: ReactNode;\n /** Leading icon — pass `<Icon glyph={<SomeIcon />} />`; Select provides the correct size via context. */\n leadingIcon?: ReactNode;\n size?: SelectSize;\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 trigger with `aria-describedby`.\n */\n message?: ReactNode;\n /** Visual tone for `message`. Default: `error` when `message` is set. */\n messageTone?: FieldMessageTone;\n /** Marks the field required for assistive tech (`aria-required=\"true\"`). */\n required?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n 'aria-label'?: string;\n /** Extra description ids for the trigger; the field message id is appended. */\n 'aria-describedby'?: 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 /** 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\nfunction SelectOptionRow({\n option,\n menuItemProps,\n listboxId,\n selected,\n active,\n onSelect,\n onHover,\n dividerAfter = false,\n}: {\n option: SelectOption;\n menuItemProps?: SelectMenuItemProps;\n listboxId: string;\n selected: boolean;\n active: boolean;\n onSelect: (option: SelectOption) => void;\n onHover: () => void;\n dividerAfter?: boolean;\n}) {\n return (\n <>\n <li className={styles.select__option} role=\"presentation\">\n <MenuItem\n {...mergeMenuItemProps(menuItemProps, option.menuItemProps)}\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={option.leadingVisual != null}\n leadingVisual={option.leadingVisual}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => ev.preventDefault()}\n onMouseEnter={onHover}\n onPointerUp={() => {\n if (!option.disabled) onSelect(option);\n }}\n />\n </li>\n {dividerAfter ? (\n <li role=\"presentation\">\n <PopoverMenuDivider aria-hidden=\"true\" />\n </li>\n ) : null}\n </>\n );\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, ];\n */\nconst Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n menuItemProps,\n value: valueProp,\n defaultValue = '',\n onChange,\n placeholder,\n label,\n leadingIcon,\n size = 'medium',\n invalid = false,\n message,\n messageTone,\n required = false,\n disabled = false,\n id: idProp,\n name,\n className = '',\n 'aria-label': ariaLabel,\n 'aria-describedby': describedBy,\n listboxLabel = 'Options',\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const setButtonRef = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const value = isControlled ? valueProp! : uncontrolledValue;\n\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 hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value],\n );\n\n const listOptions = useMemo(\n () => options.filter((o) => o.value !== ''),\n [options],\n );\n\n const hasValue = value !== '';\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 }, []);\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 (listOptions.length === 0) return -1;\n if (prev >= 0 && prev < listOptions.length) return prev;\n const selectedIdx = listOptions.findIndex((o) => o.value === value);\n if (selectedIdx >= 0) return selectedIdx;\n const firstEnabled = listOptions.findIndex((o) => !o.disabled);\n return firstEnabled >= 0 ? firstEnabled : 0;\n });\n }, [isOpen, listOptions, value]);\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n const selectOption = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n commitValue(option.value);\n close();\n buttonRef.current?.focus();\n },\n [commitValue, close],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n activatedByPointer.current = false;\n const enabled = listOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\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 [listOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\n const option = listOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(`${listboxId}-option-${option.value}`);\n el?.scrollIntoView?.({ block: 'nearest' });\n }, [isOpen, activeIndex, listOptions, listboxId]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n const idx = listOptions.findIndex((o) => !o.disabled);\n setActiveIndex(idx >= 0 ? idx : 0);\n }\n break;\n case 'End':\n if (isOpen && listOptions.length > 0) {\n e.preventDefault();\n for (let i = listOptions.length - 1; i >= 0; i--) {\n if (!listOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && activeIndex >= 0 && listOptions[activeIndex]) {\n selectOption(listOptions[activeIndex]);\n } else if (!isOpen) {\n open();\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const labelFloated = isFocused || isOpen || hasValue;\n const displayLabel = selectedOption?.label ?? placeholder ?? '';\n const showPlaceholderStyle = !hasValue && displayLabel !== '';\n\n const activeOption = activeIndex >= 0 ? listOptions[activeIndex] : undefined;\n const activeDescendant =\n isOpen && activeOption != null\n ? `${listboxId}-option-${activeOption.value}`\n : undefined;\n\n const showInvalid = isFieldInvalid(invalid, message, messageTone);\n const showMessage = hasFieldMessage(message);\n const messageId = showMessage ? `${id}-message` : undefined;\n\n const sizeClass = styles[`select--size-${toKebab(size)}`];\n const rootClass = [\n styles.select,\n sizeClass,\n showInvalid ? styles['select--invalid'] : '',\n label != null && labelFloated ? styles['select--label-floated'] : '',\n leadingIcon != null ? styles['select--has-leading-icon'] : '',\n isOpen ? styles['select--open'] : '',\n disabled ? styles['select--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClass = [\n styles.select__control,\n showPlaceholderStyle ? styles['select__control--placeholder'] : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.select__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.select__label} htmlFor={id}>\n {label}\n </label>\n )}\n <button\n ref={setButtonRef}\n id={id}\n type=\"button\"\n role=\"combobox\"\n className={controlClass}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendant}\n aria-invalid={showInvalid ? true : undefined}\n aria-required={required ? true : undefined}\n aria-describedby={mergeFieldDescribedBy(\n describedBy,\n messageId,\n undefined,\n )}\n aria-label={ariaLabel}\n onClick={() => (isOpen ? close() : open())}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n >\n {leadingIcon != null && (\n <span className={styles['select__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <span className={styles.select__value}>{displayLabel}</span>\n <span className={styles['select__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </button>\n </div>\n\n {showMessage && (\n <FieldMessage\n id={messageId}\n className={styles['select__message']}\n message={message}\n tone={messageTone ?? 'error'}\n />\n )}\n\n {name != null && !disabled && (\n <input type=\"hidden\" name={name} value={value} />\n )}\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.select__popup,\n placement === 'above' ? styles['select__popup--above'] : '',\n popupVisible ? styles['select__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.select__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n <ul\n id={listboxId}\n className={styles.select__list}\n role=\"listbox\"\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? listboxLabel)\n }\n >\n {listOptions.map((option, index) => (\n <SelectOptionRow\n key={option.value}\n option={option}\n menuItemProps={menuItemProps}\n listboxId={listboxId}\n selected={option.value === value}\n active={index === activeIndex}\n onSelect={selectOption}\n onHover={() => hoverRow(index)}\n dividerAfter={option.dividerAfter}\n />\n ))}\n </ul>\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Select;\n"],"names":["POPUP_MAX_HEIGHT","SelectOptionRow","option","menuItemProps","listboxId","selected","active","onSelect","onHover","dividerAfter","jsxs","Fragment","jsx","styles","MenuItem","mergeMenuItemProps","ev","PopoverMenuDivider","Select","forwardRef","options","valueProp","defaultValue","onChange","placeholder","label","leadingIcon","size","invalid","message","messageTone","required","disabled","idProp","name","className","ariaLabel","describedBy","listboxLabel","portalContainer","zIndex","ref","generatedId","useId","id","rootRef","useRef","anchorRef","buttonRef","setButtonRef","useCallback","node","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","activatedByPointer","hoverRow","index","selectedOption","useMemo","o","listOptions","hasValue","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","firstEnabled","commitValue","next","selectOption","_a","moveActive","delta","enabled","i","currentPos","nextPos","el","handleKeyDown","idx","labelFloated","displayLabel","showPlaceholderStyle","activeOption","activeDescendant","showInvalid","isFieldInvalid","showMessage","hasFieldMessage","messageId","sizeClass","toKebab","rootClass","controlClass","mergeFieldDescribedBy","IconSlotContext","Icon","ChevronDownIcon","FieldMessage","PopoverMenu","PopoverMenuScroll"],"mappings":"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"}
@@ -1 +1 @@
1
- ._select_1udb3_2{position:relative;display:flex;flex-direction:column;width:100%}._select__wrapper_1udb3_8{position:relative;background-color:var(--center-channel-bg);border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.16);transition:box-shadow var(--duration-quick) var(--ease-transition);cursor:pointer}._select_1udb3_2:not(._select--disabled_1udb3_16):hover:not(:focus-within) ._select__wrapper_1udb3_8{box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.24)}._select_1udb3_2:focus-within ._select__wrapper_1udb3_8{box-shadow:inset 0 0 0 1px var(--focus-ring-color),0 0 0 1px var(--focus-ring-color)}._select--disabled_1udb3_16 ._select__wrapper_1udb3_8{opacity:.56;cursor:not-allowed}._select__label_1udb3_26{position:absolute;left:var(--spacing-xs);top:50%;z-index:1;padding:0 var(--spacing-xxxs);transform:translateY(-50%);margin:0;font-family:var(--font-family-body);font-size:var(--font-size-75);line-height:var(--line-height-75);font-weight:var(--font-weight-regular);color:rgba(var(--center-channel-color-rgb),.64);background-color:var(--center-channel-bg);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 24px);transition:transform var(--duration-quick) var(--ease-transition),font-size var(--duration-quick) var(--ease-transition),top var(--duration-quick) var(--ease-transition),left var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition)}._select--label-floated_1udb3_47 ._select__label_1udb3_26{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._select_1udb3_2:focus-within ._select__label_1udb3_26{color:var(--button-bg)}._select__control_1udb3_56{display:flex;align-items:center;width:100%;margin:0;border:0;background:transparent;font-family:var(--font-family-body);font-size:var(--font-size-75);line-height:var(--line-height-75);font-weight:var(--font-weight-regular);color:var(--center-channel-color);text-align:left;cursor:pointer;gap:var(--spacing-xs)}._select__control_1udb3_56:focus{outline:none}._select__control_1udb3_56:focus-visible{outline:none}._select__control_1udb3_56:disabled{cursor:not-allowed;color:rgba(var(--center-channel-color-rgb),.64)}._select__control--placeholder_1udb3_82 ._select__value_1udb3_82{color:rgba(var(--center-channel-color-rgb),.64)}._select__value_1udb3_82{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._select__leading-icon_1udb3_92{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64)}._select__trailing-icon_1udb3_99{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64);margin-right:var(--spacing-xxxs);transition:transform var(--duration-quick) var(--ease-transition)}._select--open_1udb3_108 ._select__trailing-icon_1udb3_99{transform:rotate(180deg)}._select__popup_1udb3_111{opacity:0;transform:scale(.9);transform-origin:top center;transition:opacity var(--duration-quick) var(--ease-exit),transform var(--duration-quick) var(--ease-exit);pointer-events:none}._select__popup--above_1udb3_118{transform-origin:bottom center}._select__popup--visible_1udb3_121{opacity:1;transform:scale(1);pointer-events:auto;transition:opacity var(--duration-quick) var(--ease-entrance),transform var(--duration-quick) var(--ease-entrance)}._select__popup_1udb3_111 ._select__menu_1udb3_127{width:100%;min-width:100%;max-width:none}._select__list_1udb3_132{margin:0;padding:0;list-style:none}._select__option_1udb3_137{display:block;width:100%;list-style:none}._select__option_1udb3_137[aria-disabled=true]{cursor:not-allowed}._select__option-content--disabled_1udb3_145{opacity:.4}._select--size-small_1udb3_148 ._select__wrapper_1udb3_8{min-height:32px}._select--size-small_1udb3_148 ._select__control_1udb3_56{padding:var(--spacing-xs) var(--spacing-m);gap:var(--spacing-xs);font-size:var(--font-size-75);line-height:var(--line-height-75)}._select--size-small_1udb3_148 ._select__trailing-icon_1udb3_99 svg{width:var(--icon-size-12);height:var(--icon-size-12)}._select--size-small_1udb3_148._select--label-floated_1udb3_47 ._select__label_1udb3_26{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._select--size-medium_1udb3_167 ._select__wrapper_1udb3_8{min-height:40px}._select--size-medium_1udb3_167 ._select__control_1udb3_56{padding:var(--spacing-s) var(--spacing-l);gap:var(--spacing-s);font-size:var(--font-size-100);line-height:var(--line-height-100)}._select--size-medium_1udb3_167 ._select__label_1udb3_26{font-size:var(--font-size-100);left:var(--spacing-m)}._select--size-medium_1udb3_167 ._select__trailing-icon_1udb3_99 svg{width:var(--icon-size-16);height:var(--icon-size-16)}._select--size-medium_1udb3_167._select--label-floated_1udb3_47 ._select__label_1udb3_26{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._select--size-large_1udb3_190 ._select__wrapper_1udb3_8{min-height:48px}._select--size-large_1udb3_190 ._select__control_1udb3_56{padding:var(--spacing-m) var(--spacing-l);gap:var(--spacing-s);font-size:var(--font-size-200);line-height:var(--line-height-200)}._select--size-large_1udb3_190 ._select__label_1udb3_26{font-size:var(--font-size-200);line-height:var(--line-height-200);left:var(--spacing-m)}._select--size-large_1udb3_190 ._select__trailing-icon_1udb3_99 svg{width:var(--icon-size-16);height:var(--icon-size-16)}._select--size-large_1udb3_190._select--label-floated_1udb3_47 ._select__label_1udb3_26{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._select_1udb3_2:has(._select__label_1udb3_26):not(._select--label-floated_1udb3_47) ._select__value_1udb3_82{color:transparent}._select--invalid_1udb3_217 ._select__wrapper_1udb3_8{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger))}._select--invalid_1udb3_217:focus-within ._select__wrapper_1udb3_8{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger)),0 0 0 1px var(--error-text, var(--color-danger))}._select--invalid_1udb3_217 ._select__label_1udb3_26{color:var(--error-text, var(--color-danger))}._select--invalid_1udb3_217:focus-within ._select__label_1udb3_26{color:var(--error-text, var(--color-danger))}._select--has-leading-icon_1udb3_229 ._select__label_1udb3_26{left:calc(var(--spacing-m) + var(--icon-size-16) + var(--spacing-xs) - var(--spacing-xxxs))}._select--has-leading-icon_1udb3_229._select--label-floated_1udb3_47 ._select__label_1udb3_26{left:var(--spacing-xs)}._select--has-leading-icon_1udb3_229._select--size-medium_1udb3_167 ._select__label_1udb3_26,._select--has-leading-icon_1udb3_229._select--size-large_1udb3_190 ._select__label_1udb3_26{left:calc(var(--spacing-m) + var(--icon-size-16) + var(--spacing-s))}._select--has-leading-icon_1udb3_229._select--size-medium_1udb3_167._select--label-floated_1udb3_47 ._select__label_1udb3_26,._select--has-leading-icon_1udb3_229._select--size-large_1udb3_190._select--label-floated_1udb3_47 ._select__label_1udb3_26{left:var(--spacing-m)}
1
+ ._select_ew42w_13{position:relative;display:flex;flex-direction:column;width:100%}._select__wrapper_ew42w_19{position:relative;background-color:var(--center-channel-bg);border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.16);transition:box-shadow var(--duration-quick) var(--ease-transition);cursor:pointer}._select_ew42w_13:not(._select--disabled_ew42w_27):hover:not(:focus-within) ._select__wrapper_ew42w_19{box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.24)}._select_ew42w_13:focus-within ._select__wrapper_ew42w_19{box-shadow:inset 0 0 0 1px var(--focus-ring-color),0 0 0 1px var(--focus-ring-color)}._select--disabled_ew42w_27 ._select__wrapper_ew42w_19{opacity:.56;cursor:not-allowed}._select__label_ew42w_37{position:absolute;left:var(--spacing-xs);top:50%;z-index:1;padding:0 var(--spacing-xxxs);transform:translateY(-50%);margin:0;font-family:var(--font-family-body);font-size:var(--font-size-75);line-height:var(--line-height-75);font-weight:var(--font-weight-regular);color:rgba(var(--center-channel-color-rgb),.64);background-color:var(--center-channel-bg);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 24px);transition:transform var(--duration-quick) var(--ease-transition),font-size var(--duration-quick) var(--ease-transition),top var(--duration-quick) var(--ease-transition),left var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition)}._select--label-floated_ew42w_58 ._select__label_ew42w_37{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:1.4}._select_ew42w_13:focus-within ._select__label_ew42w_37{color:var(--button-bg)}._select__message_ew42w_67{margin-top:var(--spacing-xs)}._select__control_ew42w_70{display:flex;align-items:center;width:100%;margin:0;border:0;background:transparent;font-family:var(--font-family-body);font-size:var(--font-size-75);line-height:var(--line-height-75);font-weight:var(--font-weight-regular);color:var(--center-channel-color);text-align:left;cursor:pointer;gap:var(--spacing-xs)}._select__control_ew42w_70:focus{outline:none}._select__control_ew42w_70:focus-visible{outline:none}._select__control_ew42w_70:disabled{cursor:not-allowed;color:rgba(var(--center-channel-color-rgb),.64)}._select__control--placeholder_ew42w_96 ._select__value_ew42w_96{color:rgba(var(--center-channel-color-rgb),.64)}._select__value_ew42w_96{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._select__leading-icon_ew42w_106{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64)}._select__trailing-icon_ew42w_113{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64);margin-right:var(--spacing-xxxs);transition:transform var(--duration-quick) var(--ease-transition)}._select--open_ew42w_122 ._select__trailing-icon_ew42w_113{transform:rotate(180deg)}._select__popup_ew42w_125{opacity:0;transform:scale(.9);transform-origin:top center;transition:opacity var(--duration-quick) var(--ease-exit),transform var(--duration-quick) var(--ease-exit);pointer-events:none}._select__popup--above_ew42w_132{transform-origin:bottom center}._select__popup--visible_ew42w_135{opacity:1;transform:scale(1);pointer-events:auto;transition:opacity var(--duration-quick) var(--ease-entrance),transform var(--duration-quick) var(--ease-entrance)}._select__popup_ew42w_125 ._select__menu_ew42w_141{width:100%;min-width:100%;max-width:none}._select__list_ew42w_146{margin:0;padding:0;list-style:none}._select__option_ew42w_151{display:block;width:100%;list-style:none}._select__option_ew42w_151[aria-disabled=true]{cursor:not-allowed}._select__option-content--disabled_ew42w_159{opacity:.4}._select--size-small_ew42w_162 ._select__wrapper_ew42w_19{min-height:32px}._select--size-small_ew42w_162 ._select__control_ew42w_70{min-height:32px;padding:var(--spacing-xs) var(--spacing-m);gap:var(--spacing-xs);font-size:var(--font-size-75);line-height:var(--line-height-75)}._select--size-small_ew42w_162 ._select__trailing-icon_ew42w_113 svg{width:var(--icon-size-12);height:var(--icon-size-12)}._select--size-small_ew42w_162._select--label-floated_ew42w_58 ._select__label_ew42w_37{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:1.4}._select--size-medium_ew42w_182 ._select__wrapper_ew42w_19{min-height:40px}._select--size-medium_ew42w_182 ._select__control_ew42w_70{min-height:40px;padding:var(--spacing-s) var(--spacing-l);gap:var(--spacing-s);font-size:var(--font-size-100);line-height:var(--line-height-100)}._select--size-medium_ew42w_182 ._select__label_ew42w_37{font-size:var(--font-size-100);left:var(--spacing-m);line-height:var(--line-height-100)}._select--size-medium_ew42w_182 ._select__trailing-icon_ew42w_113 svg{width:var(--icon-size-16);height:var(--icon-size-16)}._select--size-medium_ew42w_182._select--label-floated_ew42w_58 ._select__label_ew42w_37{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:1.4}._select--size-large_ew42w_207 ._select__wrapper_ew42w_19{min-height:48px}._select--size-large_ew42w_207 ._select__control_ew42w_70{min-height:48px;padding:var(--spacing-m) var(--spacing-l);gap:var(--spacing-s);font-size:var(--font-size-200);line-height:var(--line-height-200)}._select--size-large_ew42w_207 ._select__label_ew42w_37{font-size:var(--font-size-200);line-height:var(--line-height-200);left:var(--spacing-m)}._select--size-large_ew42w_207 ._select__trailing-icon_ew42w_113 svg{width:var(--icon-size-16);height:var(--icon-size-16)}._select--size-large_ew42w_207._select--label-floated_ew42w_58 ._select__label_ew42w_37{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:1.4}._select_ew42w_13:has(._select__label_ew42w_37):not(._select--label-floated_ew42w_58) ._select__value_ew42w_96{color:transparent}._select--invalid_ew42w_235 ._select__wrapper_ew42w_19{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger))}._select--invalid_ew42w_235:focus-within ._select__wrapper_ew42w_19{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger)),0 0 0 1px var(--error-text, var(--color-danger))}._select--invalid_ew42w_235 ._select__label_ew42w_37{color:var(--error-text, var(--color-danger))}._select--invalid_ew42w_235:focus-within ._select__label_ew42w_37{color:var(--error-text, var(--color-danger))}._select--has-leading-icon_ew42w_247 ._select__label_ew42w_37{left:calc(var(--spacing-m) + var(--icon-size-16) + var(--spacing-xs) - var(--spacing-xxxs))}._select--has-leading-icon_ew42w_247._select--label-floated_ew42w_58 ._select__label_ew42w_37{left:var(--spacing-xs)}._select--has-leading-icon_ew42w_247._select--size-medium_ew42w_182 ._select__label_ew42w_37,._select--has-leading-icon_ew42w_247._select--size-large_ew42w_207 ._select__label_ew42w_37{left:calc(var(--spacing-m) + var(--icon-size-16) + var(--spacing-s))}._select--has-leading-icon_ew42w_247._select--size-medium_ew42w_182._select--label-floated_ew42w_58 ._select__label_ew42w_37,._select--has-leading-icon_ew42w_247._select--size-large_ew42w_207._select--label-floated_ew42w_58 ._select__label_ew42w_37{left:var(--spacing-m)}
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import { FieldMessageTone } from '../field-message/FieldMessage';
2
3
  import { MenuItemOwnedProps, MenuItemPassthroughProps } from '../menu-item/MenuItem';
3
4
  export type SelectSize = 'small' | 'medium' | 'large';
4
5
  type SelectMenuItemProps = MenuItemPassthroughProps<Exclude<MenuItemOwnedProps, 'onClick'>>;
@@ -36,12 +37,25 @@ export interface SelectProps {
36
37
  /** Leading icon — pass `<Icon glyph={<SomeIcon />} />`; Select provides the correct size via context. */
37
38
  leadingIcon?: ReactNode;
38
39
  size?: SelectSize;
40
+ /** When true, shows invalid/error styling. */
39
41
  invalid?: boolean;
42
+ /**
43
+ * Field message under the field. Accepts translated nodes (e.g. `<FormattedMessage/>`).
44
+ * Defaults to error tone (invalid chrome) when set without `messageTone`. It is linked to
45
+ * the trigger with `aria-describedby`.
46
+ */
47
+ message?: ReactNode;
48
+ /** Visual tone for `message`. Default: `error` when `message` is set. */
49
+ messageTone?: FieldMessageTone;
50
+ /** Marks the field required for assistive tech (`aria-required="true"`). */
51
+ required?: boolean;
40
52
  disabled?: boolean;
41
53
  id?: string;
42
54
  name?: string;
43
55
  className?: string;
44
56
  'aria-label'?: string;
57
+ /** Extra description ids for the trigger; the field message id is appended. */
58
+ 'aria-describedby'?: string;
45
59
  /**
46
60
  * Accessible name for the options list when `label` isn't a string and no
47
61
  * `aria-label` is set. Default: "Options".
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AActD,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAYxC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAGtD,KAAK,mBAAmB,GAAG,wBAAwB,CACjD,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CACvC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gCAAgC;IAChC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yGAAyG;IACzG,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsDD;;;GAGG;AACH,QAAA,MAAM,MAAM,2GAmVV,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAmBtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAYxC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAGtD,KAAK,mBAAmB,GAAG,wBAAwB,CACjD,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CACvC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gCAAgC;IAChC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yGAAyG;IACzG,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsDD;;;GAGG;AACH,QAAA,MAAM,MAAM,2GA0WV,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -1,261 +1,282 @@
1
- import { jsxs as k, jsx as o, Fragment as we } from "react/jsx-runtime";
2
- import { forwardRef as De, useId as ke, useRef as w, useCallback as p, useState as D, useMemo as J, useEffect as Q } from "react";
3
- import __Ne from "@mattermost/compass-icons/components/chevron-down.js";const Ne=__Ne&&__Ne.default?__Ne.default:__Ne;
4
- import Ee, { IconSlotContext as Me } from "../icon/Icon.js";
5
- import Re from "../menu-item/MenuItem.js";
6
- import Se, { PopoverMenuScroll as Ve, PopoverMenuDivider as Ae } from "../popover-menu/PopoverMenu.js";
7
- import { useAnchoredPopupPortal as Oe } from "../../hooks/use-anchored-popup-portal.js";
8
- import { useOutsideClose as $e } from "../../hooks/use-outside-close.js";
9
- import { usePopoverTransition as Be } from "../../hooks/use-popover-transition.js";
10
- import { mergeMenuItemProps as He } from "../../utils/menuItemProps.js";
11
- import { toKebab as Fe } from "../../utils/string.js";
1
+ import { jsxs as k, jsx as o, Fragment as Re } from "react/jsx-runtime";
2
+ import { forwardRef as Se, useId as Ve, useRef as D, useCallback as p, useState as M, useMemo as Z, useEffect as ee } from "react";
3
+ import __$e from "@mattermost/compass-icons/components/chevron-down.js";const $e=__$e&&__$e.default?__$e.default:__$e;
4
+ import Ae, { IconSlotContext as Be } from "../icon/Icon.js";
5
+ import { mergeFieldDescribedBy as Oe, hasFieldMessage as He, isFieldInvalid as je } from "../field/fieldDescribedBy.js";
6
+ import Ce from "../field-message/FieldMessage.js";
7
+ import ze from "../menu-item/MenuItem.js";
8
+ import Ue, { PopoverMenuScroll as Ke, PopoverMenuDivider as Le } from "../popover-menu/PopoverMenu.js";
9
+ import { useAnchoredPopupPortal as Te } from "../../hooks/use-anchored-popup-portal.js";
10
+ import { useOutsideClose as qe } from "../../hooks/use-outside-close.js";
11
+ import { usePopoverTransition as Ge } from "../../hooks/use-popover-transition.js";
12
+ import { mergeMenuItemProps as Xe } from "../../utils/menuItemProps.js";
13
+ import { toKebab as Je } from "../../utils/string.js";
12
14
  import l from "./Select.module.scss.js";
13
- const W = 280;
14
- function je({
15
- option: i,
15
+ const te = 280;
16
+ function Qe({
17
+ option: a,
16
18
  menuItemProps: m,
17
19
  listboxId: N,
18
20
  selected: g,
19
21
  active: E,
20
22
  onSelect: v,
21
- onHover: M,
23
+ onHover: F,
22
24
  dividerAfter: u = !1
23
25
  }) {
24
- return /* @__PURE__ */ k(we, { children: [
26
+ return /* @__PURE__ */ k(Re, { children: [
25
27
  /* @__PURE__ */ o("li", { className: l.select__option, role: "presentation", children: /* @__PURE__ */ o(
26
- Re,
28
+ ze,
27
29
  {
28
- ...He(m, i.menuItemProps),
29
- id: `${N}-option-${i.value}`,
30
+ ...Xe(m, a.menuItemProps),
31
+ id: `${N}-option-${a.value}`,
30
32
  role: "option",
31
- label: i.label,
32
- secondaryLabel: i.secondaryLabel,
33
- leadingElement: i.leadingVisual != null,
34
- leadingVisual: i.leadingVisual,
33
+ label: a.label,
34
+ secondaryLabel: a.secondaryLabel,
35
+ leadingElement: a.leadingVisual != null,
36
+ leadingVisual: a.leadingVisual,
35
37
  trailingElement: g,
36
38
  active: E,
37
- disabled: i.disabled,
39
+ disabled: a.disabled,
38
40
  "aria-selected": g,
39
41
  onMouseDown: (I) => I.preventDefault(),
40
- onMouseEnter: M,
42
+ onMouseEnter: F,
41
43
  onPointerUp: () => {
42
- i.disabled || v(i);
44
+ a.disabled || v(a);
43
45
  }
44
46
  }
45
47
  ) }),
46
- u ? /* @__PURE__ */ o("li", { role: "presentation", children: /* @__PURE__ */ o(Ae, { "aria-hidden": "true" }) }) : null
48
+ u ? /* @__PURE__ */ o("li", { role: "presentation", children: /* @__PURE__ */ o(Le, { "aria-hidden": "true" }) }) : null
47
49
  ] });
48
50
  }
49
- const Ye = De(function({
51
+ const dt = Se(function({
50
52
  options: m,
51
53
  menuItemProps: N,
52
54
  value: g,
53
55
  defaultValue: E = "",
54
56
  onChange: v,
55
- placeholder: M,
57
+ placeholder: F,
56
58
  label: u,
57
59
  leadingIcon: I,
58
- size: Y = "medium",
59
- invalid: A = !1,
60
+ size: le = "medium",
61
+ invalid: se = !1,
62
+ message: R,
63
+ messageTone: $,
64
+ required: ne = !1,
60
65
  disabled: b = !1,
61
- id: Z,
62
- name: O,
63
- className: ee = "",
64
- "aria-label": $,
65
- listboxLabel: te = "Options",
66
- portalContainer: le = null,
67
- zIndex: ne
68
- }, x) {
69
- const se = ke(), R = Z ?? se, h = `${R}-listbox`, B = w(null), H = w(null), F = w(null), re = p(
66
+ id: re,
67
+ name: A,
68
+ className: oe = "",
69
+ "aria-label": B,
70
+ "aria-describedby": ie,
71
+ listboxLabel: ae = "Options",
72
+ portalContainer: ce = null,
73
+ zIndex: ue
74
+ }, y) {
75
+ const de = Ve(), x = re ?? de, h = `${x}-listbox`, O = D(null), H = D(null), j = D(null), fe = p(
70
76
  (e) => {
71
- F.current = e, typeof x == "function" ? x(e) : x && (x.current = e);
77
+ j.current = e, typeof y == "function" ? y(e) : y && (y.current = e);
72
78
  },
73
- [x]
74
- ), S = g !== void 0, [oe, ae] = D(E), d = S ? g : oe, [s, j] = D(!1), [ie, C] = D(!1), [a, f] = D(-1), y = w(!1), ce = p(
79
+ [y]
80
+ ), S = g !== void 0, [pe, me] = M(E), d = S ? g : pe, [n, C] = M(!1), [ve, z] = M(!1), [i, f] = M(-1), P = D(!1), be = p(
75
81
  (e) => {
76
- e !== a && (y.current = !0, f(e));
82
+ e !== i && (P.current = !0, f(e));
77
83
  },
78
- [a]
79
- ), V = J(
84
+ [i]
85
+ ), V = Z(
80
86
  () => m.find((e) => e.value === d),
81
87
  [m, d]
82
- ), r = J(
88
+ ), r = Z(
83
89
  () => m.filter((e) => e.value !== ""),
84
90
  [m]
85
- ), z = d !== "", { mounted: U, visible: ue } = Be(s), {
86
- placement: de,
87
- maxHeight: fe,
88
- style: pe,
89
- portalRef: K,
90
- renderPortal: me
91
- } = Oe(H, U, {
92
- preferredHeight: W,
93
- maxHeightCap: W,
94
- portalContainer: le,
95
- zIndex: ne
91
+ ), U = d !== "", { mounted: K, visible: he } = Ge(n), {
92
+ placement: _e,
93
+ maxHeight: ge,
94
+ style: Ie,
95
+ portalRef: L,
96
+ renderPortal: ye
97
+ } = Te(H, K, {
98
+ preferredHeight: te,
99
+ maxHeightCap: te,
100
+ portalContainer: ce,
101
+ zIndex: ue
96
102
  }), _ = p(() => {
97
- j(!1), f(-1);
98
- }, []), P = p(() => {
99
- b || j(!0);
103
+ C(!1), f(-1);
104
+ }, []), w = p(() => {
105
+ b || C(!0);
100
106
  }, [b]);
101
- $e(B, s, _, K), Q(() => {
102
- s && f((e) => {
107
+ qe(O, n, _, L), ee(() => {
108
+ n && f((e) => {
103
109
  if (r.length === 0) return -1;
104
110
  if (e >= 0 && e < r.length) return e;
105
111
  const t = r.findIndex((c) => c.value === d);
106
112
  if (t >= 0) return t;
107
- const n = r.findIndex((c) => !c.disabled);
108
- return n >= 0 ? n : 0;
113
+ const s = r.findIndex((c) => !c.disabled);
114
+ return s >= 0 ? s : 0;
109
115
  });
110
- }, [s, r, d]);
116
+ }, [n, r, d]);
111
117
  const T = p(
112
118
  (e) => {
113
- S || ae(e), v == null || v(e);
119
+ S || me(e), v == null || v(e);
114
120
  },
115
121
  [S, v]
116
- ), L = p(
122
+ ), q = p(
117
123
  (e) => {
118
124
  var t;
119
- e.disabled || (T(e.value), _(), (t = F.current) == null || t.focus());
125
+ e.disabled || (T(e.value), _(), (t = j.current) == null || t.focus());
120
126
  },
121
127
  [T, _]
122
128
  ), G = p(
123
129
  (e) => {
124
- y.current = !1;
125
- const t = r.map((n, c) => ({ o: n, i: c })).filter(({ o: n }) => !n.disabled);
130
+ P.current = !1;
131
+ const t = r.map((s, c) => ({ o: s, i: c })).filter(({ o: s }) => !s.disabled);
126
132
  if (t.length === 0) {
127
133
  f(-1);
128
134
  return;
129
135
  }
130
- f((n) => {
131
- const c = t.findIndex(({ i: Pe }) => Pe === n), ye = c < 0 ? e > 0 ? 0 : t.length - 1 : (c + e + t.length) % t.length;
132
- return t[ye].i;
136
+ f((s) => {
137
+ const c = t.findIndex(({ i: Fe }) => Fe === s), Ee = c < 0 ? e > 0 ? 0 : t.length - 1 : (c + e + t.length) % t.length;
138
+ return t[Ee].i;
133
139
  });
134
140
  },
135
141
  [r]
136
142
  );
137
- Q(() => {
138
- var n;
139
- if (!s || a < 0) return;
140
- if (y.current) {
141
- y.current = !1;
143
+ ee(() => {
144
+ var s;
145
+ if (!n || i < 0) return;
146
+ if (P.current) {
147
+ P.current = !1;
142
148
  return;
143
149
  }
144
- const e = r[a];
150
+ const e = r[i];
145
151
  if (!e) return;
146
152
  const t = document.getElementById(`${h}-option-${e.value}`);
147
- (n = t == null ? void 0 : t.scrollIntoView) == null || n.call(t, { block: "nearest" });
148
- }, [s, a, r, h]);
149
- const ve = (e) => {
153
+ (s = t == null ? void 0 : t.scrollIntoView) == null || s.call(t, { block: "nearest" });
154
+ }, [n, i, r, h]);
155
+ const xe = (e) => {
150
156
  var t;
151
157
  if (!b)
152
158
  switch (e.key) {
153
159
  case "ArrowDown":
154
- e.preventDefault(), s ? G(1) : P();
160
+ e.preventDefault(), n ? G(1) : w();
155
161
  break;
156
162
  case "ArrowUp":
157
- e.preventDefault(), s ? G(-1) : P();
163
+ e.preventDefault(), n ? G(-1) : w();
158
164
  break;
159
165
  case "Home":
160
- if (s && r.length > 0) {
166
+ if (n && r.length > 0) {
161
167
  e.preventDefault();
162
- const n = r.findIndex((c) => !c.disabled);
163
- f(n >= 0 ? n : 0);
168
+ const s = r.findIndex((c) => !c.disabled);
169
+ f(s >= 0 ? s : 0);
164
170
  }
165
171
  break;
166
172
  case "End":
167
- if (s && r.length > 0) {
173
+ if (n && r.length > 0) {
168
174
  e.preventDefault();
169
- for (let n = r.length - 1; n >= 0; n--)
170
- if (!((t = r[n]) != null && t.disabled)) {
171
- f(n);
175
+ for (let s = r.length - 1; s >= 0; s--)
176
+ if (!((t = r[s]) != null && t.disabled)) {
177
+ f(s);
172
178
  break;
173
179
  }
174
180
  }
175
181
  break;
176
182
  case "Enter":
177
183
  case " ":
178
- e.preventDefault(), s && a >= 0 && r[a] ? L(r[a]) : s || P();
184
+ e.preventDefault(), n && i >= 0 && r[i] ? q(r[i]) : n || w();
179
185
  break;
180
186
  case "Escape":
181
- s && (e.preventDefault(), _());
187
+ n && (e.preventDefault(), _());
182
188
  break;
183
189
  case "Tab":
184
190
  _();
185
191
  break;
186
192
  }
187
- }, be = ie || s || z, X = (V == null ? void 0 : V.label) ?? M ?? "", he = !z && X !== "", q = a >= 0 ? r[a] : void 0, _e = s && q != null ? `${h}-option-${q.value}` : void 0, ge = l[`select--size-${Fe(Y)}`], Ie = [
193
+ }, Pe = ve || n || U, X = (V == null ? void 0 : V.label) ?? F ?? "", we = !U && X !== "", J = i >= 0 ? r[i] : void 0, De = n && J != null ? `${h}-option-${J.value}` : void 0, Q = je(se, R, $), W = He(R), Y = W ? `${x}-message` : void 0, Me = l[`select--size-${Je(le)}`], ke = [
188
194
  l.select,
189
- ge,
190
- A ? l["select--invalid"] : "",
191
- u != null && be ? l["select--label-floated"] : "",
195
+ Me,
196
+ Q ? l["select--invalid"] : "",
197
+ u != null && Pe ? l["select--label-floated"] : "",
192
198
  I != null ? l["select--has-leading-icon"] : "",
193
- s ? l["select--open"] : "",
199
+ n ? l["select--open"] : "",
194
200
  b ? l["select--disabled"] : "",
195
- ee
196
- ].filter(Boolean).join(" "), xe = [
201
+ oe
202
+ ].filter(Boolean).join(" "), Ne = [
197
203
  l.select__control,
198
- he ? l["select__control--placeholder"] : ""
204
+ we ? l["select__control--placeholder"] : ""
199
205
  ].filter(Boolean).join(" ");
200
- return /* @__PURE__ */ k("div", { className: Ie, ref: B, children: [
206
+ return /* @__PURE__ */ k("div", { className: ke, ref: O, children: [
201
207
  /* @__PURE__ */ k("div", { className: l.select__wrapper, ref: H, children: [
202
- u != null && /* @__PURE__ */ o("label", { className: l.select__label, htmlFor: R, children: u }),
208
+ u != null && /* @__PURE__ */ o("label", { className: l.select__label, htmlFor: x, children: u }),
203
209
  /* @__PURE__ */ k(
204
210
  "button",
205
211
  {
206
- ref: re,
207
- id: R,
212
+ ref: fe,
213
+ id: x,
208
214
  type: "button",
209
215
  role: "combobox",
210
- className: xe,
216
+ className: Ne,
211
217
  disabled: b,
212
218
  "aria-haspopup": "listbox",
213
- "aria-expanded": s,
219
+ "aria-expanded": n,
214
220
  "aria-controls": h,
215
- "aria-activedescendant": _e,
216
- "aria-invalid": A ? !0 : void 0,
217
- "aria-label": $,
218
- onClick: () => s ? _() : P(),
219
- onFocus: () => C(!0),
220
- onBlur: () => C(!1),
221
- onKeyDown: ve,
221
+ "aria-activedescendant": De,
222
+ "aria-invalid": Q ? !0 : void 0,
223
+ "aria-required": ne ? !0 : void 0,
224
+ "aria-describedby": Oe(
225
+ ie,
226
+ Y,
227
+ void 0
228
+ ),
229
+ "aria-label": B,
230
+ onClick: () => n ? _() : w(),
231
+ onFocus: () => z(!0),
232
+ onBlur: () => z(!1),
233
+ onKeyDown: xe,
222
234
  children: [
223
- I != null && /* @__PURE__ */ o("span", { className: l["select__leading-icon"], "aria-hidden": !0, children: /* @__PURE__ */ o(Me.Provider, { value: { size: "16" }, children: I }) }),
235
+ I != null && /* @__PURE__ */ o("span", { className: l["select__leading-icon"], "aria-hidden": !0, children: /* @__PURE__ */ o(Be.Provider, { value: { size: "16" }, children: I }) }),
224
236
  /* @__PURE__ */ o("span", { className: l.select__value, children: X }),
225
- /* @__PURE__ */ o("span", { className: l["select__trailing-icon"], "aria-hidden": !0, children: /* @__PURE__ */ o(Ee, { size: "12", glyph: /* @__PURE__ */ o(Ne, {}) }) })
237
+ /* @__PURE__ */ o("span", { className: l["select__trailing-icon"], "aria-hidden": !0, children: /* @__PURE__ */ o(Ae, { size: "12", glyph: /* @__PURE__ */ o($e, {}) }) })
226
238
  ]
227
239
  }
228
240
  )
229
241
  ] }),
230
- O != null && !b && /* @__PURE__ */ o("input", { type: "hidden", name: O, value: d }),
231
- U && me(
242
+ W && /* @__PURE__ */ o(
243
+ Ce,
244
+ {
245
+ id: Y,
246
+ className: l.select__message,
247
+ message: R,
248
+ tone: $ ?? "error"
249
+ }
250
+ ),
251
+ A != null && !b && /* @__PURE__ */ o("input", { type: "hidden", name: A, value: d }),
252
+ K && ye(
232
253
  /* @__PURE__ */ o(
233
254
  "div",
234
255
  {
235
- ref: K,
256
+ ref: L,
236
257
  className: [
237
258
  l.select__popup,
238
- de === "above" ? l["select__popup--above"] : "",
239
- ue ? l["select__popup--visible"] : ""
259
+ _e === "above" ? l["select__popup--above"] : "",
260
+ he ? l["select__popup--visible"] : ""
240
261
  ].filter(Boolean).join(" "),
241
- style: pe,
242
- children: /* @__PURE__ */ o(Se, { className: l.select__menu, children: /* @__PURE__ */ o(Ve, { maxHeight: fe, children: /* @__PURE__ */ o(
262
+ style: Ie,
263
+ children: /* @__PURE__ */ o(Ue, { className: l.select__menu, children: /* @__PURE__ */ o(Ke, { maxHeight: ge, children: /* @__PURE__ */ o(
243
264
  "ul",
244
265
  {
245
266
  id: h,
246
267
  className: l.select__list,
247
268
  role: "listbox",
248
- "aria-label": typeof u == "string" ? u : $ ?? te,
269
+ "aria-label": typeof u == "string" ? u : B ?? ae,
249
270
  children: r.map((e, t) => /* @__PURE__ */ o(
250
- je,
271
+ Qe,
251
272
  {
252
273
  option: e,
253
274
  menuItemProps: N,
254
275
  listboxId: h,
255
276
  selected: e.value === d,
256
- active: t === a,
257
- onSelect: L,
258
- onHover: () => ce(t),
277
+ active: t === i,
278
+ onSelect: q,
279
+ onHover: () => be(t),
259
280
  dividerAfter: e.dividerAfter
260
281
  },
261
282
  e.value
@@ -268,6 +289,6 @@ const Ye = De(function({
268
289
  ] });
269
290
  });
270
291
  export {
271
- Ye as default
292
+ dt as default
272
293
  };
273
294
  //# sourceMappingURL=Select.js.map