@fluentui/react-combobox 9.0.0-beta.8 → 9.0.0

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 (304) hide show
  1. package/CHANGELOG.json +964 -4
  2. package/CHANGELOG.md +274 -5
  3. package/README.md +1 -3
  4. package/dist/index.d.ts +84 -24
  5. package/lib/Combobox.js.map +1 -1
  6. package/lib/ComboboxField.js +2 -0
  7. package/lib/ComboboxField.js.map +1 -0
  8. package/lib/Dropdown.js.map +1 -1
  9. package/lib/Listbox.js.map +1 -1
  10. package/lib/Option.js.map +1 -1
  11. package/lib/OptionGroup.js.map +1 -1
  12. package/lib/components/Combobox/Combobox.js +0 -1
  13. package/lib/components/Combobox/Combobox.js.map +1 -1
  14. package/lib/components/Combobox/Combobox.types.js.map +1 -1
  15. package/lib/components/Combobox/index.js.map +1 -1
  16. package/lib/components/Combobox/renderCombobox.js +11 -8
  17. package/lib/components/Combobox/renderCombobox.js.map +1 -1
  18. package/lib/components/Combobox/useCombobox.js +191 -16
  19. package/lib/components/Combobox/useCombobox.js.map +1 -1
  20. package/lib/components/Combobox/useComboboxStyles.js +253 -161
  21. package/lib/components/Combobox/useComboboxStyles.js.map +1 -1
  22. package/lib/components/ComboboxField/ComboboxField.js +8 -0
  23. package/lib/components/ComboboxField/ComboboxField.js.map +1 -0
  24. package/lib/components/ComboboxField/index.js +2 -0
  25. package/lib/components/ComboboxField/index.js.map +1 -0
  26. package/lib/components/Dropdown/Dropdown.js +0 -1
  27. package/lib/components/Dropdown/Dropdown.js.map +1 -1
  28. package/lib/components/Dropdown/Dropdown.types.js.map +1 -1
  29. package/lib/components/Dropdown/index.js.map +1 -1
  30. package/lib/components/Dropdown/renderDropdown.js +11 -8
  31. package/lib/components/Dropdown/renderDropdown.js.map +1 -1
  32. package/lib/components/Dropdown/useDropdown.js +90 -9
  33. package/lib/components/Dropdown/useDropdown.js.map +1 -1
  34. package/lib/components/Dropdown/useDropdownStyles.js +237 -155
  35. package/lib/components/Dropdown/useDropdownStyles.js.map +1 -1
  36. package/lib/components/Listbox/Listbox.js +0 -1
  37. package/lib/components/Listbox/Listbox.js.map +1 -1
  38. package/lib/components/Listbox/Listbox.types.js.map +1 -1
  39. package/lib/components/Listbox/index.js.map +1 -1
  40. package/lib/components/Listbox/renderListbox.js +2 -2
  41. package/lib/components/Listbox/renderListbox.js.map +1 -1
  42. package/lib/components/Listbox/useListbox.js +35 -29
  43. package/lib/components/Listbox/useListbox.js.map +1 -1
  44. package/lib/components/Listbox/useListboxStyles.js +16 -20
  45. package/lib/components/Listbox/useListboxStyles.js.map +1 -1
  46. package/lib/components/Option/Option.js +0 -1
  47. package/lib/components/Option/Option.js.map +1 -1
  48. package/lib/components/Option/Option.types.js.map +1 -1
  49. package/lib/components/Option/index.js.map +1 -1
  50. package/lib/components/Option/renderOption.js +4 -3
  51. package/lib/components/Option/renderOption.js.map +1 -1
  52. package/lib/components/Option/useOption.js +61 -46
  53. package/lib/components/Option/useOption.js.map +1 -1
  54. package/lib/components/Option/useOptionStyles.js +103 -80
  55. package/lib/components/Option/useOptionStyles.js.map +1 -1
  56. package/lib/components/OptionGroup/OptionGroup.js +0 -1
  57. package/lib/components/OptionGroup/OptionGroup.js.map +1 -1
  58. package/lib/components/OptionGroup/OptionGroup.types.js.map +1 -1
  59. package/lib/components/OptionGroup/index.js.map +1 -1
  60. package/lib/components/OptionGroup/renderOptionGroup.js +4 -3
  61. package/lib/components/OptionGroup/renderOptionGroup.js.map +1 -1
  62. package/lib/components/OptionGroup/useOptionGroup.js +0 -1
  63. package/lib/components/OptionGroup/useOptionGroup.js.map +1 -1
  64. package/lib/components/OptionGroup/useOptionGroupStyles.js +29 -34
  65. package/lib/components/OptionGroup/useOptionGroupStyles.js.map +1 -1
  66. package/lib/contexts/ComboboxContext.js +14 -9
  67. package/lib/contexts/ComboboxContext.js.map +1 -1
  68. package/lib/contexts/ListboxContext.js +11 -8
  69. package/lib/contexts/ListboxContext.js.map +1 -1
  70. package/lib/contexts/useComboboxContextValues.js +8 -2
  71. package/lib/contexts/useComboboxContextValues.js.map +1 -1
  72. package/lib/contexts/useListboxContextValues.js +10 -6
  73. package/lib/contexts/useListboxContextValues.js.map +1 -1
  74. package/lib/index.js +6 -0
  75. package/lib/index.js.map +1 -1
  76. package/lib/utils/ComboboxBase.types.js.map +1 -1
  77. package/lib/utils/OptionCollection.types.js.map +1 -1
  78. package/lib/utils/Selection.types.js.map +1 -1
  79. package/lib/utils/dropdownKeyActions.js +14 -42
  80. package/lib/utils/dropdownKeyActions.js.map +1 -1
  81. package/lib/utils/internalTokens.js.map +1 -1
  82. package/lib/utils/useComboboxBaseState.js +48 -44
  83. package/lib/utils/useComboboxBaseState.js.map +1 -1
  84. package/lib/utils/useComboboxPopup.js +10 -6
  85. package/lib/utils/useComboboxPopup.js.map +1 -1
  86. package/lib/utils/useOptionCollection.js +13 -23
  87. package/lib/utils/useOptionCollection.js.map +1 -1
  88. package/lib/utils/useScrollOptionsIntoView.js +36 -0
  89. package/lib/utils/useScrollOptionsIntoView.js.map +1 -0
  90. package/lib/utils/useSelection.js +20 -14
  91. package/lib/utils/useSelection.js.map +1 -1
  92. package/lib/utils/useTriggerListboxSlots.js +46 -57
  93. package/lib/utils/useTriggerListboxSlots.js.map +1 -1
  94. package/lib-amd/Combobox.js +6 -0
  95. package/lib-amd/Combobox.js.map +1 -0
  96. package/lib-amd/ComboboxField.js +6 -0
  97. package/lib-amd/ComboboxField.js.map +1 -0
  98. package/lib-amd/Dropdown.js +6 -0
  99. package/lib-amd/Dropdown.js.map +1 -0
  100. package/lib-amd/Listbox.js +6 -0
  101. package/lib-amd/Listbox.js.map +1 -0
  102. package/lib-amd/Option.js +6 -0
  103. package/lib-amd/Option.js.map +1 -0
  104. package/lib-amd/OptionGroup.js +6 -0
  105. package/lib-amd/OptionGroup.js.map +1 -0
  106. package/lib-amd/components/Combobox/Combobox.js +16 -0
  107. package/lib-amd/components/Combobox/Combobox.js.map +1 -0
  108. package/lib-amd/components/Combobox/Combobox.types.js +5 -0
  109. package/lib-amd/components/Combobox/Combobox.types.js.map +1 -0
  110. package/lib-amd/components/Combobox/index.js +10 -0
  111. package/lib-amd/components/Combobox/index.js.map +1 -0
  112. package/lib-amd/components/Combobox/renderCombobox.js +20 -0
  113. package/lib-amd/components/Combobox/renderCombobox.js.map +1 -0
  114. package/lib-amd/components/Combobox/useCombobox.js +206 -0
  115. package/lib-amd/components/Combobox/useCombobox.js.map +1 -0
  116. package/lib-amd/components/Combobox/useComboboxStyles.js +152 -0
  117. package/lib-amd/components/Combobox/useComboboxStyles.js.map +1 -0
  118. package/lib-amd/components/ComboboxField/ComboboxField.js +10 -0
  119. package/lib-amd/components/ComboboxField/ComboboxField.js.map +1 -0
  120. package/lib-amd/components/ComboboxField/index.js +6 -0
  121. package/lib-amd/components/ComboboxField/index.js.map +1 -0
  122. package/lib-amd/components/Dropdown/Dropdown.js +16 -0
  123. package/lib-amd/components/Dropdown/Dropdown.js.map +1 -0
  124. package/lib-amd/components/Dropdown/Dropdown.types.js +5 -0
  125. package/lib-amd/components/Dropdown/Dropdown.types.js.map +1 -0
  126. package/lib-amd/components/Dropdown/index.js +10 -0
  127. package/lib-amd/components/Dropdown/index.js.map +1 -0
  128. package/lib-amd/components/Dropdown/renderDropdown.js +21 -0
  129. package/lib-amd/components/Dropdown/renderDropdown.js.map +1 -0
  130. package/lib-amd/components/Dropdown/useDropdown.js +121 -0
  131. package/lib-amd/components/Dropdown/useDropdown.js.map +1 -0
  132. package/lib-amd/components/Dropdown/useDropdownStyles.js +127 -0
  133. package/lib-amd/components/Dropdown/useDropdownStyles.js.map +1 -0
  134. package/lib-amd/components/Listbox/Listbox.js +16 -0
  135. package/lib-amd/components/Listbox/Listbox.js.map +1 -0
  136. package/lib-amd/components/Listbox/Listbox.types.js +5 -0
  137. package/lib-amd/components/Listbox/Listbox.types.js.map +1 -0
  138. package/lib-amd/components/Listbox/index.js +10 -0
  139. package/lib-amd/components/Listbox/index.js.map +1 -0
  140. package/lib-amd/components/Listbox/renderListbox.js +15 -0
  141. package/lib-amd/components/Listbox/renderListbox.js.map +1 -0
  142. package/lib-amd/components/Listbox/useListbox.js +80 -0
  143. package/lib-amd/components/Listbox/useListbox.js.map +1 -0
  144. package/lib-amd/components/Listbox/useListboxStyles.js +24 -0
  145. package/lib-amd/components/Listbox/useListboxStyles.js.map +1 -0
  146. package/lib-amd/components/Option/Option.js +15 -0
  147. package/lib-amd/components/Option/Option.js.map +1 -0
  148. package/lib-amd/components/Option/Option.types.js +5 -0
  149. package/lib-amd/components/Option/Option.types.js.map +1 -0
  150. package/lib-amd/components/Option/index.js +10 -0
  151. package/lib-amd/components/Option/index.js.map +1 -0
  152. package/lib-amd/components/Option/renderOption.js +16 -0
  153. package/lib-amd/components/Option/renderOption.js.map +1 -0
  154. package/lib-amd/components/Option/useOption.js +117 -0
  155. package/lib-amd/components/Option/useOption.js.map +1 -0
  156. package/lib-amd/components/Option/useOptionStyles.js +73 -0
  157. package/lib-amd/components/Option/useOptionStyles.js.map +1 -0
  158. package/lib-amd/components/OptionGroup/OptionGroup.js +15 -0
  159. package/lib-amd/components/OptionGroup/OptionGroup.js.map +1 -0
  160. package/lib-amd/components/OptionGroup/OptionGroup.types.js +5 -0
  161. package/lib-amd/components/OptionGroup/OptionGroup.types.js.map +1 -0
  162. package/lib-amd/components/OptionGroup/index.js +10 -0
  163. package/lib-amd/components/OptionGroup/index.js.map +1 -0
  164. package/lib-amd/components/OptionGroup/renderOptionGroup.js +16 -0
  165. package/lib-amd/components/OptionGroup/renderOptionGroup.js.map +1 -0
  166. package/lib-amd/components/OptionGroup/useOptionGroup.js +33 -0
  167. package/lib-amd/components/OptionGroup/useOptionGroup.js.map +1 -0
  168. package/lib-amd/components/OptionGroup/useOptionGroupStyles.js +34 -0
  169. package/lib-amd/components/OptionGroup/useOptionGroupStyles.js.map +1 -0
  170. package/lib-amd/contexts/ComboboxContext.js +28 -0
  171. package/lib-amd/contexts/ComboboxContext.js.map +1 -0
  172. package/lib-amd/contexts/ListboxContext.js +23 -0
  173. package/lib-amd/contexts/ListboxContext.js.map +1 -0
  174. package/lib-amd/contexts/useComboboxContextValues.js +23 -0
  175. package/lib-amd/contexts/useComboboxContextValues.js.map +1 -0
  176. package/lib-amd/contexts/useListboxContextValues.js +24 -0
  177. package/lib-amd/contexts/useListboxContextValues.js.map +1 -0
  178. package/lib-amd/index.js +37 -0
  179. package/lib-amd/index.js.map +1 -0
  180. package/lib-amd/utils/ComboboxBase.types.js +5 -0
  181. package/lib-amd/utils/ComboboxBase.types.js.map +1 -0
  182. package/lib-amd/utils/OptionCollection.types.js +5 -0
  183. package/lib-amd/utils/OptionCollection.types.js.map +1 -0
  184. package/lib-amd/utils/Selection.types.js +5 -0
  185. package/lib-amd/utils/Selection.types.js.map +1 -0
  186. package/lib-amd/utils/dropdownKeyActions.js +85 -0
  187. package/lib-amd/utils/dropdownKeyActions.js.map +1 -0
  188. package/lib-amd/utils/internalTokens.js +11 -0
  189. package/lib-amd/utils/internalTokens.js.map +1 -0
  190. package/lib-amd/utils/useComboboxBaseState.js +76 -0
  191. package/lib-amd/utils/useComboboxBaseState.js.map +1 -0
  192. package/lib-amd/utils/useComboboxPopup.js +16 -0
  193. package/lib-amd/utils/useComboboxPopup.js.map +1 -0
  194. package/lib-amd/utils/useOptionCollection.js +65 -0
  195. package/lib-amd/utils/useOptionCollection.js.map +1 -0
  196. package/lib-amd/utils/useScrollOptionsIntoView.js +33 -0
  197. package/lib-amd/utils/useScrollOptionsIntoView.js.map +1 -0
  198. package/lib-amd/utils/useSelection.js +42 -0
  199. package/lib-amd/utils/useSelection.js.map +1 -0
  200. package/lib-amd/utils/useTriggerListboxSlots.js +104 -0
  201. package/lib-amd/utils/useTriggerListboxSlots.js.map +1 -0
  202. package/lib-commonjs/Combobox.js +0 -2
  203. package/lib-commonjs/Combobox.js.map +1 -1
  204. package/lib-commonjs/ComboboxField.js +8 -0
  205. package/lib-commonjs/ComboboxField.js.map +1 -0
  206. package/lib-commonjs/Dropdown.js +0 -2
  207. package/lib-commonjs/Dropdown.js.map +1 -1
  208. package/lib-commonjs/Listbox.js +0 -2
  209. package/lib-commonjs/Listbox.js.map +1 -1
  210. package/lib-commonjs/Option.js +0 -2
  211. package/lib-commonjs/Option.js.map +1 -1
  212. package/lib-commonjs/OptionGroup.js +0 -2
  213. package/lib-commonjs/OptionGroup.js.map +1 -1
  214. package/lib-commonjs/components/Combobox/Combobox.js +0 -7
  215. package/lib-commonjs/components/Combobox/Combobox.js.map +1 -1
  216. package/lib-commonjs/components/Combobox/Combobox.types.js.map +1 -1
  217. package/lib-commonjs/components/Combobox/index.js +0 -6
  218. package/lib-commonjs/components/Combobox/index.js.map +1 -1
  219. package/lib-commonjs/components/Combobox/renderCombobox.js +11 -14
  220. package/lib-commonjs/components/Combobox/renderCombobox.js.map +1 -1
  221. package/lib-commonjs/components/Combobox/useCombobox.js +190 -24
  222. package/lib-commonjs/components/Combobox/useCombobox.js.map +1 -1
  223. package/lib-commonjs/components/Combobox/useComboboxStyles.js +252 -165
  224. package/lib-commonjs/components/Combobox/useComboboxStyles.js.map +1 -1
  225. package/lib-commonjs/components/ComboboxField/ComboboxField.js +14 -0
  226. package/lib-commonjs/components/ComboboxField/ComboboxField.js.map +1 -0
  227. package/lib-commonjs/components/ComboboxField/index.js +8 -0
  228. package/lib-commonjs/components/ComboboxField/index.js.map +1 -0
  229. package/lib-commonjs/components/Dropdown/Dropdown.js +0 -7
  230. package/lib-commonjs/components/Dropdown/Dropdown.js.map +1 -1
  231. package/lib-commonjs/components/Dropdown/Dropdown.types.js.map +1 -1
  232. package/lib-commonjs/components/Dropdown/index.js +0 -6
  233. package/lib-commonjs/components/Dropdown/index.js.map +1 -1
  234. package/lib-commonjs/components/Dropdown/renderDropdown.js +11 -14
  235. package/lib-commonjs/components/Dropdown/renderDropdown.js.map +1 -1
  236. package/lib-commonjs/components/Dropdown/useDropdown.js +89 -17
  237. package/lib-commonjs/components/Dropdown/useDropdown.js.map +1 -1
  238. package/lib-commonjs/components/Dropdown/useDropdownStyles.js +236 -159
  239. package/lib-commonjs/components/Dropdown/useDropdownStyles.js.map +1 -1
  240. package/lib-commonjs/components/Listbox/Listbox.js +0 -7
  241. package/lib-commonjs/components/Listbox/Listbox.js.map +1 -1
  242. package/lib-commonjs/components/Listbox/Listbox.types.js.map +1 -1
  243. package/lib-commonjs/components/Listbox/index.js +0 -6
  244. package/lib-commonjs/components/Listbox/index.js.map +1 -1
  245. package/lib-commonjs/components/Listbox/renderListbox.js +2 -7
  246. package/lib-commonjs/components/Listbox/renderListbox.js.map +1 -1
  247. package/lib-commonjs/components/Listbox/useListbox.js +34 -37
  248. package/lib-commonjs/components/Listbox/useListbox.js.map +1 -1
  249. package/lib-commonjs/components/Listbox/useListboxStyles.js +16 -24
  250. package/lib-commonjs/components/Listbox/useListboxStyles.js.map +1 -1
  251. package/lib-commonjs/components/Option/Option.js +0 -6
  252. package/lib-commonjs/components/Option/Option.js.map +1 -1
  253. package/lib-commonjs/components/Option/Option.types.js.map +1 -1
  254. package/lib-commonjs/components/Option/index.js +0 -6
  255. package/lib-commonjs/components/Option/index.js.map +1 -1
  256. package/lib-commonjs/components/Option/renderOption.js +4 -7
  257. package/lib-commonjs/components/Option/renderOption.js.map +1 -1
  258. package/lib-commonjs/components/Option/useOption.js +60 -52
  259. package/lib-commonjs/components/Option/useOption.js.map +1 -1
  260. package/lib-commonjs/components/Option/useOptionStyles.js +103 -84
  261. package/lib-commonjs/components/Option/useOptionStyles.js.map +1 -1
  262. package/lib-commonjs/components/OptionGroup/OptionGroup.js +0 -6
  263. package/lib-commonjs/components/OptionGroup/OptionGroup.js.map +1 -1
  264. package/lib-commonjs/components/OptionGroup/OptionGroup.types.js.map +1 -1
  265. package/lib-commonjs/components/OptionGroup/index.js +0 -6
  266. package/lib-commonjs/components/OptionGroup/index.js.map +1 -1
  267. package/lib-commonjs/components/OptionGroup/renderOptionGroup.js +4 -7
  268. package/lib-commonjs/components/OptionGroup/renderOptionGroup.js.map +1 -1
  269. package/lib-commonjs/components/OptionGroup/useOptionGroup.js +0 -4
  270. package/lib-commonjs/components/OptionGroup/useOptionGroup.js.map +1 -1
  271. package/lib-commonjs/components/OptionGroup/useOptionGroupStyles.js +29 -38
  272. package/lib-commonjs/components/OptionGroup/useOptionGroupStyles.js.map +1 -1
  273. package/lib-commonjs/contexts/ComboboxContext.js +15 -12
  274. package/lib-commonjs/contexts/ComboboxContext.js.map +1 -1
  275. package/lib-commonjs/contexts/ListboxContext.js +12 -11
  276. package/lib-commonjs/contexts/ListboxContext.js.map +1 -1
  277. package/lib-commonjs/contexts/useComboboxContextValues.js +8 -4
  278. package/lib-commonjs/contexts/useComboboxContextValues.js.map +1 -1
  279. package/lib-commonjs/contexts/useListboxContextValues.js +10 -10
  280. package/lib-commonjs/contexts/useListboxContextValues.js.map +1 -1
  281. package/lib-commonjs/index.js +43 -11
  282. package/lib-commonjs/index.js.map +1 -1
  283. package/lib-commonjs/utils/ComboboxBase.types.js.map +1 -1
  284. package/lib-commonjs/utils/OptionCollection.types.js.map +1 -1
  285. package/lib-commonjs/utils/Selection.types.js.map +1 -1
  286. package/lib-commonjs/utils/dropdownKeyActions.js +14 -46
  287. package/lib-commonjs/utils/dropdownKeyActions.js.map +1 -1
  288. package/lib-commonjs/utils/internalTokens.js.map +1 -1
  289. package/lib-commonjs/utils/useComboboxBaseState.js +48 -50
  290. package/lib-commonjs/utils/useComboboxBaseState.js.map +1 -1
  291. package/lib-commonjs/utils/useComboboxPopup.js +10 -10
  292. package/lib-commonjs/utils/useComboboxPopup.js.map +1 -1
  293. package/lib-commonjs/utils/useOptionCollection.js +13 -26
  294. package/lib-commonjs/utils/useOptionCollection.js.map +1 -1
  295. package/lib-commonjs/utils/useScrollOptionsIntoView.js +43 -0
  296. package/lib-commonjs/utils/useScrollOptionsIntoView.js.map +1 -0
  297. package/lib-commonjs/utils/useSelection.js +20 -17
  298. package/lib-commonjs/utils/useSelection.js.map +1 -1
  299. package/lib-commonjs/utils/useTriggerListboxSlots.js +45 -61
  300. package/lib-commonjs/utils/useTriggerListboxSlots.js.map +1 -1
  301. package/package.json +24 -23
  302. package/Spec-migration.md +0 -13
  303. package/Spec.md +0 -520
  304. package/dist/tsdoc-metadata.json +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["utils/useOptionCollection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport type { OptionCollectionState, OptionValue } from './OptionCollection.types';\n\n/**\n * A hook for managing a collection of child Options\n */\nexport const useOptionCollection = (): OptionCollectionState => {\n const nodes = React.useRef<{ option: OptionValue; element: HTMLElement }[]>([]);\n\n const collectionAPI = React.useMemo(() => {\n const getCount = () => nodes.current.length;\n const getOptionAtIndex = (index: number) => nodes.current[index]?.option;\n const getIndexOfId = (id: string) => nodes.current.findIndex(node => node.option.id === id);\n const getOptionById = (id: string) => {\n const item = nodes.current.find(node => node.option.id === id);\n return item?.option;\n };\n const getOptionsMatchingValue = (matcher: (value: string) => boolean) => {\n return nodes.current.filter(node => matcher(node.option.value)).map(node => node.option);\n };\n\n return {\n getCount,\n getOptionAtIndex,\n getIndexOfId,\n getOptionById,\n getOptionsMatchingValue,\n };\n }, []);\n\n const registerOption = React.useCallback((option: OptionValue, element: HTMLElement) => {\n const index = nodes.current.findIndex(node => {\n if (!node.element || !element) {\n return false;\n }\n\n if (node.option.id === option.id) {\n return true;\n }\n\n // use the DOM method compareDocumentPosition to order the current node against registered nodes\n // eslint-disable-next-line no-bitwise\n return node.element.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING;\n });\n\n // do not register the option if it already exists\n if (nodes.current[index]?.option.id !== option.id) {\n const newItem = {\n element,\n option,\n };\n\n // If an index is not found we will push the element to the end.\n if (index === -1) {\n nodes.current = [...nodes.current, newItem];\n } else {\n nodes.current.splice(index, 0, newItem);\n }\n }\n\n // return the unregister function\n return () => {\n nodes.current = nodes.current.filter(node => node.option.id !== option.id);\n };\n }, []);\n\n return {\n ...collectionAPI,\n options: nodes.current.map(node => node.option),\n registerOption,\n };\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"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","names":["React","useOptionCollection","nodes","useRef","collectionAPI","useMemo","getCount","current","length","getOptionAtIndex","index","option","getIndexOfId","id","findIndex","node","getOptionById","item","find","getOptionsMatchingText","matcher","filter","text","map","registerOption","useCallback","element","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","newItem","splice","options"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/utils/useOptionCollection.ts"],"sourcesContent":["import * as React from 'react';\nimport type { OptionCollectionState, OptionValue } from './OptionCollection.types';\n\n/**\n * A hook for managing a collection of child Options\n */\nexport const useOptionCollection = (): OptionCollectionState => {\n const nodes = React.useRef<{ option: OptionValue; element: HTMLElement }[]>([]);\n\n const collectionAPI = React.useMemo(() => {\n const getCount = () => nodes.current.length;\n const getOptionAtIndex = (index: number) => nodes.current[index]?.option;\n const getIndexOfId = (id: string) => nodes.current.findIndex(node => node.option.id === id);\n const getOptionById = (id: string) => {\n const item = nodes.current.find(node => node.option.id === id);\n return item?.option;\n };\n const getOptionsMatchingText = (matcher: (value: string) => boolean) => {\n return nodes.current.filter(node => matcher(node.option.text)).map(node => node.option);\n };\n\n return {\n getCount,\n getOptionAtIndex,\n getIndexOfId,\n getOptionById,\n getOptionsMatchingText,\n };\n }, []);\n\n const registerOption = React.useCallback((option: OptionValue, element: HTMLElement) => {\n const index = nodes.current.findIndex(node => {\n if (!node.element || !element) {\n return false;\n }\n\n if (node.option.id === option.id) {\n return true;\n }\n\n // use the DOM method compareDocumentPosition to order the current node against registered nodes\n // eslint-disable-next-line no-bitwise\n return node.element.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING;\n });\n\n // do not register the option if it already exists\n if (nodes.current[index]?.option.id !== option.id) {\n const newItem = {\n element,\n option,\n };\n\n // If an index is not found we will push the element to the end.\n if (index === -1) {\n nodes.current = [...nodes.current, newItem];\n } else {\n nodes.current.splice(index, 0, newItem);\n }\n }\n\n // return the unregister function\n return () => {\n nodes.current = nodes.current.filter(node => node.option.id !== option.id);\n };\n }, []);\n\n return {\n ...collectionAPI,\n options: nodes.current.map(node => node.option),\n registerOption,\n };\n};\n"]}
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { canUseDOM } from '@fluentui/react-utilities';
3
+ export function useScrollOptionsIntoView(state) {
4
+ const {
5
+ activeOption
6
+ } = state;
7
+ const scrollContainerRef = React.useRef(null);
8
+ React.useEffect(() => {
9
+ if (scrollContainerRef.current && activeOption && canUseDOM()) {
10
+ const activeOptionElement = scrollContainerRef.current.querySelector(`#${activeOption.id}`);
11
+ if (!activeOptionElement) {
12
+ return;
13
+ }
14
+ const {
15
+ offsetHeight,
16
+ offsetTop
17
+ } = activeOptionElement;
18
+ const {
19
+ offsetHeight: parentOffsetHeight,
20
+ scrollTop
21
+ } = scrollContainerRef.current;
22
+ const isAbove = offsetTop < scrollTop;
23
+ const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;
24
+ // add a small buffer for general visual nicety
25
+ // it looks slightly better if the option has some space from the top/bottom while arrowing
26
+ const buffer = 2;
27
+ if (isAbove) {
28
+ scrollContainerRef.current.scrollTo(0, offsetTop - buffer);
29
+ } else if (isBelow) {
30
+ scrollContainerRef.current.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight + buffer);
31
+ }
32
+ }
33
+ }, [activeOption]);
34
+ return scrollContainerRef;
35
+ }
36
+ //# sourceMappingURL=useScrollOptionsIntoView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,SAAS,QAAQ,2BAA2B;AAGrD,OAAM,SAAUC,wBAAwB,CAACC,KAAmB;EAC1D,MAAM;IAAEC;EAAY,CAAE,GAAGD,KAAK;EAC9B,MAAME,kBAAkB,GAAGL,KAAK,CAACM,MAAM,CAAiB,IAAI,CAAC;EAE7DN,KAAK,CAACO,SAAS,CAAC,MAAK;IACnB,IAAIF,kBAAkB,CAACG,OAAO,IAAIJ,YAAY,IAAIH,SAAS,EAAE,EAAE;MAC7D,MAAMQ,mBAAmB,GAAGJ,kBAAkB,CAACG,OAAO,CAACE,aAAa,CAAC,IAAIN,YAAY,CAACO,EAAE,EAAE,CAAgB;MAE1G,IAAI,CAACF,mBAAmB,EAAE;QACxB;;MAGF,MAAM;QAAEG,YAAY;QAAEC;MAAS,CAAE,GAAGJ,mBAAmB;MACvD,MAAM;QAAEG,YAAY,EAAEE,kBAAkB;QAAEC;MAAS,CAAE,GAAGV,kBAAkB,CAACG,OAAO;MAElF,MAAMQ,OAAO,GAAGH,SAAS,GAAGE,SAAS;MACrC,MAAME,OAAO,GAAGJ,SAAS,GAAGD,YAAY,GAAGG,SAAS,GAAGD,kBAAkB;MAEzE;MACA;MACA,MAAMI,MAAM,GAAG,CAAC;MAEhB,IAAIF,OAAO,EAAE;QACXX,kBAAkB,CAACG,OAAO,CAACW,QAAQ,CAAC,CAAC,EAAEN,SAAS,GAAGK,MAAM,CAAC;OAC3D,MAAM,IAAID,OAAO,EAAE;QAClBZ,kBAAkB,CAACG,OAAO,CAACW,QAAQ,CAAC,CAAC,EAAEN,SAAS,GAAGC,kBAAkB,GAAGF,YAAY,GAAGM,MAAM,CAAC;;;EAGpG,CAAC,EAAE,CAACd,YAAY,CAAC,CAAC;EAElB,OAAOC,kBAAkB;AAC3B","names":["React","canUseDOM","useScrollOptionsIntoView","state","activeOption","scrollContainerRef","useRef","useEffect","current","activeOptionElement","querySelector","id","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","buffer","scrollTo"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/utils/useScrollOptionsIntoView.ts"],"sourcesContent":["import * as React from 'react';\nimport { canUseDOM } from '@fluentui/react-utilities';\nimport { ListboxState } from '../Listbox';\n\nexport function useScrollOptionsIntoView(state: ListboxState): React.Ref<HTMLDivElement> {\n const { activeOption } = state;\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (scrollContainerRef.current && activeOption && canUseDOM()) {\n const activeOptionElement = scrollContainerRef.current.querySelector(`#${activeOption.id}`) as HTMLElement;\n\n if (!activeOptionElement) {\n return;\n }\n\n const { offsetHeight, offsetTop } = activeOptionElement;\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollContainerRef.current;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n // add a small buffer for general visual nicety\n // it looks slightly better if the option has some space from the top/bottom while arrowing\n const buffer = 2;\n\n if (isAbove) {\n scrollContainerRef.current.scrollTo(0, offsetTop - buffer);\n } else if (isBelow) {\n scrollContainerRef.current.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight + buffer);\n }\n }\n }, [activeOption]);\n\n return scrollContainerRef;\n}\n"]}
@@ -1,28 +1,26 @@
1
+ import { useCallback } from 'react';
1
2
  import { useControllableState } from '@fluentui/react-utilities';
