primereact 10.3.3 → 10.5.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 (276) hide show
  1. package/accordion/accordion.cjs.js +1 -1
  2. package/accordion/accordion.cjs.min.js +1 -1
  3. package/accordion/accordion.esm.js +1 -1
  4. package/accordion/accordion.esm.min.js +1 -1
  5. package/accordion/accordion.js +1 -1
  6. package/accordion/accordion.min.js +1 -1
  7. package/calendar/calendar.cjs.js +29 -14
  8. package/calendar/calendar.cjs.min.js +1 -1
  9. package/calendar/calendar.esm.js +29 -14
  10. package/calendar/calendar.esm.min.js +1 -1
  11. package/calendar/calendar.js +29 -14
  12. package/calendar/calendar.min.js +1 -1
  13. package/carousel/carousel.cjs.js +1 -0
  14. package/carousel/carousel.cjs.min.js +1 -1
  15. package/carousel/carousel.esm.js +1 -0
  16. package/carousel/carousel.esm.min.js +1 -1
  17. package/carousel/carousel.js +1 -0
  18. package/carousel/carousel.min.js +1 -1
  19. package/checkbox/checkbox.cjs.js +2 -0
  20. package/checkbox/checkbox.cjs.min.js +1 -1
  21. package/checkbox/checkbox.esm.js +2 -0
  22. package/checkbox/checkbox.esm.min.js +1 -1
  23. package/checkbox/checkbox.js +2 -0
  24. package/checkbox/checkbox.min.js +1 -1
  25. package/chips/chips.cjs.js +111 -21
  26. package/chips/chips.cjs.min.js +1 -1
  27. package/chips/chips.esm.js +111 -21
  28. package/chips/chips.esm.min.js +1 -1
  29. package/chips/chips.js +111 -21
  30. package/chips/chips.min.js +1 -1
  31. package/core/core.js +696 -505
  32. package/core/core.min.js +5 -5
  33. package/datatable/datatable.cjs.js +577 -153
  34. package/datatable/datatable.cjs.min.js +1 -1
  35. package/datatable/datatable.esm.js +573 -149
  36. package/datatable/datatable.esm.min.js +1 -1
  37. package/datatable/datatable.js +577 -153
  38. package/datatable/datatable.min.js +1 -1
  39. package/dataview/dataview.d.ts +2 -2
  40. package/divider/divider.cjs.js +2 -2
  41. package/divider/divider.cjs.min.js +1 -1
  42. package/divider/divider.esm.js +2 -2
  43. package/divider/divider.esm.min.js +1 -1
  44. package/divider/divider.js +2 -2
  45. package/divider/divider.min.js +1 -1
  46. package/dropdown/dropdown.cjs.js +327 -160
  47. package/dropdown/dropdown.cjs.min.js +1 -1
  48. package/dropdown/dropdown.d.ts +9 -0
  49. package/dropdown/dropdown.esm.js +327 -160
  50. package/dropdown/dropdown.esm.min.js +1 -1
  51. package/dropdown/dropdown.js +327 -160
  52. package/dropdown/dropdown.min.js +1 -1
  53. package/editor/editor.cjs.js +1 -1
  54. package/editor/editor.cjs.min.js +1 -1
  55. package/editor/editor.esm.js +1 -1
  56. package/editor/editor.esm.min.js +1 -1
  57. package/editor/editor.js +1 -1
  58. package/editor/editor.min.js +1 -1
  59. package/focustrap/focustrap.cjs.js +168 -0
  60. package/focustrap/focustrap.cjs.min.js +1 -0
  61. package/focustrap/focustrap.esm.js +159 -0
  62. package/focustrap/focustrap.esm.min.js +1 -0
  63. package/focustrap/focustrap.js +167 -0
  64. package/focustrap/focustrap.min.js +1 -0
  65. package/focustrap/package.json +7 -0
  66. package/galleria/galleria.cjs.js +26 -24
  67. package/galleria/galleria.cjs.min.js +1 -1
  68. package/galleria/galleria.esm.js +26 -24
  69. package/galleria/galleria.esm.min.js +1 -1
  70. package/galleria/galleria.js +26 -24
  71. package/galleria/galleria.min.js +1 -1
  72. package/hooks/hooks.d.ts +1 -1
  73. package/inputnumber/inputnumber.cjs.js +21 -17
  74. package/inputnumber/inputnumber.cjs.min.js +1 -1
  75. package/inputnumber/inputnumber.esm.js +21 -17
  76. package/inputnumber/inputnumber.esm.min.js +1 -1
  77. package/inputnumber/inputnumber.js +21 -17
  78. package/inputnumber/inputnumber.min.js +1 -1
  79. package/inputswitch/inputswitch.cjs.js +3 -1
  80. package/inputswitch/inputswitch.cjs.min.js +1 -1
  81. package/inputswitch/inputswitch.esm.js +3 -1
  82. package/inputswitch/inputswitch.esm.min.js +1 -1
  83. package/inputswitch/inputswitch.js +3 -1
  84. package/inputswitch/inputswitch.min.js +1 -1
  85. package/knob/knob.cjs.js +62 -0
  86. package/knob/knob.cjs.min.js +1 -1
  87. package/knob/knob.esm.js +62 -0
  88. package/knob/knob.esm.min.js +1 -1
  89. package/knob/knob.js +62 -0
  90. package/knob/knob.min.js +1 -1
  91. package/listbox/listbox.cjs.js +362 -92
  92. package/listbox/listbox.cjs.min.js +1 -1
  93. package/listbox/listbox.esm.js +363 -93
  94. package/listbox/listbox.esm.min.js +1 -1
  95. package/listbox/listbox.js +362 -92
  96. package/listbox/listbox.min.js +1 -1
  97. package/menu/menu.cjs.js +4 -2
  98. package/menu/menu.cjs.min.js +1 -1
  99. package/menu/menu.esm.js +4 -2
  100. package/menu/menu.esm.min.js +1 -1
  101. package/menu/menu.js +5 -4
  102. package/menu/menu.min.js +1 -1
  103. package/menubar/menubar.cjs.js +3 -0
  104. package/menubar/menubar.cjs.min.js +1 -1
  105. package/menubar/menubar.esm.js +3 -0
  106. package/menubar/menubar.esm.min.js +1 -1
  107. package/menubar/menubar.js +3 -0
  108. package/menubar/menubar.min.js +1 -1
  109. package/multiselect/multiselect.cjs.js +377 -107
  110. package/multiselect/multiselect.cjs.min.js +1 -1
  111. package/multiselect/multiselect.esm.js +377 -107
  112. package/multiselect/multiselect.esm.min.js +1 -1
  113. package/multiselect/multiselect.js +377 -107
  114. package/multiselect/multiselect.min.js +1 -1
  115. package/package.json +1 -1
  116. package/paginator/paginator.cjs.js +251 -251
  117. package/paginator/paginator.cjs.min.js +1 -1
  118. package/paginator/paginator.esm.js +258 -258
  119. package/paginator/paginator.esm.min.js +1 -1
  120. package/paginator/paginator.js +251 -251
  121. package/paginator/paginator.min.js +1 -1
  122. package/panelmenu/panelmenu.cjs.js +34 -22
  123. package/panelmenu/panelmenu.cjs.min.js +1 -1
  124. package/panelmenu/panelmenu.esm.js +34 -22
  125. package/panelmenu/panelmenu.esm.min.js +1 -1
  126. package/panelmenu/panelmenu.js +35 -24
  127. package/panelmenu/panelmenu.min.js +1 -1
  128. package/passthrough/tailwind/index.cjs.js +3 -2
  129. package/passthrough/tailwind/index.cjs.min.js +1 -1
  130. package/passthrough/tailwind/index.esm.js +3 -2
  131. package/passthrough/tailwind/index.esm.min.js +1 -1
  132. package/passthrough/tailwind/index.js +3 -2
  133. package/passthrough/tailwind/index.min.js +1 -1
  134. package/password/password.cjs.js +22 -20
  135. package/password/password.cjs.min.js +1 -1
  136. package/password/password.esm.js +22 -20
  137. package/password/password.esm.min.js +1 -1
  138. package/password/password.js +22 -20
  139. package/password/password.min.js +1 -1
  140. package/primereact.all.cjs.js +2199 -951
  141. package/primereact.all.cjs.min.js +1 -1
  142. package/primereact.all.esm.js +2199 -951
  143. package/primereact.all.esm.min.js +1 -1
  144. package/primereact.all.js +2199 -951
  145. package/primereact.all.min.js +1 -1
  146. package/radiobutton/radiobutton.cjs.js +1 -0
  147. package/radiobutton/radiobutton.cjs.min.js +1 -1
  148. package/radiobutton/radiobutton.esm.js +1 -0
  149. package/radiobutton/radiobutton.esm.min.js +1 -1
  150. package/radiobutton/radiobutton.js +1 -0
  151. package/radiobutton/radiobutton.min.js +1 -1
  152. package/rating/rating.cjs.js +103 -4
  153. package/rating/rating.cjs.min.js +1 -1
  154. package/rating/rating.esm.js +103 -4
  155. package/rating/rating.esm.min.js +1 -1
  156. package/rating/rating.js +103 -4
  157. package/rating/rating.min.js +1 -1
  158. package/resources/themes/arya-blue/theme.css +328 -67
  159. package/resources/themes/arya-green/theme.css +328 -67
  160. package/resources/themes/arya-orange/theme.css +328 -67
  161. package/resources/themes/arya-purple/theme.css +26 -6
  162. package/resources/themes/bootstrap4-dark-blue/theme.css +328 -67
  163. package/resources/themes/bootstrap4-dark-purple/theme.css +26 -6
  164. package/resources/themes/bootstrap4-light-blue/theme.css +328 -67
  165. package/resources/themes/bootstrap4-light-purple/theme.css +26 -6
  166. package/resources/themes/fluent-light/theme.css +327 -66
  167. package/resources/themes/lara-dark-amber/theme.css +328 -67
  168. package/resources/themes/lara-dark-blue/theme.css +328 -67
  169. package/resources/themes/lara-dark-cyan/theme.css +328 -67
  170. package/resources/themes/lara-dark-green/theme.css +328 -67
  171. package/resources/themes/lara-dark-indigo/theme.css +328 -67
  172. package/resources/themes/lara-dark-pink/theme.css +328 -67
  173. package/resources/themes/lara-dark-purple/theme.css +26 -6
  174. package/resources/themes/lara-dark-teal/theme.css +328 -67
  175. package/resources/themes/lara-light-amber/theme.css +328 -67
  176. package/resources/themes/lara-light-blue/theme.css +328 -67
  177. package/resources/themes/lara-light-cyan/theme.css +328 -67
  178. package/resources/themes/lara-light-green/theme.css +328 -67
  179. package/resources/themes/lara-light-indigo/theme.css +328 -67
  180. package/resources/themes/lara-light-pink/theme.css +328 -67
  181. package/resources/themes/lara-light-purple/theme.css +26 -6
  182. package/resources/themes/lara-light-teal/theme.css +328 -67
  183. package/resources/themes/luna-amber/theme.css +328 -67
  184. package/resources/themes/luna-blue/theme.css +328 -67
  185. package/resources/themes/luna-green/theme.css +328 -67
  186. package/resources/themes/luna-pink/theme.css +328 -67
  187. package/resources/themes/md-dark-deeppurple/theme.css +158 -138
  188. package/resources/themes/md-dark-indigo/theme.css +454 -193
  189. package/resources/themes/md-light-deeppurple/theme.css +26 -6
  190. package/resources/themes/md-light-indigo/theme.css +328 -67
  191. package/resources/themes/mdc-dark-deeppurple/theme.css +158 -138
  192. package/resources/themes/mdc-dark-indigo/theme.css +454 -193
  193. package/resources/themes/mdc-light-deeppurple/theme.css +26 -6
  194. package/resources/themes/mdc-light-indigo/theme.css +328 -67
  195. package/resources/themes/mira/theme.css +328 -67
  196. package/resources/themes/nano/theme.css +328 -67
  197. package/resources/themes/nova/theme.css +328 -67
  198. package/resources/themes/nova-accent/theme.css +328 -67
  199. package/resources/themes/nova-alt/theme.css +328 -67
  200. package/resources/themes/rhea/theme.css +328 -67
  201. package/resources/themes/saga-blue/theme.css +328 -67
  202. package/resources/themes/saga-green/theme.css +328 -67
  203. package/resources/themes/saga-orange/theme.css +328 -67
  204. package/resources/themes/saga-purple/theme.css +26 -6
  205. package/resources/themes/soho-dark/theme.css +353 -92
  206. package/resources/themes/soho-light/theme.css +328 -67
  207. package/resources/themes/tailwind-light/theme.css +329 -71
  208. package/resources/themes/vela-blue/theme.css +328 -67
  209. package/resources/themes/vela-green/theme.css +328 -67
  210. package/resources/themes/vela-orange/theme.css +328 -67
  211. package/resources/themes/vela-purple/theme.css +26 -6
  212. package/resources/themes/viva-dark/theme.css +328 -67
  213. package/resources/themes/viva-light/theme.css +328 -67
  214. package/selectbutton/selectbutton.cjs.js +96 -50
  215. package/selectbutton/selectbutton.cjs.min.js +1 -1
  216. package/selectbutton/selectbutton.esm.js +96 -50
  217. package/selectbutton/selectbutton.esm.min.js +1 -1
  218. package/selectbutton/selectbutton.js +96 -50
  219. package/selectbutton/selectbutton.min.js +1 -1
  220. package/sidebar/sidebar.cjs.js +18 -16
  221. package/sidebar/sidebar.cjs.min.js +1 -1
  222. package/sidebar/sidebar.esm.js +18 -16
  223. package/sidebar/sidebar.esm.min.js +1 -1
  224. package/sidebar/sidebar.js +18 -16
  225. package/sidebar/sidebar.min.js +1 -1
  226. package/slider/slider.cjs.js +25 -4
  227. package/slider/slider.cjs.min.js +1 -1
  228. package/slider/slider.esm.js +25 -4
  229. package/slider/slider.esm.min.js +1 -1
  230. package/slider/slider.js +25 -4
  231. package/slider/slider.min.js +1 -1
  232. package/splitbutton/splitbutton.cjs.js +4 -3
  233. package/splitbutton/splitbutton.cjs.min.js +1 -1
  234. package/splitbutton/splitbutton.esm.js +4 -3
  235. package/splitbutton/splitbutton.esm.min.js +1 -1
  236. package/splitbutton/splitbutton.js +4 -3
  237. package/splitbutton/splitbutton.min.js +1 -1
  238. package/splitter/splitter.cjs.js +71 -25
  239. package/splitter/splitter.cjs.min.js +1 -1
  240. package/splitter/splitter.d.ts +13 -1
  241. package/splitter/splitter.esm.js +73 -27
  242. package/splitter/splitter.esm.min.js +1 -1
  243. package/splitter/splitter.js +71 -25
  244. package/splitter/splitter.min.js +1 -1
  245. package/tabview/tabview.cjs.js +6 -5
  246. package/tabview/tabview.cjs.min.js +1 -1
  247. package/tabview/tabview.d.ts +39 -34
  248. package/tabview/tabview.esm.js +6 -5
  249. package/tabview/tabview.esm.min.js +1 -1
  250. package/tabview/tabview.js +6 -5
  251. package/tabview/tabview.min.js +1 -1
  252. package/tieredmenu/tieredmenu.cjs.js +4 -3
  253. package/tieredmenu/tieredmenu.cjs.min.js +1 -1
  254. package/tieredmenu/tieredmenu.esm.js +4 -3
  255. package/tieredmenu/tieredmenu.esm.min.js +1 -1
  256. package/tieredmenu/tieredmenu.js +4 -3
  257. package/tieredmenu/tieredmenu.min.js +1 -1
  258. package/togglebutton/togglebutton.cjs.js +15 -14
  259. package/togglebutton/togglebutton.cjs.min.js +1 -1
  260. package/togglebutton/togglebutton.esm.js +14 -13
  261. package/togglebutton/togglebutton.esm.min.js +1 -1
  262. package/togglebutton/togglebutton.js +15 -14
  263. package/togglebutton/togglebutton.min.js +1 -1
  264. package/tree/tree.cjs.js +33 -15
  265. package/tree/tree.cjs.min.js +1 -1
  266. package/tree/tree.esm.js +34 -16
  267. package/tree/tree.esm.min.js +1 -1
  268. package/tree/tree.js +33 -15
  269. package/tree/tree.min.js +1 -1
  270. package/tristatecheckbox/tristatecheckbox.cjs.js +3 -2
  271. package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
  272. package/tristatecheckbox/tristatecheckbox.esm.js +3 -2
  273. package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
  274. package/tristatecheckbox/tristatecheckbox.js +3 -2
  275. package/tristatecheckbox/tristatecheckbox.min.js +1 -1
  276. package/web-types.json +19 -1
