@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":["components/Listbox/renderListbox.tsx"],"names":[],"mappings":";;;;;;;AAAA,MAAA,KAAA,gBAAA,OAAA,CAAA,OAAA,CAAA;;AACA,MAAA,iBAAA,gBAAA,OAAA,CAAA,2BAAA,CAAA;;AAEA,MAAA,gBAAA,gBAAA,OAAA,CAAA,+BAAA,CAAA;AAEA;;AAEG;;;AACI,MAAM,sBAAsB,GAAG,CAAC,KAAD,EAAsB,aAAtB,KAA6D;EACjG,MAAM;IAAE,KAAF;IAAS;EAAT,IAAuB,iBAAA,CAAA,QAAA,CAAuB,KAAvB,CAA7B;EAEA,OACE,KAAA,CAAA,aAAA,CAAC,gBAAA,CAAA,cAAA,CAAe,QAAhB,EAAwB;IAAC,KAAK,EAAE,aAAa,CAAC;EAAtB,CAAxB,EACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,EAAA,GAAK,SAAS,CAAC;EAAf,CAAX,CADF,CADF;AAKD,CARM;;AAAM,OAAA,CAAA,sBAAA,GAAsB,sBAAtB","sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { ListboxContextValues, ListboxState, ListboxSlots } from './Listbox.types';\nimport { ListboxContext } from '../../contexts/ListboxContext';\n\n/**\n * Render the final JSX of Listbox\n */\nexport const renderListbox_unstable = (state: ListboxState, contextValues: ListboxContextValues) => {\n const { slots, slotProps } = getSlots<ListboxSlots>(state);\n\n return (\n <ListboxContext.Provider value={contextValues.listbox}>\n <slots.root {...slotProps.root} />\n </ListboxContext.Provider>\n );\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":";;;;;;AAAA;AACA;AAEA;AAEA;;;AAGO,MAAMA,sBAAsB,GAAG,CAACC,KAAmB,EAAEC,aAAmC,KAAI;EACjG,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGC,0BAAQ,CAAeJ,KAAK,CAAC;EAE1D,OACEK,oBAACC,+BAAc,CAACC,QAAQ;IAACC,KAAK,EAAEP,aAAa,CAACQ;EAAO,GACnDJ,oBAACH,KAAK,CAACQ,IAAI;IAAA,GAAKP,SAAS,CAACO;EAAI,EAAI,CACV;AAE9B,CAAC;AARYC,8BAAsB","names":["renderListbox_unstable","state","contextValues","slots","slotProps","react_utilities_1","React","ListboxContext_1","Provider","value","listbox","root","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Listbox/renderListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { ListboxContextValues, ListboxState, ListboxSlots } from './Listbox.types';\nimport { ListboxContext } from '../../contexts/ListboxContext';\n\n/**\n * Render the final JSX of Listbox\n */\nexport const renderListbox_unstable = (state: ListboxState, contextValues: ListboxContextValues) => {\n const { slots, slotProps } = getSlots<ListboxSlots>(state);\n\n return (\n <ListboxContext.Provider value={contextValues.listbox}>\n <slots.root {...slotProps.root} />\n </ListboxContext.Provider>\n );\n};\n"]}
@@ -4,20 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useListbox_unstable = void 0;
7
-
8
7
  const React = /*#__PURE__*/require("react");
9
-
10
8
  const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
11
-
12
9
  const react_context_selector_1 = /*#__PURE__*/require("@fluentui/react-context-selector");
13
-
14
- const useSelection_1 = /*#__PURE__*/require("../../utils/useSelection");
15
-
16
10
  const dropdownKeyActions_1 = /*#__PURE__*/require("../../utils/dropdownKeyActions");
17
-
18
- const ComboboxContext_1 = /*#__PURE__*/require("../../contexts/ComboboxContext");
19
-
20
11
  const useOptionCollection_1 = /*#__PURE__*/require("../../utils/useOptionCollection");
12
+ const useScrollOptionsIntoView_1 = /*#__PURE__*/require("../../utils/useScrollOptionsIntoView");
13
+ const useSelection_1 = /*#__PURE__*/require("../../utils/useSelection");
14
+ const ComboboxContext_1 = /*#__PURE__*/require("../../contexts/ComboboxContext");
21
15
  /**
22
16
  * Create the state required to render Listbox.
23
17
  *
@@ -27,8 +21,6 @@ const useOptionCollection_1 = /*#__PURE__*/require("../../utils/useOptionCollect
27
21
  * @param props - props from this instance of Listbox
28
22
  * @param ref - reference to root HTMLElement of Listbox
29
23
  */
30
-
31
-
32
24
  const useListbox_unstable = (props, ref) => {
33
25
  const {
34
26
  multiselect
@@ -37,22 +29,17 @@ const useListbox_unstable = (props, ref) => {
37
29
  const {
38
30
  getCount,
39
31
  getOptionAtIndex,
40
- getOptionById,
41
32
  getIndexOfId
42
33
  } = optionCollection;
43
34
  const {
35
+ clearSelection,
44
36
  selectedOptions,
45
37
  selectOption
46
38
  } = useSelection_1.useSelection(props);
47
39
  const [activeOption, setActiveOption] = React.useState();
48
-
49
- const onOptionClick = (event, option) => {
50
- // clicked option should always become active option
51
- setActiveOption(getOptionById(option.id)); // handle selection change
52
-
53
- selectOption(event, option);
54
- };
55
-
40
+ // track whether keyboard focus outline should be shown
41
+ // tabster/keyborg doesn't work here, since the actual keyboard focus target doesn't move
42
+ const [focusVisible, setFocusVisible] = React.useState(false);
56
43
  const onKeyDown = event => {
57
44
  const action = dropdownKeyActions_1.getDropdownActionFromKey(event, {
58
45
  open: true
@@ -60,57 +47,67 @@ const useListbox_unstable = (props, ref) => {
60
47
  const maxIndex = getCount() - 1;
61
48
  const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;
62
49
  let newIndex = activeIndex;
63
-
64
50
  switch (action) {
65
51
  case 'Select':
66
52
  case 'CloseSelect':
67
53
  activeOption && selectOption(event, activeOption);
68
54
  break;
69
-
70
55
  default:
71
56
  newIndex = dropdownKeyActions_1.getIndexFromAction(action, activeIndex, maxIndex);
72
57
  }
73
-
74
58
  if (newIndex !== activeIndex) {
75
59
  // prevent default page scroll/keyboard action if the index changed
76
60
  event.preventDefault();
77
61
  setActiveOption(getOptionAtIndex(newIndex));
62
+ setFocusVisible(true);
78
63
  }
79
- }; // get state from parent combobox, if it exists
80
-
81
-
64
+ };
65
+ const onMouseOver = event => {
66
+ setFocusVisible(false);
67
+ };
68
+ // get state from parent combobox, if it exists
82
69
  const hasComboboxContext = react_context_selector_1.useHasParentContext(ComboboxContext_1.ComboboxContext);
83
70
  const comboboxActiveOption = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.activeOption);
84
- const comboboxOnOptionClick = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.onOptionClick);
85
- const comboboxSelectedOptions = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.selectedOptions); // without a parent combobox context, provide values directly from Listbox
86
-
71
+ const comboboxFocusVisible = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.focusVisible);
72
+ const comboboxSelectedOptions = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.selectedOptions);
73
+ const comboboxSelectOption = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.selectOption);
74
+ const comboboxSetActiveOption = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.setActiveOption);
75
+ // without a parent combobox context, provide values directly from Listbox
87
76
  const optionContextValues = hasComboboxContext ? {
88
77
  activeOption: comboboxActiveOption,
89
- onOptionClick: comboboxOnOptionClick,
90
- selectedOptions: comboboxSelectedOptions
78
+ focusVisible: comboboxFocusVisible,
79
+ selectedOptions: comboboxSelectedOptions,
80
+ selectOption: comboboxSelectOption,
81
+ setActiveOption: comboboxSetActiveOption
91
82
  } : {
92
83
  activeOption,
93
- onOptionClick,
94
- selectedOptions
84
+ focusVisible,
85
+ selectedOptions,
86
+ selectOption,
87
+ setActiveOption
95
88
  };
