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
@@ -191,10 +191,13 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
191
191
  item: function item(_ref7) {
192
192
  var selected = _ref7.selected,
193
193
  disabled = _ref7.disabled,
194
- label = _ref7.label;
194
+ label = _ref7.label,
195
+ index = _ref7.index,
196
+ focusedOptionIndex = _ref7.focusedOptionIndex;
195
197
  return utils.classNames('p-dropdown-item', {
196
198
  'p-highlight': selected,
197
199
  'p-disabled': disabled,
200
+ 'p-focus': index === focusedOptionIndex,
198
201
  'p-dropdown-item-empty': !label || label.length === 0
199
202
  });
200
203
  },
@@ -261,6 +264,8 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
261
264
  onShow: null,
262
265
  optionDisabled: null,
263
266
  optionGroupChildren: 'items',
267
+ selectOnFocus: false,
268
+ autoOptionFocus: false,
264
269
  optionGroupLabel: null,
265
270
  optionGroupTemplate: null,
266
271
  optionLabel: null,
@@ -299,7 +304,9 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
299
304
  selected = props.selected,
300
305
  disabled = props.disabled,
301
306
  option = props.option,
302
- label = props.label;
307
+ label = props.label,
308
+ index = props.index,
309
+ focusedOptionIndex = props.focusedOptionIndex;
303
310
  var getPTOptions = function getPTOptions(key) {
304
311
  return ptm(key, {
305
312
  context: {
@@ -308,7 +315,7 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
308
315
  }
309
316
  });
310
317
  };