2
3
  export const useSelection = props => {
3
4
  const {
4
5
  defaultSelectedOptions,
5
6
  multiselect,
6
- onSelect
7
+ onOptionSelect
7
8
  } = props;
8
9
  const [selectedOptions, setSelectedOptions] = useControllableState({
9
10
  state: props.selectedOptions,
10
11
  defaultState: defaultSelectedOptions,
11
12
  initialState: []
12
13
  });
13
-
14
- const selectOption = (event, option) => {
14
+ const selectOption = useCallback((event, option) => {
15
15
  // if the option is disabled, do nothing
16
16
  if (option.disabled) {
17
17
  return;
18
- } // for single-select, always return the selected option
19
-
20
-
21
- let newSelection = [option.value]; // toggle selected state of the option for multiselect
22
-
18
+ }
19
+ // for single-select, always return the selected option
20
+ let newSelection = [option.value];
21
+ // toggle selected state of the option for multiselect
23
22
  if (multiselect) {
24
23
  const selectedIndex = selectedOptions.findIndex(o => o === option.value);
25
-
26
24
  if (selectedIndex > -1) {
27
25
  // deselect option
28
26
  newSelection = [...selectedOptions.slice(0, selectedIndex), ...selectedOptions.slice(selectedIndex + 1)];
@@ -31,17 +29,25 @@ export const useSelection = props => {
31
29
  newSelection = [...selectedOptions, option.value];
32
30
  }
33
31
  }
34
-
35
32
  setSelectedOptions(newSelection);
36
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(event, {
33
+ onOptionSelect === null || onOptionSelect === void 0 ? void 0 : onOptionSelect(event, {
37
34
  optionValue: option.value,
35
+ optionText: option.text,
38
36
  selectedOptions: newSelection
39
37
  });
38
+ }, [onOptionSelect, multiselect, selectedOptions, setSelectedOptions]);
39
+ const clearSelection = event => {
40
+ setSelectedOptions([]);
41
+ onOptionSelect === null || onOptionSelect === void 0 ? void 0 : onOptionSelect(event, {
42
+ optionValue: undefined,
43
+ optionText: undefined,
44
+ selectedOptions: []
45
+ });
40
46
  };
41
-
42
47
  return {
43
- selectedOptions,
44
- selectOption
48
+ clearSelection,
49
+ selectOption,
50
+ selectedOptions
45
51
  };
46
52
  };
47
53
  //# sourceMappingURL=useSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["utils/useSelection.ts"],"names":[],"mappings":"AAAA,SAAS,oBAAT,QAAqC,2BAArC;AAIA,OAAO,MAAM,YAAY,GAAI,KAAD,IAA0C;EACpE,MAAM;IAAE,sBAAF;IAA0B,WAA1B;IAAuC;EAAvC,IAAoD,KAA1D;EAEA,MAAM,CAAC,eAAD,EAAkB,kBAAlB,IAAwC,oBAAoB,CAAC;IACjE,KAAK,EAAE,KAAK,CAAC,eADoD;IAEjE,YAAY,EAAE,sBAFmD;IAGjE,YAAY,EAAE;EAHmD,CAAD,CAAlE;;EAMA,MAAM,YAAY,GAAG,CAAC,KAAD,EAAyB,MAAzB,KAAgD;IACnE;IACA,IAAI,MAAM,CAAC,QAAX,EAAqB;MACnB;IACD,CAJkE,CAMnE;;;IACA,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,KAAR,CAAnB,CAPmE,CASnE;;IACA,IAAI,WAAJ,EAAiB;MACf,MAAM,aAAa,GAAG,eAAe,CAAC,SAAhB,CAA0B,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAA5C,CAAtB;;MACA,IAAI,aAAa,GAAG,CAAC,CAArB,EAAwB;QACtB;QACA,YAAY,GAAG,CAAC,GAAG,eAAe,CAAC,KAAhB,CAAsB,CAAtB,EAAyB,aAAzB,CAAJ,EAA6C,GAAG,eAAe,CAAC,KAAhB,CAAsB,aAAa,GAAG,CAAtC,CAAhD,CAAf;MACD,CAHD,MAGO;QACL;QACA,YAAY,GAAG,CAAC,GAAG,eAAJ,EAAqB,MAAM,CAAC,KAA5B,CAAf;MACD;IACF;;IAED,kBAAkB,CAAC,YAAD,CAAlB;IACA,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAQ,KAAA,CAAR,GAAA,QAAQ,CAAG,KAAH,EAAU;MAAE,WAAW,EAAE,MAAM,CAAC,KAAtB;MAA6B,eAAe,EAAE;IAA9C,CAAV,CAAR;EACD,CAvBD;;EAyBA,OAAO;IAAE,eAAF;IAAmB;EAAnB,CAAP;AACD,CAnCM","sourcesContent":["import { useControllableState } from '@fluentui/react-utilities';\nimport { OptionValue } from './OptionCollection.types';\nimport { SelectionEvents, SelectionProps, SelectionValue } from './Selection.types';\n\nexport const useSelection = (props: SelectionProps): SelectionValue => {\n const { defaultSelectedOptions, multiselect, onSelect } = props;\n\n const [selectedOptions, setSelectedOptions] = useControllableState({\n state: props.selectedOptions,\n defaultState: defaultSelectedOptions,\n initialState: [],\n });\n\n const selectOption = (event: SelectionEvents, option: OptionValue) => {\n // if the option is disabled, do nothing\n if (option.disabled) {\n return;\n }\n\n // for single-select, always return the selected option\n let newSelection = [option.value];\n\n // toggle selected state of the option for multiselect\n if (multiselect) {\n const selectedIndex = selectedOptions.findIndex(o => o === option.value);\n if (selectedIndex > -1) {\n // deselect option\n newSelection = [...selectedOptions.slice(0, selectedIndex), ...selectedOptions.slice(selectedIndex + 1)];\n } else {\n // select option\n newSelection = [...selectedOptions, option.value];\n }\n }\n\n setSelectedOptions(newSelection);\n onSelect?.(event, { optionValue: option.value, selectedOptions: newSelection });\n };\n\n return { selectedOptions, selectOption };\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,oBAAoB,QAAQ,2BAA2B;AAIhE,OAAO,MAAMC,YAAY,GAAIC,KAAqB,IAAoB;EACpE,MAAM;IAAEC,sBAAsB;IAAEC,WAAW;IAAEC;EAAc,CAAE,GAAGH,KAAK;EAErE,MAAM,CAACI,eAAe,EAAEC,kBAAkB,CAAC,GAAGP,oBAAoB,CAAC;IACjEQ,KAAK,EAAEN,KAAK,CAACI,eAAe;IAC5BG,YAAY,EAAEN,sBAAsB;IACpCO,YAAY,EAAE;GACf,CAAC;EAEF,MAAMC,YAAY,GAAGZ,WAAW,CAC9B,CAACa,KAAsB,EAAEC,MAAmB,KAAI;IAC9C;IACA,IAAIA,MAAM,CAACC,QAAQ,EAAE;MACnB;;IAGF;IACA,IAAIC,YAAY,GAAG,CAACF,MAAM,CAACG,KAAK,CAAC;IAEjC;IACA,IAAIZ,WAAW,EAAE;MACf,MAAMa,aAAa,GAAGX,eAAe,CAACY,SAAS,CAACC,CAAC,IAAIA,CAAC,KAAKN,MAAM,CAACG,KAAK,CAAC;MACxE,IAAIC,aAAa,GAAG,CAAC,CAAC,EAAE;QACtB;QACAF,YAAY,GAAG,CAAC,GAAGT,eAAe,CAACc,KAAK,CAAC,CAAC,EAAEH,aAAa,CAAC,EAAE,GAAGX,eAAe,CAACc,KAAK,CAACH,aAAa,GAAG,CAAC,CAAC,CAAC;OACzG,MAAM;QACL;QACAF,YAAY,GAAG,CAAC,GAAGT,eAAe,EAAEO,MAAM,CAACG,KAAK,CAAC;;;IAIrDT,kBAAkB,CAACQ,YAAY,CAAC;IAChCV,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGO,KAAK,EAAE;MAAES,WAAW,EAAER,MAAM,CAACG,KAAK;MAAEM,UAAU,EAAET,MAAM,CAACU,IAAI;MAAEjB,eAAe,EAAES;IAAY,CAAE,CAAC;EAChH,CAAC,EACD,CAACV,cAAc,EAAED,WAAW,EAAEE,eAAe,EAAEC,kBAAkB,CAAC,CACnE;EAED,MAAMiB,cAAc,GAAIZ,KAAsB,IAAI;IAChDL,kBAAkB,CAAC,EAAE,CAAC;IACtBF,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGO,KAAK,EAAE;MAAES,WAAW,EAAEI,SAAS;MAAEH,UAAU,EAAEG,SAAS;MAAEnB,eAAe,EAAE;IAAE,CAAE,CAAC;EACjG,CAAC;EAED,OAAO;IAAEkB,cAAc;IAAEb,YAAY;IAAEL;EAAe,CAAE;AAC1D,CAAC","names":["useCallback","useControllableState","useSelection","props","defaultSelectedOptions","multiselect","onOptionSelect","selectedOptions","setSelectedOptions","state","defaultState","initialState","selectOption","event","option","disabled","newSelection","value","selectedIndex","findIndex","o","slice","optionValue","optionText","text","clearSelection","undefined"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/utils/useSelection.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useControllableState } from '@fluentui/react-utilities';\nimport { OptionValue } from './OptionCollection.types';\nimport { SelectionEvents, SelectionProps, SelectionState } from './Selection.types';\n\nexport const useSelection = (props: SelectionProps): SelectionState => {\n const { defaultSelectedOptions, multiselect, onOptionSelect } = props;\n\n const [selectedOptions, setSelectedOptions] = useControllableState({\n state: props.selectedOptions,\n defaultState: defaultSelectedOptions,\n initialState: [],\n });\n\n const selectOption = useCallback(\n (event: SelectionEvents, option: OptionValue) => {\n // if the option is disabled, do nothing\n if (option.disabled) {\n return;\n }\n\n // for single-select, always return the selected option\n let newSelection = [option.value];\n\n // toggle selected state of the option for multiselect\n if (multiselect) {\n const selectedIndex = selectedOptions.findIndex(o => o === option.value);\n if (selectedIndex > -1) {\n // deselect option\n newSelection = [...selectedOptions.slice(0, selectedIndex), ...selectedOptions.slice(selectedIndex + 1)];\n } else {\n // select option\n newSelection = [...selectedOptions, option.value];\n }\n }\n\n setSelectedOptions(newSelection);\n onOptionSelect?.(event, { optionValue: option.value, optionText: option.text, selectedOptions: newSelection });\n },\n [onOptionSelect, multiselect, selectedOptions, setSelectedOptions],\n );\n\n const clearSelection = (event: SelectionEvents) => {\n setSelectedOptions([]);\n onOptionSelect?.(event, { optionValue: undefined, optionText: undefined, selectedOptions: [] });\n };\n\n return { clearSelection, selectOption, selectedOptions };\n};\n"]}
@@ -1,12 +1,11 @@
1
1
  import * as React from 'react';
2
- import { useMergedRefs } from '@fluentui/react-utilities';
2
+ import { mergeCallbacks, useId, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
3
3
  import { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';
4
4
  /*
5
5
  * useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,
6
6
  * with the semantics and event handlers needed for the Combobox and Dropdown components.
7
7
  * The element type of the ref should always match the element type used in the trigger shorthand.
8
8
  */
9
-
10
9
  export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSlot) {
11
10
  const {
12
11
  multiselect
@@ -16,21 +15,25 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
16
15
  getCount,
17
16
  getIndexOfId,
18
17
  getOptionAtIndex,
18
+ ignoreNextBlur,
19
19
  open,
20
20
  selectOption,
21
21
  setActiveOption,
22
+ setFocusVisible,
23
+ setHasFocus,
22
24
  setOpen
23
- } = state; // handle trigger focus/blur
24
-
25
+ } = state;
26
+ // handle trigger focus/blur
25
27
  const triggerRef = React.useRef(null);
26
- const ignoreTriggerBlur = React.useRef(false); // resolve listbox shorthand props
27
-
28
- const listbox = {
28
+ // resolve listbox shorthand props
29
+ const listboxId = useId('fluent-listbox', listboxSlot === null || listboxSlot === void 0 ? void 0 : listboxSlot.id);
30
+ const listbox = listboxSlot && {
31
+ id: listboxId,
29
32
  multiselect,
30
33
  tabIndex: undefined,
31
34
  ...listboxSlot
32
- }; // resolve trigger shorthand props
33
-
35
+ };
36
+ // resolve trigger shorthand props
34
37
  const trigger = {
35
38
  'aria-expanded': open,
36
39
  'aria-activedescendant': open ? activeOption === null || activeOption === void 0 ? void 0 : activeOption.id : undefined,
@@ -46,47 +49,38 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
46
49
  * 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)
47
50
  * 2. Do not close the listbox on button/input blur when clicking into the listbox
48
51
  */
49
-
50
- const {
51
- onClick: onListboxClick,
52
- onMouseDown: onListboxMouseDown
53
- } = listbox;
54
-
55
- listbox.onClick = event => {
52
+ const listboxOnClick = useEventCallback(mergeCallbacks(event => {
56
53
  var _a;
57
-
58
54
  (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
59
- onListboxClick === null || onListboxClick === void 0 ? void 0 : onListboxClick(event);
60
- };
61
-
62
- listbox.onMouseDown = event => {
63
- ignoreTriggerBlur.current = true;
64
- onListboxMouseDown === null || onListboxMouseDown === void 0 ? void 0 : onListboxMouseDown(event);
65
- }; // the trigger should open/close the popup on click or blur
66
-
67
-
68
- const {
69
- onBlur: onTriggerBlur,
70
- onClick: onTriggerClick,
71
- onKeyDown: onTriggerKeyDown
72
- } = trigger;
73
-
74
- trigger.onBlur = event => {
75
- if (!ignoreTriggerBlur.current) {
55
+ }, listbox === null || listbox === void 0 ? void 0 : listbox.onClick));
56
+ const listboxOnMouseOver = useEventCallback(mergeCallbacks(event => {
57
+ setFocusVisible(false);
58
+ }, listbox === null || listbox === void 0 ? void 0 : listbox.onMouseOver));
59
+ const listboxOnMouseDown = useEventCallback(mergeCallbacks(event => {
60
+ ignoreNextBlur.current = true;
61
+ }, listbox === null || listbox === void 0 ? void 0 : listbox.onMouseDown));
62
+ // listbox is nullable, only add event handlers if it exists
63
+ if (listbox) {
64
+ listbox.onClick = listboxOnClick;
65
+ listbox.onMouseOver = listboxOnMouseOver;
66
+ listbox.onMouseDown = listboxOnMouseDown;
67
+ }
68
+ // the trigger should open/close the popup on click or blur
69
+ trigger.onBlur = mergeCallbacks(event => {
70
+ if (!ignoreNextBlur.current) {
76
71
  setOpen(event, false);
77
72
  }
78
-
79
- ignoreTriggerBlur.current = false;
80
- onTriggerBlur === null || onTriggerBlur === void 0 ? void 0 : onTriggerBlur(event);
81
- };
82
-
83
- trigger.onClick = event => {
73
+ ignoreNextBlur.current = false;
74
+ setHasFocus(false);
75
+ }, trigger.onBlur);
76
+ trigger.onClick = mergeCallbacks(event => {
84
77
  setOpen(event, !open);
85
- onTriggerClick === null || onTriggerClick === void 0 ? void 0 : onTriggerClick(event);
86
- }; // handle combobox keyboard interaction
87
-
88
-
89
- trigger.onKeyDown = event => {
78
+ }, trigger.onClick);
79
+ trigger.onFocus = mergeCallbacks(event => {
80
+ setHasFocus(true);
81
+ }, trigger.onFocus);
82
+ // handle combobox keyboard interaction
83
+ trigger.onKeyDown = mergeCallbacks(event => {
90
84
  const action = getDropdownActionFromKey(event, {
91
85
  open,
92
86
  multiselect
@@ -94,46 +88,41 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
94
88
  const maxIndex = getCount() - 1;
95
89
  const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;
96
90
  let newIndex = activeIndex;
97
-
98
91
  switch (action) {
99
92
  case 'Open':
100
93
  event.preventDefault();
94
+ setFocusVisible(true);
101
95
  setOpen(event, true);
102
96
  break;
103
-
104
97
  case 'Close':
105
98
  // stop propagation for escape key to avoid dismissing any parent popups
106
99
  event.stopPropagation();
107
100
  event.preventDefault();
108
101
  setOpen(event, false);
109
102
  break;
110
-
111
103
  case 'CloseSelect':
112
104
  !multiselect && !(activeOption === null || activeOption === void 0 ? void 0 : activeOption.disabled) && setOpen(event, false);
113
105
  // fallthrough
114
-
115
106
  case 'Select':
116
107
  activeOption && selectOption(event, activeOption);
117
108
  event.preventDefault();
118
109
  break;
119
-
120
110
  case 'Tab':
121
- activeOption && selectOption(event, activeOption);
111
+ !multiselect && activeOption && selectOption(event, activeOption);
122
112
  break;
123
-
124
113
  default:
125
114
  newIndex = getIndexFromAction(action, activeIndex, maxIndex);
126
115
  }
127
-
128
116
  if (newIndex !== activeIndex) {
129
117
  // prevent default page scroll/keyboard action if the index changed
130
118
  event.preventDefault();
131
119
  setActiveOption(getOptionAtIndex(newIndex));
120
+ setFocusVisible(true);
132
121
  }
133
-
134
- onTriggerKeyDown === null || onTriggerKeyDown === void 0 ? void 0 : onTriggerKeyDown(event);
135
- };
136
-
122
+ }, trigger.onKeyDown);
123
+ trigger.onMouseOver = mergeCallbacks(event => {
124
+ setFocusVisible(false);
125
+ }, trigger.onMouseOver);
137
126
  return [trigger, listbox];
138
127
  }
139
128
  //# sourceMappingURL=useTriggerListboxSlots.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["utils/useTriggerListboxSlots.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';\nimport { Listbox } from '../components/Listbox/Listbox';\nimport type { ComboboxBaseProps, ComboboxBaseState } from './ComboboxBase.types';\n\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement>,\n triggerSlot?: ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [ExtractSlotProps<Slot<'button'>>, ExtractSlotProps<Slot<typeof Listbox>>];\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [ExtractSlotProps<Slot<'input'>>, ExtractSlotProps<Slot<typeof Listbox>>];\n\n/*\n * useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,\n * with the semantics and event handlers needed for the Combobox and Dropdown components.\n * The element type of the ref should always match the element type used in the trigger shorthand.\n */\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement | HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>, ExtractSlotProps<Slot<typeof Listbox>>] {\n const { multiselect } = props;\n const {\n activeOption,\n getCount,\n getIndexOfId,\n getOptionAtIndex,\n open,\n selectOption,\n setActiveOption,\n setOpen,\n } = state;\n\n // handle trigger focus/blur\n const triggerRef: typeof ref = React.useRef(null);\n const ignoreTriggerBlur = React.useRef(false);\n\n // resolve listbox shorthand props\n const listbox: typeof listboxSlot = {\n multiselect,\n tabIndex: undefined,\n ...listboxSlot,\n };\n\n // resolve trigger shorthand props\n const trigger: typeof triggerSlot = {\n 'aria-expanded': open,\n 'aria-activedescendant': open ? activeOption?.id : undefined,\n role: 'combobox',\n ...triggerSlot,\n // explicitly type the ref as an intersection here to prevent type errors\n // since the `children` prop has mutually incompatible types between input/button\n // functionally both ref and triggerRef will always be the same element type\n ref: useMergedRefs(ref, triggerSlot?.ref, triggerRef) as React.Ref<HTMLButtonElement & HTMLInputElement>,\n };\n\n /*\n * Handle focus when clicking the listbox popup:\n * 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)\n * 2. Do not close the listbox on button/input blur when clicking into the listbox\n */\n const { onClick: onListboxClick, onMouseDown: onListboxMouseDown } = listbox;\n listbox.onClick = (event: React.MouseEvent<HTMLDivElement>) => {\n triggerRef.current?.focus();\n\n onListboxClick?.(event);\n };\n\n listbox.onMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n ignoreTriggerBlur.current = true;\n\n onListboxMouseDown?.(event);\n };\n\n // the trigger should open/close the popup on click or blur\n const { onBlur: onTriggerBlur, onClick: onTriggerClick, onKeyDown: onTriggerKeyDown } = trigger;\n trigger.onBlur = (event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n if (!ignoreTriggerBlur.current) {\n setOpen(event, false);\n }\n\n ignoreTriggerBlur.current = false;\n\n onTriggerBlur?.(event);\n };\n\n trigger.onClick = (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setOpen(event, !open);\n\n onTriggerClick?.(event);\n };\n\n // handle combobox keyboard interaction\n trigger.onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement> & React.KeyboardEvent<HTMLInputElement>) => {\n const action = getDropdownActionFromKey(event, { open, multiselect });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Open':\n event.preventDefault();\n setOpen(event, true);\n break;\n case 'Close':\n // stop propagation for escape key to avoid dismissing any parent popups\n event.stopPropagation();\n event.preventDefault();\n setOpen(event, false);\n break;\n case 'CloseSelect':\n !multiselect && !activeOption?.disabled && setOpen(event, false);\n // fallthrough\n case 'Select':\n activeOption && selectOption(event, activeOption);\n event.preventDefault();\n break;\n case 'Tab':\n activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\n if (newIndex !== activeIndex) {\n // prevent default page scroll/keyboard action if the index changed\n event.preventDefault();\n setActiveOption(getOptionAtIndex(newIndex));\n }\n\n onTriggerKeyDown?.(event);\n };\n\n return [trigger, listbox];\n}\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"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","names":["React","mergeCallbacks","useId","useEventCallback","useMergedRefs","getDropdownActionFromKey","getIndexFromAction","useTriggerListboxSlots","props","state","ref","triggerSlot","listboxSlot","multiselect","activeOption","getCount","getIndexOfId","getOptionAtIndex","ignoreNextBlur","open","selectOption","setActiveOption","setFocusVisible","setHasFocus","setOpen","triggerRef","useRef","listboxId","id","listbox","tabIndex","undefined","trigger","role","listboxOnClick","event","current","focus","onClick","listboxOnMouseOver","onMouseOver","listboxOnMouseDown","onMouseDown","onBlur","onFocus","onKeyDown","action","maxIndex","activeIndex","newIndex","preventDefault","stopPropagation","disabled"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts"],"sourcesContent":["import * as React from 'react';\nimport { mergeCallbacks, useId, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';\nimport { Listbox } from '../components/Listbox/Listbox';\nimport type { ComboboxBaseProps, ComboboxBaseState } from './ComboboxBase.types';\n\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement>,\n triggerSlot?: ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'button'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'input'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\n\n/*\n * useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,\n * with the semantics and event handlers needed for the Combobox and Dropdown components.\n * The element type of the ref should always match the element type used in the trigger shorthand.\n */\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement | HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [\n trigger: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listbox?: ExtractSlotProps<Slot<typeof Listbox>>,\n] {\n const { multiselect } = props;\n const {\n activeOption,\n getCount,\n getIndexOfId,\n getOptionAtIndex,\n ignoreNextBlur,\n open,\n selectOption,\n setActiveOption,\n setFocusVisible,\n setHasFocus,\n setOpen,\n } = state;\n\n // handle trigger focus/blur\n const triggerRef: typeof ref = React.useRef(null);\n\n // resolve listbox shorthand props\n const listboxId = useId('fluent-listbox', listboxSlot?.id);\n const listbox: typeof listboxSlot = listboxSlot && {\n id: listboxId,\n multiselect,\n tabIndex: undefined,\n ...listboxSlot,\n };\n\n // resolve trigger shorthand props\n const trigger: typeof triggerSlot = {\n 'aria-expanded': open,\n 'aria-activedescendant': open ? activeOption?.id : undefined,\n role: 'combobox',\n ...triggerSlot,\n // explicitly type the ref as an intersection here to prevent type errors\n // since the `children` prop has mutually incompatible types between input/button\n // functionally both ref and triggerRef will always be the same element type\n ref: useMergedRefs(ref, triggerSlot?.ref, triggerRef) as React.Ref<HTMLButtonElement & HTMLInputElement>,\n };\n\n /*\n * Handle focus when clicking the listbox popup:\n * 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)\n * 2. Do not close the listbox on button/input blur when clicking into the listbox\n */\n const listboxOnClick = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n triggerRef.current?.focus();\n }, listbox?.onClick),\n );\n\n const listboxOnMouseOver = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n setFocusVisible(false);\n }, listbox?.onMouseOver),\n );\n\n const listboxOnMouseDown = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n ignoreNextBlur.current = true;\n }, listbox?.onMouseDown),\n );\n\n // listbox is nullable, only add event handlers if it exists\n if (listbox) {\n listbox.onClick = listboxOnClick;\n listbox.onMouseOver = listboxOnMouseOver;\n listbox.onMouseDown = listboxOnMouseDown;\n }\n\n // the trigger should open/close the popup on click or blur\n trigger.onBlur = mergeCallbacks((event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n if (!ignoreNextBlur.current) {\n setOpen(event, false);\n }\n\n ignoreNextBlur.current = false;\n\n setHasFocus(false);\n }, trigger.onBlur);\n\n trigger.onClick = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setOpen(event, !open);\n },\n trigger.onClick,\n );\n\n trigger.onFocus = mergeCallbacks(\n (event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n setHasFocus(true);\n },\n trigger.onFocus,\n );\n\n // handle combobox keyboard interaction\n trigger.onKeyDown = mergeCallbacks(\n (event: React.KeyboardEvent<HTMLButtonElement> & React.KeyboardEvent<HTMLInputElement>) => {\n const action = getDropdownActionFromKey(event, { open, multiselect });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Open':\n event.preventDefault();\n setFocusVisible(true);\n setOpen(event, true);\n break;\n case 'Close':\n // stop propagation for escape key to avoid dismissing any parent popups\n event.stopPropagation();\n event.preventDefault();\n setOpen(event, false);\n break;\n case 'CloseSelect':\n !multiselect && !activeOption?.disabled && setOpen(event, false);\n // fallthrough\n case 'Select':\n activeOption && selectOption(event, activeOption);\n event.preventDefault();\n break;\n case 'Tab':\n !multiselect && activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\n if (newIndex !== activeIndex) {\n // prevent default page scroll/keyboard action if the index changed\n event.preventDefault();\n setActiveOption(getOptionAtIndex(newIndex));\n setFocusVisible(true);\n }\n },\n trigger.onKeyDown,\n );\n\n trigger.onMouseOver = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setFocusVisible(false);\n },\n trigger.onMouseOver,\n );\n\n return [trigger, listbox];\n}\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/Combobox/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/Combobox.ts"],"names":[],"mappings":";;;IAAA,uCAA4C","sourcesContent":["export * from './components/Combobox/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/ComboboxField/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=ComboboxField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComboboxField.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/ComboboxField.ts"],"names":[],"mappings":";;;IAAA,uCAAiD","sourcesContent":["export * from './components/ComboboxField/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/Dropdown/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/Dropdown.ts"],"names":[],"mappings":";;;IAAA,uCAA4C","sourcesContent":["export * from './components/Dropdown/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/Listbox/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=Listbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Listbox.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/Listbox.ts"],"names":[],"mappings":";;;IAAA,uCAA2C","sourcesContent":["export * from './components/Listbox/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/Option/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=Option.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Option.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/Option.ts"],"names":[],"mappings":";;;IAAA,uCAA0C","sourcesContent":["export * from './components/Option/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/OptionGroup/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=OptionGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionGroup.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-combobox/src/OptionGroup.ts"],"names":[],"mappings":";;;IAAA,uCAA+C","sourcesContent":["export * from './components/OptionGroup/index';\n"]}
@@ -0,0 +1,16 @@
1
+ define(["require", "exports", "react", "./useCombobox", "./renderCombobox", "./useComboboxStyles", "../../contexts/useComboboxContextValues"], function (require, exports, React, useCombobox_1, renderCombobox_1, useComboboxStyles_1, useComboboxContextValues_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Combobox = void 0;
5
+ /**
6
+ * Combobox component: a selection control that allows users to choose from a set of possible options
7
+ */
8
+ exports.Combobox = React.forwardRef(function (props, ref) {
9
+ var state = useCombobox_1.useCombobox_unstable(props, ref);
10
+ var contextValues = useComboboxContextValues_1.useComboboxContextValues(state);
11
+ useComboboxStyles_1.useComboboxStyles_unstable(state);
12
+ return renderCombobox_1.renderCombobox_unstable(state, contextValues);
13
+ });
14
+ exports.Combobox.displayName = 'Combobox';
15
+ });
16
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-combobox/src/components/Combobox/Combobox.tsx"],"names":[],"mappings":";;;;IAQA;;OAEG;IACU,QAAA,QAAQ,GAAuC,KAAK,CAAC,UAAU,CAAC,UAAC,KAAK,EAAE,GAAG;QACtF,IAAM,KAAK,GAAG,kCAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAM,aAAa,GAAG,mDAAwB,CAAC,KAAK,CAAC,CAAC;QAEtD,8CAA0B,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,wCAAuB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,gBAAQ,CAAC,WAAW,GAAG,UAAU,CAAC","sourcesContent":["import * as React from 'react';\nimport { useCombobox_unstable } from './useCombobox';\nimport { renderCombobox_unstable } from './renderCombobox';\nimport { useComboboxStyles_unstable } from './useComboboxStyles';\nimport type { ComboboxProps } from './Combobox.types';\nimport { useComboboxContextValues } from '../../contexts/useComboboxContextValues';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\n\n/**\n * Combobox component: a selection control that allows users to choose from a set of possible options\n */\nexport const Combobox: ForwardRefComponent<ComboboxProps> = React.forwardRef((props, ref) => {\n const state = useCombobox_unstable(props, ref);\n const contextValues = useComboboxContextValues(state);\n\n useComboboxStyles_unstable(state);\n return renderCombobox_unstable(state, contextValues);\n});\n\nCombobox.displayName = 'Combobox';\n"]}
@@ -0,0 +1,5 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ });
5
+ //# sourceMappingURL=Combobox.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.types.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-combobox/src/components/Combobox/Combobox.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\nimport type {\n ComboboxBaseContextValues,\n ComboboxBaseOpenChangeData,\n ComboboxBaseOpenEvents,\n ComboboxBaseProps,\n ComboboxBaseState,\n} from '../../utils/ComboboxBase.types';\nimport { Listbox } from '../Listbox/Listbox';\n\nexport type ComboboxSlots = {\n /* The root combobox slot */\n root: NonNullable<Slot<'div'>>;\n\n /* The dropdown arrow icon */\n expandIcon: Slot<'span'>;\n\n /* The primary slot, an input with role=\"combobox\" */\n input: NonNullable<Slot<'input'>>;\n\n /* The dropdown listbox slot */\n listbox?: Slot<typeof Listbox>;\n};\n\n/**\n * Combobox Props\n */\nexport type ComboboxProps = Omit<ComponentProps<Partial<ComboboxSlots>, 'input'>, 'children' | 'size'> &\n ComboboxBaseProps & {\n /*\n * Whether the ComboBox allows freeform user input, rather than restricting to the provided options.\n */\n freeform?: boolean;\n\n /*\n * The primary slot, `<input>`, does not support children so we need to explicitly include it here.\n */\n children?: React.ReactNode;\n };\n\n/**\n * State used in rendering Combobox\n */\nexport type ComboboxState = ComponentState<ComboboxSlots> & ComboboxBaseState;\n\n/* Export types defined in ComboboxBase */\nexport type ComboboxContextValues = ComboboxBaseContextValues;\nexport type ComboboxOpenChangeData = ComboboxBaseOpenChangeData;\nexport type ComboboxOpenEvents = ComboboxBaseOpenEvents;\n"]}
@@ -0,0 +1,10 @@
1
+ define(["require", "exports", "tslib", "./Combobox", "./Combobox.types", "./renderCombobox", "./useCombobox", "./useComboboxStyles"], function (require, exports, tslib_1, Combobox_1, Combobox_types_1, renderCombobox_1, useCombobox_1, useComboboxStyles_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(Combobox_1, exports);
5
+ tslib_1.__exportStar(Combobox_types_1, exports);
6
+ tslib_1.__exportStar(renderCombobox_1, exports);
7
+ tslib_1.__exportStar(useCombobox_1, exports);
8
+ tslib_1.__exportStar(useComboboxStyles_1, exports);
9
+ });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-combobox/src/components/Combobox/index.ts"],"names":[],"mappings":";;;IAAA,0CAA2B;IAC3B,gDAAiC;IACjC,gDAAiC;IACjC,6CAA8B;IAC9B,mDAAoC","sourcesContent":["export * from './Combobox';\nexport * from './Combobox.types';\nexport * from './renderCombobox';\nexport * from './useCombobox';\nexport * from './useComboboxStyles';\n"]}
@@ -0,0 +1,20 @@
1
+ define(["require", "exports", "tslib", "react", "@fluentui/react-portal", "@fluentui/react-utilities", "../../contexts/ComboboxContext"], function (require, exports, tslib_1, React, react_portal_1, react_utilities_1, ComboboxContext_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.renderCombobox_unstable = void 0;
5
+ /**
6
+ * Render the final JSX of Combobox
7
+ */
8
+ var renderCombobox_unstable = function (state, contextValues) {
9
+ var _a = react_utilities_1.getSlots(state), slots = _a.slots, slotProps = _a.slotProps;
10
+ return (React.createElement(slots.root, tslib_1.__assign({}, slotProps.root),
11
+ React.createElement(ComboboxContext_1.ComboboxContext.Provider, { value: contextValues.combobox },
12
+ React.createElement(slots.input, tslib_1.__assign({}, slotProps.input)),
13
+ slots.expandIcon && React.createElement(slots.expandIcon, tslib_1.__assign({}, slotProps.expandIcon)),
14
+ slots.listbox &&
15
+ (state.inlinePopup ? (React.createElement(slots.listbox, tslib_1.__assign({}, slotProps.listbox))) : (React.createElement(react_portal_1.Portal, null,
16
+ React.createElement(slots.listbox, tslib_1.__assign({}, slotProps.listbox))))))));
17
+ };
18
+ exports.renderCombobox_unstable = renderCombobox_unstable;
19
+ });
20
+ //# sourceMappingURL=renderCombobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderCombobox.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-combobox/src/components/Combobox/renderCombobox.tsx"],"names":[],"mappings":";;;;IAMA;;OAEG;IACI,IAAM,uBAAuB,GAAG,UAAC,KAAoB,EAAE,aAAoC;QAC1F,IAAA,KAAuB,0BAAQ,CAAgB,KAAK,CAAC,EAAnD,KAAK,WAAA,EAAE,SAAS,eAAmC,CAAC;QAE5D,OAAO,CACL,oBAAC,KAAK,CAAC,IAAI,uBAAK,SAAS,CAAC,IAAI;YAC5B,oBAAC,iCAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa,CAAC,QAAQ;gBACrD,oBAAC,KAAK,CAAC,KAAK,uBAAK,SAAS,CAAC,KAAK,EAAI;gBACnC,KAAK,CAAC,UAAU,IAAI,oBAAC,KAAK,CAAC,UAAU,uBAAK,SAAS,CAAC,UAAU,EAAI;gBAClE,KAAK,CAAC,OAAO;oBACZ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CACnB,oBAAC,KAAK,CAAC,OAAO,uBAAK,SAAS,CAAC,OAAO,EAAI,CACzC,CAAC,CAAC,CAAC,CACF,oBAAC,qBAAM;wBACL,oBAAC,KAAK,CAAC,OAAO,uBAAK,SAAS,CAAC,OAAO,EAAI,CACjC,CACV,CAAC,CACqB,CAChB,CACd,CAAC;IACJ,CAAC,CAAC;IAnBW,QAAA,uBAAuB,2BAmBlC","sourcesContent":["import * as React from 'react';\nimport { Portal } from '@fluentui/react-portal';\nimport { getSlots } from '@fluentui/react-utilities';\nimport { ComboboxContext } from '../../contexts/ComboboxContext';\nimport type { ComboboxContextValues, ComboboxState, ComboboxSlots } from './Combobox.types';\n\n/**\n * Render the final JSX of Combobox\n */\nexport const renderCombobox_unstable = (state: ComboboxState, contextValues: ComboboxContextValues) => {\n const { slots, slotProps } = getSlots<ComboboxSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <ComboboxContext.Provider value={contextValues.combobox}>\n <slots.input {...slotProps.input} />\n {slots.expandIcon && <slots.expandIcon {...slotProps.expandIcon} />}\n {slots.listbox &&\n (state.inlinePopup ? (\n <slots.listbox {...slotProps.listbox} />\n ) : (\n <Portal>\n <slots.listbox {...slotProps.listbox} />\n </Portal>\n ))}\n </ComboboxContext.Provider>\n </slots.root>\n );\n};\n"]}