96
- return {
89
+ const state = {
97
90
  components: {
98
91
  root: 'div'
99
92
  },
100
93
  root: react_utilities_1.getNativeElementProps('div', {
101
94
  ref,
102
- role: 'listbox',
95
+ role: multiselect ? 'menu' : 'listbox',
103
96
  'aria-activedescendant': hasComboboxContext ? undefined : activeOption === null || activeOption === void 0 ? void 0 : activeOption.id,
104
97
  'aria-multiselectable': multiselect,
105
98
  tabIndex: 0,
106
- onKeyDown,
107
99
  ...props
108
100
  }),
109
101
  multiselect,
102
+ clearSelection,
110
103
  ...optionCollection,
111
104
  ...optionContextValues
112
105
  };
106
+ const scrollContainerRef = useScrollOptionsIntoView_1.useScrollOptionsIntoView(state);
107
+ state.root.ref = react_utilities_1.useMergedRefs(state.root.ref, scrollContainerRef);
108
+ state.root.onKeyDown = react_utilities_1.useEventCallback(react_utilities_1.mergeCallbacks(state.root.onKeyDown, onKeyDown));
109
+ state.root.onMouseOver = react_utilities_1.useEventCallback(react_utilities_1.mergeCallbacks(state.root.onMouseOver, onMouseOver));
110
+ return state;
113
111
  };
114
-
115
112
  exports.useListbox_unstable = useListbox_unstable;