@@ -132,6 +132,10 @@ function _toConsumableArray(arr) {
132
132
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread();
133
133
  }
134
134
 
135
+ function _readOnlyError(name) {
136
+ throw new TypeError("\"" + name + "\" is read-only");
137
+ }
138
+
135
139
  function _arrayWithHoles(arr) {
136
140
  if (Array.isArray(arr)) return arr;
137
141
  }
@@ -233,7 +237,8 @@ var classes$1 = {
233
237
  var props = _ref5.itemProps;
234
238
  return utils.classNames('p-multiselect-item', {
235
239
  'p-highlight': props.selected,
236
- 'p-disabled': props.disabled
240
+ 'p-disabled': props.disabled,
241
+ 'p-focus': props.focusedOptionIndex === props.index
237
242
  });
238
243
  },
239
244
  checkboxContainer: 'p-checkbox p-component',
@@ -246,7 +251,7 @@ var classes$1 = {
246
251
  },
247
252
  transition: 'p-connected-overlay'
248
253
  };
249
- var styles$1 = "\n@layer primereact {\n .p-multiselect {\n display: inline-flex;\n user-select: none;\n cursor: pointer;\n }\n \n .p-multiselect-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n cursor: pointer;\n }\n \n .p-multiselect-label-container {\n overflow: hidden;\n flex: 1 1 auto;\n cursor: pointer;\n }\n \n .p-multiselect-label {\n display: block;\n white-space: nowrap;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n \n .p-multiselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n }\n \n .p-multiselect-token {\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n }\n \n .p-multiselect-token-icon {\n cursor: pointer;\n }\n \n .p-multiselect .p-multiselect-panel {\n min-width: 100%;\n }\n \n .p-multiselect-inline.p-multiselect-panel {\n border: none;\n position: initial;\n background: none;\n box-shadow: none;\n }\n \n .p-multiselect-inline.p-multiselect-panel .p-multiselect-items {\n padding: 0;\n }\n \n .p-multiselect-flex.p-multiselect-panel .p-multiselect-items {\n display: flex;\n flex-wrap: wrap;\n }\n \n .p-multiselect-items-wrapper {\n overflow: auto;\n }\n \n .p-multiselect-items {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n \n .p-multiselect-item {\n cursor: pointer;\n display: flex;\n align-items: center;\n font-weight: normal;\n white-space: nowrap;\n position: relative;\n overflow: hidden;\n }\n \n .p-multiselect-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n \n .p-multiselect-select-all-label {\n margin-left: 0.5rem;\n }\n \n .p-multiselect-filter-container {\n position: relative;\n flex: 1 1 auto;\n }\n \n .p-multiselect-filter-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n \n .p-multiselect-filter-container .p-inputtext {\n width: 100%;\n }\n \n .p-multiselect-close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n position: relative;\n margin-left: auto;\n }\n \n .p-multiselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n \n .p-fluid .p-multiselect {\n display: flex;\n }\n}\n";
254
+ var styles$1 = "\n@layer primereact {\n .p-multiselect {\n display: inline-flex;\n user-select: none;\n cursor: pointer;\n }\n \n .p-multiselect-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n cursor: pointer;\n }\n \n .p-multiselect-label-container {\n overflow: hidden;\n flex: 1 1 auto;\n cursor: pointer;\n }\n \n .p-multiselect-label {\n display: block;\n white-space: nowrap;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n \n .p-multiselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n }\n \n .p-multiselect-token {\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n }\n \n .p-multiselect-token-icon {\n cursor: pointer;\n }\n \n .p-multiselect .p-multiselect-panel {\n min-width: 100%;\n }\n \n .p-multiselect-inline.p-multiselect-panel {\n border: none;\n position: initial;\n background: none;\n box-shadow: none;\n }\n \n .p-multiselect-inline.p-multiselect-panel .p-multiselect-items {\n padding: 0;\n }\n \n .p-multiselect-flex.p-multiselect-panel .p-multiselect-items {\n display: flex;\n flex-wrap: wrap;\n }\n \n .p-multiselect-items-wrapper {\n overflow: auto;\n }\n \n .p-multiselect-items {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n \n .p-multiselect-item {\n cursor: pointer;\n display: flex;\n align-items: center;\n font-weight: normal;\n white-space: nowrap;\n position: relative;\n overflow: hidden;\n outline: none;\n }\n \n .p-multiselect-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n \n .p-multiselect-select-all-label {\n margin-left: 0.5rem;\n }\n \n .p-multiselect-filter-container {\n position: relative;\n flex: 1 1 auto;\n }\n \n .p-multiselect-filter-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n \n .p-multiselect-filter-container .p-inputtext {\n width: 100%;\n }\n \n .p-multiselect-close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n position: relative;\n margin-left: auto;\n }\n \n .p-multiselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n right: 3rem;\n }\n \n .p-fluid .p-multiselect {\n display: flex;\n }\n}\n";
250
255
  var inlineStyles = {
251
256
  root: function root(_ref7) {
252
257
  var props = _ref7.props;
@@ -280,6 +285,8 @@ var MultiSelectBase = componentbase.ComponentBase.extend({
280
285
  filterBy: null,
281
286
  filterInputAutoFocus: true,
282
287
  filterLocale: undefined,
288
+ selectOnFocus: false,
289
+ autoOptionFocus: false,
283
290
  filterMatchMode: 'contains',
284
291
  filterPlaceholder: null,
285
292
  filterTemplate: null,
@@ -532,6 +539,8 @@ var Checkbox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace
532
539
  onClick: function onClick(e) {
533
540
  return _onClick(e);
534
541
  },
542
+ 'data-p-highlight': checked,
543
+ 'data-p-disabled': props.disabled,
535
544
  onContextMenu: props.onContextMenu,
536
545
  onMouseDown: props.onMouseDown
537
546
  }, otherProps, ptm('root'));
@@ -739,7 +748,9 @@ var MultiSelectItem = /*#__PURE__*/React__namespace.memo(function (props) {
739
748
  context: {
740
749
  selected: props.selected,
741
750
  disabled: props.disabled,
742
- focused: focusedState
751
+ focused: focusedState,
752
+ focusedIndex: props.focusedIndex,
753
+ index: props.index
743
754
  }
744
755
  });
745
756
  };
@@ -751,22 +762,11 @@ var MultiSelectItem = /*#__PURE__*/React__namespace.memo(function (props) {
751
762
  };
752
763
  var onClick = function onClick(event) {
753
764
  if (props.onClick) {
754
- props.onClick({
755
- originalEvent: event,
756
- option: props.option
757
- });
765
+ props.onClick(event, props.option);
758
766
  }
759
767
  event.preventDefault();
760
768
  event.stopPropagation();
761
769
  };
762
- var onKeyDown = function onKeyDown(event) {
763
- if (props.onKeyDown) {
764
- props.onKeyDown({
765
- originalEvent: event,
766
- option: props.option
767
- });
768
- }
769
- };
770
770
  var checkboxIconProps = mergeProps({
771
771
  className: cx('checkboxIcon')
772
772
  }, getPTOptions('checkboxIcon'));
@@ -775,7 +775,7 @@ var MultiSelectItem = /*#__PURE__*/React__namespace.memo(function (props) {
775
775
  selected: props.selected
776
776
  }) : null;
777
777
  var content = props.template ? utils.ObjectUtils.getJSXElement(props.template, props.option) : props.label;
778
- var tabIndex = props.disabled ? null : props.tabIndex || 0;
778
+ var tabIndex = props.disabled ? -1 : props.tabIndex;
779
779
  var checkboxContainerProps = mergeProps({
780
780
  className: cx('checkboxContainer')
781
781
  }, getPTOptions('checkboxContainer'));
@@ -791,7 +791,6 @@ var MultiSelectItem = /*#__PURE__*/React__namespace.memo(function (props) {
791
791
  })),
792
792
  style: props.style,
793
793
  onClick: onClick,
794
- onKeyDown: onKeyDown,
795
794
  onFocus: onFocus,
796
795
  onBlur: onBlur,
797
796
  tabIndex: tabIndex,
@@ -893,14 +892,15 @@ var MultiSelectPanel = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__n
893
892
  var selected = props.isSelected(option);
894
893
  return /*#__PURE__*/React__namespace.createElement(MultiSelectItem, {
895
894
  hostName: props.hostName,
895
+ index: j,
896
896
  key: optionKey,
897
+ focusedOptionIndex: props.focusedOptionIndex,
897
898
  label: optionLabel,
898
899
  option: option,
899
900
  style: style,
900
901
  template: props.itemTemplate,
901
902
  selected: selected,
902
903
  onClick: props.onOptionSelect,
903
- onKeyDown: props.onOptionKeyDown,
904
904
  tabIndex: tabIndex,
905
905
  disabled: disabled,
906
906
  className: props.itemClassName,
@@ -951,13 +951,14 @@ var MultiSelectPanel = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__n
951
951
  return /*#__PURE__*/React__namespace.createElement(MultiSelectItem, {
952
952
  hostName: props.hostName,
953
953
  key: optionKey,
954
+ focusedOptionIndex: props.focusedOptionIndex,
954
955
  label: optionLabel,
955
956
  option: option,
956
957
  style: style,
958
+ index: index,
957
959
  template: props.itemTemplate,
958
960
  selected: selected,
959
961
  onClick: props.onOptionSelect,
960
- onKeyDown: props.onOptionKeyDown,
961
962
  tabIndex: tabIndex,
962
963
  disabled: disabled,
963
964
  className: props.itemClassName,
@@ -1086,19 +1087,35 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1086
1087
  var mergeProps = hooks.useMergeProps();
1087
1088
  var context = React__namespace.useContext(PrimeReact.PrimeReactContext);
1088
1089
  var props = MultiSelectBase.getProps(inProps, context);
1089
- var _React$useState = React__namespace.useState(''),
1090
+ var _React$useState = React__namespace.useState(null),
1090
1091
  _React$useState2 = _slicedToArray(_React$useState, 2),
1091
- filterState = _React$useState2[0],
1092
- setFilterState = _React$useState2[1];
1092
+ focusedOptionIndex = _React$useState2[0],
1093
+ setFocusedOptionIndex = _React$useState2[1];
1093
1094
  var _React$useState3 = React__namespace.useState(false),
1094
1095
  _React$useState4 = _slicedToArray(_React$useState3, 2),
1095
- focusedState = _React$useState4[0],
1096
- setFocusedState = _React$useState4[1];
1097
- var _React$useState5 = React__namespace.useState(props.inline),
1096
+ clicked = _React$useState4[0],
1097
+ setClicked = _React$useState4[1];
1098
+ var _React$useState5 = React__namespace.useState(''),
1098
1099
  _React$useState6 = _slicedToArray(_React$useState5, 2),
1099
- overlayVisibleState = _React$useState6[0],
1100
- setOverlayVisibleState = _React$useState6[1];
1100
+ filterState = _React$useState6[0],
1101
+ setFilterState = _React$useState6[1];
1102
+ var _React$useState7 = React__namespace.useState(-1),
1103
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
1104
+ startRangeIndex = _React$useState8[0],
1105
+ setStartRangeIndex = _React$useState8[1];
1106
+ var _React$useState9 = React__namespace.useState(false),
1107
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
1108
+ focusedState = _React$useState10[0],
1109
+ setFocusedState = _React$useState10[1];
1110
+ var _React$useState11 = React__namespace.useState(props.inline),
1111
+ _React$useState12 = _slicedToArray(_React$useState11, 2),
1112
+ overlayVisibleState = _React$useState12[0],
1113
+ setOverlayVisibleState = _React$useState12[1];
1101
1114
  var elementRef = React__namespace.useRef(null);
1115
+ var searchValue = React__namespace.useRef(null);
1116
+ var searchTimeout = React__namespace.useRef(null);
1117
+ var firstHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
1118
+ var lastHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
1102
1119
  var inputRef = React__namespace.useRef(props.inputRef);
1103
1120
  var labelRef = React__namespace.useRef(null);
1104
1121
  var overlayRef = React__namespace.useRef(null);
@@ -1140,6 +1157,14 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1140
1157
  _useOverlayListener2 = _slicedToArray(_useOverlayListener, 2),
1141
1158
  bindOverlayListener = _useOverlayListener2[0],
1142
1159
  unbindOverlayListener = _useOverlayListener2[1];
1160
+ var onFirstHiddenFocus = function onFirstHiddenFocus(event) {
1161
+ var focusableEl = event.relatedTarget === inputRef.current ? utils.DomHandler.getFirstFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : inputRef.current;
1162
+ utils.DomHandler.focus(focusableEl);
1163
+ };
1164
+ var onLastHiddenFocus = function onLastHiddenFocus(event) {
1165
+ var focusableEl = event.relatedTarget === inputRef.current ? utils.DomHandler.getLastFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : inputRef.current;
1166
+ utils.DomHandler.focus(focusableEl);
1167
+ };
1143
1168
  var onPanelClick = function onPanelClick(event) {
1144
1169
  overlayservice.OverlayService.emit('overlay-click', {
1145
1170
  originalEvent: event,
@@ -1149,63 +1174,60 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1149
1174
  var allowOptionSelect = function allowOptionSelect() {
1150
1175
  return !props.selectionLimit || !props.value || props.value && props.value.length < props.selectionLimit;
1151
1176
  };
1152
- var onOptionSelect = function onOptionSelect(event) {
1153
- var originalEvent = event.originalEvent,
1154
- option = event.option;
1155
- if (props.disabled || isOptionDisabled(option)) {
1156
- return;
1177
+ var findNextSelectedOptionIndex = function findNextSelectedOptionIndex(index) {
1178
+ var matchedOptionIndex = hasSelectedOption && index < visibleOptions.length - 1 ? visibleOptions.slice(index + 1).findIndex(function (option) {
1179
+ return isValidSelectedOption(option);
1180
+ }) : -1;
1181
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1;
1182
+ };
1183
+ var findPrevSelectedOptionIndex = function findPrevSelectedOptionIndex(index) {
1184
+ var matchedOptionIndex = hasSelectedOption && index > 0 ? utils.ObjectUtils.findLastIndex(visibleOptions.slice(0, index), function (option) {
1185
+ return isValidSelectedOption(option);
1186
+ }) : -1;
1187
+ return matchedOptionIndex > -1 ? matchedOptionIndex : -1;
1188
+ };
1189
+ var findNearestSelectedOptionIndex = function findNearestSelectedOptionIndex(index) {
1190
+ var firstCheckUp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1191
+ var matchedOptionIndex = -1;
1192
+ if (hasSelectedOption) {
1193
+ if (firstCheckUp) {
1194
+ matchedOptionIndex = findPrevSelectedOptionIndex(index);
1195
+ matchedOptionIndex = matchedOptionIndex === -1 ? findNextSelectedOptionIndex(index) : matchedOptionIndex;
1196
+ } else {
1197
+ matchedOptionIndex = findNextSelectedOptionIndex(index);
1198
+ matchedOptionIndex = matchedOptionIndex === -1 ? findPrevSelectedOptionIndex(index) : matchedOptionIndex;
1199
+ }
1157
1200
  }
1158
- var optionValue = getOptionValue(option);
1159
- var isUsed = isOptionValueUsed(option);
1160
- var selected = isSelected(option);
1161
- var allowSelect = allowOptionSelect();
1162
- if (selected) {
1163
- updateModel(originalEvent, props.value.filter(function (val) {
1164
- return !utils.ObjectUtils.equals(isUsed ? val : getOptionValue(val), optionValue, equalityKey);
1165
- }), option);
1166
- } else if (allowSelect) {
1167
- updateModel(originalEvent, [].concat(_toConsumableArray(props.value || []), [optionValue]), option);
1201
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
1202
+ };
1203
+ var onOptionSelectRange = function onOptionSelectRange(event) {
1204
+ var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
1205
+ var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
1206
+ start === -1 && (start = findNearestSelectedOptionIndex(end, true));
1207
+ end === -1 && (end = findNearestSelectedOptionIndex(start));
1208
+ if (start !== -1 && end !== -1) {
1209
+ var rangeStart = Math.min(start, end);
1210
+ var rangeEnd = Math.max(start, end);
1211
+ var value = visibleOptions.slice(rangeStart, rangeEnd + 1).filter(function (option) {
1212
+ return isValidOption(option);
1213
+ }).map(function (option) {
1214
+ return getOptionValue(option);
1215
+ });
1216
+ updateModel(event, value);
1168
1217
  }
1169
1218
  };
1170
- var onOptionKeyDown = function onOptionKeyDown(event) {
1171
- var originalEvent = event.originalEvent;
1172
- var listItem = originalEvent.currentTarget;
1173
- switch (originalEvent.which) {
1174
- //down
1175
- case 40:
1176
- var nextItem = findNextItem(listItem);
1177
- nextItem && nextItem.focus();
1178
- originalEvent.preventDefault();
1179
- break;
1180
-
1181
- //up
1182
- case 38:
1183
- var prevItem = findPrevItem(listItem);
1184
- prevItem && prevItem.focus();
1185
- originalEvent.preventDefault();
1186
- break;
1187
-
1188
- //enter and space
1189
- case 13:
1190
- case 32:
1191
- onOptionSelect(event);
1192
- originalEvent.preventDefault();
1193
- break;
1194
-
1195
- //escape
1196
- case 27:
1197
- hide();
1198
- utils.DomHandler.focus(inputRef.current);
1199
- break;
1219
+ var onOptionSelect = function onOptionSelect(event, option) {
1220
+ var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
1221
+ if (props.disabled || isOptionDisabled(option)) {
1222
+ return;
1200
1223
  }
1201
- };
1202
- var findNextItem = function findNextItem(item) {
1203
- var nextItem = item.nextElementSibling;
1204
- return nextItem ? utils.DomHandler.getAttribute(nextItem, 'data-p-disabled') === true || utils.DomHandler.getAttribute(nextItem, 'data-pc-section') === 'itemgroup' ? findNextItem(nextItem) : nextItem : null;
1205
- };
1206
- var findPrevItem = function findPrevItem(item) {
1207
- var prevItem = item.previousElementSibling;
1208
- return prevItem ? utils.DomHandler.getAttribute(prevItem, 'data-p-disabled') === true || utils.DomHandler.getAttribute(prevItem, 'data-pc-section') === 'itemgroup' ? findPrevItem(prevItem) : prevItem : null;
1224
+ var selected = isSelected(option);
1225
+ var value = null;
1226
+ if (selected) value = props.value.filter(function (val) {
1227
+ return !utils.ObjectUtils.equals(val, getOptionValue(option), equalityKey);
1228
+ });else value = [].concat(_toConsumableArray(props.value || []), [getOptionValue(option)]);
1229
+ updateModel(event, value);
1230
+ index !== -1 && setFocusedOptionIndex(index);
1209
1231
  };
1210
1232
  var onClick = function onClick(event) {
1211
1233
  if (!props.inline && !props.disabled && !props.loading && !isPanelClicked(event) && utils.DomHandler.getAttribute(event.target, 'data-pc-section') !== 'removetokenicon' && !isClearClicked(event)) {
@@ -1213,42 +1235,170 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1213
1235
  utils.DomHandler.focus(inputRef.current);
1214
1236
  event.preventDefault();
1215
1237
  }
1238
+ setClicked(true);
1239
+ };
1240
+ var onArrowDownKey = function onArrowDownKey(event) {
1241
+ if (!overlayVisibleState) {
1242
+ show();
1243
+ props.editable && changeFocusedOptionIndex(event, findSelectedOptionIndex());
1244
+ } else {
1245
+ var optionIndex = focusedOptionIndex !== -1 ? findNextOptionIndex(focusedOptionIndex) : clicked ? findFirstOptionIndex() : findFirstFocusedOptionIndex();
1246
+ if (event.shiftKey) {
1247
+ onOptionSelectRange(event, startRangeIndex, optionIndex);
1248
+ }
1249
+ changeFocusedOptionIndex(event, optionIndex);
1250
+ }
1251
+ event.preventDefault();
1252
+ };
1253
+ var onArrowUpKey = function onArrowUpKey(event) {
1254
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1255
+ if (event.altKey && !pressedInInputText) {
1256
+ if (focusedOptionIndex !== -1) {
1257
+ onOptionSelect(event, visibleOptions[focusedOptionIndex]);
1258
+ }
1259
+ overlayVisibleState && hide();
1260
+ event.preventDefault();
1261
+ } else {
1262
+ var optionIndex = focusedOptionIndex !== -1 ? findPrevOptionIndex(focusedOptionIndex) : clicked ? findLastOptionIndex() : findLastFocusedOptionIndex();
1263
+ changeFocusedOptionIndex(event, optionIndex);
1264
+ !overlayVisibleState && show();
1265
+ event.preventDefault();
1266
+ }
1267
+ };
1268
+ var onEnterKey = function onEnterKey(event) {
1269
+ if (!overlayVisibleState) {
1270
+ setFocusedOptionIndex(-1);
1271
+ onArrowDownKey(event);
1272
+ } else {
1273
+ if (focusedOptionIndex !== -1) {
1274
+ if (event.shiftKey) onOptionSelectRange(event, focusedOptionIndex);else onOptionSelect(event, visibleOptions[focusedOptionIndex]);
1275
+ }
1276
+ hide();
1277
+ }
1278
+ event.preventDefault();
1279
+ };
1280
+ var onHomeKey = function onHomeKey(event) {
1281
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1282
+ var currentTarget = event.currentTarget;
1283
+ if (pressedInInputText) {
1284
+ var len = currentTarget.value.length;
1285
+ currentTarget.setSelectionRange(0, event.shiftKey ? len : 0);
1286
+ setFocusedOptionIndex(-1);
1287
+ } else {
1288
+ var metaKey = event.metaKey || event.ctrlKey;
1289
+ var optionIndex = findFirstOptionIndex();
1290
+ if (event.shiftKey && metaKey) {
1291
+ onOptionSelectRange(event, optionIndex, startRangeIndex);
1292
+ }
1293
+ changeFocusedOptionIndex(event, optionIndex);
1294
+ !overlayVisibleState && show();
1295
+ }
1296
+ event.preventDefault();
1297
+ };
1298
+ var onEndKey = function onEndKey(event) {
1299
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1300
+ var currentTarget = event.currentTarget;
1301
+ if (pressedInInputText) {
1302
+ var len = currentTarget.value.length;
1303
+ currentTarget.setSelectionRange(event.shiftKey ? 0 : len, len);
1304
+ _readOnlyError("focusedOptionIndex");
1305
+ } else {
1306
+ var metaKey = event.metaKey || event.ctrlKey;
1307
+ var optionIndex = findLastOptionIndex();
1308
+ if (event.shiftKey && metaKey) {
1309
+ onOptionSelectRange(event, startRangeIndex, optionIndex);
1310
+ }
1311
+ changeFocusedOptionIndex(event, optionIndex);
1312
+ !overlayVisibleState && show();
1313
+ }
1314
+ event.preventDefault();
1315
+ };
1316
+ var onPageUpKey = function onPageUpKey(event) {
1317
+ event.preventDefault();
1318
+ };
1319
+ var onPageDownKey = function onPageDownKey(event) {
1320
+ event.preventDefault();
1321
+ };
1322
+ var onTabKey = function onTabKey(event) {
1323
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1324
+ if (!pressedInInputText) {
1325
+ if (overlayVisibleState && hasFocusableElements()) {
1326
+ utils.DomHandler.focus(event.shiftKey ? lastHiddenFocusableElementOnOverlay.current : firstHiddenFocusableElementOnOverlay.current);
1327
+ event.preventDefault();
1328
+ } else {
1329
+ if (focusedOptionIndex !== -1) {
1330
+ onOptionSelect(event, visibleOptions[focusedOptionIndex]);
1331
+ }
1332
+ overlayVisibleState && hide(filter);
1333
+ }
1334
+ }
1335
+ };
1336
+ var onShiftKey = function onShiftKey() {
1337
+ setStartRangeIndex(focusedOptionIndex);
1216
1338
  };
1217
1339
  var onKeyDown = function onKeyDown(event) {
1218
- switch (event.which) {
1219
- //down
1220
- case 40:
1340
+ var metaKey = event.metaKey || event.ctrlKey;
1341
+ switch (event.code) {
1342
+ case 'ArrowUp':
1221
1343
  if (props.inline) break;
1222
- if (!overlayVisibleState && event.altKey) {
1223
- show();
1224
- event.preventDefault();
1225
- }
1344
+ onArrowUpKey(event);
1226
1345
  break;
1227
-
1228
- //space
1229
- case 32:
1346
+ case 'ArrowDown':
1230
1347
  if (props.inline) break;
1231
- overlayVisibleState ? hide() : show();
1348
+ onArrowDownKey(event);
1349
+ break;
1350
+ case 'Space':
1351
+ case 'NumpadEnter':
1352
+ case 'Enter':
1353
+ if (props.inline) break;
1354
+ onEnterKey(event);
1355
+ break;
1356
+ case 'Home':
1357
+ if (props.inline) break;
1358
+ onHomeKey(event);
1232
1359
  event.preventDefault();
1233
1360
  break;
1234
-
1235
- //escape
1236
- case 27:
1361
+ case 'End':
1362
+ if (props.inline) break;
1363
+ onEndKey(event);
1364
+ event.preventDefault();
1365
+ break;
1366
+ case 'PageDown':
1367
+ onPageDownKey(event);
1368
+ break;
1369
+ case 'PageUp':
1370
+ onPageUpKey(event);
1371
+ break;
1372
+ case 'Escape':
1237
1373
  if (props.inline) break;
1238
1374
  hide();
1239
1375
  break;
1240
-
1241
- //tab
1242
- case 9:
1243
- if (overlayVisibleState) {
1244
- var firstFocusableElement = utils.DomHandler.getFirstFocusableElement(overlayRef.current);
1245
- if (firstFocusableElement) {
1246
- firstFocusableElement.focus();
1247
- event.preventDefault();
1248
- }
1376
+ case 'Tab':
1377
+ onTabKey(event);
1378
+ break;
1379
+ case 'ShiftLeft':
1380
+ case 'ShiftRight':
1381
+ onShiftKey();
1382
+ break;
1383
+ default:
1384
+ if (event.code === 'KeyA' && metaKey) {
1385
+ var value = visibleOptions.filter(function (option) {
1386
+ return isValidOption(option);
1387
+ }).map(function (option) {
1388
+ return getOptionValue(option);
1389
+ });
1390
+ updateModel(event, value);
1391
+ event.preventDefault();
1392
+ break;
1393
+ }
1394
+ if (!metaKey && utils.ObjectUtils.isPrintableCharacter(event.key)) {
1395
+ !overlayVisibleState && show();
1396
+ searchOptions(event);
1397
+ event.preventDefault();
1249
1398
  }
1250
1399
  break;
1251
1400
  }
1401
+ setClicked(false);
1252
1402
  };
1253
1403
  var onSelectAll = function onSelectAll(event) {
1254
1404
  if (props.onSelectAll) {
@@ -1334,9 +1484,13 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1334
1484
  };
1335
1485
  var show = function show() {
1336
1486
  setOverlayVisibleState(true);
1487
+ setFocusedOptionIndex(focusedOptionIndex !== -1 ? focusedOptionIndex : props.autoOptionFocus ? findFirstFocusedOptionIndex() : findSelectedOptionIndex());
1488
+ utils.DomHandler.focus(inputRef.current);
1337
1489
  };
1338
1490
  var hide = function hide() {
1491
+ setFocusedOptionIndex(-1);
1339
1492
  setOverlayVisibleState(false);
1493
+ setClicked(false);
1340
1494
  };
1341
1495
  var onOverlayEnter = function onOverlayEnter(callback) {
1342
1496
  utils.ZIndexUtils.set('overlay', overlayRef.current, context && context.autoZIndex || PrimeReact__default["default"].autoZIndex, context && context.zIndex['overlay'] || PrimeReact__default["default"].zIndex['overlay']);
@@ -1530,6 +1684,100 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1530
1684
  var isOptionValueUsed = function isOptionValueUsed(option) {
1531
1685
  return !props.useOptionAsValue && props.optionValue || option && option['value'] !== undefined;
1532
1686
  };
1687
+ var isOptionGroup = function isOptionGroup(option) {
1688
+ return props.optionGroupLabel && option.optionGroup && option.group;
1689
+ };
1690
+ var hasSelectedOption = function hasSelectedOption() {
1691
+ return utils.ObjectUtils.isNotEmpty(props.value);
1692
+ };
1693
+ var hasFocusableElements = function hasFocusableElements() {
1694
+ return utils.DomHandler.getFocusableElements(overlayRef.current, ':not([data-p-hidden-focusable="true"])').length > 0;
1695
+ };
1696
+ var isOptionMatched = function isOptionMatched(option) {
1697
+ var _getOptionLabel;
1698
+ return isValidOption(option) && ((_getOptionLabel = getOptionLabel(option)) === null || _getOptionLabel === void 0 ? void 0 : _getOptionLabel.toLocaleLowerCase(props.filterLocale).startsWith(searchValue.current.toLocaleLowerCase(props.filterLocale)));
1699
+ };
1700
+ var isValidOption = function isValidOption(option) {
1701
+ return utils.ObjectUtils.isNotEmpty(option) && !(isOptionDisabled(option) || isOptionGroup(option));
1702
+ };
1703
+ var isValidSelectedOption = function isValidSelectedOption(option) {
1704
+ return isValidOption(option) && isSelected(option);
1705
+ };
1706
+ var findSelectedOptionIndex = function findSelectedOptionIndex() {
1707
+ return hasSelectedOption ? visibleOptions === null || visibleOptions === void 0 ? void 0 : visibleOptions.findIndex(function (option) {
1708
+ return isValidSelectedOption(option);
1709
+ }) : -1;
1710
+ };
1711
+ var findFirstFocusedOptionIndex = function findFirstFocusedOptionIndex() {
1712
+ var selectedIndex = findSelectedOptionIndex();
1713
+ return selectedIndex < 0 ? findFirstOptionIndex() : selectedIndex;
1714
+ };
1715
+ var findLastFocusedOptionIndex = function findLastFocusedOptionIndex() {
1716
+ var selectedIndex = findSelectedOptionIndex();
1717
+ return selectedIndex < 0 ? findLastOptionIndex() : selectedIndex;
1718
+ };
1719
+ var findFirstOptionIndex = function findFirstOptionIndex() {
1720
+ return visibleOptions.findIndex(function (option) {
1721
+ return isValidOption(option);
1722
+ });
1723
+ };
1724
+ var findLastOptionIndex = function findLastOptionIndex() {
1725
+ return utils.ObjectUtils.findLastIndex(visibleOptions, function (option) {
1726
+ return isValidOption(option);
1727
+ });
1728
+ };
1729
+ var findNextOptionIndex = function findNextOptionIndex(index) {
1730
+ var matchedOptionIndex = index < visibleOptions.length - 1 ? visibleOptions.slice(index + 1).findIndex(function (option) {
1731
+ return isValidOption(option);
1732
+ }) : -1;
1733
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
1734
+ };
1735
+ var findPrevOptionIndex = function findPrevOptionIndex(index) {
1736
+ var matchedOptionIndex = index > 0 ? utils.ObjectUtils.findLastIndex(visibleOptions.slice(0, index), function (option) {
1737
+ return isValidOption(option);
1738
+ }) : -1;
1739
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
1740
+ };
1741
+ var searchOptions = function searchOptions(event) {
1742
+ searchValue.current = (searchValue.current || '') + event.key;
1743
+ var optionIndex = -1;
1744
+ if (utils.ObjectUtils.isNotEmpty(searchValue.current)) {
1745
+ if (focusedOptionIndex !== -1) {
1746
+ optionIndex = visibleOptions.slice(focusedOptionIndex).findIndex(function (option) {
1747
+ return isOptionMatched(option);
1748
+ });
1749
+ optionIndex = optionIndex === -1 ? visibleOptions.slice(0, focusedOptionIndex).findIndex(function (option) {
1750
+ return isOptionMatched(option);
1751
+ }) : optionIndex + focusedOptionIndex;
1752
+ } else {
1753
+ optionIndex = visibleOptions.findIndex(function (option) {
1754
+ return isOptionMatched(option);
1755
+ });
1756
+ }
1757
+ if (optionIndex === -1 && focusedOptionIndex === -1) {
1758
+ optionIndex = findFirstFocusedOptionIndex();
1759
+ }
1760
+ if (optionIndex !== -1) {
1761
+ changeFocusedOptionIndex(event, optionIndex);
1762
+ }
1763
+ }
1764
+ if (searchTimeout.current) {
1765
+ clearTimeout(searchTimeout.current);
1766
+ }
1767
+ searchTimeout.current = setTimeout(function () {
1768
+ searchValue.current = '';
1769
+ searchTimeout.current = null;
1770
+ }, 500);
1771
+ };
1772
+ var changeFocusedOptionIndex = function changeFocusedOptionIndex(event, index) {
1773
+ if (focusedOptionIndex !== index) {
1774
+ setFocusedOptionIndex(index);
1775
+ scrollInView();
1776
+ if (props.selectOnFocus) {
1777
+ onOptionSelect(event, visibleOptions[index], false);
1778
+ }
1779
+ }
1780
+ };
1533
1781
  var removeChip = function removeChip(event, item) {
1534
1782
  var value = props.value.filter(function (val) {
1535
1783
  return !utils.ObjectUtils.equals(val, item, equalityKey);
@@ -1670,6 +1918,7 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1670
1918
  setTimeout(function () {
1671
1919
  props.overlayVisible ? show() : hide();
1672
1920
  }, 100);
1921
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1673
1922
  }, [props.overlayVisible]);
1674
1923
  hooks.useUpdateEffect(function () {
1675
1924
  if (overlayVisibleState && filterState && hasFilter) {
@@ -1754,11 +2003,31 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1754
2003
  role: 'listbox',
1755
2004
  'aria-expanded': overlayVisibleState,
1756
2005
  disabled: props.disabled,
1757
- tabIndex: props.tabIndex
2006
+ tabIndex: !props.disabled ? props.tabIndex : -1
1758
2007
  }, ariaProps), ptm('input'));
2008
+ var firstHiddenElementProps = mergeProps({
2009
+ ref: firstHiddenFocusableElementOnOverlay,
2010
+ role: 'presentation',
2011
+ 'aria-hidden': true,
2012
+ className: 'p-hidden-accessible p-hidden-focusable',
2013
+ tabIndex: '0',
2014
+ onFocus: onFirstHiddenFocus,
2015
+ 'data-p-hidden-accessible': true,
2016
+ 'data-p-hidden-focusable': true
2017
+ }, ptm('hiddenFirstFocusableEl'));
2018
+ var lastHiddenElementProps = mergeProps({
2019
+ ref: lastHiddenFocusableElementOnOverlay,
2020
+ role: 'presentation',
2021
+ 'aria-hidden': true,
2022
+ className: 'p-hidden-accessible p-hidden-focusable',
2023
+ tabIndex: '0',
2024
+ onFocus: onLastHiddenFocus,
2025
+ 'data-p-hidden-accessible': true,
2026
+ 'data-p-hidden-focusable': true
2027
+ }, ptm('hiddenLastFocusableEl'));
1759
2028
  return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("div", rootProps, /*#__PURE__*/React__namespace.createElement("div", hiddenInputWrapperProps, /*#__PURE__*/React__namespace.createElement("input", _extends({}, inputProps, {
1760
2029
  readOnly: true
1761
- }))), !props.inline && /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, label, clearIcon, triggerIcon), /*#__PURE__*/React__namespace.createElement(MultiSelectPanel, _extends({
2030
+ }))), !props.inline && /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, label, clearIcon, triggerIcon), /*#__PURE__*/React__namespace.createElement("span", firstHiddenElementProps), /*#__PURE__*/React__namespace.createElement(MultiSelectPanel, _extends({
1762
2031
  hostName: "MultiSelect",
1763
2032
  ref: overlayRef,
1764
2033
  visibleOptions: visibleOptions
@@ -1766,6 +2035,8 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1766
2035
  onClick: onPanelClick,
1767
2036
  onOverlayHide: hide,
1768
2037
  filterValue: filterState,
2038
+ focusedOptionIndex: focusedOptionIndex,
2039
+ setFocusedOptionIndex: setFocusedOptionIndex,
1769
2040
  hasFilter: hasFilter,
1770
2041
  onFilterInputChange: onFilterInputChange,
1771
2042
  resetFilter: resetFilter,
@@ -1782,7 +2053,6 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1782
2053
  isAllSelected: isAllSelected,
1783
2054
  onOptionSelect: onOptionSelect,
1784
2055
  allowOptionSelect: allowOptionSelect,
1785
- onOptionKeyDown: onOptionKeyDown,
1786
2056
  "in": overlayVisibleState,
1787
2057
  onEnter: onOverlayEnter,
1788
2058
  onEntered: onOverlayEntered,
@@ -1793,7 +2063,7 @@ var MultiSelect = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namesp
1793
2063
  sx: sx,
1794
2064
  isUnstyled: isUnstyled,
1795
2065
  metaData: metaData
1796
- }))), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
2066
+ })), /*#__PURE__*/React__namespace.createElement("span", lastHiddenElementProps)), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
1797
2067
  target: elementRef,
1798
2068
  content: props.tooltip
1799
2069
  }, props.tooltipOptions, {