primereact 10.4.0 → 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 (199) hide show
  1. package/calendar/calendar.cjs.js +12 -4
  2. package/calendar/calendar.cjs.min.js +1 -1
  3. package/calendar/calendar.esm.js +12 -4
  4. package/calendar/calendar.esm.min.js +1 -1
  5. package/calendar/calendar.js +12 -4
  6. package/calendar/calendar.min.js +1 -1
  7. package/checkbox/checkbox.cjs.js +2 -0
  8. package/checkbox/checkbox.cjs.min.js +1 -1
  9. package/checkbox/checkbox.esm.js +2 -0
  10. package/checkbox/checkbox.esm.min.js +1 -1
  11. package/checkbox/checkbox.js +2 -0
  12. package/checkbox/checkbox.min.js +1 -1
  13. package/chips/chips.cjs.js +109 -20
  14. package/chips/chips.cjs.min.js +1 -1
  15. package/chips/chips.esm.js +109 -20
  16. package/chips/chips.esm.min.js +1 -1
  17. package/chips/chips.js +109 -20
  18. package/chips/chips.min.js +1 -1
  19. package/core/core.js +643 -465
  20. package/core/core.min.js +4 -4
  21. package/dropdown/dropdown.cjs.js +313 -141
  22. package/dropdown/dropdown.cjs.min.js +1 -1
  23. package/dropdown/dropdown.esm.js +313 -141
  24. package/dropdown/dropdown.esm.min.js +1 -1
  25. package/dropdown/dropdown.js +313 -141
  26. package/dropdown/dropdown.min.js +1 -1
  27. package/inputnumber/inputnumber.cjs.js +21 -17
  28. package/inputnumber/inputnumber.cjs.min.js +1 -1
  29. package/inputnumber/inputnumber.esm.js +21 -17
  30. package/inputnumber/inputnumber.esm.min.js +1 -1
  31. package/inputnumber/inputnumber.js +21 -17
  32. package/inputnumber/inputnumber.min.js +1 -1
  33. package/inputswitch/inputswitch.cjs.js +3 -1
  34. package/inputswitch/inputswitch.cjs.min.js +1 -1
  35. package/inputswitch/inputswitch.esm.js +3 -1
  36. package/inputswitch/inputswitch.esm.min.js +1 -1
  37. package/inputswitch/inputswitch.js +3 -1
  38. package/inputswitch/inputswitch.min.js +1 -1
  39. package/knob/knob.cjs.js +62 -0
  40. package/knob/knob.cjs.min.js +1 -1
  41. package/knob/knob.esm.js +62 -0
  42. package/knob/knob.esm.min.js +1 -1
  43. package/knob/knob.js +62 -0
  44. package/knob/knob.min.js +1 -1
  45. package/listbox/listbox.cjs.js +362 -92
  46. package/listbox/listbox.cjs.min.js +1 -1
  47. package/listbox/listbox.esm.js +363 -93
  48. package/listbox/listbox.esm.min.js +1 -1
  49. package/listbox/listbox.js +362 -92
  50. package/listbox/listbox.min.js +1 -1
  51. package/menu/menu.cjs.js +4 -2
  52. package/menu/menu.cjs.min.js +1 -1
  53. package/menu/menu.esm.js +4 -2
  54. package/menu/menu.esm.min.js +1 -1
  55. package/menu/menu.js +5 -4
  56. package/menu/menu.min.js +1 -1
  57. package/multiselect/multiselect.cjs.js +377 -107
  58. package/multiselect/multiselect.cjs.min.js +1 -1
  59. package/multiselect/multiselect.esm.js +377 -107
  60. package/multiselect/multiselect.esm.min.js +1 -1
  61. package/multiselect/multiselect.js +377 -107
  62. package/multiselect/multiselect.min.js +1 -1
  63. package/package.json +1 -1
  64. package/paginator/paginator.cjs.js +251 -251
  65. package/paginator/paginator.cjs.min.js +1 -1
  66. package/paginator/paginator.esm.js +258 -258
  67. package/paginator/paginator.esm.min.js +1 -1
  68. package/paginator/paginator.js +251 -251
  69. package/paginator/paginator.min.js +1 -1
  70. package/panelmenu/panelmenu.cjs.js +2 -1
  71. package/panelmenu/panelmenu.cjs.min.js +1 -1
  72. package/panelmenu/panelmenu.esm.js +2 -1
  73. package/panelmenu/panelmenu.esm.min.js +1 -1
  74. package/panelmenu/panelmenu.js +3 -3
  75. package/panelmenu/panelmenu.min.js +1 -1
  76. package/passthrough/tailwind/index.cjs.js +3 -2
  77. package/passthrough/tailwind/index.cjs.min.js +1 -1
  78. package/passthrough/tailwind/index.esm.js +3 -2
  79. package/passthrough/tailwind/index.esm.min.js +1 -1
  80. package/passthrough/tailwind/index.js +3 -2
  81. package/passthrough/tailwind/index.min.js +1 -1
  82. package/password/password.cjs.js +22 -20
  83. package/password/password.cjs.min.js +1 -1
  84. package/password/password.esm.js +22 -20
  85. package/password/password.esm.min.js +1 -1
  86. package/password/password.js +22 -20
  87. package/password/password.min.js +1 -1
  88. package/primereact.all.cjs.js +1473 -485
  89. package/primereact.all.cjs.min.js +1 -1
  90. package/primereact.all.esm.js +1473 -485
  91. package/primereact.all.esm.min.js +1 -1
  92. package/primereact.all.js +1473 -485
  93. package/primereact.all.min.js +1 -1
  94. package/radiobutton/radiobutton.cjs.js +1 -0
  95. package/radiobutton/radiobutton.cjs.min.js +1 -1
  96. package/radiobutton/radiobutton.esm.js +1 -0
  97. package/radiobutton/radiobutton.esm.min.js +1 -1
  98. package/radiobutton/radiobutton.js +1 -0
  99. package/radiobutton/radiobutton.min.js +1 -1
  100. package/rating/rating.cjs.js +103 -4
  101. package/rating/rating.cjs.min.js +1 -1
  102. package/rating/rating.esm.js +103 -4
  103. package/rating/rating.esm.min.js +1 -1
  104. package/rating/rating.js +103 -4
  105. package/rating/rating.min.js +1 -1
  106. package/resources/themes/arya-blue/theme.css +328 -67
  107. package/resources/themes/arya-green/theme.css +328 -67
  108. package/resources/themes/arya-orange/theme.css +328 -67
  109. package/resources/themes/arya-purple/theme.css +26 -6
  110. package/resources/themes/bootstrap4-dark-blue/theme.css +328 -67
  111. package/resources/themes/bootstrap4-dark-purple/theme.css +26 -6
  112. package/resources/themes/bootstrap4-light-blue/theme.css +328 -67
  113. package/resources/themes/bootstrap4-light-purple/theme.css +26 -6
  114. package/resources/themes/fluent-light/theme.css +327 -66
  115. package/resources/themes/lara-dark-amber/theme.css +328 -67
  116. package/resources/themes/lara-dark-blue/theme.css +328 -67
  117. package/resources/themes/lara-dark-cyan/theme.css +328 -67
  118. package/resources/themes/lara-dark-green/theme.css +328 -67
  119. package/resources/themes/lara-dark-indigo/theme.css +328 -67
  120. package/resources/themes/lara-dark-pink/theme.css +328 -67
  121. package/resources/themes/lara-dark-purple/theme.css +26 -6
  122. package/resources/themes/lara-dark-teal/theme.css +328 -67
  123. package/resources/themes/lara-light-amber/theme.css +328 -67
  124. package/resources/themes/lara-light-blue/theme.css +328 -67
  125. package/resources/themes/lara-light-cyan/theme.css +328 -67
  126. package/resources/themes/lara-light-green/theme.css +328 -67
  127. package/resources/themes/lara-light-indigo/theme.css +328 -67
  128. package/resources/themes/lara-light-pink/theme.css +328 -67
  129. package/resources/themes/lara-light-purple/theme.css +26 -6
  130. package/resources/themes/lara-light-teal/theme.css +328 -67
  131. package/resources/themes/luna-amber/theme.css +328 -67
  132. package/resources/themes/luna-blue/theme.css +328 -67
  133. package/resources/themes/luna-green/theme.css +328 -67
  134. package/resources/themes/luna-pink/theme.css +328 -67
  135. package/resources/themes/md-dark-deeppurple/theme.css +158 -138
  136. package/resources/themes/md-dark-indigo/theme.css +454 -193
  137. package/resources/themes/md-light-deeppurple/theme.css +26 -6
  138. package/resources/themes/md-light-indigo/theme.css +328 -67
  139. package/resources/themes/mdc-dark-deeppurple/theme.css +158 -138
  140. package/resources/themes/mdc-dark-indigo/theme.css +454 -193
  141. package/resources/themes/mdc-light-deeppurple/theme.css +26 -6
  142. package/resources/themes/mdc-light-indigo/theme.css +328 -67
  143. package/resources/themes/mira/theme.css +328 -67
  144. package/resources/themes/nano/theme.css +328 -67
  145. package/resources/themes/nova/theme.css +328 -67
  146. package/resources/themes/nova-accent/theme.css +328 -67
  147. package/resources/themes/nova-alt/theme.css +328 -67
  148. package/resources/themes/rhea/theme.css +328 -67
  149. package/resources/themes/saga-blue/theme.css +328 -67
  150. package/resources/themes/saga-green/theme.css +328 -67
  151. package/resources/themes/saga-orange/theme.css +328 -67
  152. package/resources/themes/saga-purple/theme.css +26 -6
  153. package/resources/themes/soho-dark/theme.css +353 -92
  154. package/resources/themes/soho-light/theme.css +328 -67
  155. package/resources/themes/tailwind-light/theme.css +329 -71
  156. package/resources/themes/vela-blue/theme.css +328 -67
  157. package/resources/themes/vela-green/theme.css +328 -67
  158. package/resources/themes/vela-orange/theme.css +328 -67
  159. package/resources/themes/vela-purple/theme.css +26 -6
  160. package/resources/themes/viva-dark/theme.css +328 -67
  161. package/resources/themes/viva-light/theme.css +328 -67
  162. package/selectbutton/selectbutton.cjs.js +96 -50
  163. package/selectbutton/selectbutton.cjs.min.js +1 -1
  164. package/selectbutton/selectbutton.esm.js +96 -50
  165. package/selectbutton/selectbutton.esm.min.js +1 -1
  166. package/selectbutton/selectbutton.js +96 -50
  167. package/selectbutton/selectbutton.min.js +1 -1
  168. package/slider/slider.cjs.js +25 -4
  169. package/slider/slider.cjs.min.js +1 -1
  170. package/slider/slider.esm.js +25 -4
  171. package/slider/slider.esm.min.js +1 -1
  172. package/slider/slider.js +25 -4
  173. package/slider/slider.min.js +1 -1
  174. package/splitter/splitter.cjs.js +16 -15
  175. package/splitter/splitter.cjs.min.js +1 -1
  176. package/splitter/splitter.esm.js +16 -15
  177. package/splitter/splitter.esm.min.js +1 -1
  178. package/splitter/splitter.js +16 -15
  179. package/splitter/splitter.min.js +1 -1
  180. package/tabview/tabview.cjs.js +6 -5
  181. package/tabview/tabview.cjs.min.js +1 -1
  182. package/tabview/tabview.d.ts +39 -34
  183. package/tabview/tabview.esm.js +6 -5
  184. package/tabview/tabview.esm.min.js +1 -1
  185. package/tabview/tabview.js +6 -5
  186. package/tabview/tabview.min.js +1 -1
  187. package/togglebutton/togglebutton.cjs.js +15 -14
  188. package/togglebutton/togglebutton.cjs.min.js +1 -1
  189. package/togglebutton/togglebutton.esm.js +14 -13
  190. package/togglebutton/togglebutton.esm.min.js +1 -1
  191. package/togglebutton/togglebutton.js +15 -14
  192. package/togglebutton/togglebutton.min.js +1 -1
  193. package/tristatecheckbox/tristatecheckbox.cjs.js +3 -2
  194. package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
  195. package/tristatecheckbox/tristatecheckbox.esm.js +3 -2
  196. package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
  197. package/tristatecheckbox/tristatecheckbox.js +3 -2
  198. package/tristatecheckbox/tristatecheckbox.min.js +1 -1
  199. package/web-types.json +1 -1
