@mattermost/compass-ui 0.1.0-alpha.4 → 0.1.0-alpha.5

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 (226) hide show
  1. package/dist/compass-ui-standalone.css +10 -0
  2. package/dist/compass-ui.css +2 -0
  3. package/dist/components/action-button/ActionButton.cjs +1 -1
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js +22 -12
  8. package/dist/components/action-button/ActionButton.js.map +1 -1
  9. package/dist/components/action-button/ActionButton.module.css +1 -1
  10. package/dist/components/action-button/ActionButton.module.scss.cjs +1 -1
  11. package/dist/components/action-button/ActionButton.module.scss.js +5 -5
  12. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  13. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  14. package/dist/components/attachment-card/AttachmentCard.d.ts +3 -1
  15. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  16. package/dist/components/attachment-card/AttachmentCard.js +92 -82
  17. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  18. package/dist/components/attachment-card/AttachmentCard.module.css +1 -1
  19. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
  20. package/dist/components/attachment-card/AttachmentCard.module.scss.js +19 -18
  21. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
  22. package/dist/components/button/Button.module.css +1 -1
  23. package/dist/components/button/Button.module.scss.cjs +1 -1
  24. package/dist/components/button/Button.module.scss.js +15 -15
  25. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  26. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  27. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +4 -1
  28. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  29. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +112 -92
  30. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  31. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -1
  32. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
  33. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +22 -20
  34. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
  35. package/dist/components/checkbox/Checkbox.cjs +1 -1
  36. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  37. package/dist/components/checkbox/Checkbox.d.ts +3 -3
  38. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  39. package/dist/components/checkbox/Checkbox.js +21 -20
  40. package/dist/components/checkbox/Checkbox.js.map +1 -1
  41. package/dist/components/checkbox/Checkbox.module.css +1 -1
  42. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  43. package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
  44. package/dist/components/chip/Chip.cjs +1 -1
  45. package/dist/components/chip/Chip.cjs.map +1 -1
  46. package/dist/components/chip/Chip.d.ts +3 -5
  47. package/dist/components/chip/Chip.d.ts.map +1 -1
  48. package/dist/components/chip/Chip.js +90 -48
  49. package/dist/components/chip/Chip.js.map +1 -1
  50. package/dist/components/chip/Chip.module.css +1 -1
  51. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  52. package/dist/components/chip/Chip.module.scss.js +9 -9
  53. package/dist/components/chip/ChipGroup.cjs +2 -0
  54. package/dist/components/chip/ChipGroup.cjs.map +1 -0
  55. package/dist/components/chip/ChipGroup.d.ts +16 -0
  56. package/dist/components/chip/ChipGroup.d.ts.map +1 -0
  57. package/dist/components/chip/ChipGroup.js +112 -0
  58. package/dist/components/chip/ChipGroup.js.map +1 -0
  59. package/dist/components/chip/ChipGroup.module.css +1 -0
  60. package/dist/components/chip/ChipGroup.module.scss.cjs +2 -0
  61. package/dist/components/chip/ChipGroup.module.scss.cjs.map +1 -0
  62. package/dist/components/chip/ChipGroup.module.scss.js +7 -0
  63. package/dist/components/chip/ChipGroup.module.scss.js.map +1 -0
  64. package/dist/components/chip/index.cjs +1 -1
  65. package/dist/components/chip/index.d.ts +2 -0
  66. package/dist/components/chip/index.d.ts.map +1 -1
  67. package/dist/components/chip/index.js +4 -2
  68. package/dist/components/chip/index.js.map +1 -1
  69. package/dist/components/combobox/Combobox.cjs +1 -1
  70. package/dist/components/combobox/Combobox.cjs.map +1 -1
  71. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  72. package/dist/components/combobox/Combobox.js +115 -109
  73. package/dist/components/combobox/Combobox.js.map +1 -1
  74. package/dist/components/combobox/Combobox.module.css +1 -1
  75. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  76. package/dist/components/combobox/Combobox.module.scss.js +27 -29
  77. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  78. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.js +154 -154
  80. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  81. package/dist/components/date-range-picker/DateRangePicker.module.css +1 -1
  82. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  83. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +28 -45
  84. package/dist/components/dropdown/Dropdown.cjs +1 -1
  85. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  86. package/dist/components/dropdown/Dropdown.js +1 -1
  87. package/dist/components/dropdown/Dropdown.js.map +1 -1
  88. package/dist/components/dropdown/Dropdown.module.css +1 -1
  89. package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
  90. package/dist/components/dropdown/Dropdown.module.scss.js +15 -16
  91. package/dist/components/global-banner/GlobalBanner.module.css +1 -1
  92. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
  93. package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
  94. package/dist/components/icon-button/IconButton.cjs +1 -1
  95. package/dist/components/icon-button/IconButton.cjs.map +1 -1
  96. package/dist/components/icon-button/IconButton.d.ts +1 -1
  97. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  98. package/dist/components/icon-button/IconButton.js +14 -14
  99. package/dist/components/icon-button/IconButton.js.map +1 -1
  100. package/dist/components/icon-button/IconButton.module.css +1 -1
  101. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  102. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  103. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  104. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  105. package/dist/components/image-preview/ImagePreview.d.ts +2 -1
  106. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  107. package/dist/components/image-preview/ImagePreview.js +70 -52
  108. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  109. package/dist/components/image-preview/ImagePreview.module.css +1 -1
  110. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  111. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  112. package/dist/components/menu-item/MenuItem.cjs +1 -1
  113. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  114. package/dist/components/menu-item/MenuItem.js +11 -11
  115. package/dist/components/menu-item/MenuItem.js.map +1 -1
  116. package/dist/components/menu-item/MenuItem.module.css +1 -1
  117. package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
  118. package/dist/components/menu-item/MenuItem.module.scss.js +16 -16
  119. package/dist/components/message/Message.module.css +1 -1
  120. package/dist/components/message/Message.module.scss.cjs +1 -1
  121. package/dist/components/message/Message.module.scss.js +20 -20
  122. package/dist/components/message-reactions/MessageReactions.module.css +1 -1
  123. package/dist/components/message-reactions/MessageReactions.module.scss.cjs +1 -1
  124. package/dist/components/message-reactions/MessageReactions.module.scss.js +12 -12
  125. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -1
  126. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  127. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +5 -5
  128. package/dist/components/pagination-dots/PaginationDots.module.css +1 -1
  129. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  130. package/dist/components/pagination-dots/PaginationDots.module.scss.js +8 -8
  131. package/dist/components/radio/Radio.cjs +1 -1
  132. package/dist/components/radio/Radio.cjs.map +1 -1
  133. package/dist/components/radio/Radio.d.ts +3 -3
  134. package/dist/components/radio/Radio.d.ts.map +1 -1
  135. package/dist/components/radio/Radio.js +11 -11
  136. package/dist/components/radio/Radio.js.map +1 -1
  137. package/dist/components/radio/Radio.module.css +1 -1
  138. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  139. package/dist/components/radio/Radio.module.scss.js +11 -11
  140. package/dist/components/search-input/SearchInput.cjs +1 -1
  141. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  142. package/dist/components/search-input/SearchInput.d.ts +2 -0
  143. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  144. package/dist/components/search-input/SearchInput.js +78 -64
  145. package/dist/components/search-input/SearchInput.js.map +1 -1
  146. package/dist/components/search-input/SearchInput.module.css +1 -1
  147. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  148. package/dist/components/search-input/SearchInput.module.scss.js +16 -23
  149. package/dist/components/search-input/SearchInput.module.scss.js.map +1 -1
  150. package/dist/components/select/Select.cjs +1 -1
  151. package/dist/components/select/Select.cjs.map +1 -1
  152. package/dist/components/select/Select.d.ts.map +1 -1
  153. package/dist/components/select/Select.js +64 -64
  154. package/dist/components/select/Select.js.map +1 -1
  155. package/dist/components/select/Select.module.css +1 -1
  156. package/dist/components/select/Select.module.scss.cjs +1 -1
  157. package/dist/components/select/Select.module.scss.js +24 -26
  158. package/dist/components/switch/Switch.cjs +1 -1
  159. package/dist/components/switch/Switch.cjs.map +1 -1
  160. package/dist/components/switch/Switch.d.ts.map +1 -1
  161. package/dist/components/switch/Switch.js +2 -2
  162. package/dist/components/switch/Switch.js.map +1 -1
  163. package/dist/components/switch/Switch.module.css +1 -1
  164. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  165. package/dist/components/switch/Switch.module.scss.js +15 -15
  166. package/dist/components/tabs/Tabs.cjs +1 -1
  167. package/dist/components/tabs/Tabs.cjs.map +1 -1
  168. package/dist/components/tabs/Tabs.d.ts +4 -0
  169. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  170. package/dist/components/tabs/Tabs.js +47 -31
  171. package/dist/components/tabs/Tabs.js.map +1 -1
  172. package/dist/components/tabs/Tabs.module.css +1 -1
  173. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  174. package/dist/components/tabs/Tabs.module.scss.js +8 -7
  175. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  176. package/dist/components/tag/Tag.module.css +1 -1
  177. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  178. package/dist/components/tag/Tag.module.scss.js +15 -15
  179. package/dist/components/text-area/TextArea.cjs +1 -1
  180. package/dist/components/text-area/TextArea.cjs.map +1 -1
  181. package/dist/components/text-area/TextArea.d.ts.map +1 -1
  182. package/dist/components/text-area/TextArea.js +57 -56
  183. package/dist/components/text-area/TextArea.js.map +1 -1
  184. package/dist/components/text-area/TextArea.module.css +1 -1
  185. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  186. package/dist/components/text-area/TextArea.module.scss.js +12 -17
  187. package/dist/components/text-input/TextInput.cjs +1 -1
  188. package/dist/components/text-input/TextInput.cjs.map +1 -1
  189. package/dist/components/text-input/TextInput.d.ts.map +1 -1
  190. package/dist/components/text-input/TextInput.js +59 -58
  191. package/dist/components/text-input/TextInput.js.map +1 -1
  192. package/dist/components/text-input/TextInput.module.css +1 -1
  193. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  194. package/dist/components/text-input/TextInput.module.scss.js +16 -24
  195. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  196. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  197. package/dist/components/thread-footer/ThreadFooter.d.ts +7 -8
  198. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  199. package/dist/components/thread-footer/ThreadFooter.js +59 -62
  200. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  201. package/dist/components/thread-footer/ThreadFooter.module.css +1 -1
  202. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  203. package/dist/components/thread-footer/ThreadFooter.module.scss.js +17 -17
  204. package/dist/components/thread-footer/index.d.ts +7 -1
  205. package/dist/components/thread-footer/index.d.ts.map +1 -1
  206. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  207. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  208. package/dist/components/thread-list-item/ThreadListItem.d.ts +1 -1
  209. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  210. package/dist/components/thread-list-item/ThreadListItem.js +102 -87
  211. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  212. package/dist/components/thread-list-item/ThreadListItem.module.css +1 -1
  213. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  214. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -23
  215. package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -1
  216. package/dist/components/toast/Toast.module.css +1 -1
  217. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  218. package/dist/components/toast/Toast.module.scss.js +6 -6
  219. package/dist/components/tour-point/TourPoint.module.css +1 -1
  220. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  221. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  222. package/dist/index.cjs +1 -1
  223. package/dist/index.css +31 -29
  224. package/dist/index.js +156 -154
  225. package/dist/index.js.map +1 -1
  226. package/package.json +1 -1
