diff --git a/CHANGELOG.md b/CHANGELOG.md
index e80c77311bc..e82264ce16d 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1486,6 +1486,13 @@
- Checkbox in p-treeNode always checked when using custom icon [\#12951](https://github.com/primefaces/primeng/issues/12951)
- ConfirmDialog: Duplicated AcceptIcons [\#13001](https://github.com/primefaces/primeng/issues/13001)
+## ![LTS](https://www.primefaces.org/wp-content/uploads/2020/01/lts-icon-24.png "PrimeNG LTS") [15.4.25-LTS](https://www.npmjs.com/package/primeng/v/15.4.25-lts) (2024-08-01)
+
+**Fixed bugs:**
+- Password: Tooltip with tooltipEvent='focus' is never displayed [\#16106](https://github.com/primefaces/primeng/issues/16106)
+- Table> double call to (onLazyLoad) event [\#16070](https://github.com/primefaces/primeng/issues/16070)
+- pBadge | Add missing badgeStyle & badgeStyleClass to directive [\#16133](https://github.com/primefaces/primeng/issues/16133)
+
## ![LTS](https://www.primefaces.org/wp-content/uploads/2020/01/lts-icon-24.png "PrimeNG LTS") [15.4.24-LTS](https://www.npmjs.com/package/primeng/v/15.4.24-lts) (2024-07-24)
**Fixed bugs:**
diff --git a/src/app/components/autocomplete/autocomplete.ts b/src/app/components/autocomplete/autocomplete.ts
index 9687bc41837..1796f9496bd 100755
--- a/src/app/components/autocomplete/autocomplete.ts
+++ b/src/app/components/autocomplete/autocomplete.ts
@@ -881,6 +881,7 @@ export class AutoComplete implements AfterViewChecked, AfterContentInit, OnDestr
}
constructor(
+ @Inject(DOCUMENT) private document: Document,
public el: ElementRef,
public renderer: Renderer2,
public cd: ChangeDetectorRef,
@@ -1376,12 +1377,11 @@ export class AutoComplete implements AfterViewChecked, AfterContentInit, OnDestr
} else {
if (this.focusedOptionIndex() !== -1) {
this.onOptionSelect(event, this.visibleOptions()[this.focusedOptionIndex()]);
+ event.preventDefault();
}
this.hide();
}
-
- event.preventDefault();
}
onEscapeKey(event) {
diff --git a/src/app/components/calendar/calendar.ts b/src/app/components/calendar/calendar.ts
index d02590d3f60..ad25df2ec3a 100644
--- a/src/app/components/calendar/calendar.ts
+++ b/src/app/components/calendar/calendar.ts
@@ -3069,10 +3069,16 @@ export class Calendar implements OnInit, OnDestroy, ControlValueAccessor {
} else if (this.overlay) {
if (this.appendTo) {
if (this.view === 'date') {
- this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';
- this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild?.nativeElement) + 'px';
+ if (!this.overlay.style.width) {
+ this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';
+ }
+ if (!this.overlay.style.minWidth) {
+ this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild?.nativeElement) + 'px';
+ }
} else {
- this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild?.nativeElement) + 'px';
+ if (!this.overlay.style.width) {
+ this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild?.nativeElement) + 'px';
+ }
}
DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild?.nativeElement);
diff --git a/src/app/components/colorpicker/colorpicker.ts b/src/app/components/colorpicker/colorpicker.ts
index fb2c2593dd0..ef242fc3bf6 100755
--- a/src/app/components/colorpicker/colorpicker.ts
+++ b/src/app/components/colorpicker/colorpicker.ts
@@ -401,9 +401,11 @@ export class ColorPicker implements ControlValueAccessor, OnDestroy {
this.value = this.HEXtoHSB(this.defaultColor);
}
- this.updateColorSelector();
- this.updateUI();
- this.cd.markForCheck();
+ setTimeout(() => {
+ this.updateColorSelector();
+ this.updateUI();
+ this.cd.markForCheck();
+ });
}
updateColorSelector() {
diff --git a/src/app/components/listbox/listbox.ts b/src/app/components/listbox/listbox.ts
index 5897cd07b21..6deea4d394e 100755
--- a/src/app/components/listbox/listbox.ts
+++ b/src/app/components/listbox/listbox.ts
@@ -49,16 +49,7 @@ export const LISTBOX_VALUE_ACCESSOR: any = {
selector: 'p-listbox',
template: `
-
-
+
-
+
@@ -226,16 +218,7 @@ export const LISTBOX_VALUE_ACCESSOR: any = {
{{ selectedMessageText }}
-
-
+
`,
providers: [LISTBOX_VALUE_ACCESSOR],
@@ -545,6 +528,8 @@ export class Listbox implements AfterContentInit, OnInit, ControlValueAccessor,
@ViewChild('list') listViewChild: Nullable
;
+ @ViewChild('wrapper') wrapperViewChild: Nullable;
+
@ContentChild(Header) headerFacet: Nullable>;
@ContentChild(Footer) footerFacet: Nullable>;
@@ -593,6 +578,8 @@ export class Listbox implements AfterContentInit, OnInit, ControlValueAccessor,
focused: boolean | undefined;
+ scrollerTabIndex: string = '0';
+
get containerClass() {
return {
'p-listbox p-component': true,
@@ -949,6 +936,8 @@ export class Listbox implements AfterContentInit, OnInit, ControlValueAccessor,
onFocusout(event: FocusEvent) {
if (!this.el.nativeElement.contains(event.relatedTarget) && this.lastHiddenFocusableElement && this.firstHiddenFocusableElement) {
this.firstHiddenFocusableElement.nativeElement.tabIndex = this.lastHiddenFocusableElement.nativeElement.tabIndex = undefined;
+ this.wrapperViewChild.nativeElement.tabIndex = '0';
+ this.scrollerTabIndex = '0';
}
}
@@ -957,6 +946,9 @@ export class Listbox implements AfterContentInit, OnInit, ControlValueAccessor,
const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;
this.focusedOptionIndex.set(focusedOptionIndex);
this.onFocus.emit(event);
+
+ this.wrapperViewChild.nativeElement.tabIndex = '-1';
+ this.scrollerTabIndex = '-1';
}
onListBlur(event: FocusEvent) {
@@ -1010,6 +1002,10 @@ export class Listbox implements AfterContentInit, OnInit, ControlValueAccessor,
!this.virtualScrollerDisabled && this.scroller.scrollToIndex(0);
}
+
+ onFilterFocus(event: FocusEvent){
+ this.wrapperViewChild.nativeElement.tabIndex = '-1';
+ }
onFilterBlur(event: FocusEvent) {
this.focusedOptionIndex.set(-1);
diff --git a/src/app/components/scroller/scroller.ts b/src/app/components/scroller/scroller.ts
index f05ab77826d..b7e706533cc 100644
--- a/src/app/components/scroller/scroller.ts
+++ b/src/app/components/scroller/scroller.ts
@@ -866,7 +866,7 @@ export class Scroller implements OnInit, AfterContentInit, AfterViewChecked, OnD
}
setSpacerSize() {
- if (this._items) {
+ if (this._scrollHeight !== '100%' && this._items) {
const contentPos = this.getContentPosition();
const setProp = (_name: string, _value: any, _size: number, _cpos: number = 0) => (this.spacerStyle = { ...this.spacerStyle, ...{ [`${_name}`]: (_value || []).length * _size + _cpos + 'px' } });
diff --git a/src/app/components/table/columnfilter.interface.ts b/src/app/components/table/columnfilter.interface.ts
index e7b3b01d700..e72b641d1ca 100644
--- a/src/app/components/table/columnfilter.interface.ts
+++ b/src/app/components/table/columnfilter.interface.ts
@@ -9,7 +9,7 @@ export interface TableColumnFilterTemplates {
/**
* Custom filter template.
*/
- filterTemplate(context: {
+ filter(context: {
/**
* filterConstraint.value.
*/
@@ -74,27 +74,27 @@ export interface TableColumnFilterTemplates {
/**
* Custom header template.
*/
- headerTemplate(): TemplateRef;
+ header(): TemplateRef;
/**
* Custom footer template.
*/
- footerTemplate(): TemplateRef;
+ footer(): TemplateRef;
/**
* Custom filter icon template.
*/
- filterIconTemplate(): TemplateRef;
+ filtericon(): TemplateRef;
/**
* Custom remove rule icon template.
*/
- removeRuleIconTemplate(): TemplateRef;
+ removeruleicon(): TemplateRef;
/**
* Custom add rule icon template.
*/
- addRuleIconTemplate(): TemplateRef;
+ addruleicon(): TemplateRef;
/**
* Custom clear filter icon template.
*/
- clearFilterIconTemplate(): TemplateRef;
+ clearfiltericon(): TemplateRef;
}
/**
diff --git a/src/app/components/tree/tree.ts b/src/app/components/tree/tree.ts
index be53fb4c1b9..522c3ec96cc 100755
--- a/src/app/components/tree/tree.ts
+++ b/src/app/components/tree/tree.ts
@@ -100,7 +100,7 @@ import {
(dragend)="onDragStop($event)"
[ngClass]="{ 'p-treenode-selectable': tree.selectionMode && node.selectable !== false, 'p-treenode-dragover': draghoverNode, 'p-highlight': isSelected() }"
>
-