@@ -121,6 +121,10 @@ function _toConsumableArray(arr) {
121
121
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread();
122
122
  }
123
123
 
124
+ function _readOnlyError(name) {
125
+ throw new TypeError("\"" + name + "\" is read-only");
126
+ }
127
+
124
128
  function _arrayWithHoles(arr) {
125
129
  if (Array.isArray(arr)) return arr;
126
130
  }
@@ -161,28 +165,26 @@ function _slicedToArray(arr, i) {
161
165
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest();
162
166
  }
163
167
 
168
+ var _defaultProps;
164
169
  var classes = {
165
170
  itemGroup: 'p-listbox-item-group',
166
171
  emptyMessage: 'p-listbox-empty-message',
167
- list: function list(_ref) {
168
- var props = _ref.props,
169
- options = _ref.options;
170
- return props.virtualScrollerOptions ? utils.classNames('p-listbox-list', options.className) : 'p-listbox-list';
171
- },
172
- wrapper: function wrapper(_ref2) {
173
- var props = _ref2.props;
172
+ list: 'p-listbox-list',
173
+ wrapper: function wrapper(_ref) {
174
+ var props = _ref.props;
174
175
  return utils.classNames('p-listbox-list-wrapper', props.listClassName);
175
176
  },
176
- root: function root(_ref3) {
177
- var props = _ref3.props;
177
+ root: function root(_ref2) {
178
+ var props = _ref2.props;
178
179
  return utils.classNames('p-listbox p-component', {
179
180
  'p-disabled': props.disabled
180
181
  }, props.className);
181
182
  },
182
- item: function item(_ref4) {
183
- var props = _ref4.props;
183
+ item: function item(_ref3) {
184
+ var props = _ref3.props;
184
185
  return utils.classNames('p-listbox-item', {
185
186
  'p-highlight': props.selected,
187
+ 'p-focus': props.focusedOptionIndex === props.index,
186
188
  'p-disabled': props.disabled
187
189
  }, props.option.className);
188
190
  },
@@ -191,22 +193,22 @@ var classes = {
191
193
  filterInput: 'p-listbox-filter',
192
194
  header: 'p-listbox-header'
193
195
  };
194
- var styles = "\n@layer primereact {\n .p-listbox-list-wrapper {\n overflow: auto;\n }\n \n .p-listbox-list {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n \n .p-listbox-item {\n cursor: pointer;\n position: relative;\n overflow: hidden;\n }\n \n .p-listbox-filter-container {\n position: relative;\n }\n \n .p-listbox-filter-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n \n .p-listbox-filter {\n width: 100%;\n }\n}\n";
196
+ var styles = "\n@layer primereact {\n .p-listbox-list-wrapper {\n overflow: auto;\n }\n \n .p-listbox-list {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n \n .p-listbox-item {\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none;\n }\n \n .p-listbox-filter-container {\n position: relative;\n }\n \n .p-listbox-filter-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n \n .p-listbox-filter {\n width: 100%;\n }\n}\n";
195
197
  var inlineStyles = {
196
- itemGroup: function itemGroup(_ref5) {
197
- var scrollerOptions = _ref5.scrollerOptions;
198
+ itemGroup: function itemGroup(_ref4) {
199
+ var scrollerOptions = _ref4.scrollerOptions;
198
200
  return {
199
201
  height: scrollerOptions.props ? scrollerOptions.props.itemSize : undefined
200
202
  };
201
203
  },
202
- list: function list(_ref6) {
203
- var options = _ref6.options,
204
- props = _ref6.props;
204
+ list: function list(_ref5) {
205
+ var options = _ref5.options,
206
+ props = _ref5.props;
205
207
  return props.virtualScrollerOptions ? options.style : undefined;
206
208
  }
207
209
  };
208
210
  var ListBoxBase = componentbase.ComponentBase.extend({
209
- defaultProps: {
211
+ defaultProps: (_defaultProps = {
210
212
  __TYPE: 'ListBox',
211
213
  className: null,
212
214
  dataKey: null,
@@ -222,29 +224,13 @@ var ListBoxBase = componentbase.ComponentBase.extend({
222
224
  filterPlaceholder: null,
223
225
  filterTemplate: null,
224
226
  filterValue: null,
227
+ selectOnFocus: false,
225
228
  id: null,
226
229
  itemTemplate: null,
227
230
  listClassName: null,
228
231
  listStyle: null,
229
- metaKeySelection: false,
230
- multiple: false,
231
- onChange: null,
232
- onFilterValueChange: null,
233
- optionDisabled: null,
234
- optionGroupChildren: null,
235
- optionGroupLabel: null,
236
- optionGroupTemplate: null,
237
- optionLabel: null,
238
- optionValue: null,
239
- options: null,
240
- style: null,
241
- tabIndex: 0,
242
- tooltip: null,
243
- tooltipOptions: null,
244
- value: null,
245
- virtualScrollerOptions: null,
246
- children: undefined
247
- },
232
+ metaKeySelection: false
233
+ }, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defaultProps, "selectOnFocus", false), "autoOptionFocus", true), "multiple", false), "onChange", null), "onFilterValueChange", null), "optionDisabled", null), "optionGroupChildren", null), "optionGroupLabel", null), "optionGroupTemplate", null), "optionLabel", null), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defaultProps, "optionValue", null), "options", null), "style", null), "tabIndex", 0), "tooltip", null), "tooltipOptions", null), "value", null), "virtualScrollerOptions", null), "children", undefined)),
248
234
  css: {
249
235
  classes: classes,
250
236
  styles: styles,
@@ -341,7 +327,8 @@ var ListBoxItem = /*#__PURE__*/React__namespace.memo(function (props) {
341
327
  context: {
342
328
  selected: props.selected,
343
329
  disabled: props.disabled,
344
- focused: focusedState
330
+ focused: focusedState,
331
+ focusedOptionIndex: props.focusedOptionIndex
345
332
  }
346
333
  });
347
334
  };