@@ -1,35 +1,36 @@
1
- import { jsxs as P, jsx as i } from "react/jsx-runtime";
2
- import { forwardRef as Te, useId as Ue, useRef as K, useCallback as m, useState as I, useMemo as Q, useEffect as ie } from "react";
3
- import __je from "@mattermost/compass-icons/components/chevron-down.js";const je=__je&&__je.default?__je.default:__je;
4
- import ze from "../chip/Chip.js";
5
- import Ke from "../icon/Icon.js";
1
+ import { jsxs as B, jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as Ue, useId as je, useRef as K, useCallback as m, useState as A, useMemo as G, useEffect as ie } from "react";
3
+ import __ze from "@mattermost/compass-icons/components/chevron-down.js";const ze=__ze&&__ze.default?__ze.default:__ze;
4
+ import Le from "../chip/Chip.js";
5
+ import Ke from "../chip/ChipGroup.js";
6
+ import Ge from "../icon/Icon.js";
6
7
  import Qe from "../menu-item/MenuItem.js";
7
8
  import Xe, { PopoverMenuScroll as qe } from "../popover-menu/PopoverMenu.js";
8
- import Ge from "../user-avatar/UserAvatar.js";
9
- import { useAnchoredPopupPortal as We } from "../../hooks/use-anchored-popup-portal.js";
10
- import { useOutsideClose as Ye } from "../../hooks/use-outside-close.js";
11
- import { usePopoverTransition as Ze } from "../../hooks/use-popover-transition.js";
12
- import { toKebab as Je } from "../../utils/string.js";
9
+ import We from "../user-avatar/UserAvatar.js";
10
+ import { useAnchoredPopupPortal as Ye } from "../../hooks/use-anchored-popup-portal.js";
11
+ import { useOutsideClose as Ze } from "../../hooks/use-outside-close.js";
12
+ import { usePopoverTransition as Je } from "../../hooks/use-popover-transition.js";
13
+ import { toKebab as er } from "../../utils/string.js";
13
14
  import o from "./Combobox.module.scss.js";
