primeng 22.1.3 → 22.1.5

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 (197) hide show
  1. package/LICENSE.md +2 -0
  2. package/fesm2022/primeng-accordion.mjs +23 -23
  3. package/fesm2022/primeng-animateonscroll.mjs +7 -7
  4. package/fesm2022/primeng-api.mjs +31 -31
  5. package/fesm2022/primeng-autocomplete.mjs +54 -30
  6. package/fesm2022/primeng-autofocus.mjs +7 -7
  7. package/fesm2022/primeng-avatar.mjs +10 -10
  8. package/fesm2022/primeng-avatargroup.mjs +10 -10
  9. package/fesm2022/primeng-badge.mjs +14 -14
  10. package/fesm2022/primeng-base.mjs +9 -4
  11. package/fesm2022/primeng-basecomponent.mjs +25 -16
  12. package/fesm2022/primeng-baseeditableholder.mjs +3 -3
  13. package/fesm2022/primeng-baseinput.mjs +3 -3
  14. package/fesm2022/primeng-basemodelholder.mjs +3 -3
  15. package/fesm2022/primeng-bind.mjs +7 -7
  16. package/fesm2022/primeng-blockui.mjs +10 -10
  17. package/fesm2022/primeng-breadcrumb.mjs +14 -14
  18. package/fesm2022/primeng-button.mjs +19 -19
  19. package/fesm2022/primeng-buttongroup.mjs +14 -14
  20. package/fesm2022/primeng-card.mjs +10 -10
  21. package/fesm2022/primeng-carousel.mjs +31 -31
  22. package/fesm2022/primeng-cascadeselect.mjs +13 -13
  23. package/fesm2022/primeng-chart.mjs +10 -10
  24. package/fesm2022/primeng-checkbox.mjs +10 -10
  25. package/fesm2022/primeng-chip.mjs +10 -10
  26. package/fesm2022/primeng-classnames.mjs +7 -7
  27. package/fesm2022/primeng-colorpicker.mjs +10 -10
  28. package/fesm2022/primeng-commandmenu.mjs +10 -10
  29. package/fesm2022/primeng-compare.mjs +19 -19
  30. package/fesm2022/primeng-config.mjs +10 -8
  31. package/fesm2022/primeng-confirmdialog.mjs +10 -10
  32. package/fesm2022/primeng-confirmpopup.mjs +14 -14
  33. package/fesm2022/primeng-contextmenu.mjs +13 -13
  34. package/fesm2022/primeng-dataview.mjs +10 -10
  35. package/fesm2022/primeng-datepicker.mjs +44 -15
  36. package/fesm2022/primeng-dialog.mjs +10 -10
  37. package/fesm2022/primeng-divider.mjs +10 -10
  38. package/fesm2022/primeng-dock.mjs +10 -10
  39. package/fesm2022/primeng-dragdrop.mjs +10 -10
  40. package/fesm2022/primeng-drawer.mjs +15 -17
  41. package/fesm2022/primeng-dynamicdialog.mjs +16 -16
  42. package/fesm2022/primeng-editor.mjs +10 -10
  43. package/fesm2022/primeng-fieldset.mjs +10 -12
  44. package/fesm2022/primeng-fileupload.mjs +13 -13
  45. package/fesm2022/primeng-floatlabel.mjs +10 -10
  46. package/fesm2022/primeng-fluid.mjs +10 -10
  47. package/fesm2022/primeng-focustrap.mjs +7 -7
  48. package/fesm2022/primeng-galleria.mjs +22 -22
  49. package/fesm2022/primeng-gallery.mjs +75 -73
  50. package/fesm2022/primeng-iconfield.mjs +10 -10
  51. package/fesm2022/primeng-icons-angledoubledown.mjs +3 -3
  52. package/fesm2022/primeng-icons-angledoubleleft.mjs +3 -3
  53. package/fesm2022/primeng-icons-angledoubleright.mjs +3 -3
  54. package/fesm2022/primeng-icons-angledoubleup.mjs +3 -3
  55. package/fesm2022/primeng-icons-angledown.mjs +3 -3
  56. package/fesm2022/primeng-icons-angleleft.mjs +3 -3
  57. package/fesm2022/primeng-icons-angleright.mjs +3 -3
  58. package/fesm2022/primeng-icons-angleup.mjs +3 -3
  59. package/fesm2022/primeng-icons-arrowdown.mjs +3 -3
  60. package/fesm2022/primeng-icons-arrowdownleft.mjs +3 -3
  61. package/fesm2022/primeng-icons-arrowdownright.mjs +3 -3
  62. package/fesm2022/primeng-icons-arrowleft.mjs +3 -3
  63. package/fesm2022/primeng-icons-arrowright.mjs +3 -3
  64. package/fesm2022/primeng-icons-arrowup.mjs +3 -3
  65. package/fesm2022/primeng-icons-ban.mjs +3 -3
  66. package/fesm2022/primeng-icons-bars.mjs +3 -3
  67. package/fesm2022/primeng-icons-baseicon.mjs +6 -6
  68. package/fesm2022/primeng-icons-blank.mjs +3 -3
  69. package/fesm2022/primeng-icons-calendar.mjs +3 -3
  70. package/fesm2022/primeng-icons-caretleft.mjs +3 -3
  71. package/fesm2022/primeng-icons-caretright.mjs +3 -3
  72. package/fesm2022/primeng-icons-check.mjs +3 -3
  73. package/fesm2022/primeng-icons-chevrondown.mjs +3 -3
  74. package/fesm2022/primeng-icons-chevronleft.mjs +3 -3
  75. package/fesm2022/primeng-icons-chevronright.mjs +3 -3
  76. package/fesm2022/primeng-icons-chevronup.mjs +3 -3
  77. package/fesm2022/primeng-icons-exclamationtriangle.mjs +3 -3
  78. package/fesm2022/primeng-icons-eye.mjs +3 -3
  79. package/fesm2022/primeng-icons-eyeslash.mjs +3 -3
  80. package/fesm2022/primeng-icons-filter.mjs +3 -3
  81. package/fesm2022/primeng-icons-filterfill.mjs +3 -3
  82. package/fesm2022/primeng-icons-filterslash.mjs +3 -3
  83. package/fesm2022/primeng-icons-home.mjs +3 -3
  84. package/fesm2022/primeng-icons-infocircle.mjs +3 -3
  85. package/fesm2022/primeng-icons-minus.mjs +3 -3
  86. package/fesm2022/primeng-icons-pencil.mjs +3 -3
  87. package/fesm2022/primeng-icons-plus.mjs +3 -3
  88. package/fesm2022/primeng-icons-refresh.mjs +3 -3
  89. package/fesm2022/primeng-icons-search.mjs +3 -3
  90. package/fesm2022/primeng-icons-searchminus.mjs +3 -3
  91. package/fesm2022/primeng-icons-searchplus.mjs +3 -3
  92. package/fesm2022/primeng-icons-sortalt.mjs +3 -3
  93. package/fesm2022/primeng-icons-sortamountdown.mjs +3 -3
  94. package/fesm2022/primeng-icons-sortamountupalt.mjs +3 -3
  95. package/fesm2022/primeng-icons-spinner.mjs +3 -3
  96. package/fesm2022/primeng-icons-star.mjs +3 -3
  97. package/fesm2022/primeng-icons-starfill.mjs +3 -3
  98. package/fesm2022/primeng-icons-thlarge.mjs +3 -3
  99. package/fesm2022/primeng-icons-times.mjs +3 -3
  100. package/fesm2022/primeng-icons-timescircle.mjs +3 -3
  101. package/fesm2022/primeng-icons-trash.mjs +3 -3
  102. package/fesm2022/primeng-icons-undo.mjs +3 -3
  103. package/fesm2022/primeng-icons-upload.mjs +3 -3
  104. package/fesm2022/primeng-icons-windowmaximize.mjs +3 -3
  105. package/fesm2022/primeng-icons-windowminimize.mjs +3 -3
  106. package/fesm2022/primeng-iftalabel.mjs +10 -10
  107. package/fesm2022/primeng-image.mjs +10 -10
  108. package/fesm2022/primeng-imagecompare.mjs +10 -10
  109. package/fesm2022/primeng-inplace.mjs +16 -16
  110. package/fesm2022/primeng-inputcolor.mjs +43 -43
  111. package/fesm2022/primeng-inputgroup.mjs +14 -14
  112. package/fesm2022/primeng-inputgroupaddon.mjs +10 -10
  113. package/fesm2022/primeng-inputicon.mjs +10 -10
  114. package/fesm2022/primeng-inputmask.mjs +13 -13
  115. package/fesm2022/primeng-inputnumber.mjs +10 -10
  116. package/fesm2022/primeng-inputotp.mjs +10 -10
  117. package/fesm2022/primeng-inputpassword.mjs +10 -10
  118. package/fesm2022/primeng-inputtags.mjs +22 -18
  119. package/fesm2022/primeng-inputtext.mjs +10 -10
  120. package/fesm2022/primeng-isolation.mjs +9 -9
  121. package/fesm2022/primeng-keyfilter.mjs +7 -7
  122. package/fesm2022/primeng-knob.mjs +10 -10
  123. package/fesm2022/primeng-label.mjs +10 -10
  124. package/fesm2022/primeng-listbox.mjs +46 -34
  125. package/fesm2022/primeng-megamenu.mjs +13 -13
  126. package/fesm2022/primeng-menu.mjs +30 -24
  127. package/fesm2022/primeng-menubar.mjs +20 -20
  128. package/fesm2022/primeng-message.mjs +12 -10
  129. package/fesm2022/primeng-metergroup.mjs +13 -13
  130. package/fesm2022/primeng-motion.mjs +13 -13
  131. package/fesm2022/primeng-multiselect.mjs +61 -29
  132. package/fesm2022/primeng-orderlist.mjs +12 -10
  133. package/fesm2022/primeng-organizationchart.mjs +129 -31
  134. package/fesm2022/primeng-overlay.mjs +10 -10
  135. package/fesm2022/primeng-overlaybadge.mjs +10 -10
  136. package/fesm2022/primeng-paginator.mjs +16 -12
  137. package/fesm2022/primeng-panel.mjs +10 -12
  138. package/fesm2022/primeng-panelmenu.mjs +36 -28
  139. package/fesm2022/primeng-password.mjs +20 -20
  140. package/fesm2022/primeng-picklist.mjs +14 -10
  141. package/fesm2022/primeng-popover.mjs +10 -10
  142. package/fesm2022/primeng-progressbar.mjs +10 -10
  143. package/fesm2022/primeng-progressspinner.mjs +10 -10
  144. package/fesm2022/primeng-radiobutton.mjs +13 -13
  145. package/fesm2022/primeng-rating.mjs +10 -10
  146. package/fesm2022/primeng-ripple.mjs +14 -14
  147. package/fesm2022/primeng-scrollarea.mjs +25 -25
  148. package/fesm2022/primeng-scroller.mjs +35 -16
  149. package/fesm2022/primeng-scrollpanel.mjs +14 -14
  150. package/fesm2022/primeng-scrolltop.mjs +10 -10
  151. package/fesm2022/primeng-select.mjs +79 -47
  152. package/fesm2022/primeng-selectbutton.mjs +12 -10
  153. package/fesm2022/primeng-sidebar.mjs +83 -83
  154. package/fesm2022/primeng-skeleton.mjs +10 -10
  155. package/fesm2022/primeng-slider.mjs +10 -10
  156. package/fesm2022/primeng-speeddial.mjs +10 -10
  157. package/fesm2022/primeng-splitbutton.mjs +10 -10
  158. package/fesm2022/primeng-splitter.mjs +13 -13
  159. package/fesm2022/primeng-stepper.mjs +47 -47
  160. package/fesm2022/primeng-steps.mjs +10 -10
  161. package/fesm2022/primeng-styleclass.mjs +7 -7
  162. package/fesm2022/primeng-table.mjs +201 -115
  163. package/fesm2022/primeng-tabs.mjs +50 -34
  164. package/fesm2022/primeng-tag.mjs +10 -10
  165. package/fesm2022/primeng-terminal.mjs +15 -15
  166. package/fesm2022/primeng-textarea.mjs +10 -10
  167. package/fesm2022/primeng-tieredmenu.mjs +13 -13
  168. package/fesm2022/primeng-timeline.mjs +24 -18
  169. package/fesm2022/primeng-toast.mjs +13 -13
  170. package/fesm2022/primeng-togglebutton.mjs +14 -14
  171. package/fesm2022/primeng-toggleswitch.mjs +10 -10
  172. package/fesm2022/primeng-toolbar.mjs +10 -10
  173. package/fesm2022/primeng-tooltip.mjs +94 -80
  174. package/fesm2022/primeng-tree.mjs +131 -33
  175. package/fesm2022/primeng-treeselect.mjs +37 -10
  176. package/fesm2022/primeng-treetable.mjs +84 -62
  177. package/fesm2022/primeng-useid.mjs +3 -3
  178. package/fesm2022/primeng-usestyle.mjs +6 -6
  179. package/package.json +20 -20
  180. package/types/primeng-api.d.ts +7 -2
  181. package/types/primeng-base.d.ts +1 -0
  182. package/types/primeng-basecomponent.d.ts +2 -0
  183. package/types/primeng-config.d.ts +7 -2
  184. package/types/primeng-confirmpopup.d.ts +2 -2
  185. package/types/primeng-datepicker.d.ts +9 -0
  186. package/types/primeng-motion.d.ts +0 -15
  187. package/types/primeng-scroller.d.ts +5 -3
  188. package/types/primeng-select.d.ts +6 -5
  189. package/types/primeng-stepper.d.ts +0 -95
  190. package/types/primeng-table.d.ts +5 -3
  191. package/types/primeng-tabs.d.ts +3 -76
  192. package/types/primeng-tooltip.d.ts +18 -7
  193. package/types/primeng-treeselect.d.ts +9 -2
  194. package/types/primeng-types-select.d.ts +4 -0
  195. package/types/primeng-types-treeselect.d.ts +15 -0
  196. package/types/primeng-utils.d.ts +0 -1
  197. package/types/primeng.d.ts +1 -2