116
113
  //# sourceMappingURL=useListbox.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["components/Listbox/useListbox.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps } from '@fluentui/react-utilities';\nimport { useContextSelector, useHasParentContext } from '@fluentui/react-context-selector';\nimport { useSelection } from '../../utils/useSelection';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../../utils/dropdownKeyActions';\nimport { ComboboxContext } from '../../contexts/ComboboxContext';\nimport type { ListboxProps, ListboxState } from './Listbox.types';\nimport { useOptionCollection } from '../../utils/useOptionCollection';\nimport { OptionValue } from '../../utils/OptionCollection.types';\n\n/**\n * Create the state required to render Listbox.\n *\n * The returned state can be modified with hooks such as useListboxStyles_unstable,\n * before being passed to renderListbox_unstable.\n *\n * @param props - props from this instance of Listbox\n * @param ref - reference to root HTMLElement of Listbox\n */\nexport const useListbox_unstable = (props: ListboxProps, ref: React.Ref<HTMLElement>): ListboxState => {\n const { multiselect } = props;\n const optionCollection = useOptionCollection();\n const { getCount, getOptionAtIndex, getOptionById, getIndexOfId } = optionCollection;\n\n const { selectedOptions, selectOption } = useSelection(props);\n\n const [activeOption, setActiveOption] = React.useState<OptionValue | undefined>();\n\n const onOptionClick = (event: React.MouseEvent<HTMLElement>, option: OptionValue) => {\n // clicked option should always become active option\n setActiveOption(getOptionById(option.id));\n\n // handle selection change\n selectOption(event, option);\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n const action = getDropdownActionFromKey(event, { open: true });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Select':\n case 'CloseSelect':\n activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\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\n // get state from parent combobox, if it exists\n const hasComboboxContext = useHasParentContext(ComboboxContext);\n const comboboxActiveOption = useContextSelector(ComboboxContext, ctx => ctx.activeOption);\n const comboboxOnOptionClick = useContextSelector(ComboboxContext, ctx => ctx.onOptionClick);\n const comboboxSelectedOptions = useContextSelector(ComboboxContext, ctx => ctx.selectedOptions);\n\n // without a parent combobox context, provide values directly from Listbox\n const optionContextValues = hasComboboxContext\n ? {\n activeOption: comboboxActiveOption,\n onOptionClick: comboboxOnOptionClick,\n selectedOptions: comboboxSelectedOptions,\n }\n : {\n activeOption,\n onOptionClick,\n selectedOptions,\n };\n\n return {\n components: {\n root: 'div',\n },\n root: getNativeElementProps('div', {\n ref,\n role: 'listbox',\n 'aria-activedescendant': hasComboboxContext ? undefined : activeOption?.id,\n 'aria-multiselectable': multiselect,\n tabIndex: 0,\n onKeyDown,\n ...props,\n }),\n multiselect,\n ...optionCollection,\n ...optionContextValues,\n };\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"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","names":["useListbox_unstable","props","ref","multiselect","optionCollection","useOptionCollection_1","getCount","getOptionAtIndex","getIndexOfId","clearSelection","selectedOptions","selectOption","useSelection_1","activeOption","setActiveOption","React","useState","focusVisible","setFocusVisible","onKeyDown","event","action","dropdownKeyActions_1","open","maxIndex","activeIndex","id","newIndex","preventDefault","onMouseOver","hasComboboxContext","react_context_selector_1","ComboboxContext_1","comboboxActiveOption","ctx","comboboxFocusVisible","comboboxSelectedOptions","comboboxSelectOption","comboboxSetActiveOption","optionContextValues","state","components","root","react_utilities_1","role","undefined","tabIndex","scrollContainerRef","useScrollOptionsIntoView_1","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Listbox/useListbox.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, mergeCallbacks, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { useContextSelector, useHasParentContext } from '@fluentui/react-context-selector';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../../utils/dropdownKeyActions';\nimport type { OptionValue } from '../../utils/OptionCollection.types';\nimport { useOptionCollection } from '../../utils/useOptionCollection';\nimport { useScrollOptionsIntoView } from '../../utils/useScrollOptionsIntoView';\nimport { useSelection } from '../../utils/useSelection';\nimport { ComboboxContext } from '../../contexts/ComboboxContext';\nimport type { ListboxProps, ListboxState } from './Listbox.types';\n\n/**\n * Create the state required to render Listbox.\n *\n * The returned state can be modified with hooks such as useListboxStyles_unstable,\n * before being passed to renderListbox_unstable.\n *\n * @param props - props from this instance of Listbox\n * @param ref - reference to root HTMLElement of Listbox\n */\nexport const useListbox_unstable = (props: ListboxProps, ref: React.Ref<HTMLElement>): ListboxState => {\n const { multiselect } = props;\n const optionCollection = useOptionCollection();\n const { getCount, getOptionAtIndex, getIndexOfId } = optionCollection;\n\n const { clearSelection, selectedOptions, selectOption } = useSelection(props);\n\n const [activeOption, setActiveOption] = React.useState<OptionValue | undefined>();\n\n // track whether keyboard focus outline should be shown\n // tabster/keyborg doesn't work here, since the actual keyboard focus target doesn't move\n const [focusVisible, setFocusVisible] = React.useState(false);\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n const action = getDropdownActionFromKey(event, { open: true });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Select':\n case 'CloseSelect':\n activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\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\n const onMouseOver = (event: React.MouseEvent<HTMLElement>) => {\n setFocusVisible(false);\n };\n\n // get state from parent combobox, if it exists\n const hasComboboxContext = useHasParentContext(ComboboxContext);\n const comboboxActiveOption = useContextSelector(ComboboxContext, ctx => ctx.activeOption);\n const comboboxFocusVisible = useContextSelector(ComboboxContext, ctx => ctx.focusVisible);\n const comboboxSelectedOptions = useContextSelector(ComboboxContext, ctx => ctx.selectedOptions);\n const comboboxSelectOption = useContextSelector(ComboboxContext, ctx => ctx.selectOption);\n const comboboxSetActiveOption = useContextSelector(ComboboxContext, ctx => ctx.setActiveOption);\n\n // without a parent combobox context, provide values directly from Listbox\n const optionContextValues = hasComboboxContext\n ? {\n activeOption: comboboxActiveOption,\n focusVisible: comboboxFocusVisible,\n selectedOptions: comboboxSelectedOptions,\n selectOption: comboboxSelectOption,\n setActiveOption: comboboxSetActiveOption,\n }\n : {\n activeOption,\n focusVisible,\n selectedOptions,\n selectOption,\n setActiveOption,\n };\n\n const state: ListboxState = {\n components: {\n root: 'div',\n },\n root: getNativeElementProps('div', {\n ref,\n role: multiselect ? 'menu' : 'listbox',\n 'aria-activedescendant': hasComboboxContext ? undefined : activeOption?.id,\n 'aria-multiselectable': multiselect,\n tabIndex: 0,\n ...props,\n }),\n multiselect,\n clearSelection,\n ...optionCollection,\n ...optionContextValues,\n };\n\n const scrollContainerRef = useScrollOptionsIntoView(state);\n state.root.ref = useMergedRefs(state.root.ref, scrollContainerRef);\n\n state.root.onKeyDown = useEventCallback(mergeCallbacks(state.root.onKeyDown, onKeyDown));\n state.root.onMouseOver = useEventCallback(mergeCallbacks(state.root.onMouseOver, onMouseOver));\n\n return state;\n};\n"]}