14
- const ue = 280, er = {
15
+ const ue = 280, rr = {
15
16
  small: "small",
16
17
  medium: "medium",
17
18
  large: "large"
18
19
  };
19
- function rr(l, u) {
20
+ function nr(l, u) {
20
21
  return u ? l.label.toLowerCase().includes(u.toLowerCase()) : !0;
21
22
  }
22
- function nr(l) {
23
+ function tr(l) {
23
24
  return l == null ? null : Array.isArray(l) ? l[0] ?? null : l === "" ? null : l;
24
25
  }
25
- function tr(l) {
26
+ function or(l) {
26
27
  return l == null ? [] : Array.isArray(l) ? l : l === "" ? [] : [l];
27
28
  }
28
- function or(l) {
29
+ function lr(l) {
29
30
  if (l.leadingVisual != null) return l.leadingVisual;
30
31
  if (l.leadingAvatar != null)
31
32
  return /* @__PURE__ */ i(
32
- Ge,
33
+ We,
33
34
  {
34
35
  src: l.leadingAvatar.src,
35
36
  alt: l.leadingAvatar.alt,
@@ -37,40 +38,40 @@ function or(l) {
37
38
  }
38
39
  );
39
40
  }
40
- const pr = Te(function({
41
+ const _r = Ue(function({
41
42
  options: u,
42
43
  multiple: t = !1,
43
- value: X,
44
- defaultValue: q,
44
+ value: Q,
45
+ defaultValue: X,
45
46
  onChange: N,
46
- inputValue: B,
47
+ inputValue: $,
47
48
  defaultInputValue: de = "",
48
49
  onInputChange: v,
49
- label: A,
50
+ label: g,
50
51
  placeholder: fe,
51
- leadingIcon: R,
52
- size: G = "medium",
52
+ leadingIcon: F,
53
+ size: q = "medium",
53
54
  invalid: W = !1,
54
- disabled: p = !1,
55
+ disabled: h = !1,
55
56
  filter: V = !0,
56
57
  emptyMessage: be = "No results",
57
58
  className: me = "",
58
59
  id: ve,
59
60
  "aria-label": Y,
60
- portalContainer: xe = null,
61
- zIndex: he
61
+ portalContainer: he = null,
62
+ zIndex: pe
62
63
  }, D) {
63
- const pe = Ue(), $ = ve ?? pe, g = `${$}-listbox`, F = K(null), Z = K(null), _ = K(null), ge = m(
64
+ const xe = je(), R = ve ?? xe, _ = `${R}-listbox`, S = K(null), Z = K(null), I = K(null), ge = m(
64
65
  (e) => {
65
- _.current = e, typeof D == "function" ? D(e) : D && (D.current = e);
66
+ I.current = e, typeof D == "function" ? D(e) : D && (D.current = e);
66
67
  },
67
68
  [D]
68
- ), H = X !== void 0, [_e, ye] = I(() => q !== void 0 ? q : t ? [] : null), J = H ? X : _e, d = t ? null : nr(J), c = t ? tr(J) : [], f = B !== void 0, [S, C] = I(de), [a, ee] = I(!1), [Ie, re] = I(!1), [b, x] = I(-1), [O, L] = I(null), M = Q(
69
+ ), H = Q !== void 0, [_e, ye] = A(() => X !== void 0 ? X : t ? [] : null), J = H ? Q : _e, d = t ? null : tr(J), c = t ? or(J) : [], f = $ !== void 0, [C, T] = A(de), [a, ee] = A(!1), [Ae, re] = A(!1), [b, p] = A(-1), [O, U] = A(null), M = G(
69
70
  () => d == null ? void 0 : u.find((e) => e.value === d),
70
71
  [u, d]
71
- ), T = f ? B : t ? S : O !== null ? O : (M == null ? void 0 : M.label) ?? S, ne = f ? B : t ? S : O !== null ? O : "", U = m(
72
+ ), j = f ? $ : t ? C : O !== null ? O : (M == null ? void 0 : M.label) ?? C, ne = f ? $ : t ? C : O !== null ? O : "", z = m(
72
73
  (e) => {
73
- f || (C(e), t || L(e)), v == null || v(e);
74
+ f || (T(e), t || U(e)), v == null || v(e);
74
75
  },
75
76
  [f, t, v]
76
77
  ), w = m(
@@ -78,28 +79,28 @@ const pr = Te(function({
78
79
  H || ye(e), N == null || N(e);
79
80
  },
80
81
  [H, N]
81
- ), s = Q(() => {
82
+ ), s = G(() => {
82
83
  if (V === !1) return u;
83
- const e = typeof V == "function" ? V : rr;
84
+ const e = typeof V == "function" ? V : nr;
84
85
  return u.filter((r) => e(r, ne));
85
- }, [u, V, ne]), { mounted: te, visible: Ae } = Ze(a), {
86
- placement: De,
86
+ }, [u, V, ne]), { mounted: te, visible: De } = Je(a), {
87
+ placement: Ie,
87
88
  maxHeight: we,
88
89
  style: ke,
89
90
  portalRef: oe,
90
91
  renderPortal: Ne
91
- } = We(Z, te, {
92
+ } = Ye(Z, te, {
92
93
  preferredHeight: ue,
93
94
  maxHeightCap: ue,
94
- portalContainer: xe,
95
- zIndex: he
95
+ portalContainer: he,
96
+ zIndex: pe
96
97
  }), y = m(() => {
97
- ee(!1), x(-1), !t && !f && (L(null), C(""));
98
+ ee(!1), p(-1), !t && !f && (U(null), T(""));
98
99
  }, [t, f]), k = m(() => {
99
- p || ee(!0);
100
- }, [p]);
101
- Ye(F, a, y, oe), ie(() => {
102
- a && x((e) => {
100
+ h || ee(!0);
101
+ }, [h]);
102
+ Ze(S, a, y, oe), ie(() => {
103
+ a && p((e) => {
103
104
  if (s.length === 0) return -1;
104
105
  if (e >= 0 && e < s.length) return e;
105
106
  const r = t ? s.findIndex((n) => c.includes(n.value)) : s.findIndex((n) => n.value === d);
@@ -114,38 +115,37 @@ const pr = Te(function({
114
115
  var r;
115
116
  if (!e.disabled) {
116
117
  if (t) {
117
- const n = c.includes(e.value) ? c.filter((h) => h !== e.value) : [...c, e.value];
118
- w(n), U(""), y(), (r = _.current) == null || r.focus();
118
+ const n = c.includes(e.value) ? c.filter((x) => x !== e.value) : [...c, e.value];
119
+ w(n), z(""), y(), (r = I.current) == null || r.focus();
119
120
  return;
120
121
  }
121
- w(e.value), f ? v == null || v(e.label) : (C(""), L(null)), y();
122
+ w(e.value), f ? v == null || v(e.label) : (T(""), U(null)), y();
122
123
  }
123
124
  },
124
125
  [
125
126
  t,
126
127
  c,
127
128
  w,
128
- U,
129
+ z,
129
130
  f,
130
131
  v,
131
132
  y
132
133
  ]
133
134
  ), se = m(
134
135
  (e) => {
135
- var r;
136
- t && (w(c.filter((n) => n !== e)), (r = _.current) == null || r.focus());
136
+ t && w(c.filter((r) => r !== e));
137
137
  },
138
138
  [t, c, w]
139
139
  ), ae = m(
140
140
  (e) => {
141
- const r = s.map((n, h) => ({ o: n, i: h })).filter(({ o: n }) => !n.disabled);
141
+ const r = s.map((n, x) => ({ o: n, i: x })).filter(({ o: n }) => !n.disabled);
142
142
  if (r.length === 0) {
143
- x(-1);
143
+ p(-1);
144
144
  return;
145
145
  }
146
- x((n) => {
147
- const h = r.findIndex(({ i: z }) => z === n), E = h < 0 ? e > 0 ? 0 : r.length - 1 : (h + e + r.length) % r.length;
148
- return r[E].i;
146
+ p((n) => {
147
+ const x = r.findIndex(({ i: L }) => L === n), P = x < 0 ? e > 0 ? 0 : r.length - 1 : (x + e + r.length) % r.length;
148
+ return r[P].i;
149
149
  });
150
150
  },
151
151
  [s]
@@ -155,25 +155,25 @@ const pr = Te(function({
155
155
  const e = s[b];
156
156
  if (!e) return;
157
157
  const r = document.getElementById(
158
- `${g}-option-${e.value}`
158
+ `${_}-option-${e.value}`
159
159
  );
160
160
  r == null || r.scrollIntoView({ block: "nearest" });
161
- }, [a, b, s, g]);
161
+ }, [a, b, s, _]);
162
162
  const Oe = (e) => {
163
163
  const r = e.target.value;
164
- U(r), a || k(), x(0);
164
+ z(r), a || k(), p(0);
165
165
  }, Me = () => {
166
166
  re(!0), k(), !t && !f && M && requestAnimationFrame(() => {
167
167
  var e;
168
- (e = _.current) == null || e.select();
168
+ (e = I.current) == null || e.select();
169
169
  });
170
170
  }, Ee = (e) => {
171
171
  var n;
172
172
  const r = e.relatedTarget;
173
- r && ((n = F.current) != null && n.contains(r)) || re(!1);
173
+ r && ((n = S.current) != null && n.contains(r)) || re(!1);
174
174
  }, Pe = (e) => {
175
175
  var r;
176
- if (!p)
176
+ if (!h)
177
177
  switch (e.key) {
178
178
  case "ArrowDown":
179
179
  e.preventDefault(), a ? ae(1) : k();
@@ -182,7 +182,7 @@ const pr = Te(function({
182
182
  e.preventDefault(), a ? ae(-1) : k();
183
183
  break;
184
184
  case "Home":
185
- a && s.length > 0 && (e.preventDefault(), x(
185
+ a && s.length > 0 && (e.preventDefault(), p(
186
186
  s.findIndex((n) => !n.disabled) >= 0 ? s.findIndex((n) => !n.disabled) : 0
187
187
  ));
188
188
  break;
@@ -191,7 +191,7 @@ const pr = Te(function({
191
191
  e.preventDefault();
192
192
  for (let n = s.length - 1; n >= 0; n--)
193
193
  if (!((r = s[n]) != null && r.disabled)) {
194
- x(n);
194
+ p(n);
195
195
  break;
196
196
  }
197
197
  }
@@ -203,7 +203,7 @@ const pr = Te(function({
203
203
  a && (e.preventDefault(), y());
204
204
  break;
205
205
  case "Backspace":
206
- t && T === "" && c.length > 0 && (e.preventDefault(), se(c[c.length - 1]));
206
+ t && j === "" && c.length > 0 && (e.preventDefault(), se(c[c.length - 1]));
207
207
  break;
208
208
  case "Tab":
209
209
  y();
@@ -211,70 +211,76 @@ const pr = Te(function({
211
211
  }
212
212
  }, Be = (e) => {
213
213
  var r;
214
- p || e.target.closest("button") || (e.target !== _.current && (e.preventDefault(), (r = _.current) == null || r.focus()), a || k());
215
- }, Re = t ? c.length > 0 : d != null && d !== "", $e = T.length > 0, Fe = Ie || a || Re || $e, ce = b >= 0 ? s[b] : void 0, He = ce != null ? `${g}-option-${ce.value}` : void 0, j = Q(
214
+ h || e.target.closest("[data-chip]") || (e.target !== I.current && (e.preventDefault(), (r = I.current) == null || r.focus()), a || k());
215
+ }, $e = t ? c.length > 0 : d != null && d !== "", Fe = j.length > 0, Re = Ae || a || $e || Fe, ce = b >= 0 ? s[b] : void 0, Se = ce != null ? `${_}-option-${ce.value}` : void 0, E = G(
216
216
  () => u.filter((e) => c.includes(e.value)),
217
217
  [u, c]
218
- ), Se = o[`combobox--size-${Je(G)}`], Ce = t && j.length > 0, Le = [
218
+ ), He = o[`combobox--size-${er(q)}`], Ce = t && E.length > 0, Te = [
219
219
  o.combobox,
220
- Se,
220
+ He,
221
221
  W ? o["combobox--invalid"] : "",
222
- A != null && Fe ? o["combobox--label-floated"] : "",
223
- R != null ? o["combobox--has-leading-icon"] : "",
222
+ g != null && Re ? o["combobox--label-floated"] : "",
223
+ F != null ? o["combobox--has-leading-icon"] : "",
224
224
  Ce ? o["combobox--has-chips"] : "",
225
225
  a ? o["combobox--open"] : "",
226
- p ? o["combobox--disabled"] : "",
226
+ h ? o["combobox--disabled"] : "",
227
227
  me
228
228
  ].filter(Boolean).join(" ");
229
- return /* @__PURE__ */ P("div", { className: Le, ref: F, children: [
230
- /* @__PURE__ */ P(
229
+ return /* @__PURE__ */ B("div", { className: Te, ref: S, children: [
230
+ /* @__PURE__ */ B(
231
231
  "div",
232
232
  {
233
233
  className: o.combobox__wrapper,
234
234
  ref: Z,
235
235
  children: [
236
- A != null && /* @__PURE__ */ i("label", { className: o.combobox__label, htmlFor: $, children: A }),
237
- /* @__PURE__ */ P(
236
+ g != null && /* @__PURE__ */ i("label", { className: o.combobox__label, htmlFor: R, children: g }),
237
+ /* @__PURE__ */ B(
238
238
  "div",
239
239
  {
240
240
  className: o.combobox__inner,
241
241
  onMouseDown: Be,
242
242
  children: [
243
- R != null && /* @__PURE__ */ i("span", { className: o.combobox__leadingIcon, "aria-hidden": !0, children: R }),
244
- /* @__PURE__ */ P("div", { className: o.combobox__value, children: [
245
- t && j.map((e) => /* @__PURE__ */ i(
246
- ze,
243
+ F != null && /* @__PURE__ */ i("span", { className: o["combobox__leading-icon"], "aria-hidden": !0, children: F }),
244
+ /* @__PURE__ */ B("div", { className: o.combobox__value, children: [
245
+ t && E.length > 0 && /* @__PURE__ */ i(
246
+ Ke,
247
247
  {
248
- size: er[G],
249
- leadingAvatar: e.leadingAvatar,
250
- leadingIcon: e.leadingAvatar == null ? e.leadingVisual : void 0,
251
- onRemove: p ? void 0 : (r) => {
252
- r.stopPropagation(), se(e.value);
253
- },
254
- removeLabel: `Remove ${e.label}`,
255
- children: e.label
256
- },
257
- e.value
258
- )),
248
+ "aria-label": typeof g == "string" ? `${g} selections` : "Selected",
249
+ disabled: h,
250
+ children: E.map((e) => /* @__PURE__ */ i(
251
+ Le,
252
+ {
253
+ size: rr[q],
254
+ leadingAvatar: e.leadingAvatar,
255
+ leadingIcon: e.leadingAvatar == null ? e.leadingVisual : void 0,
256
+ onRemove: h ? void 0 : (r) => {
257
+ r.stopPropagation(), se(e.value);
258
+ },
259
+ children: e.label
260
+ },
261
+ e.value
262
+ ))
263
+ }
264
+ ),
259
265
  /* @__PURE__ */ i(
260
266
  "input",
261
267
  {
262
268
  ref: ge,
263
- id: $,
269
+ id: R,
264
270
  className: o.combobox__control,
265
271
  type: "text",
266
272
  role: "combobox",
267
273
  autoComplete: "off",
268
274
  spellCheck: !1,
269
- disabled: p,
270
- placeholder: t && j.length > 0 ? void 0 : fe,
271
- value: T,
275
+ disabled: h,
276
+ placeholder: t && E.length > 0 ? void 0 : fe,
277
+ value: j,
272
278
  "aria-label": Y,
273
279
  "aria-invalid": W ? !0 : void 0,
274
280
  "aria-expanded": a,
275
- "aria-controls": g,
281
+ "aria-controls": _,
276
282
  "aria-autocomplete": "list",
277
- "aria-activedescendant": He,
283
+ "aria-activedescendant": Se,
278
284
  onChange: Oe,
279
285
  onFocus: Me,
280
286
  onBlur: Ee,
@@ -282,7 +288,7 @@ const pr = Te(function({
282
288
  }
283
289
  )
284
290
  ] }),
285
- /* @__PURE__ */ i("span", { className: o.combobox__trailingIcon, "aria-hidden": !0, children: /* @__PURE__ */ i(Ke, { size: "12", glyph: /* @__PURE__ */ i(je, {}) }) })
291
+ /* @__PURE__ */ i("span", { className: o["combobox__trailing-icon"], "aria-hidden": !0, children: /* @__PURE__ */ i(Ge, { size: "12", glyph: /* @__PURE__ */ i(ze, {}) }) })
286
292
  ]
287
293
  }
288
294
  )
@@ -296,20 +302,20 @@ const pr = Te(function({
296
302
  ref: oe,
297
303
  className: [
298
304
  o.combobox__popup,
299
- De === "above" ? o["combobox__popup--above"] : "",
300
- Ae ? o["combobox__popup--visible"] : ""
305
+ Ie === "above" ? o["combobox__popup--above"] : "",
306
+ De ? o["combobox__popup--visible"] : ""
301
307
  ].filter(Boolean).join(" "),
302
308
  style: ke,
303
309
  children: /* @__PURE__ */ i(Xe, { className: o.combobox__menu, children: /* @__PURE__ */ i(qe, { maxHeight: we, children: s.length === 0 ? /* @__PURE__ */ i("p", { className: o.combobox__empty, children: be }) : /* @__PURE__ */ i(
304
310
  "ul",
305
311
  {
306
- id: g,
312
+ id: _,
307
313
  className: o.combobox__list,
308
314
  role: "listbox",
309
315
  "aria-multiselectable": t || void 0,
310
- "aria-label": typeof A == "string" ? A : Y ?? "Options",
316
+ "aria-label": typeof g == "string" ? g : Y ?? "Options",
311
317
  children: s.map((e, r) => {
312
- const n = Ve(e.value), h = r === b, E = or(e);
318
+ const n = Ve(e.value), x = r === b, P = lr(e);
313
319
  return /* @__PURE__ */ i(
314
320
  "li",
315
321
  {
@@ -318,20 +324,20 @@ const pr = Te(function({
318
324
  children: /* @__PURE__ */ i(
319
325
  Qe,
320
326
  {
321
- id: `${g}-option-${e.value}`,
327
+ id: `${_}-option-${e.value}`,
322
328
  role: "option",
323
329
  label: e.label,
324
330
  secondaryLabel: e.secondaryLabel,
325
- leadingElement: E != null,
326
- leadingVisual: E,
331
+ leadingElement: P != null,
332
+ leadingVisual: P,
327
333
  trailingElement: n,
328
- active: h,
334
+ active: x,
329
335
  disabled: e.disabled,
330
336
  "aria-selected": n,
331
- onMouseDown: (z) => {
332
- z.preventDefault();
337
+ onMouseDown: (L) => {
338
+ L.preventDefault();
333
339
  },
334
- onMouseEnter: () => x(r),
340
+ onMouseEnter: () => p(r),
335
341
  onClick: () => le(e)
336
342
  }
337
343
  )
@@ -347,6 +353,6 @@ const pr = Te(function({
347
353
  ] });
348
354
  });
349
355
  export {
350
- pr as default
356
+ _r as default
351
357
  };
352
358
  //# sourceMappingURL=Combobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport Chip from '@/components/chip/Chip';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n emptyMessage?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\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(\n value: string | string[] | null | undefined,\n): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = multiple ? toMultiValue(rawValue) : [];\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const selectedOption = useMemo(\n () =>\n singleValue == null\n ? undefined\n : options.find((o) => o.value === singleValue),\n [options, 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 { 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 (filteredOptions.length === 0) return -1;\n if (prev >= 0 && prev < filteredOptions.length) return prev;\n const selectedIdx = multiple\n ? filteredOptions.findIndex((o) => multiValue.includes(o.value))\n : filteredOptions.findIndex((o) => o.value === singleValue);\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, filteredOptions, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple\n ? multiValue.includes(optionValue)\n : 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 removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n inputRef.current?.focus();\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = filteredOptions\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 [filteredOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = filteredOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(\n `${listboxId}-option-${option.value}`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, filteredOptions, listboxId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n setActiveIndex(\n filteredOptions.findIndex((o) => !o.disabled) >= 0\n ? filteredOptions.findIndex((o) => !o.disabled)\n : 0,\n );\n }\n break;\n case 'End':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n for (let i = filteredOptions.length - 1; i >= 0; i--) {\n if (!filteredOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n e.preventDefault();\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (\n multiple &&\n displayInput === '' &&\n multiValue.length > 0\n ) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chip remove buttons\n if ((e.target as HTMLElement).closest('button')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeOption =\n activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const activeDescendant =\n activeOption != null ? `${listboxId}-option-${activeOption.value}` : undefined;\n\n const selectedOptions = useMemo(\n () => options.filter((o) => multiValue.includes(o.value)),\n [options, multiValue],\n );\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && selectedOptions.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\n className={styles.combobox__wrapper}\n ref={anchorRef}\n >\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles.combobox__leadingIcon} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple &&\n selectedOptions.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 removeLabel={`Remove ${option.label}`}\n >\n {option.label}\n </Chip>\n ))}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && selectedOptions.length > 0\n ? undefined\n : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles.combobox__trailingIcon} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {filteredOptions.length === 0 ? (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n ) : (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {filteredOptions.map((option, index) => {\n const selected = isSelected(option.value);\n const active = index === activeIndex;\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n }}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\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","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","label","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","selectedOption","useMemo","o","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","optionValue","selectOption","v","_a","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","el","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeOption","activeDescendant","selectedOptions","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","Chip","ev","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","selected","active","leading","MenuItem"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport 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 MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n emptyMessage?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\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(\n value: string | string[] | null | undefined,\n): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = multiple ? toMultiValue(rawValue) : [];\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const selectedOption = useMemo(\n () =>\n singleValue == null\n ? undefined\n : options.find((o) => o.value === singleValue),\n [options, 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 { 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 (filteredOptions.length === 0) return -1;\n if (prev >= 0 && prev < filteredOptions.length) return prev;\n const selectedIdx = multiple\n ? filteredOptions.findIndex((o) => multiValue.includes(o.value))\n : filteredOptions.findIndex((o) => o.value === singleValue);\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, filteredOptions, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple\n ? multiValue.includes(optionValue)\n : 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 removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = filteredOptions\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 [filteredOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = filteredOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(\n `${listboxId}-option-${option.value}`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, filteredOptions, listboxId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n setActiveIndex(\n filteredOptions.findIndex((o) => !o.disabled) >= 0\n ? filteredOptions.findIndex((o) => !o.disabled)\n : 0,\n );\n }\n break;\n case 'End':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n for (let i = filteredOptions.length - 1; i >= 0; i--) {\n if (!filteredOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n e.preventDefault();\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (\n multiple &&\n displayInput === '' &&\n multiValue.length > 0\n ) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips or their remove buttons\n if ((e.target as HTMLElement).closest('[data-chip]')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeOption =\n activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const activeDescendant =\n activeOption != null ? `${listboxId}-option-${activeOption.value}` : undefined;\n\n const selectedOptions = useMemo(\n () => options.filter((o) => multiValue.includes(o.value)),\n [options, multiValue],\n );\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && selectedOptions.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\n className={styles.combobox__wrapper}\n ref={anchorRef}\n >\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && selectedOptions.length > 0 && (\n <ChipGroup\n aria-label={\n typeof label === 'string' ? `${label} selections` : 'Selected'\n }\n disabled={disabled}\n >\n {selectedOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && selectedOptions.length > 0\n ? undefined\n : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {filteredOptions.length === 0 ? (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n ) : (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {filteredOptions.map((option, index) => {\n const selected = isSelected(option.value);\n const active = index === activeIndex;\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n }}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\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","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","label","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","selectedOption","useMemo","o","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","optionValue","selectOption","v","_a","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","el","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeOption","activeDescendant","selectedOptions","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","ChipGroup","Chip","ev","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","selected","active","leading","MenuItem"],"mappings":"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"}