@@ -6,7 +6,7 @@ import { NG_VALUE_ACCESSOR } from "@angular/forms";
6
6
  import { ChevronDown } from "@primeicons/angular/chevron-down";
7
7
  import { Search } from "@primeicons/angular/search";
8
8
  import { Times } from "@primeicons/angular/times";
9
- import { deepEquals, equals, findLastIndex, findSingle, focus, getFirstFocusableElement, getFocusableElements, getLastFocusableElement, isEmpty, isNotEmpty, isPrintableCharacter, isScalar, resolveFieldData, scrollInView } from "@primeuix/utils";
9
+ import { deepEquals, equals, findLastIndex, findSingle, focus, getFirstFocusableElement, getFocusableElements, getLastFocusableElement, isEmpty, isNotEmpty, isObject, isPrintableCharacter, isScalar, resolveFieldData, scrollInView } from "@primeuix/utils";
10
10
  import { FilterService, SharedModule, TranslationKeys } from "primeng/api";
11
11
  import { AutoFocus } from "primeng/autofocus";
12
12
  import { BaseComponent, PARENT_INSTANCE } from "primeng/basecomponent";
@@ -71,7 +71,7 @@ var SelectStyle = class SelectStyle extends BaseStyle {
71
71
  classes = classes;
72
72
  static ɵfac = i0.ɵɵngDeclareFactory({
73
73
  minVersion: "12.0.0",
74
- version: "22.2.3",
74
+ version: "22.2.5",
75
75
  ngImport: i0,
76
76
  type: SelectStyle,
77
77
  deps: null,
@@ -79,14 +79,14 @@ var SelectStyle = class SelectStyle extends BaseStyle {
79
79
  });
80
80
  static ɵprov = i0.ɵɵngDeclareInjectable({
81
81
  minVersion: "12.0.0",
82
- version: "22.2.3",
82
+ version: "22.2.5",
83
83
  ngImport: i0,
84
84
  type: SelectStyle
85
85
  });
86
86
  };
87
87
  i0.ɵɵngDeclareClassMetadata({
88
88
  minVersion: "12.0.0",
89
- version: "22.2.3",
89
+ version: "22.2.5",
90
90
  ngImport: i0,
91
91
  type: SelectStyle,
92
92
  decorators: [{ type: Injectable }]
@@ -164,7 +164,7 @@ var SelectItem = class SelectItem extends BaseComponent {
164
164
  }
165
165
  static ɵfac = i0.ɵɵngDeclareFactory({
166
166
  minVersion: "12.0.0",
167
- version: "22.2.3",
167
+ version: "22.2.5",
168
168
  ngImport: i0,
169
169
  type: SelectItem,
170
170
  deps: null,
@@ -172,7 +172,7 @@ var SelectItem = class SelectItem extends BaseComponent {
172
172
  });
173
173
  static ɵcmp = i0.ɵɵngDeclareComponent({
174
174
  minVersion: "17.0.0",
175
- version: "22.2.3",
175
+ version: "22.2.5",
176
176
  type: SelectItem,
177
177
  isStandalone: true,
178
178
  selector: "p-select-item",
@@ -350,7 +350,7 @@ var SelectItem = class SelectItem extends BaseComponent {
350
350
  };
351
351
  i0.ɵɵngDeclareClassMetadata({
352
352
  minVersion: "12.0.0",
353
- version: "22.2.3",
353
+ version: "22.2.5",
354
354
  ngImport: i0,
355
355
  type: SelectItem,
356
356
  decorators: [{
@@ -739,7 +739,8 @@ var Select = class Select extends BaseInput {
739
739
  emptyFilterMessageText = computed(() => this.emptyFilterMessage() || this.translation()?.emptySearchMessage || this.translation()?.emptyFilterMessage || "", ...ngDevMode ? [{ debugName: "emptyFilterMessageText" }] : /* istanbul ignore next */ []);
740
740
  filterResultMessageText = computed(() => {
741
741
  const count = this.visibleOptions()?.filter((option) => !this.isOptionGroup(option)).length ?? 0;
742
- return count ? this.filterMessageText().replaceAll("{0}", String(count)) : this.emptyFilterMessageText();
742
+ if (count) return this.filterMessageText().replaceAll("{0}", String(count));
743
+ return this._filterValue() ? this.emptyFilterMessageText() : this.emptyMessageLabel() || this.emptyFilterMessageText();
743
744
  }, ...ngDevMode ? [{ debugName: "filterResultMessageText" }] : /* istanbul ignore next */ []);
744
745
  selectionMessageText = computed(() => this.selectionMessage() || this.translation()?.selectionMessage || "", ...ngDevMode ? [{ debugName: "selectionMessageText" }] : /* istanbul ignore next */ []);
745
746
  emptySelectionMessageText = computed(() => this.emptySelectionMessage() || this.translation()?.emptySelectionMessage || "", ...ngDevMode ? [{ debugName: "emptySelectionMessageText" }] : /* istanbul ignore next */ []);
@@ -788,9 +789,16 @@ var Select = class Select extends BaseInput {
788
789
  const currentValue = this.modelValue();
789
790
  if (!Array.isArray(currentValue) || currentValue.length === 0) return this.placeholder() || "p-emptylabel";
790
791
  const options = this.getAllVisibleAndNonVisibleOptions();
792
+ const optionsByValue = /* @__PURE__ */ new Map();
793
+ options.forEach((option) => {
794
+ if (this.isOptionGroup(option)) return;
795
+ const value = this.getOptionValue(option);
796
+ if (!optionsByValue.has(value)) optionsByValue.set(value, option);
797
+ });
791
798
  return currentValue.map((val) => {
792
- const opt = options.find((o) => !this.isOptionGroup(o) && equals(val, this.getOptionValue(o), this.equalityKey()));
793
- return opt ? this.getOptionLabel(opt) : String(val);
799
+ const opt = optionsByValue.get(val) ?? options.find((o) => !this.isOptionGroup(o) && equals(val, this.getOptionValue(o), this.equalityKey()));
800
+ if (opt) return this.getOptionLabel(opt);
801
+ return isObject(val) ? this.getOptionLabel(val) : String(val);
794
802
  }).filter(Boolean).join(", ");
795
803
  }
796
804
  const options = this.getAllVisibleAndNonVisibleOptions();
@@ -807,8 +815,7 @@ var Select = class Select extends BaseInput {
807
815
  $ariaMultiselectable = computed(() => this.multiple() || void 0, ...ngDevMode ? [{ debugName: "$ariaMultiselectable" }] : /* istanbul ignore next */ []);
808
816
  $ariaReadonly = computed(() => this.readonly() || void 0, ...ngDevMode ? [{ debugName: "$ariaReadonly" }] : /* istanbul ignore next */ []);
809
817
  $placeholder = computed(() => {
810
- const modelVal = this.modelValue();
811
- return modelVal === void 0 || modelVal === null ? this.placeholder() : void 0;
818
+ return (this.modelValue() ?? "") === "" ? this.placeholder() : void 0;
812
819
  }, ...ngDevMode ? [{ debugName: "$placeholder" }] : /* istanbul ignore next */ []);
813
820
  $required = computed(() => this.required() ? "" : void 0, ...ngDevMode ? [{ debugName: "$required" }] : /* istanbul ignore next */ []);
814
821
  $readonly = computed(() => this.readonly() ? "" : void 0, ...ngDevMode ? [{ debugName: "$readonly" }] : /* istanbul ignore next */ []);
@@ -834,7 +841,14 @@ var Select = class Select extends BaseInput {
834
841
  $implicit: this.visibleOptions(),
835
842
  options: {}
836
843
  }), ...ngDevMode ? [{ debugName: "defaultBuildInItemsContext" }] : /* istanbul ignore next */ []);
837
- ariaSetSize = computed(() => this.visibleOptions().filter((option) => !this.isOptionGroup(option)).length, ...ngDevMode ? [{ debugName: "ariaSetSize" }] : /* istanbul ignore next */ []);
844
+ ariaSetSize = computed(() => this.visibleOptions().length - this.groupIndexes().length, ...ngDevMode ? [{ debugName: "ariaSetSize" }] : /* istanbul ignore next */ []);
845
+ groupIndexes = computed(() => {
846
+ const indexes = [];
847
+ this.visibleOptions().forEach((option, index) => {
848
+ if (this.isOptionGroup(option)) indexes.push(index);
849
+ });
850
+ return indexes;
851
+ }, ...ngDevMode ? [{ debugName: "groupIndexes" }] : /* istanbul ignore next */ []);
838
852
  containerDataP = computed(() => this.cn({
839
853
  invalid: this.invalid(),
840
854
  disabled: this.$disabled(),
@@ -860,10 +874,11 @@ var Select = class Select extends BaseInput {
860
874
  const visibleOptions = this.visibleOptions();
861
875
  if (visibleOptions && isNotEmpty(visibleOptions)) {
862
876
  const selectedOptionIndex = this.findSelectedOptionIndex();
863
- if (selectedOptionIndex !== -1 || modelValue === void 0 || typeof modelValue === "string" && modelValue.length === 0 || this.isModelValueNotSet() || this.editable()) this.selectedOption.set(visibleOptions[selectedOptionIndex]);
877
+ if (selectedOptionIndex !== -1 || modelValue === void 0 || typeof modelValue === "string" && modelValue.length === 0 || this.isModelValueNotSet()) this.selectedOption.set(visibleOptions[selectedOptionIndex]);
864
878
  else {
865
879
  const disabledSelectedIndex = visibleOptions.findIndex((option) => this.isSelected(option));
866
880
  if (disabledSelectedIndex !== -1) this.selectedOption.set(visibleOptions[disabledSelectedIndex]);
881
+ else if (this.editable()) this.selectedOption.set(this.getAllVisibleAndNonVisibleOptions().find((option) => this.isSelected(option)));
867
882
  }
868
883
  }
869
884
  if (isEmpty(visibleOptions) && (modelValue === void 0 || this.isModelValueNotSet()) && isNotEmpty(this.selectedOption())) this.selectedOption.set(null);
@@ -884,7 +899,7 @@ var Select = class Select extends BaseInput {
884
899
  const inputId = this.inputId();
885
900
  if (!inputId || this.editable()) return;
886
901
  const label = (getShadowRoot(this.el.nativeElement) ?? this.document).querySelector(`label[for="${inputId}"]`);
887
- if (label) onCleanup(this.renderer.listen(label, "click", () => focus(this.focusInputViewChild()?.nativeElement)));
902
+ if (label) onCleanup(this.renderer.listen(label, "click", () => !this.$disabled() && focus(this.focusInputViewChild()?.nativeElement)));
888
903
  });
889
904
  effect(() => {
890
905
  const options = this.visibleOptions();
@@ -978,7 +993,8 @@ var Select = class Select extends BaseInput {
978
993
  this.focusedOptionIndex.set(this.findSelectedOptionIndex());
979
994
  if (preventChange === false) this.onChange.emit({
980
995
  originalEvent: event,
981
- value
996
+ value,
997
+ option
982
998
  });
983
999
  }
984
1000
  if (isHide) this.hide(true);
@@ -1002,9 +1018,6 @@ var Select = class Select extends BaseInput {
1002
1018
  this.writeModelValue(value);
1003
1019
  this.selectedOptionUpdated = true;
1004
1020
  }
1005
- allowModelChange() {
1006
- return !!this.modelValue() && !this.placeholder() && (this.modelValue() === void 0 || this.modelValue() === null) && !this.editable() && this._options() && this._options().length;
1007
- }
1008
1021
  isSelected(option) {
1009
1022
  if (this.multiple()) {
1010
1023
  const currentValue = this.modelValue();
@@ -1022,7 +1035,12 @@ var Select = class Select extends BaseInput {
1022
1035
  if (this.editable()) this.updateEditableLabel();
1023
1036
  }
1024
1037
  updateEditableLabel() {
1025
- if (this.editableInputViewChild()) this.editableInputViewChild().nativeElement.value = this.getOptionLabel(this.selectedOption()) || this.getValueLabel(this.modelValue()) || this.modelValue() || "";
1038
+ if (this.editableInputViewChild()) {
1039
+ const modelValue = this.modelValue();
1040
+ const optionLabel = this.getOptionLabel(this.selectedOption());
1041
+ const valueLabel = this.getValueLabel(modelValue);
1042
+ this.editableInputViewChild().nativeElement.value = optionLabel || valueLabel || (isObject(modelValue) ? "" : modelValue) || "";
1043
+ }
1026
1044
  }
1027
1045
  clearEditableLabel() {
1028
1046
  if (this.editableInputViewChild()) this.editableInputViewChild().nativeElement.value = "";
@@ -1067,7 +1085,7 @@ var Select = class Select extends BaseInput {
1067
1085
  return this.optionGroupChildren() !== void 0 && this.optionGroupChildren() !== null ? resolveFieldData(optionGroup, this.optionGroupChildren()) : optionGroup.items;
1068
1086
  }
1069
1087
  getAriaPosInset(index) {
1070
- return (this.optionGroupLabel() ? index - this.visibleOptions().slice(0, index).filter((option) => this.isOptionGroup(option)).length : index) + 1;
1088
+ return index - this.groupIndexes().filter((groupIndex) => groupIndex < index).length + 1;
1071
1089
  }
1072
1090
  resetFilter() {
1073
1091
  this._filterValue.set(null);
@@ -1092,10 +1110,14 @@ var Select = class Select extends BaseInput {
1092
1110
  this.searchValue = "";
1093
1111
  if (!this.searchOptions(event, value, false)) this.focusedOptionIndex.set(-1);
1094
1112
  this.updateModel(value || null, event);
1113
+ const selectedIndex = this.findSelectedOptionIndex();
1114
+ const option = selectedIndex !== -1 ? this.visibleOptions()[selectedIndex] : null;
1115
+ clearTimeout(this.changeTimeout);
1095
1116
  this.changeTimeout = setTimeout(() => {
1096
1117
  this.onChange.emit({
1097
1118
  originalEvent: event,
1098
- value
1119
+ value,
1120
+ option
1099
1121
  });
1100
1122
  }, 1);
1101
1123
  if (!this.overlayVisible() && isNotEmpty(value)) this.show();
@@ -1120,9 +1142,12 @@ var Select = class Select extends BaseInput {
1120
1142
  if (this._options() && this._options().length) {
1121
1143
  if (this.virtualScroll()) {
1122
1144
  const selectedIndex = this.modelValue() ? this.focusedOptionIndex() : -1;
1123
- if (selectedIndex !== -1) this.scrollToSelectedTimeout = setTimeout(() => {
1124
- this.scroller()?.scrollToIndex(selectedIndex);
1125
- }, 10);
1145
+ if (selectedIndex !== -1) {
1146
+ if (this.scrollToSelectedTimeout) clearTimeout(this.scrollToSelectedTimeout);
1147
+ this.scrollToSelectedTimeout = setTimeout(() => {
1148
+ this.scroller()?.scrollToIndex(selectedIndex);
1149
+ }, 10);
1150
+ }
1126
1151
  } else {
1127
1152
  let selectedListItem = findSingle(this.itemsWrapper, "[data-p-selected=\"true\"]");
1128
1153
  if (selectedListItem) selectedListItem.scrollIntoView({
@@ -1222,6 +1247,9 @@ var Select = class Select extends BaseInput {
1222
1247
  }
1223
1248
  this.clicked.set(false);
1224
1249
  }
1250
+ onFilterTemplateKeyDown(event) {
1251
+ if (this.filterTemplate() && event.target instanceof HTMLInputElement) this.onFilterKeyDown(event);
1252
+ }
1225
1253
  onFilterKeyDown(event) {
1226
1254
  if (event.isComposing || event.keyCode === 229) return;
1227
1255
  switch (event.code) {
@@ -1276,6 +1304,7 @@ var Select = class Select extends BaseInput {
1276
1304
  }
1277
1305
  }
1278
1306
  scrollInView(index = -1) {
1307
+ if (this.scrollInViewTimeout) clearTimeout(this.scrollInViewTimeout);
1279
1308
  this.scrollInViewTimeout = setTimeout(() => {
1280
1309
  const id = index !== -1 ? `${this.$id()}_${index}` : this.focusedOptionId();
1281
1310
  const element = this.itemsViewChild()?.nativeElement ? findSingle(this.itemsViewChild().nativeElement, `li[id="${id}"]`) : null;
@@ -1432,7 +1461,6 @@ var Select = class Select extends BaseInput {
1432
1461
  this.onOptionSelect(event, option);
1433
1462
  }
1434
1463
  if (this.overlayVisible()) this.hide(this.filter());
1435
- if (consumedByOverlay) event.stopPropagation();
1436
1464
  }
1437
1465
  }
1438
1466
  }
@@ -1473,10 +1501,10 @@ var Select = class Select extends BaseInput {
1473
1501
  return matched;
1474
1502
  }
1475
1503
  isOptionExactMatched(option) {
1476
- return this.isValidOption(option) && this.getOptionLabel(option).toString().toLocaleLowerCase(this.filterLocale()) === (this.searchValue ?? "").toLocaleLowerCase(this.filterLocale());
1504
+ return this.isValidOption(option) && this.getOptionLabel(option)?.toString().toLocaleLowerCase(this.filterLocale()) === (this.searchValue ?? "").toLocaleLowerCase(this.filterLocale());
1477
1505
  }
1478
1506
  isOptionMatched(option) {
1479
- return this.isValidOption(option) && this.getOptionLabel(option).toString().toLocaleLowerCase(this.filterLocale()).startsWith((this.searchValue ?? "").toLocaleLowerCase(this.filterLocale()));
1507
+ return this.isValidOption(option) && this.getOptionLabel(option)?.toString().toLocaleLowerCase(this.filterLocale()).startsWith((this.searchValue ?? "").toLocaleLowerCase(this.filterLocale()));
1480
1508
  }
1481
1509
  onFilterInputChange(event) {
1482
1510
  let value = event.target.value;
@@ -1521,7 +1549,8 @@ var Select = class Select extends BaseInput {
1521
1549
  this.onModelTouched();
1522
1550
  this.onChange.emit({
1523
1551
  originalEvent: event,
1524
- value: this.value
1552
+ value: this.value,
1553
+ option: null
1525
1554
  });
1526
1555
  this.onClear.emit(event);
1527
1556
  this.resetFilter();
@@ -1529,13 +1558,12 @@ var Select = class Select extends BaseInput {
1529
1558
  writeControlValue(value, setModelValue) {
1530
1559
  if (this.filter()) this.resetFilter();
1531
1560
  this.value = value;
1532
- if (this.allowModelChange()) this.onModelChange(value);
1533
1561
  setModelValue(this.value);
1534
1562
  this.updateEditableLabel();
1535
1563
  }
1536
1564
  static ɵfac = i0.ɵɵngDeclareFactory({
1537
1565
  minVersion: "12.0.0",
1538
- version: "22.2.3",
1566
+ version: "22.2.5",
1539
1567
  ngImport: i0,
1540
1568
  type: Select,
1541
1569
  deps: [],
@@ -1543,7 +1571,7 @@ var Select = class Select extends BaseInput {
1543
1571
  });
1544
1572
  static ɵcmp = i0.ɵɵngDeclareComponent({
1545
1573
  minVersion: "17.0.0",
1546
- version: "22.2.3",
1574
+ version: "22.2.5",
1547
1575
  type: Select,
1548
1576
  isStandalone: true,
1549
1577
  selector: "p-select",
@@ -2176,7 +2204,7 @@ var Select = class Select extends BaseInput {
2176
2204
  [attr.aria-haspopup]="'listbox'"
2177
2205
  [attr.aria-expanded]="$ariaExpanded"
2178
2206
  [attr.aria-controls]="$ariaControls()"
2179
- [attr.placeholder]="$placeholder()"
2207
+ [attr.placeholder]="placeholder()"
2180
2208
  [attr.aria-label]="ariaLabel()"
2181
2209
  [attr.aria-labelledby]="ariaLabelledBy()"
2182
2210
  (input)="onEditableInput($event)"
@@ -2263,7 +2291,7 @@ var Select = class Select extends BaseInput {
2263
2291
  </span>
2264
2292
  <ng-container *ngTemplateOutlet="headerTemplate(); context: { class: cx('header') }"></ng-container>
2265
2293
  @if (filter()) {
2266
- <div [class]="cx('header')" (click)="$event.stopPropagation()" [pBind]="ptm('header')">
2294
+ <div [class]="cx('header')" (click)="$event.stopPropagation()" (keydown)="onFilterTemplateKeyDown($event)" [pBind]="ptm('header')">
2267
2295
  @if (filterTemplate()) {
2268
2296
  <ng-container *ngTemplateOutlet="filterTemplate(); context: filterTemplateContext()"></ng-container>
2269
2297
  } @else {
@@ -2332,6 +2360,8 @@ var Select = class Select extends BaseInput {
2332
2360
  }
2333
2361
 
2334
2362
  <ng-template #buildInItems let-items let-scrollerOptions="options">
2363
+ @let itemTemplateRef = itemTemplate();
2364
+ @let groupTemplateRef = groupTemplate();
2335
2365
  <ul
2336
2366
  #items
2337
2367
  [attr.id]="$id() + '_list'"
@@ -2345,10 +2375,10 @@ var Select = class Select extends BaseInput {
2345
2375
  @for (option of items; track trackOption(option, i); let i = $index) {
2346
2376
  @if (isOptionGroup(option)) {
2347
2377
  <li [class]="cx('optionGroup')" [attr.id]="$id() + '_' + getOptionIndex(i, scrollerOptions)" [style]="getItemSizeStyle(scrollerOptions)" role="presentation" [pBind]="ptm('optionGroup')">
2348
- @if (!groupTemplate()) {
2378
+ @if (!groupTemplateRef) {
2349
2379
  <span [class]="cx('optionGroupLabel')" [pBind]="ptm('optionGroupLabel')">{{ getOptionGroupLabel(option.optionGroup) }}</span>
2350
2380
  }
2351
- <ng-container *ngTemplateOutlet="groupTemplate(); context: getGroupContext(option.optionGroup)"></ng-container>
2381
+ <ng-container *ngTemplateOutlet="groupTemplateRef; context: getGroupContext(option.optionGroup)"></ng-container>
2352
2382
  </li>
2353
2383
  } @else {
2354
2384
  <p-select-item
@@ -2358,7 +2388,7 @@ var Select = class Select extends BaseInput {
2358
2388
  [selected]="isSelected(option)"
2359
2389
  [label]="getOptionLabel(option)"
2360
2390
  [disabled]="isOptionDisabled(option)"
2361
- [template]="itemTemplate()"
2391
+ [template]="itemTemplateRef"
2362
2392
  [focused]="isOptionFocused(i, scrollerOptions)"
2363
2393
  [ariaPosInset]="getAriaPosInset(getOptionIndex(i, scrollerOptions))"
2364
2394
  [ariaSetSize]="ariaSetSize()"
@@ -2618,7 +2648,7 @@ var Select = class Select extends BaseInput {
2618
2648
  };
2619
2649
  i0.ɵɵngDeclareClassMetadata({
2620
2650
  minVersion: "12.0.0",
2621
- version: "22.2.3",
2651
+ version: "22.2.5",
2622
2652
  ngImport: i0,
2623
2653
  type: Select,
2624
2654
  decorators: [{
@@ -2694,7 +2724,7 @@ i0.ɵɵngDeclareClassMetadata({
2694
2724
  [attr.aria-haspopup]="'listbox'"
2695
2725
  [attr.aria-expanded]="$ariaExpanded"
2696
2726
  [attr.aria-controls]="$ariaControls()"
2697
- [attr.placeholder]="$placeholder()"
2727
+ [attr.placeholder]="placeholder()"
2698
2728
  [attr.aria-label]="ariaLabel()"
2699
2729
  [attr.aria-labelledby]="ariaLabelledBy()"
2700
2730
  (input)="onEditableInput($event)"
@@ -2781,7 +2811,7 @@ i0.ɵɵngDeclareClassMetadata({
2781
2811
  </span>
2782
2812
  <ng-container *ngTemplateOutlet="headerTemplate(); context: { class: cx('header') }"></ng-container>
2783
2813
  @if (filter()) {
2784
- <div [class]="cx('header')" (click)="$event.stopPropagation()" [pBind]="ptm('header')">
2814
+ <div [class]="cx('header')" (click)="$event.stopPropagation()" (keydown)="onFilterTemplateKeyDown($event)" [pBind]="ptm('header')">
2785
2815
  @if (filterTemplate()) {
2786
2816
  <ng-container *ngTemplateOutlet="filterTemplate(); context: filterTemplateContext()"></ng-container>
2787
2817
  } @else {
@@ -2850,6 +2880,8 @@ i0.ɵɵngDeclareClassMetadata({
2850
2880
  }
2851
2881
 
2852
2882
  <ng-template #buildInItems let-items let-scrollerOptions="options">
2883
+ @let itemTemplateRef = itemTemplate();
2884
+ @let groupTemplateRef = groupTemplate();
2853
2885
  <ul
2854
2886
  #items
2855
2887
  [attr.id]="$id() + '_list'"
@@ -2863,10 +2895,10 @@ i0.ɵɵngDeclareClassMetadata({
2863
2895
  @for (option of items; track trackOption(option, i); let i = $index) {
2864
2896
  @if (isOptionGroup(option)) {
2865
2897
  <li [class]="cx('optionGroup')" [attr.id]="$id() + '_' + getOptionIndex(i, scrollerOptions)" [style]="getItemSizeStyle(scrollerOptions)" role="presentation" [pBind]="ptm('optionGroup')">
2866
- @if (!groupTemplate()) {
2898
+ @if (!groupTemplateRef) {
2867
2899
  <span [class]="cx('optionGroupLabel')" [pBind]="ptm('optionGroupLabel')">{{ getOptionGroupLabel(option.optionGroup) }}</span>
2868
2900
  }
2869
- <ng-container *ngTemplateOutlet="groupTemplate(); context: getGroupContext(option.optionGroup)"></ng-container>
2901
+ <ng-container *ngTemplateOutlet="groupTemplateRef; context: getGroupContext(option.optionGroup)"></ng-container>
2870
2902
  </li>
2871
2903
  } @else {
2872
2904
  <p-select-item
@@ -2876,7 +2908,7 @@ i0.ɵɵngDeclareClassMetadata({
2876
2908
  [selected]="isSelected(option)"
2877
2909
  [label]="getOptionLabel(option)"
2878
2910
  [disabled]="isOptionDisabled(option)"
2879
- [template]="itemTemplate()"
2911
+ [template]="itemTemplateRef"
2880
2912
  [focused]="isOptionFocused(i, scrollerOptions)"
2881
2913
  [ariaPosInset]="getAriaPosInset(getOptionIndex(i, scrollerOptions))"
2882
2914
  [ariaSetSize]="ariaSetSize()"
@@ -3581,7 +3613,7 @@ i0.ɵɵngDeclareClassMetadata({
3581
3613
  var SelectModule = class SelectModule {
3582
3614
  static ɵfac = i0.ɵɵngDeclareFactory({
3583
3615
  minVersion: "12.0.0",
3584
- version: "22.2.3",
3616
+ version: "22.2.5",
3585
3617
  ngImport: i0,
3586
3618
  type: SelectModule,
3587
3619
  deps: [],
@@ -3589,7 +3621,7 @@ var SelectModule = class SelectModule {
3589
3621
  });
3590
3622
  static ɵmod = i0.ɵɵngDeclareNgModule({
3591
3623
  minVersion: "14.0.0",
3592
- version: "22.2.3",
3624
+ version: "22.2.5",
3593
3625
  ngImport: i0,
3594
3626
  type: SelectModule,
3595
3627
  imports: [Select, SharedModule],
@@ -3597,7 +3629,7 @@ var SelectModule = class SelectModule {
3597
3629
  });
3598
3630
  static ɵinj = i0.ɵɵngDeclareInjector({
3599
3631
  minVersion: "12.0.0",
3600
- version: "22.2.3",
3632
+ version: "22.2.5",
3601
3633
  ngImport: i0,
3602
3634
  type: SelectModule,
3603
3635
  imports: [
@@ -3609,7 +3641,7 @@ var SelectModule = class SelectModule {
3609
3641
  };
3610
3642
  i0.ɵɵngDeclareClassMetadata({
3611
3643
  minVersion: "12.0.0",
3612
- version: "22.2.3",
3644
+ version: "22.2.5",
3613
3645
  ngImport: i0,
3614
3646
  type: SelectModule,
3615
3647
  decorators: [{
@@ -23,7 +23,7 @@ var SelectButtonStyle = class SelectButtonStyle extends BaseStyle {
23
23
  classes = classes;
24
24
  static ɵfac = i0.ɵɵngDeclareFactory({
25
25
  minVersion: "12.0.0",
26
- version: "22.2.3",
26
+ version: "22.2.5",
27
27
  ngImport: i0,
28
28
  type: SelectButtonStyle,
29
29
  deps: null,
@@ -31,14 +31,14 @@ var SelectButtonStyle = class SelectButtonStyle extends BaseStyle {
31
31
  });
32
32
  static ɵprov = i0.ɵɵngDeclareInjectable({
33
33
  minVersion: "12.0.0",
34
- version: "22.2.3",
34
+ version: "22.2.5",
35
35
  ngImport: i0,
36
36
  type: SelectButtonStyle
37
37
  });
38
38
  };
39
39
  i0.ɵɵngDeclareClassMetadata({
40
40
  minVersion: "12.0.0",
41
- version: "22.2.3",
41
+ version: "22.2.5",
42
42
  ngImport: i0,
43
43
  type: SelectButtonStyle,
44
44
  decorators: [{ type: Injectable }]
@@ -204,7 +204,7 @@ var SelectButton = class SelectButton extends BaseEditableHolder {
204
204
  }
205
205
  static ɵfac = i0.ɵɵngDeclareFactory({
206
206
  minVersion: "12.0.0",
207
- version: "22.2.3",
207
+ version: "22.2.5",
208
208
  ngImport: i0,
209
209
  type: SelectButton,
210
210
  deps: null,
@@ -212,7 +212,7 @@ var SelectButton = class SelectButton extends BaseEditableHolder {
212
212
  });
213
213
  static ɵcmp = i0.ɵɵngDeclareComponent({
214
214
  minVersion: "17.0.0",
215
- version: "22.2.3",
215
+ version: "22.2.5",
216
216
  type: SelectButton,
217
217
  isStandalone: true,
218
218
  selector: "p-selectbutton, p-select-button",
@@ -353,6 +353,7 @@ var SelectButton = class SelectButton extends BaseEditableHolder {
353
353
  [autofocus]="autofocus()"
354
354
  [class]="styleClass()"
355
355
  [ngModel]="isSelected(option)"
356
+ [ngModelOptions]="{ standalone: true }"
356
357
  [onLabel]="getOptionLabel(option)"
357
358
  [offLabel]="getOptionLabel(option)"
358
359
  [ariaLabel]="getOptionLabel(option)"
@@ -442,7 +443,7 @@ var SelectButton = class SelectButton extends BaseEditableHolder {
442
443
  };
443
444
  i0.ɵɵngDeclareClassMetadata({
444
445
  minVersion: "12.0.0",
445
- version: "22.2.3",
446
+ version: "22.2.5",
446
447
  ngImport: i0,
447
448
  type: SelectButton,
448
449
  decorators: [{
@@ -463,6 +464,7 @@ i0.ɵɵngDeclareClassMetadata({
463
464
  [autofocus]="autofocus()"
464
465
  [class]="styleClass()"
465
466
  [ngModel]="isSelected(option)"
467
+ [ngModelOptions]="{ standalone: true }"
466
468
  [onLabel]="getOptionLabel(option)"
467
469
  [offLabel]="getOptionLabel(option)"
468
470
  [ariaLabel]="getOptionLabel(option)"
@@ -638,7 +640,7 @@ i0.ɵɵngDeclareClassMetadata({
638
640
  var SelectButtonModule = class SelectButtonModule {
639
641
  static ɵfac = i0.ɵɵngDeclareFactory({
640
642
  minVersion: "12.0.0",
641
- version: "22.2.3",
643
+ version: "22.2.5",
642
644
  ngImport: i0,
643
645
  type: SelectButtonModule,
644
646
  deps: [],
@@ -646,7 +648,7 @@ var SelectButtonModule = class SelectButtonModule {
646
648
  });
647
649
  static ɵmod = i0.ɵɵngDeclareNgModule({
648
650
  minVersion: "14.0.0",
649
- version: "22.2.3",
651
+ version: "22.2.5",
650
652
  ngImport: i0,
651
653
  type: SelectButtonModule,
652
654
  imports: [SelectButton, SharedModule],
@@ -654,7 +656,7 @@ var SelectButtonModule = class SelectButtonModule {
654
656
  });
655
657
  static ɵinj = i0.ɵɵngDeclareInjector({
656
658
  minVersion: "12.0.0",
657
- version: "22.2.3",
659
+ version: "22.2.5",
658
660
  ngImport: i0,
659
661
  type: SelectButtonModule,
660
662
  imports: [
@@ -666,7 +668,7 @@ var SelectButtonModule = class SelectButtonModule {
666
668
  };
667
669
  i0.ɵɵngDeclareClassMetadata({
668
670
  minVersion: "12.0.0",
669
- version: "22.2.3",
671
+ version: "22.2.5",
670
672
  ngImport: i0,
671
673
  type: SelectButtonModule,
672
674
  decorators: [{