@@ -351,15 +338,6 @@ var ListBoxItem = /*#__PURE__*/React__namespace.memo(function (props) {
351
338
  var onBlur = function onBlur(event) {
352
339
  setFocusedState(false);
353
340
  };
354
- var onClick = function onClick(event) {
355
- if (props.onClick) {
356
- props.onClick({
357
- originalEvent: event,
358
- option: props.option
359
- });
360
- }
361
- event.preventDefault();
362
- };
363
341
  var onTouchEnd = function onTouchEnd(event) {
364
342
  if (props.onTouchEnd) {
365
343
  props.onTouchEnd({
@@ -368,47 +346,17 @@ var ListBoxItem = /*#__PURE__*/React__namespace.memo(function (props) {
368
346
  });
369
347
  }
370
348
  };
371
- var onKeyDown = function onKeyDown(event) {
372
- var item = event.currentTarget;
373
- switch (event.which) {
374
- //down
375
- case 40:
376
- var nextItem = findNextItem(item);
377
- nextItem && nextItem.focus();
378
- event.preventDefault();
379
- break;
380
-
381
- //up
382
- case 38:
383
- var prevItem = findPrevItem(item);
384
- prevItem && prevItem.focus();
385
- event.preventDefault();
386
- break;
387
-
388
- //enter
389
- case 13:
390
- onClick(event);
391
- event.preventDefault();
392
- break;
393
- }
394
- };
395
- var findNextItem = function findNextItem(item) {
396
- var nextItem = item.nextElementSibling;
397
- return nextItem ? utils.DomHandler.isAttributeEquals(nextItem, 'data-p-disabled', true) || utils.DomHandler.isAttributeEquals(nextItem, 'data-pc-section', 'itemgroup') ? findNextItem(nextItem) : nextItem : null;
398
- };
399
- var findPrevItem = function findPrevItem(item) {
400
- var prevItem = item.previousElementSibling;
401
- return prevItem ? utils.DomHandler.isAttributeEquals(prevItem, 'data-p-disabled', true) || utils.DomHandler.isAttributeEquals(prevItem, 'data-pc-section', 'itemgroup') ? findPrevItem(prevItem) : prevItem : null;
402
- };
403
349
  var content = props.template ? utils.ObjectUtils.getJSXElement(props.template, props.option) : props.label;
404
350
  var itemProps = mergeProps({
351
+ id: props.id,
405
352
  className: cx('item', {
406
353
  props: props
407
354
  }),
408
355
  style: props.style,
409
- onClick: onClick,
356
+ onClick: function onClick(event) {
357
+ return props.onClick(event, props.option, props.index);
358
+ },
410
359
  onTouchEnd: onTouchEnd,
411
- onKeyDown: onKeyDown,
412
360
  onFocus: onFocus,
413
361
  onBlur: onBlur,
414
362
  tabIndex: '-1',
@@ -432,12 +380,25 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
432
380
  var mergeProps = hooks.useMergeProps();
433
381
  var context = React__namespace.useContext(api.PrimeReactContext);
434
382
  var props = ListBoxBase.getProps(inProps, context);
435
- var _React$useState = React__namespace.useState(''),
383
+ var _React$useState = React__namespace.useState(null),
436
384
  _React$useState2 = _slicedToArray(_React$useState, 2),
437
- filterValueState = _React$useState2[0],
438
- setFilterValueState = _React$useState2[1];
385
+ focusedOptionIndex = _React$useState2[0],
386
+ setFocusedOptionIndex = _React$useState2[1];
387
+ var searchTimeout = React__namespace.useRef(null);
388
+ var firstHiddenFocusableElement = React__namespace.useRef(null);
389
+ var lastHiddenFocusableElement = React__namespace.useRef(null);
390
+ var _React$useState3 = React__namespace.useState(-1),
391
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
392
+ startRangeIndex = _React$useState4[0],
393
+ setStartRangeIndex = _React$useState4[1];
394
+ var _React$useState5 = React__namespace.useState(''),
395
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
396
+ filterValueState = _React$useState6[0],
397
+ setFilterValueState = _React$useState6[1];
439
398
  var elementRef = React__namespace.useRef(null);
440
399
  var virtualScrollerRef = React__namespace.useRef(null);
400
+ var id = React__namespace.useRef(utils.UniqueComponentId());
401
+ var listRef = React__namespace.useRef(null);
441
402
  var optionTouched = React__namespace.useRef(false);
442
403
  var filteredValue = (props.onFilterValueChange ? props.filterValue : filterValueState) || '';
443
404
  var hasFilter = filteredValue && filteredValue.trim().length > 0;
@@ -451,13 +412,14 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
451
412
  componentbase.useHandleStyle(ListBoxBase.css.styles, ptCallbacks.isUnstyled, {
452
413
  name: 'listbox'
453
414
  });
454
- var onOptionSelect = function onOptionSelect(event) {
455
- var option = event.option;
415
+ var onOptionSelect = function onOptionSelect(event, option) {
416
+ var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
456
417
  if (props.disabled || isOptionDisabled(option)) {
457
418
  return;
458
419
  }
459
420
  props.multiple ? onOptionSelectMultiple(event.originalEvent, option) : onOptionSelectSingle(event.originalEvent, option);
460
421
  optionTouched.current = false;
422
+ index !== -1 && setFocusedOptionIndex(index);
461
423
  };
462
424
  var onOptionTouchEnd = function onOptionTouchEnd() {
463
425
  if (props.disabled) {
@@ -526,6 +488,269 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
526
488
  });
527
489
  }
528
490
  };
491
+ var hasSelectedOption = function hasSelectedOption() {
492
+ return utils.ObjectUtils.isNotEmpty(props.value);
493
+ };
494
+ var isOptionGroup = function isOptionGroup(option) {
495
+ return props.optionGroupLabel && option.optionGroup && option.group;
496
+ };
497
+ var isValidOption = function isValidOption(option) {
498
+ return utils.ObjectUtils.isNotEmpty(option) && !(isOptionDisabled(option) || isOptionGroup(option));
499
+ };
500
+ var isValidSelectedOption = function isValidSelectedOption(option) {
501
+ return isValidOption(option) && isSelected(option);
502
+ };
503
+ var findFirstOptionIndex = function findFirstOptionIndex() {
504
+ return visibleOptions.findIndex(function (option) {
505
+ return isValidOption(option);
506
+ });
507
+ };
508
+ var findLastOptionIndex = function findLastOptionIndex() {
509
+ return utils.ObjectUtils.findLastIndex(visibleOptions, function (option) {
510
+ return isValidOption(option);
511
+ });
512
+ };
513
+ var findNextOptionIndex = function findNextOptionIndex(index) {
514
+ var matchedOptionIndex = index < visibleOptions.length - 1 ? visibleOptions.slice(index + 1).findIndex(function (option) {
515
+ return isValidOption(option);
516
+ }) : -1;
517
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
518
+ };
519
+ var findPrevOptionIndex = function findPrevOptionIndex(index) {
520
+ var matchedOptionIndex = index > 0 ? utils.ObjectUtils.findLastIndex(visibleOptions.slice(0, index), function (option) {
521
+ return isValidOption(option);
522
+ }) : -1;
523
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
524
+ };
525
+ var focusedOptionId = function focusedOptionId() {
526
+ return focusedOptionIndex !== -1 ? "".concat(id.current, "_").concat(focusedOptionIndex) : null;
527
+ };
528
+ var findNearestSelectedOptionIndex = function findNearestSelectedOptionIndex(index) {
529
+ var firstCheckUp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
530
+ var matchedOptionIndex = -1;
531
+ if (hasSelectedOption) {
532
+ if (firstCheckUp) {
533
+ matchedOptionIndex = findPrevSelectedOptionIndex(index);
534
+ matchedOptionIndex = matchedOptionIndex === -1 ? findNextSelectedOptionIndex(index) : matchedOptionIndex;
535
+ } else {
536
+ matchedOptionIndex = findNextSelectedOptionIndex(index);
537
+ matchedOptionIndex = matchedOptionIndex === -1 ? findPrevSelectedOptionIndex(index) : matchedOptionIndex;
538
+ }
539
+ }
540
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
541
+ };
542
+ var isOptionMatched = function isOptionMatched(option) {
543
+ var _getOptionLabel;
544
+ return isValidOption(option) && ((_getOptionLabel = getOptionLabel(option)) === null || _getOptionLabel === void 0 ? void 0 : _getOptionLabel.toLocaleLowerCase(props.filterLocale).startsWith(searchValue.toLocaleLowerCase(props.filterLocale)));
545
+ };
546
+ var searchOptions = function searchOptions(event, _char) {
547
+ searchValue = (searchValue || '') + _char;
548
+ var optionIndex = -1;
549
+ if (utils.ObjectUtils.isNotEmpty(searchValue)) {
550
+ if (focusedOptionIndex !== -1) {
551
+ optionIndex = visibleOptions.slice(focusedOptionIndex).findIndex(function (option) {
552
+ return isOptionMatched(option);
553
+ });
554
+ optionIndex = optionIndex === -1 ? visibleOptions.slice(0, focusedOptionIndex).findIndex(function (option) {
555
+ return isOptionMatched(option);
556
+ }) : optionIndex + focusedOptionIndex;
557
+ } else {
558
+ optionIndex = visibleOptions.findIndex(function (option) {
559
+ return isOptionMatched(option);
560
+ });
561
+ }
562
+ if (optionIndex === -1 && focusedOptionIndex === -1) {
563
+ optionIndex = findFirstFocusedOptionIndex();
564
+ }
565
+ if (optionIndex !== -1) {
566
+ changeFocusedOptionIndex(event, optionIndex);
567
+ }
568
+ }
569
+ if (searchTimeout.current) {
570
+ clearTimeout(searchTimeout.current);
571
+ }
572
+ searchTimeout.current = setTimeout(function () {
573
+ searchValue = '';
574
+ searchTimeout.current = null;
575
+ }, 500);
576
+ };
577
+ var findNextSelectedOptionIndex = function findNextSelectedOptionIndex(index) {
578
+ var matchedOptionIndex = hasSelectedOption && index < visibleOptions.length - 1 ? visibleOptions.slice(index + 1).findIndex(function (option) {
579
+ return isValidSelectedOption(option);
580
+ }) : -1;
581
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1;
582
+ };
583
+ var findPrevSelectedOptionIndex = function findPrevSelectedOptionIndex(index) {
584
+ var matchedOptionIndex = hasSelectedOption && index > 0 ? utils.ObjectUtils.findLastIndex(visibleOptions.slice(0, index), function (option) {
585
+ return isValidSelectedOption(option);
586
+ }) : -1;
587
+ return matchedOptionIndex > -1 ? matchedOptionIndex : -1;
588
+ };
589
+ var onOptionSelectRange = function onOptionSelectRange(event) {
590
+ var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
591
+ var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
592
+ start === -1 && (start = findNearestSelectedOptionIndex(end, true));
593
+ end === -1 && (end = findNearestSelectedOptionIndex(start));
594
+ if (start !== -1 && end !== -1) {
595
+ var rangeStart = Math.min(start, end);
596
+ var rangeEnd = Math.max(start, end);
597
+ var value = visibleOptions.slice(rangeStart, rangeEnd + 1).filter(function (option) {
598
+ return isValidOption(option);
599
+ }).map(function (option) {
600
+ return getOptionValue(option);
601
+ });
602
+ updateModel(event, value);
603
+ }
604
+ };
605
+ var findFirstFocusedOptionIndex = function findFirstFocusedOptionIndex() {
606
+ var selectedIndex = findFirstSelectedOptionIndex();
607
+ return selectedIndex < 0 ? findFirstOptionIndex() : selectedIndex;
608
+ };
609
+ var changeFocusedOptionIndex = function changeFocusedOptionIndex(event, index) {
610
+ if (focusedOptionIndex !== index) {
611
+ setFocusedOptionIndex(index);
612
+ scrollInView();
613
+ if (props.selectOnFocus && !props.multiple) {
614
+ onOptionSelect(event, visibleOptions[index]);
615
+ }
616
+ }
617
+ };
618
+ var onArrowDownKey = function onArrowDownKey(event) {
619
+ var optionIndex = focusedOptionIndex !== -1 ? findNextOptionIndex(focusedOptionIndex) : findFirstFocusedOptionIndex();
620
+ if (props.multiple && event.shiftKey) {
621
+ onOptionSelectRange(event, startRangeIndex, optionIndex);
622
+ }
623
+ changeFocusedOptionIndex(event, optionIndex);
624
+ event.preventDefault();
625
+ };
626
+ var onArrowUpKey = function onArrowUpKey(event) {
627
+ var optionIndex = focusedOptionIndex !== -1 ? findPrevOptionIndex(focusedOptionIndex) : findLastFocusedOptionIndex();
628
+ if (props.multiple && event.shiftKey) {
629
+ onOptionSelectRange(event, optionIndex, startRangeIndex);
630
+ }
631
+ changeFocusedOptionIndex(event, optionIndex);
632
+ event.preventDefault();
633
+ };
634
+ var onEnterKey = function onEnterKey(event) {
635
+ if (focusedOptionIndex !== -1) {
636
+ if (props.multiple && event.shiftKey) onOptionSelectRange(event, focusedOptionIndex);else onOptionSelect(event, visibleOptions[focusedOptionIndex]);
637
+ }
638
+ event.preventDefault();
639
+ };
640
+ var onSpaceKey = function onSpaceKey(event) {
641
+ onEnterKey(event);
642
+ };
643
+ var onShiftKey = function onShiftKey() {
644
+ setStartRangeIndex(focusedOptionIndex);
645
+ };
646
+ var onHomeKey = function onHomeKey(event) {
647
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
648
+ if (pressedInInputText) {
649
+ event.currentTarget.setSelectionRange(0, 0);
650
+ setFocusedOptionIndex(-1);
651
+ } else {
652
+ var metaKey = event.metaKey || event.ctrlKey;
653
+ var optionIndex = findFirstOptionIndex();
654
+ if (props.multiple && event.shiftKey && metaKey) {
655
+ onOptionSelectRange(event, optionIndex, startRangeIndex);
656
+ }
657
+ changeFocusedOptionIndex(event, optionIndex);
658
+ }
659
+ event.preventDefault();
660
+ };
661
+ var onEndKey = function onEndKey(event) {
662
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
663
+ if (pressedInInputText) {
664
+ var target = event.currentTarget;
665
+ var len = target.value.length;
666
+ target.setSelectionRange(len, len);
667
+ _readOnlyError("focusedOptionIndex");
668
+ } else {
669
+ var metaKey = event.metaKey || event.ctrlKey;
670
+ var optionIndex = findLastOptionIndex();
671
+ if (props.multiple && event.shiftKey && metaKey) {
672
+ onOptionSelectRange(event, startRangeIndex, optionIndex);
673
+ }
674
+ changeFocusedOptionIndex(event, optionIndex);
675
+ }
676
+ event.preventDefault();
677
+ };
678
+ var onPageUpKey = function onPageUpKey(event) {
679
+ scrollInView(0);
680
+ event.preventDefault();
681
+ };
682
+ var onPageDownKey = function onPageDownKey(event) {
683
+ scrollInView(visibleOptions.length - 1);
684
+ event.preventDefault();
685
+ };
686
+ var onKeyDown = function onKeyDown(event) {
687
+ var metaKey = event.metaKey || event.ctrlKey;
688
+ switch (event.code) {
689
+ case 'ArrowDown':
690
+ onArrowDownKey(event);
691
+ break;
692
+ case 'ArrowUp':
693
+ onArrowUpKey(event);
694
+ break;
695
+ case 'Home':
696
+ onHomeKey(event);
697
+ break;
698
+ case 'End':
699
+ onEndKey(event);
700
+ break;
701
+ case 'PageDown':
702
+ onPageDownKey(event);
703
+ break;
704
+ case 'PageUp':
705
+ onPageUpKey(event);
706
+ break;
707
+ case 'Enter':
708
+ case 'NumpadEnter':
709
+ case 'Space':
710
+ onSpaceKey(event);
711
+ event.preventDefault();
712
+ break;
713
+ case 'Tab':
714
+ //NOOP
715
+ break;
716
+ case 'ShiftLeft':
717
+ case 'ShiftRight':
718
+ onShiftKey();
719
+ break;
720
+ default:
721
+ if (props.multiple && event.code === 'KeyA' && metaKey) {
722
+ var value = visibleOptions.filter(function (option) {
723
+ return isValidOption(option);
724
+ }).map(function (option) {
725
+ return getOptionValue(option);
726
+ });
727
+ updateModel(event, value);
728
+ event.preventDefault();
729
+ break;
730
+ }
731
+ if (!metaKey && utils.ObjectUtils.isPrintableCharacter(event.key)) {
732
+ searchOptions(event, event.key);
733
+ event.preventDefault();
734
+ }
735
+ break;
736
+ }
737
+ };
738
+ var scrollInView = function scrollInView() {
739
+ var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
740
+ setTimeout(function () {
741
+ var idx = index !== -1 ? "".concat(id.current, "_").concat(index) : focusedOptionId();
742
+ var element = listRef.current.querySelector("li[id=\"".concat(idx, "\"]"));
743
+ if (element) {
744
+ element.scrollIntoView({
745
+ block: 'nearest',
746
+ inline: 'nearest',
747
+ behavior: 'smooth'
748
+ });
749
+ } else if (props.virtualScrollerOptions) {
750
+ virtualScrollerRef.current && virtualScrollerRef.current.scrollToIndex(index !== -1 ? index : props.focusedOptionIndex);
751
+ }
752
+ }, 0);
753
+ };
529
754
  var onFilter = function onFilter(event) {
530
755
  virtualScrollerRef.current && virtualScrollerRef.current.scrollToIndex(0);
531
756
  var originalEvent = event.originalEvent,
@@ -618,6 +843,23 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
618
843
  }
619
844
  return option && option['disabled'] !== undefined ? option['disabled'] : false;
620
845
  };
846
+ var onFirstHiddenFocus = function onFirstHiddenFocus() {
847
+ utils.DomHandler.focus(listRef.current);
848
+ var firstFocusableEl = utils.DomHandler.getFirstFocusableElement(elementRef.current, ':not([data-p-hidden-focusable="true"])');
849
+ lastHiddenFocusableElement.current.tabIndex = utils.DomHandler.isElement(firstFocusableEl) ? undefined : -1;
850
+ firstHiddenFocusableElement.current.tabIndex = -1;
851
+ };
852
+ var onLastHiddenFocus = function onLastHiddenFocus(event) {
853
+ var relatedTarget = event.relatedTarget;
854
+ if (relatedTarget === listRef.current) {
855
+ var firstFocusableEl = utils.DomHandler.getFirstFocusableElement(elementRef.current, ':not([data-p-hidden-focusable="true"])');
856
+ utils.DomHandler.focus(firstFocusableEl);
857
+ firstHiddenFocusableElement.current.tabIndex = undefined;
858
+ } else {
859
+ utils.DomHandler.focus(firstHiddenFocusableElement.current);
860
+ }
861
+ astHiddenFocusableElement.current.tabIndex = -1;
862
+ };
621
863
  var getOptionGroupRenderKey = function getOptionGroupRenderKey(optionGroup) {
622
864
  return utils.ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel);
623
865
  };
@@ -706,8 +948,9 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
706
948
  var optionLabel = getOptionLabel(option);
707
949
  var optionKey = j + '_' + getOptionRenderKey(option);
708
950
  var disabled = isOptionDisabled(option);
709
- var tabIndex = disabled ? null : props.tabIndex || 0;
951
+ disabled ? null : props.tabIndex || 0;
710
952
  return /*#__PURE__*/React__namespace.createElement(ListBoxItem, {
953
+ id: id.current + '_' + j,
711
954
  hostName: "ListBox",
712
955
  key: optionKey,
713
956
  label: optionLabel,
@@ -716,8 +959,9 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
716
959
  template: props.itemTemplate,
717
960
  selected: isSelected(option),
718
961
  onClick: onOptionSelect,
962
+ index: j,
963
+ focusedOptionIndex: focusedOptionIndex,
719
964
  onTouchEnd: onOptionTouchEnd,
720
- tabIndex: tabIndex,
721
965
  disabled: disabled,
722
966
  ptCallbacks: ptCallbacks,
723
967
  metaData: metaData
@@ -747,18 +991,20 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
747
991
  var optionLabel = getOptionLabel(option);
748
992
  var optionKey = index + '_' + getOptionRenderKey(option);
749
993
  var disabled = isOptionDisabled(option);
750
- var tabIndex = disabled ? null : props.tabIndex || 0;
994
+ disabled ? null : props.tabIndex || 0;
751
995
  return /*#__PURE__*/React__namespace.createElement(ListBoxItem, {
996
+ id: id.current + '_' + index,
752
997
  hostName: "ListBox",
753
998
  key: optionKey,
754
999
  label: optionLabel,
1000
+ index: index,
1001
+ focusedOptionIndex: focusedOptionIndex,
755
1002
  option: option,
756
1003
  style: style,
757
1004
  template: props.itemTemplate,
758
1005
  selected: isSelected(option),
759
1006
  onClick: onOptionSelect,
760
1007
  onTouchEnd: onOptionTouchEnd,
761
- tabIndex: tabIndex,
762
1008
  disabled: disabled,
763
1009
  ptCallbacks: ptCallbacks,
764
1010
  metaData: metaData
@@ -802,6 +1048,7 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
802
1048
  options: options
803
1049
  }),
804
1050
  role: 'listbox',
1051
+ tabIndex: '-1',
805
1052
  'aria-multiselectable': props.multiple
806
1053
  }, ariaProps), ptCallbacks.ptm('list'));
807
1054
  return /*#__PURE__*/React__namespace.createElement("ul", listProps, options.children);
@@ -815,9 +1062,12 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
815
1062
  } else {
816
1063
  var items = createItems();
817
1064
  var listProps = mergeProps(_objectSpread({
1065
+ ref: listRef,
818
1066
  className: ptCallbacks.cx('list'),
819
1067
  role: 'listbox',
820
- 'aria-multiselectable': props.multiple
1068
+ 'aria-multiselectable': props.multiple,
1069
+ tabIndex: '-1',
1070
+ onKeyDown: onKeyDown
821
1071
  }, ariaProps), ptCallbacks.ptm('list'));
822
1072
  return /*#__PURE__*/React__namespace.createElement("ul", listProps, items);
823
1073
  }
@@ -838,7 +1088,27 @@ var ListBox = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.
838
1088
  className: ptCallbacks.cx('root'),
839
1089
  style: props.style
840
1090
  }, ListBoxBase.getOtherProps(props), ptCallbacks.ptm('root'));