311
- var _onClick = function onClick(event) {
318
+ var _onClick = function onClick(event, i) {
312
319
  if (props.onClick) {
313
320
  props.onClick({
314
321
  originalEvent: event,
@@ -323,7 +330,9 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
323
330
  className: utils.classNames(option.className, cx('item', {
324
331
  selected: selected,
325
332
  disabled: disabled,
326
- label: label
333
+ label: label,
334
+ index: index,
335
+ focusedOptionIndex: focusedOptionIndex
327
336
  })),
328
337
  style: props.style,
329
338
  onClick: function onClick(e) {
@@ -332,6 +341,7 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
332
341
  'aria-label': label,
333
342
  'aria-selected': selected,
334
343
  'data-p-highlight': selected,
344
+ 'data-p-focused': focusedOptionIndex === index,
335
345
  'data-p-disabled': disabled
336
346
  }, getPTOptions('item'));
337
347
  return /*#__PURE__*/React__namespace.createElement("li", itemProps, content, /*#__PURE__*/React__namespace.createElement(ripple.Ripple, null));
@@ -403,6 +413,8 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
403
413
  var disabled = props.isOptionDisabled(option);
404
414
  return /*#__PURE__*/React__namespace.createElement(DropdownItem, {
405
415
  key: optionKey,
416
+ index: j,
417
+ focusedOptionIndex: props.focusedOptionIndex,
406
418
  label: optionLabel,
407
419
  option: option,
408
420
  style: style,
@@ -450,6 +462,8 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
450
462
  return /*#__PURE__*/React__namespace.createElement(DropdownItem, {
451
463
  key: optionKey,
452
464
  label: optionLabel,
465
+ index: index,
466
+ focusedOptionIndex: props.focusedOptionIndex,
453
467
  option: option,
454
468
  style: style,
455
469
  template: props.itemTemplate,
@@ -642,20 +656,30 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
642
656
  setFilterState = _React$useState2[1];
643
657
  var _React$useState3 = React__namespace.useState(false),
644
658
  _React$useState4 = _slicedToArray(_React$useState3, 2),
645
- focusedState = _React$useState4[0],
646
- setFocusedState = _React$useState4[1];
659
+ clicked = _React$useState4[0],
660
+ setClicked = _React$useState4[1];
647
661
  var _React$useState5 = React__namespace.useState(false),
648
662
  _React$useState6 = _slicedToArray(_React$useState5, 2),
649
- overlayVisibleState = _React$useState6[0],
650
- setOverlayVisibleState = _React$useState6[1];
663
+ focusedState = _React$useState6[0],
664
+ setFocusedState = _React$useState6[1];
665
+ var _React$useState7 = React__namespace.useState(null),
666
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
667
+ focusedOptionIndex = _React$useState8[0],
668
+ setFocusedOptionIndex = _React$useState8[1];
669
+ var _React$useState9 = React__namespace.useState(false),
670
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
671
+ overlayVisibleState = _React$useState10[0],
672
+ setOverlayVisibleState = _React$useState10[1];
651
673
  var elementRef = React__namespace.useRef(null);
652
674
  var overlayRef = React__namespace.useRef(null);
675
+ var firstHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
676
+ var lastHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
653
677
  var inputRef = React__namespace.useRef(props.inputRef);
654
678
  var focusInputRef = React__namespace.useRef(props.focusInputRef);
655
679
  var virtualScrollerRef = React__namespace.useRef(null);
656
680
  var searchTimeout = React__namespace.useRef(null);
657
681
  var searchValue = React__namespace.useRef(null);
658
- var currentSearchChar = React__namespace.useRef(null);
682
+ React__namespace.useRef(null);
659
683
  var isLazy = props.virtualScrollerOptions && props.virtualScrollerOptions.lazy;
660
684
  var hasFilter = utils.ObjectUtils.isNotEmpty(filterState);
661
685
  var appendTo = props.appendTo || context && context.appendTo || PrimeReact__default["default"].appendTo;
@@ -719,6 +743,14 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
719
743
  return props.options;
720
744
  }
721
745
  };
746
+ var onFirstHiddenFocus = function onFirstHiddenFocus(event) {
747
+ var focusableEl = event.relatedTarget === focusInputRef.current ? utils.DomHandler.getFirstFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : focusInputRef.current;
748
+ utils.DomHandler.focus(focusableEl);
749
+ };
750
+ var onLastHiddenFocus = function onLastHiddenFocus(event) {
751
+ var focusableEl = event.relatedTarget === focusInputRef.current ? utils.DomHandler.getLastFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : focusInputRef.current;
752
+ utils.DomHandler.focus(focusableEl);
753
+ };
722
754
  var isClearClicked = function isClearClicked(event) {
723
755
  return utils.DomHandler.isAttributeEquals(event.target, 'data-pc-section', 'clearicon') || utils.DomHandler.isAttributeEquals(event.target.parentElement || event.target, 'data-pc-section', 'filterclearicon');
724
756
  };
@@ -738,6 +770,7 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
738
770
  utils.DomHandler.focus(focusInputRef.current);
739
771
  overlayVisibleState ? hide() : show();
740
772
  }
773
+ setClicked(true);
741
774
  };
742
775
  var onInputFocus = function onInputFocus(event) {
743
776
  if (props.showOnFocus && !overlayVisibleState) {
@@ -769,6 +802,15 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
769
802
  }, 200);
770
803
  }
771
804
  };
805
+ var onOptionSelect = function onOptionSelect(event, option) {
806
+ var isHide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
807
+ var value = getOptionValue(option);
808
+ selectItem({
809
+ originalEvent: event,
810
+ option: value
811
+ });
812
+ isHide && hide();
813
+ };
772
814
  var onPanelClick = function onPanelClick(event) {
773
815
  overlayservice.OverlayService.emit('overlay-click', {
774
816
  originalEvent: event,
@@ -776,189 +818,285 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
776
818
  });
777
819
  };
778
820
  var onInputKeyDown = function onInputKeyDown(event) {
821
+ if (props.disabled || utils.DomHandler.isAndroid()) {
822
+ event.preventDefault();
823
+ return;
824
+ }
825
+ var metaKey = event.metaKey || event.ctrlKey;
779
826
  switch (event.code) {
780
827
  case 'ArrowDown':
781
- onDownKey(event);
828
+ onArrowDownKey(event);
782
829
  break;
783
830
  case 'ArrowUp':
784
- onUpKey(event);
831
+ onArrowUpKey(event);
832
+ break;
833
+ case 'ArrowLeft':
834
+ case 'ArrowRight':
835
+ onArrowLeftKey(event, props.editable);
836
+ break;
837
+ case 'Home':
838
+ onHomeKey(event);
839
+ break;
840
+ case 'End':
841
+ onEndKey(event);
842
+ break;
843
+ case 'PageDown':
844
+ onPageDownKey(event);
845
+ break;
846
+ case 'PageUp':
847
+ onPageUpKey(event);
785
848
  break;
786
849
  case 'Space':
850
+ onSpaceKey(event, props.editable);
851
+ break;
852
+ case 'NumpadEnter':
787
853
  case 'Enter':
788
- overlayVisibleState ? hide() : show();
789
- event.preventDefault();
854
+ onEnterKey(event);
790
855
  break;
791
856
  case 'Escape':
857
+ onEscapeKey(event);
858
+ break;
792
859
  case 'Tab':
793
- hide();
860
+ onTabKey(event);
861
+ break;
862
+ case 'Backspace':
863
+ onBackspaceKey(event, props.editable);
864
+ break;
865
+ case 'ShiftLeft':
866
+ case 'ShiftRight':
867
+ //NOOP
794
868
  break;
795
869
  default:
796
- search(event);
870
+ if (!metaKey && utils.ObjectUtils.isPrintableCharacter(event.key)) {
871
+ !overlayVisibleState && show();
872
+ !props.editable && searchOptions(event, event.key);
873
+ }
797
874
  break;
798
875
  }
876
+ setClicked(false);
799
877
  };
800
878
  var onFilterInputKeyDown = function onFilterInputKeyDown(event) {
801
879
  switch (event.code) {
802
880
  case 'ArrowDown':
803
- onDownKey(event);
881
+ onArrowDownKey(event);
804
882
  break;
805
883
  case 'ArrowUp':
806
- onUpKey(event);
884
+ onArrowUpKey(event);
885
+ break;
886
+ case 'ArrowLeft':
887
+ case 'ArrowRight':
888
+ onArrowLeftKey(event, true);
807
889
  break;
808
890
  case 'Escape':
809
891
  case 'Enter':
810
- hide();
892
+ onEnterKey(event);
811
893
  event.preventDefault();
812
894
  break;
813
895
  }
814
896
  };
815
- var onUpKey = function onUpKey(event) {
816
- if (visibleOptions) {
817
- var prevOption = findPrevOption(getSelectedOptionIndex());
818
- if (prevOption) {
819
- selectItem({
820
- originalEvent: event,
821
- option: prevOption
822
- });
823
- }
824
- }
825
- event.preventDefault();
897
+ var hasFocusableElements = function hasFocusableElements() {
898
+ return utils.DomHandler.getFocusableElements(overlayRef.current, ':not([data-p-hidden-focusable="true"])').length > 0;
826
899
  };
827
- var onDownKey = function onDownKey(event) {
828
- if (visibleOptions) {
829
- if (!overlayVisibleState && event.altKey) {
830
- show();
831
- } else {
832
- var nextOption = findNextOption(getSelectedOptionIndex());
833
- if (nextOption) {
834
- selectItem({
835
- originalEvent: event,
836
- option: nextOption
837
- });
838
- }
839
- }
840
- }
841
- event.preventDefault();
900
+ var isOptionMatched = function isOptionMatched(option) {
901
+ var _getOptionLabel;
902
+ return isValidOption(option) && ((_getOptionLabel = getOptionLabel(option)) === null || _getOptionLabel === void 0 ? void 0 : _getOptionLabel.toLocaleLowerCase(props.filterLocale).startsWith(searchValue.current.toLocaleLowerCase(props.filterLocale)));
842
903
  };
843
- var findNextOption = function findNextOption(index) {
844
- if (props.optionGroupLabel) {
845
- var groupIndex = index === -1 ? 0 : index.group;
846
- var optionIndex = index === -1 ? -1 : index.option;
847
- var option = findNextOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex);
848
- if (option) return option;else if (groupIndex + 1 !== visibleOptions.length) return findNextOption({
849
- group: groupIndex + 1,
850
- option: -1
851
- });else return null;
852
- }
853
- return findNextOptionInList(visibleOptions, index);
904
+ var isValidOption = function isValidOption(option) {
905
+ return utils.ObjectUtils.isNotEmpty(option) && !(isOptionDisabled(option) || isOptionGroup(option));
854
906
  };
855
- var findNextOptionInList = function findNextOptionInList(list, index) {
856
- var i = index + 1;
857
- if (i === list.length) {
858
- return null;
859
- }
860
- var option = list[i];
861
- return isOptionDisabled(option) ? findNextOptionInList(i) : option;
907
+ var hasSelectedOption = function hasSelectedOption() {
908
+ return utils.ObjectUtils.isNotEmpty(props.value);
862
909
  };
863
- var findPrevOption = function findPrevOption(index) {
864
- if (index === -1) {
865
- return null;
866
- }
867
- if (props.optionGroupLabel) {
868
- var groupIndex = index.group;
869
- var optionIndex = index.option;
870
- var option = findPrevOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex);
871
- if (option) return option;else if (groupIndex > 0) return findPrevOption({
872
- group: groupIndex - 1,
873
- option: getOptionGroupChildren(visibleOptions[groupIndex - 1]).length
874
- });else return null;
875
- }
876
- return findPrevOptionInList(visibleOptions, index);
910
+ var isValidSelectedOption = function isValidSelectedOption(option) {
911
+ return isValidOption(option) && isSelected(option);
877
912
  };
878
- var findPrevOptionInList = function findPrevOptionInList(list, index) {
879
- var i = index - 1;
880
- if (i < 0) {
881
- return null;
882
- }
883
- var option = list[i];
884
- return isOptionDisabled(option) ? findPrevOption(i) : option;
913
+ var findSelectedOptionIndex = function findSelectedOptionIndex() {
914
+ return hasSelectedOption ? visibleOptions.findIndex(function (option) {
915
+ return isValidSelectedOption(option);
916
+ }) : -1;
885
917
  };
886
- var search = function search(event) {
918
+ var findFirstFocusedOptionIndex = function findFirstFocusedOptionIndex() {
919
+ var selectedIndex = findSelectedOptionIndex();
920
+ return selectedIndex < 0 ? findFirstOptionIndex() : selectedIndex;
921
+ };
922
+ var searchOptions = function searchOptions(event, _char) {
923
+ searchValue.current = (searchValue.current || '') + _char;
924
+ var optionIndex = -1;
925
+ var matched = false;
926
+ if (utils.ObjectUtils.isNotEmpty(searchValue.current)) {
927
+ if (focusedOptionIndex !== -1) {
928
+ optionIndex = visibleOptions.slice(focusedOptionIndex).findIndex(function (option) {
929
+ return isOptionMatched(option);
930
+ });
931
+ optionIndex = optionIndex === -1 ? visibleOptions.slice(0, focusedOptionIndex).findIndex(function (option) {
932
+ return isOptionMatched(option);
933
+ }) : optionIndex + focusedOptionIndex;
934
+ } else {
935
+ optionIndex = visibleOptions.findIndex(function (option) {
936
+ return isOptionMatched(option);
937
+ });
938
+ }
939
+ if (optionIndex !== -1) {
940
+ matched = true;
941
+ }
942
+ if (optionIndex === -1 && focusedOptionIndex === -1) {
943
+ optionIndex = findFirstFocusedOptionIndex();
944
+ }
945
+ if (optionIndex !== -1) {
946
+ changeFocusedOptionIndex(event, optionIndex);
947
+ }
948
+ }
887
949
  if (searchTimeout.current) {
888
950
  clearTimeout(searchTimeout.current);
889
951
  }
890
- if (event.ctrlKey || event.metaKey || event.altKey) {
891
- // ignore meta combinations like CTRL+F for browser search
892
- return;
952
+ searchTimeout.current = setTimeout(function () {
953
+ searchValue.current = '';
954
+ searchTimeout.current = null;
955
+ }, 500);
956
+ return matched;
957
+ };
958
+ var findLastFocusedOptionIndex = function findLastFocusedOptionIndex() {
959
+ var selectedIndex = findSelectedOptionIndex();
960
+ return selectedIndex < 0 ? findLastOptionIndex() : selectedIndex;
961
+ };
962
+ var findFirstOptionIndex = function findFirstOptionIndex() {
963
+ return visibleOptions.findIndex(function (option) {
964
+ return isValidOption(option);
965
+ });
966
+ };
967
+ var findLastOptionIndex = function findLastOptionIndex() {
968
+ return utils.ObjectUtils.findLastIndex(visibleOptions, function (option) {
969
+ return isValidOption(option);
970
+ });
971
+ };
972
+ var findNextOptionIndex = function findNextOptionIndex(index) {
973
+ var matchedOptionIndex = index < visibleOptions.length - 1 ? visibleOptions.slice(index + 1).findIndex(function (option) {
974
+ return isValidOption(option);
975
+ }) : -1;
976
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
977
+ };
978
+ var findPrevOptionIndex = function findPrevOptionIndex(index) {
979
+ var matchedOptionIndex = index > 0 ? utils.ObjectUtils.findLastIndex(visibleOptions.slice(0, index), function (option) {
980
+ return isValidOption(option);
981
+ }) : -1;
982
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
983
+ };
984
+ var changeFocusedOptionIndex = function changeFocusedOptionIndex(event, index) {
985
+ if (focusedOptionIndex !== index) {
986
+ setFocusedOptionIndex(index);
987
+ if (props.selectOnFocus) {
988
+ onOptionSelect(event, visibleOptions[index], false);
989
+ }
893
990
  }
894
- var _char = event.key;
895
- if (_char.length !== 1) {
896
- // only single character keys matter for searching
897
- return;
991
+ };
992
+ var onArrowDownKey = function onArrowDownKey(event) {
993
+ if (!overlayVisibleState) {
994
+ show();
995
+ props.editable && changeFocusedOptionIndex(event, findSelectedOptionIndex());
996
+ } else {
997
+ var optionIndex = focusedOptionIndex !== -1 ? findNextOptionIndex(focusedOptionIndex) : clicked ? findFirstOptionIndex() : findFirstFocusedOptionIndex();
998
+ changeFocusedOptionIndex(event, optionIndex);
898
999
  }
899
- if (currentSearchChar.current === _char) searchValue.current = _char;else searchValue.current = searchValue.current ? searchValue.current + _char : _char;
900
- currentSearchChar.current = _char;
901
- if (searchValue.current) {
902
- var searchIndex = getSelectedOptionIndex();
903
- var newOption = props.optionGroupLabel ? searchOptionInGroup(searchIndex) : searchOption(searchIndex + 1);
904
- if (newOption) {
905
- selectItem({
906
- originalEvent: event,
907
- option: newOption
908
- });
1000
+ event.preventDefault();
1001
+ };
1002
+ var onArrowUpKey = function onArrowUpKey(event) {
1003
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1004
+ if (event.altKey && !pressedInInputText) {
1005
+ if (focusedOptionIndex !== -1) {
1006
+ onOptionSelect(event, visibleOptions[focusedOptionIndex]);
909
1007
  }
1008
+ state.overlayVisible && hide();
1009
+ event.preventDefault();
1010
+ } else {
1011
+ var optionIndex = focusedOptionIndex !== -1 ? findPrevOptionIndex(focusedOptionIndex) : clicked ? findLastOptionIndex() : findLastFocusedOptionIndex();
1012
+ changeFocusedOptionIndex(event, optionIndex);
1013
+ !overlayVisibleState && show();
1014
+ event.preventDefault();
910
1015
  }
911
- searchTimeout.current = setTimeout(function () {
912
- searchValue.current = null;
913
- }, 250);
914
1016
  };
915
- var searchOption = function searchOption(index) {
916
- if (searchValue.current) {
917
- return searchOptionInRange(index, visibleOptions.length) || searchOptionInRange(0, index);
1017
+ var onArrowLeftKey = function onArrowLeftKey(event) {
1018
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1019
+ pressedInInputText && setFocusedOptionIndex(-1);
1020
+ };
1021
+ var onHomeKey = function onHomeKey(event) {
1022
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1023
+ if (pressedInInputText) {
1024
+ event.currentTarget.setSelectionRange(0, 0);
1025
+ setFocusedOptionIndex(-1);
1026
+ } else {
1027
+ changeFocusedOptionIndex(event, findFirstOptionIndex());
1028
+ !overlayVisibleState && show();
918
1029
  }
919
- return null;
1030
+ event.preventDefault();
920
1031
  };
921
- var searchOptionInRange = function searchOptionInRange(start, end) {
922
- for (var i = start; i < end; i++) {
923
- var opt = visibleOptions[i];
924
- if (matchesSearchValue(opt)) {
925
- return opt;
926
- }
1032
+ var onEndKey = function onEndKey(event) {
1033
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1034
+ if (pressedInInputText) {
1035
+ var target = event.currentTarget;
1036
+ var len = target.value.length;
1037
+ target.setSelectionRange(len, len);
1038
+ setFocusedOptionIndex(-1);
1039
+ } else {
1040
+ changeFocusedOptionIndex(event, findLastOptionIndex());
1041
+ !overlayVisibleState && show();
927
1042
  }
928
- return null;
1043
+ event.preventDefault();
929
1044
  };
930
- var searchOptionInGroup = function searchOptionInGroup(index) {
931
- var searchIndex = index === -1 ? {
932
- group: 0,
933
- option: -1
934
- } : index;
935
- for (var i = searchIndex.group; i < visibleOptions.length; i++) {
936
- var groupOptions = getOptionGroupChildren(visibleOptions[i]);
937
- for (var j = searchIndex.group === i ? searchIndex.option + 1 : 0; j < groupOptions.length; j++) {
938
- if (matchesSearchValue(groupOptions[j])) {
939
- return groupOptions[j];
940
- }
1045
+ var onPageUpKey = function onPageUpKey(event) {
1046
+ event.preventDefault();
1047
+ };
1048
+ var onPageDownKey = function onPageDownKey(event) {
1049
+ event.preventDefault();
1050
+ };
1051
+ var onSpaceKey = function onSpaceKey(event) {
1052
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1053
+ !pressedInInputText && onEnterKey(event);
1054
+ };
1055
+ var onEnterKey = function onEnterKey(event) {
1056
+ if (!overlayVisibleState) {
1057
+ setFocusedOptionIndex(-1);
1058
+ onArrowDownKey(event);
1059
+ } else {
1060
+ if (focusedOptionIndex !== -1) {
1061
+ onOptionSelect(event, visibleOptions[focusedOptionIndex]);
941
1062
  }
1063
+ hide();
942
1064
  }
943
- for (var _i = 0; _i <= searchIndex.group; _i++) {
944
- var _groupOptions = getOptionGroupChildren(visibleOptions[_i]);
945
- for (var _j = 0; _j < (searchIndex.group === _i ? searchIndex.option : _groupOptions.length); _j++) {
946
- if (matchesSearchValue(_groupOptions[_j])) {
947
- return _groupOptions[_j];
1065
+ event.preventDefault();
1066
+ };
1067
+ var onEscapeKey = function onEscapeKey(event) {
1068
+ overlayVisibleState && hide();
1069
+ event.preventDefault();
1070
+ };
1071
+ var onTabKey = function onTabKey(event) {
1072
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1073
+ if (!pressedInInputText) {
1074
+ if (overlayVisibleState && hasFocusableElements()) {
1075
+ utils.DomHandler.focus($refs.firstHiddenFocusableElementOnOverlay);
1076
+ event.preventDefault();
1077
+ } else {
1078
+ if (focusedOptionIndex !== -1) {
1079
+ onOptionSelect(event, visibleOptions[focusedOptionIndex]);
948
1080
  }
1081
+ overlayVisibleState && hide();
949
1082
  }
950
1083
  }
951
- return null;
952
1084
  };
953
- var matchesSearchValue = function matchesSearchValue(option) {
954
- var label = getOptionLabel(option);
955
- if (!label) {
956
- return false;
1085
+ var onBackspaceKey = function onBackspaceKey(event) {
1086
+ var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1087
+ if (pressedInInputText) {
1088
+ !overlayVisibleState && show();
957
1089
  }
958
- label = label.toLocaleLowerCase(props.filterLocale);
959
- return label.startsWith(searchValue.current.toLocaleLowerCase(props.filterLocale));
960
1090
  };
961
1091
  var onEditableInputChange = function onEditableInputChange(event) {
1092
+ !overlayVisibleState && show();
1093
+ var searchIndex = null;
1094
+ if (event.target.value) {
1095
+ searchIndex = visibleOptions.findIndex(function (item) {
1096
+ return item.name.toLocaleLowerCase().startsWith(event.target.value.toLocaleLowerCase());
1097
+ });
1098
+ }
1099
+ setFocusedOptionIndex(searchIndex);
962
1100
  if (props.onChange) {
963
1101
  props.onChange({
964
1102
  originalEvent: event.originalEvent,
@@ -1088,10 +1226,17 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1088
1226
  return utils.ObjectUtils.equals(props.value, getOptionValue(option), equalityKey());
1089
1227
  };
1090
1228
  var show = function show() {
1229
+ setFocusedOptionIndex(focusedOptionIndex !== -1 ? focusedOptionIndex : props.autoOptionFocus ? findFirstFocusedOptionIndex() : props.editable ? -1 : findSelectedOptionIndex());
1091
1230
  setOverlayVisibleState(true);
1092
1231
  };
1093
1232
  var hide = function hide() {
1094
1233
  setOverlayVisibleState(false);
1234
+ setClicked(false);
1235
+ };
1236
+ var onFocus = function onFocus() {
1237
+ if (props.editable) {
1238
+ utils.DomHandler.focus(inputRef.current);
1239
+ }
1095
1240
  };
1096
1241
  var onOverlayEnter = function onOverlayEnter(callback) {
1097
1242
  utils.ZIndexUtils.set('overlay', overlayRef.current, context && context.autoZIndex || PrimeReact__default["default"].autoZIndex, context && context.zIndex['overlay'] || PrimeReact__default["default"].zIndex['overlay']);
@@ -1144,6 +1289,9 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1144
1289
  var getOptionRenderKey = function getOptionRenderKey(option) {
1145
1290
  return props.dataKey ? utils.ObjectUtils.resolveFieldData(option, props.dataKey) : getOptionLabel(option);
1146
1291
  };
1292
+ var isOptionGroup = function isOptionGroup(option) {
1293
+ return props.optionGroupLabel && option.optionGroup && option.group;
1294
+ };
1147
1295
  var isOptionDisabled = function isOptionDisabled(option) {
1148
1296
  if (props.optionDisabled) {
1149
1297
  return utils.ObjectUtils.isFunction(props.optionDisabled) ? props.optionDisabled(option) : utils.ObjectUtils.resolveFieldData(option, props.optionDisabled);
@@ -1292,8 +1440,9 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1292
1440
  maxLength: props.maxLength,
1293
1441
  onInput: onEditableInputChange,
1294
1442
  onFocus: onEditableInputFocus,
1443
+ onKeyDown: onInputKeyDown,
1295
1444
  onBlur: onInputBlur,
1296
- tabIndex: props.tabIndex || 0,
1445
+ tabIndex: !props.disabled ? props.tabIndex : -1,
1297
1446
  'aria-haspopup': 'listbox'
1298
1447
  }, ariaProps), ptm('input'));
1299
1448
  return /*#__PURE__*/React__namespace.createElement("input", inputProps);
@@ -1385,10 +1534,31 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1385
1534
  },
1386
1535
  onMouseDown: props.onMouseDown,
1387
1536
  onContextMenu: props.onContextMenu,
1537
+ onFocus: onFocus,
1388
1538
  'data-p-disabled': props.disabled,
1389
1539
  'data-p-focus': focusedState
1390
1540
  }, otherProps, ptm('root'));
1391
- return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("div", rootProps, keyboardHelper, hiddenSelect, labelElement, clearIcon, dropdownIcon, /*#__PURE__*/React__namespace.createElement(DropdownPanel, _extends({
1541
+ var firstHiddenFocusableElementProps = mergeProps({
1542
+ ref: firstHiddenFocusableElementOnOverlay,
1543
+ role: 'presentation',
1544
+ 'aria-hidden': 'true',
1545
+ className: 'p-hidden-accessible p-hidden-focusable',
1546
+ tabIndex: '0',
1547
+ onFocus: onFirstHiddenFocus,
1548
+ 'data-p-hidden-accessible': true,
1549
+ 'data-p-hidden-focusable': true
1550
+ }, ptm('hiddenFirstFocusableEl'));
1551
+ var lastHiddenFocusableElementProps = mergeProps({
1552
+ ref: lastHiddenFocusableElementOnOverlay,
1553
+ role: 'presentation',
1554
+ 'aria-hidden': 'true',
1555
+ className: 'p-hidden-accessible p-hidden-focusable',
1556
+ tabIndex: '0',
1557
+ onFocus: onLastHiddenFocus,
1558
+ 'data-p-hidden-accessible': true,
1559
+ 'data-p-hidden-focusable': true
1560
+ }, ptm('hiddenLastFocusableEl'));
1561
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("div", rootProps, keyboardHelper, hiddenSelect, labelElement, clearIcon, dropdownIcon, /*#__PURE__*/React__namespace.createElement("span", firstHiddenFocusableElementProps), /*#__PURE__*/React__namespace.createElement(DropdownPanel, _extends({
1392
1562
  hostName: "Dropdown",
1393
1563
  ref: overlayRef,
1394
1564
  visibleOptions: visibleOptions,
@@ -1397,6 +1567,8 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1397
1567
  appendTo: appendTo,
1398
1568
  onClick: onPanelClick,
1399
1569
  onOptionClick: onOptionClick,
1570
+ focusedOptionIndex: focusedOptionIndex,
1571
+ setFocusedOptionIndex: setFocusedOptionIndex,
1400
1572
  filterValue: filterState,
1401
1573
  hasFilter: hasFilter,
1402
1574
  onFilterClearIconClick: onFilterClearIconClick,
@@ -1419,7 +1591,7 @@ this.primereact.dropdown = (function (exports, React, PrimeReact, componentbase,
1419
1591
  ptm: ptm,
1420
1592
  cx: cx,
1421
1593
  sx: sx
1422
- }))), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
1594
+ })), /*#__PURE__*/React__namespace.createElement("span", lastHiddenFocusableElementProps)), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
1423
1595
  target: elementRef,
1424
1596
  content: props.tooltip
1425
1597
  }, props.tooltipOptions, {