@@ -4,49 +4,41 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useListboxStyles_unstable = exports.listboxClassNames = void 0;
7
-
8
7
  const react_theme_1 = /*#__PURE__*/require("@fluentui/react-theme");
9
-
10
8
  const react_1 = /*#__PURE__*/require("@griffel/react");
11
-
12
9
  exports.listboxClassNames = {
13
10
  root: 'fui-Listbox'
14
11
  };
15
12
  /**
16
13
  * Styles for the root slot
17
14
  */
18
-
19
15
  const useStyles = /*#__PURE__*/react_1.__styles({
20
- "root": {
21
- "E5pizo": "f1hg901r",
22
- "B7ck84d": "f1ewtqcl",
23
- "Bbmb7ep": ["f1aa9q02", "f16jpd5f"],
24
- "Beyfa6y": ["f16jpd5f", "f1aa9q02"],
25
- "B7oj6ja": ["f1jar5jt", "fyu767a"],
26
- "Btl43ni": ["fyu767a", "f1jar5jt"],
27
- "De3pzq": "fxugw4r",
28
- "mc9l5x": "f22iagw",
29
- "Beiy3e4": "f1vx9l62",
30
- "Bf4jedk": "f3hsy1e",
31
- "z8tnut": "f1x4af0m",
32
- "z189sj": ["f7x41pl", "fruq291"],
33
- "Byoj8tv": "fd55psn",
34
- "uwmqm3": ["fruq291", "f7x41pl"],
35
- "Belr9w4": "fiut8dr"
16
+ root: {
17
+ De3pzq: "fxugw4r",
18
+ B7ck84d: "f1ewtqcl",
19
+ mc9l5x: "f22iagw",
20
+ Beiy3e4: "f1vx9l62",
21
+ Bf4jedk: "f3hsy1e",
22
+ Bmxbyg5: "f5zp4f",
23
+ Bpd4iqm: "fpvhumw",
24
+ oeaueh: "f1yog68k",
25
+ Bw0xxkn: "f13sgyd8",
26
+ z8tnut: "f1x4af0m",
27
+ z189sj: ["f7x41pl", "fruq291"],
28
+ Byoj8tv: "fd55psn",
29
+ uwmqm3: ["fruq291", "f7x41pl"],
30
+ Belr9w4: "fiut8dr"
36
31
  }
37
32
  }, {
38
- "d": [".f1hg901r{box-shadow:var(--shadow16);}", ".f1ewtqcl{box-sizing:border-box;}", ".f1aa9q02{border-bottom-right-radius:var(--borderRadiusMedium);}", ".f16jpd5f{border-bottom-left-radius:var(--borderRadiusMedium);}", ".f1jar5jt{border-top-right-radius:var(--borderRadiusMedium);}", ".fyu767a{border-top-left-radius:var(--borderRadiusMedium);}", ".fxugw4r{background-color:var(--colorNeutralBackground1);}", ".f22iagw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}", ".f1vx9l62{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}", ".f3hsy1e{min-width:160px;}", ".f1x4af0m{padding-top:var(--spacingHorizontalXS);}", ".f7x41pl{padding-right:var(--spacingHorizontalXS);}", ".fruq291{padding-left:var(--spacingHorizontalXS);}", ".fd55psn{padding-bottom:var(--spacingHorizontalXS);}", ".fiut8dr{row-gap:var(--spacingHorizontalXXS);}"]
33
+ d: [".fxugw4r{background-color:var(--colorNeutralBackground1);}", ".f1ewtqcl{box-sizing:border-box;}", ".f22iagw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}", ".f1vx9l62{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}", ".f3hsy1e{min-width:160px;}", ".f5zp4f{overflow-y:auto;}", ".fpvhumw{outline-width:1px;}", ".f1yog68k{outline-style:solid;}", ".f13sgyd8{outline-color:var(--colorTransparentStroke);}", ".f1x4af0m{padding-top:var(--spacingHorizontalXS);}", ".f7x41pl{padding-right:var(--spacingHorizontalXS);}", ".fruq291{padding-left:var(--spacingHorizontalXS);}", ".fd55psn{padding-bottom:var(--spacingHorizontalXS);}", ".fiut8dr{row-gap:var(--spacingHorizontalXXS);}"]
39
34
  });
40
35
  /**
41
36
  * Apply styling to the Listbox slots based on the state
42
37
  */
43
-
44
-
45
38
  const useListboxStyles_unstable = state => {
46
39
  const styles = useStyles();
47
40
  state.root.className = react_1.mergeClasses(exports.listboxClassNames.root, styles.root, state.root.className);
48
41
  return state;
49
42
  };
50
-
51
43
  exports.useListboxStyles_unstable = useListboxStyles_unstable;
52
44
  //# sourceMappingURL=useListboxStyles.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["components/Listbox/useListboxStyles.ts"],"names":[],"mappings":";;;;;;;AAAA,MAAA,aAAA,gBAAA,OAAA,CAAA,uBAAA,CAAA;;AAEA,MAAA,OAAA,gBAAA,OAAA,CAAA,gBAAA,CAAA;;AAGa,OAAA,CAAA,iBAAA,GAAkD;EAC7D,IAAI,EAAE;AADuD,CAAlD;AAIb;;AAEG;;AACH,MAAM,SAAS,gBAAG,OAAA,SAAA;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;AAAA;EAAA;AAAA,EAAlB;AAcA;;AAEG;;;AACI,MAAM,yBAAyB,GAAI,KAAD,IAAsC;EAC7E,MAAM,MAAM,GAAG,SAAS,EAAxB;EACA,KAAK,CAAC,IAAN,CAAW,SAAX,GAAuB,OAAA,CAAA,YAAA,CAAa,OAAA,CAAA,iBAAA,CAAkB,IAA/B,EAAqC,MAAM,CAAC,IAA5C,EAAkD,KAAK,CAAC,IAAN,CAAW,SAA7D,CAAvB;EAEA,OAAO,KAAP;AACD,CALM;;AAAM,OAAA,CAAA,yBAAA,GAAyB,yBAAzB","sourcesContent":["import { tokens } from '@fluentui/react-theme';\nimport { SlotClassNames } from '@fluentui/react-utilities';\nimport { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport type { ListboxSlots, ListboxState } from './Listbox.types';\n\nexport const listboxClassNames: SlotClassNames<ListboxSlots> = {\n root: 'fui-Listbox',\n};\n\n/**\n * Styles for the root slot\n */\nconst useStyles = makeStyles({\n root: {\n boxShadow: `${tokens.shadow16}`,\n boxSizing: 'border-box',\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\n backgroundColor: tokens.colorNeutralBackground1,\n display: 'flex',\n flexDirection: 'column',\n minWidth: '160px',\n ...shorthands.padding(tokens.spacingHorizontalXS),\n rowGap: tokens.spacingHorizontalXXS,\n },\n});\n\n/**\n * Apply styling to the Listbox slots based on the state\n */\nexport const useListboxStyles_unstable = (state: ListboxState): ListboxState => {\n const styles = useStyles();\n state.root.className = mergeClasses(listboxClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":";;;;;;AAAA;AAEA;AAGaA,yBAAiB,GAAiC;EAC7DC,IAAI,EAAE;CACP;AAED;;;AAGA,MAAMC,SAAS,gBAAGC,gBAAU;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;AAAA;EAAA;AAAA,EAY1B;AAEF;;;AAGO,MAAMC,yBAAyB,GAAIC,KAAmB,IAAkB;EAC7E,MAAMC,MAAM,GAAGJ,SAAS,EAAE;EAC1BG,KAAK,CAACJ,IAAI,CAACM,SAAS,GAAGJ,oBAAY,CAACH,yBAAiB,CAACC,IAAI,EAAEK,MAAM,CAACL,IAAI,EAAEI,KAAK,CAACJ,IAAI,CAACM,SAAS,CAAC;EAE9F,OAAOF,KAAK;AACd,CAAC;AALYL,iCAAyB","names":["exports","root","useStyles","react_1","useListboxStyles_unstable","state","styles","className"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Listbox/useListboxStyles.ts"],"sourcesContent":["import { tokens } from '@fluentui/react-theme';\nimport { SlotClassNames } from '@fluentui/react-utilities';\nimport { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport type { ListboxSlots, ListboxState } from './Listbox.types';\n\nexport const listboxClassNames: SlotClassNames<ListboxSlots> = {\n root: 'fui-Listbox',\n};\n\n/**\n * Styles for the root slot\n */\nconst useStyles = makeStyles({\n root: {\n backgroundColor: tokens.colorNeutralBackground1,\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n minWidth: '160px',\n overflowY: 'auto',\n ...shorthands.outline('1px', 'solid', tokens.colorTransparentStroke),\n ...shorthands.padding(tokens.spacingHorizontalXS),\n rowGap: tokens.spacingHorizontalXXS,\n },\n});\n\n/**\n * Apply styling to the Listbox slots based on the state\n */\nexport const useListboxStyles_unstable = (state: ListboxState): ListboxState => {\n const styles = useStyles();\n state.root.className = mergeClasses(listboxClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"]}
@@ -4,19 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Option = void 0;
7
-
8
7
  const React = /*#__PURE__*/require("react");
9
-
10
8
  const useOption_1 = /*#__PURE__*/require("./useOption");
11
-
12
9
  const renderOption_1 = /*#__PURE__*/require("./renderOption");
13
-
14
10
  const useOptionStyles_1 = /*#__PURE__*/require("./useOptionStyles");
15
11
  /**
16
12
  * Option component: a styled child option of a Combobox
17
13
  */
18
-
19
-
20
14
  exports.Option = /*#__PURE__*/React.forwardRef((props, ref) => {
21
15
  const state = useOption_1.useOption_unstable(props, ref);
22
16
  useOptionStyles_1.useOptionStyles_unstable(state);
@@ -1 +1 @@
1
- {"version":3,"sources":["components/Option/Option.tsx"],"names":[],"mappings":";;;;;;;AAAA,MAAA,KAAA,gBAAA,OAAA,CAAA,OAAA,CAAA;;AACA,MAAA,WAAA,gBAAA,OAAA,CAAA,aAAA,CAAA;;AACA,MAAA,cAAA,gBAAA,OAAA,CAAA,gBAAA,CAAA;;AACA,MAAA,iBAAA,gBAAA,OAAA,CAAA,mBAAA,CAAA;AAIA;;AAEG;;;AACU,OAAA,CAAA,MAAA,gBAA2C,KAAK,CAAC,UAAN,CAAiB,CAAC,KAAD,EAAQ,GAAR,KAAe;EACtF,MAAM,KAAK,GAAG,WAAA,CAAA,kBAAA,CAAmB,KAAnB,EAA0B,GAA1B,CAAd;EAEA,iBAAA,CAAA,wBAAA,CAAyB,KAAzB;EACA,OAAO,cAAA,CAAA,qBAAA,CAAsB,KAAtB,CAAP;AACD,CALuD,CAA3C;AAOb,OAAA,CAAA,MAAA,CAAO,WAAP,GAAqB,QAArB","sourcesContent":["import * as React from 'react';\nimport { useOption_unstable } from './useOption';\nimport { renderOption_unstable } from './renderOption';\nimport { useOptionStyles_unstable } from './useOptionStyles';\nimport type { OptionProps } from './Option.types';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\n\n/**\n * Option component: a styled child option of a Combobox\n */\nexport const Option: ForwardRefComponent<OptionProps> = React.forwardRef((props, ref) => {\n const state = useOption_unstable(props, ref);\n\n useOptionStyles_unstable(state);\n return renderOption_unstable(state);\n});\n\nOption.displayName = 'Option';\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAIA;;;AAGaA,cAAM,gBAAqCC,KAAK,CAACC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAI;EACtF,MAAMC,KAAK,GAAGC,8BAAkB,CAACH,KAAK,EAAEC,GAAG,CAAC;EAE5CG,0CAAwB,CAACF,KAAK,CAAC;EAC/B,OAAOG,oCAAqB,CAACH,KAAK,CAAC;AACrC,CAAC,CAAC;AAEFL,cAAM,CAACS,WAAW,GAAG,QAAQ","names":["exports","React","forwardRef","props","ref","state","useOption_1","useOptionStyles_1","renderOption_1","displayName"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Option/Option.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useOption_unstable } from './useOption';\nimport { renderOption_unstable } from './renderOption';\nimport { useOptionStyles_unstable } from './useOptionStyles';\nimport type { OptionProps } from './Option.types';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\n\n/**\n * Option component: a styled child option of a Combobox\n */\nexport const Option: ForwardRefComponent<OptionProps> = React.forwardRef((props, ref) => {\n const state = useOption_unstable(props, ref);\n\n useOptionStyles_unstable(state);\n return renderOption_unstable(state);\n});\n\nOption.displayName = 'Option';\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"","names":[],"sourceRoot":"../src/","sources":[],"sourcesContent":[]}
@@ -3,16 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
6
  const tslib_1 = /*#__PURE__*/require("tslib");
8
-
9
7
  tslib_1.__exportStar(require("./Option"), exports);
10
-
11
8
  tslib_1.__exportStar(require("./Option.types"), exports);
12
-
13
9
  tslib_1.__exportStar(require("./renderOption"), exports);
14
-
15
10
  tslib_1.__exportStar(require("./useOption"), exports);
16
-
17
11
  tslib_1.__exportStar(require("./useOptionStyles"), exports);
18
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["components/Option/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,UAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,aAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './Option';\nexport * from './Option.types';\nexport * from './renderOption';\nexport * from './useOption';\nexport * from './useOptionStyles';\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":";;;;;;AAAAA;AACAA;AACAA;AACAA;AACAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Option/index.ts"],"sourcesContent":["export * from './Option';\nexport * from './Option.types';\nexport * from './renderOption';\nexport * from './useOption';\nexport * from './useOptionStyles';\n"]}
@@ -4,24 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.renderOption_unstable = void 0;
7
-
8
7
  const React = /*#__PURE__*/require("react");
9
-
10
8
  const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
11
9
  /**
12
10
  * Render the final JSX of Option
13
11
  */
14
-
15
-
16
12
  const renderOption_unstable = state => {
17
13
  const {
18
14
  slots,
19
15
  slotProps
20
16
  } = react_utilities_1.getSlots(state);
21
- return React.createElement(slots.root, { ...slotProps.root
22
- }, React.createElement(slots.checkIcon, { ...slotProps.checkIcon
17
+ return React.createElement(slots.root, {
18
+ ...slotProps.root
19
+ }, React.createElement(slots.checkIcon, {
20
+ ...slotProps.checkIcon
23
21
  }), slotProps.root.children);
24
22
  };
25
-
26
23
  exports.renderOption_unstable = renderOption_unstable;
27
24
  //# sourceMappingURL=renderOption.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["components/Option/renderOption.tsx"],"names":[],"mappings":";;;;;;;AAAA,MAAA,KAAA,gBAAA,OAAA,CAAA,OAAA,CAAA;;AACA,MAAA,iBAAA,gBAAA,OAAA,CAAA,2BAAA,CAAA;AAGA;;AAEG;;;AACI,MAAM,qBAAqB,GAAI,KAAD,IAAuB;EAC1D,MAAM;IAAE,KAAF;IAAS;EAAT,IAAuB,iBAAA,CAAA,QAAA,CAAsB,KAAtB,CAA7B;EAEA,OACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,EAAA,GAAK,SAAS,CAAC;EAAf,CAAX,EACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,SAAP,EAAgB,EAAA,GAAK,SAAS,CAAC;EAAf,CAAhB,CADF,EAEG,SAAS,CAAC,IAAV,CAAe,QAFlB,CADF;AAMD,CATM;;AAAM,OAAA,CAAA,qBAAA,GAAqB,qBAArB","sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { OptionState, OptionSlots } from './Option.types';\n\n/**\n * Render the final JSX of Option\n */\nexport const renderOption_unstable = (state: OptionState) => {\n const { slots, slotProps } = getSlots<OptionSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <slots.checkIcon {...slotProps.checkIcon} />\n {slotProps.root.children}\n </slots.root>\n );\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":";;;;;;AAAA;AACA;AAGA;;;AAGO,MAAMA,qBAAqB,GAAIC,KAAkB,IAAI;EAC1D,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGC,0BAAQ,CAAcH,KAAK,CAAC;EAEzD,OACEI,oBAACH,KAAK,CAACI,IAAI;IAAA,GAAKH,SAAS,CAACG;EAAI,GAC5BD,oBAACH,KAAK,CAACK,SAAS;IAAA,GAAKJ,SAAS,CAACI;EAAS,EAAI,EAC3CJ,SAAS,CAACG,IAAI,CAACE,QAAQ,CACb;AAEjB,CAAC;AATYC,6BAAqB","names":["renderOption_unstable","state","slots","slotProps","react_utilities_1","React","root","checkIcon","children","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Option/renderOption.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { OptionState, OptionSlots } from './Option.types';\n\n/**\n * Render the final JSX of Option\n */\nexport const renderOption_unstable = (state: OptionState) => {\n const { slots, slotProps } = getSlots<OptionSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <slots.checkIcon {...slotProps.checkIcon} />\n {slotProps.root.children}\n </slots.root>\n );\n};\n"]}
@@ -4,30 +4,31 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useOption_unstable = void 0;
7
-
8
7
  const React = /*#__PURE__*/require("react");
9
-
10
8
  const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
11
-
12
9
  const react_context_selector_1 = /*#__PURE__*/require("@fluentui/react-context-selector");
13
-
14
10
  const react_icons_1 = /*#__PURE__*/require("@fluentui/react-icons");
15
-
16
- const ListboxContext_1 = /*#__PURE__*/require("../../contexts/ListboxContext"); // TODO: refine this more
17
-
18
-
19
- function getValueString(value, children) {
20
- if (value) {
21
- return value;
11
+ const ComboboxContext_1 = /*#__PURE__*/require("../../contexts/ComboboxContext");
12
+ const ListboxContext_1 = /*#__PURE__*/require("../../contexts/ListboxContext");
13
+ function getTextString(text, children) {
14
+ if (text !== undefined) {
15
+ return text;
22
16
  }
23
-
24
- let valueString = '';
17
+ let textString = '';
18
+ let hasNonStringChild = false;
25
19
  React.Children.forEach(children, child => {
26
20
  if (typeof child === 'string') {
27
- valueString += child;
21
+ textString += child;
22
+ } else {
23
+ hasNonStringChild = true;
28
24
  }
29
25
  });
30
- return valueString;
26
+ // warn if an Option has non-string children and no text prop
27
+ if (hasNonStringChild) {
28
+ // eslint-disable-next-line no-console
29
+ console.warn('Provide a `text` prop to Option components when they contain non-string children.');
30
+ }
31
+ return textString;
31
32
  }
32
33
  /**
33
34
  * Create the state required to render Option.
@@ -38,67 +39,75 @@ function getValueString(value, children) {
38
39
  * @param props - props from this instance of Option
39
40
  * @param ref - reference to root HTMLElement of Option
40
41
  */
41
-
42
-
43
42
  const useOption_unstable = (props, ref) => {
44
43
  const {
44
+ children,
45
45
  disabled,
46
+ text,
46
47
  value
47
48
  } = props;
48
49
  const optionRef = React.useRef(null);
49
- const optionValue = getValueString(value, props.children); // context values
50
-
50
+ const optionText = getTextString(text, children);
51
+ const optionValue = value !== null && value !== void 0 ? value : optionText;
52
+ // use the id if provided, otherwise use a generated id
53
+ const id = react_utilities_1.useId('fluent-option', props.id);
54
+ // data used for context registration & events
55
+ const optionData = React.useMemo(() => ({
56
+ id,
57
+ disabled,
58
+ text: optionText,
59
+ value: optionValue
60
+ }), [id, disabled, optionText, optionValue]);
61
+ // context values
62
+ const focusVisible = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.focusVisible);
51
63
  const multiselect = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.multiselect);
52
- const onOptionClick = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.onOptionClick);
53
64
  const registerOption = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.registerOption);
54
65
  const selected = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => {
55
66
  const selectedOptions = ctx.selectedOptions;
56
67
  return !!optionValue && !!selectedOptions.find(o => o === optionValue);
57
- }); // use the id if provided, otherwise use a generated id
58
-
59
- const defaultId = react_utilities_1.useId('fluent-option');
60
- const id = React.useMemo(() => {
61
- return props.id || defaultId;
62
- }, [props.id, defaultId]); // current active option?
63
-
68
+ });
69
+ const selectOption = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.selectOption);
70
+ const setActiveOption = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => ctx.setActiveOption);
71
+ const setOpen = react_context_selector_1.useContextSelector(ComboboxContext_1.ComboboxContext, ctx => ctx.setOpen);
72
+ // current active option?
64
73
  const active = react_context_selector_1.useContextSelector(ListboxContext_1.ListboxContext, ctx => {
65
74
  var _a, _b;
66
-
67
75
  return ((_a = ctx.activeOption) === null || _a === void 0 ? void 0 : _a.id) !== undefined && ((_b = ctx.activeOption) === null || _b === void 0 ? void 0 : _b.id) === id;
68
- }); // check icon
69
-
76
+ });
77
+ // check icon
70
78
  let CheckIcon = React.createElement(react_icons_1.CheckmarkFilled, null);