841
- return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("div", rootProps, header, /*#__PURE__*/React__namespace.createElement("div", wrapperProps, list)), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
1091
+ var hiddenFirstElement = mergeProps({
1092
+ ref: firstHiddenFocusableElement,
1093
+ role: 'presentation',
1094
+ 'aria-hidden': 'true',
1095
+ className: 'p-hidden-accessible p-hidden-focusable',
1096
+ tabIndex: !props.disabled ? props.tabIndex : -1,
1097
+ onFocus: onFirstHiddenFocus,
1098
+ 'data-p-hidden-accessible': true,
1099
+ 'data-p-hidden-focusable': true
1100
+ }, ptCallbacks.ptm('hiddenFirstFocusableEl'));
1101
+ var hiddenLastElement = mergeProps({
1102
+ ref: lastHiddenFocusableElement,
1103
+ role: 'presentation',
1104
+ 'aria-hidden': 'true',
1105
+ className: 'p-hidden-accessible p-hidden-focusable',
1106
+ tabIndex: !props.disabled ? props.tabIndex : -1,
1107
+ onFocus: onLastHiddenFocus,
1108
+ 'data-p-hidden-accessible': true,
1109
+ 'data-p-hidden-focusable': true
1110
+ }, ptCallbacks.ptm('hiddenFirstFocusableEl'));
1111
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("div", rootProps, /*#__PURE__*/React__namespace.createElement("span", hiddenFirstElement), header, /*#__PURE__*/React__namespace.createElement("div", wrapperProps, list), /*#__PURE__*/React__namespace.createElement("span", hiddenLastElement)), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
842
1112
  target: elementRef,
843
1113
  content: props.tooltip
844
1114
  }, props.tooltipOptions, {