71
-
72
79
  if (multiselect) {
73
- CheckIcon = selected ? React.createElement(react_icons_1.CheckboxCheckedFilled, null) : React.createElement(react_icons_1.CheckboxUncheckedFilled, null);
80
+ CheckIcon = selected ? React.createElement(react_icons_1.Checkmark12Filled, null) : '';
74
81
  }
75
-
76
82
  const onClick = event => {
77
83
  var _a;
78
-
79
84
  if (disabled) {
80
85
  event.preventDefault();
81
86
  return;
82
87
  }
83
-
84
- onOptionClick(event, {
85
- id,
86
- disabled,
87
- value: optionValue
88
- });
88
+ // clicked option should always become active option
89
+ setActiveOption(optionData);
90
+ // close on option click for single-select options in a combobox
91
+ if (!multiselect) {
92
+ setOpen === null || setOpen === void 0 ? void 0 : setOpen(event, false);
93
+ }
94
+ // handle selection change
95
+ selectOption(event, optionData);
89
96
  (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, event);
90
- }; // register option data with context
91
-
92
-
97
+ };
98
+ // register option data with context
93
99
  React.useEffect(() => {
94
100
  if (id && optionRef.current) {
95
- return registerOption({
96
- id,
97
- disabled,
98
- value: optionValue
99
- }, optionRef.current);
101
+ return registerOption(optionData, optionRef.current);
100
102
  }
101
- }, [registerOption, id, disabled, optionValue]);
103
+ }, [id, optionData, registerOption]);
104
+ const semanticProps = multiselect ? {
105
+ role: 'menuitemcheckbox',
106
+ 'aria-checked': selected
107
+ } : {
108
+ role: 'option',
109
+ 'aria-selected': selected
110
+ };
102
111
  return {
103
112
  components: {
104
113
  root: 'div',
@@ -106,10 +115,9 @@ const useOption_unstable = (props, ref) => {
106
115
  },
107
116
  root: react_utilities_1.getNativeElementProps('div', {
108
117
  ref: react_utilities_1.useMergedRefs(ref, optionRef),
109
- role: 'option',
110
118
  'aria-disabled': disabled ? 'true' : undefined,
111
- 'aria-selected': `${selected}`,
112
119
  id,
120
+ ...semanticProps,
113
121
  ...props,
114
122
  onClick
115
123
  }),
@@ -122,10 +130,10 @@ const useOption_unstable = (props, ref) => {
122
130
  }),
123
131
  active,
124
132
  disabled,
133
+ focusVisible,
125
134
  multiselect,
126
135
  selected
127
136
  };
128
137
  };
129
-
130
138
  exports.useOption_unstable = useOption_unstable;
131
139
  //# sourceMappingURL=useOption.js.map