diff --git a/packages/primeng/src/api/overlayoptions.ts b/packages/primeng/src/api/overlayoptions.ts
index f7b74ba633d..ae2dd9b9de7 100644
--- a/packages/primeng/src/api/overlayoptions.ts
+++ b/packages/primeng/src/api/overlayoptions.ts
@@ -158,6 +158,10 @@ export interface OverlayOptions {
* The motion options for the overlay.
*/
motionOptions?: MotionOptions;
+ /**
+ * Indicates whether the overlay should have a max-width based on the target element.
+ */
+ autoMaxWidth?: boolean;
/**
* Indicates whether the overlay should be hidden when the escape key is pressed.
*/
diff --git a/packages/primeng/src/multiselect/multiselect.ts b/packages/primeng/src/multiselect/multiselect.ts
index 8bf24c5ceda..527463f6ccc 100755
--- a/packages/primeng/src/multiselect/multiselect.ts
+++ b/packages/primeng/src/multiselect/multiselect.ts
@@ -89,7 +89,7 @@ export const MULTISELECT_VALUE_ACCESSOR: any = {
- {{ label ?? 'empty' }}
+ {{ label ?? 'empty' }}
`,
encapsulation: ViewEncapsulation.None,
@@ -293,7 +293,7 @@ export class MultiSelectItem extends BaseComponent {
#overlay
[hostAttrSelector]="$attrSelector"
[(visible)]="overlayVisible"
- [options]="overlayOptions"
+ [options]="{ ...overlayOptions, autoMaxWidth: autoWidth }"
[target]="'@parent'"
[appendTo]="$appendTo()"
[unstyled]="unstyled()"
@@ -740,6 +740,11 @@ export class MultiSelect extends BaseEditableHolder {
* @group Props
*/
@Input({ transform: booleanAttribute }) autofocusFilter: boolean = false;
+ /**
+ * Whether the width of the overlay mirrors the width of the component.
+ * @group Props
+ */
+ @Input({ transform: booleanAttribute }) autoWidth: boolean = true;
/**
* Defines how the selected items are displayed.
* @group Props
diff --git a/packages/primeng/src/multiselect/style/multiselectstyle.ts b/packages/primeng/src/multiselect/style/multiselectstyle.ts
index 3f71201ce68..984486fb390 100644
--- a/packages/primeng/src/multiselect/style/multiselectstyle.ts
+++ b/packages/primeng/src/multiselect/style/multiselectstyle.ts
@@ -14,6 +14,18 @@ const style = /*css*/ `
p-multiselect.ng-invalid.ng-dirty .p-multiselect-label.p-placeholder {
color: dt('multiselect.invalid.placeholder.color');
}
+
+ .p-multiselect-option-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .p-multiselect-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
`;
const inlineStyles = {
@@ -63,6 +75,7 @@ const classes = {
'p-disabled': instance.disabled,
'p-focus': instance.focused
}),
+ optionLabel: 'p-multiselect-option-label',
emptyMessage: 'p-multiselect-empty-message',
clearIcon: 'p-multiselect-clear-icon'
};
@@ -156,6 +169,10 @@ export enum MultiSelectClasses {
* Class name of the option element
*/
option = 'p-multiselect-option',
+ /**
+ * Class name of the option label element
+ */
+ optionLabel = 'p-multiselect-option-label',
/**
* Class name of the empty message element
*/
diff --git a/packages/primeng/src/overlay/overlay.ts b/packages/primeng/src/overlay/overlay.ts
index 04e9eb5973c..f6ae3663cd0 100644
--- a/packages/primeng/src/overlay/overlay.ts
+++ b/packages/primeng/src/overlay/overlay.ts
@@ -602,7 +602,15 @@ export class Overlay extends BaseComponent {
alignOverlay() {
if (!this.modal) {
if (this.overlayEl && this.targetEl) {
- this.overlayEl.style.minWidth = getOuterWidth(this.targetEl) + 'px';
+ const targetWidth = getOuterWidth(this.targetEl);
+ this.overlayEl.style.minWidth = targetWidth + 'px';
+
+ if (this.overlayOptions.autoMaxWidth) {
+ this.overlayEl.style.maxWidth = targetWidth + 'px';
+ } else {
+ this.overlayEl.style.maxWidth = '';
+ }
+
if (this.$appendTo() === 'self') {
relativePosition(this.overlayEl, this.targetEl);
} else {
diff --git a/packages/primeng/src/select/select.ts b/packages/primeng/src/select/select.ts
index 320c7463e1e..0ce5ace4195 100755
--- a/packages/primeng/src/select/select.ts
+++ b/packages/primeng/src/select/select.ts
@@ -96,7 +96,7 @@ export const SELECT_VALUE_ACCESSOR: any = {
- {{ label ?? 'empty' }}
+ {{ label ?? 'empty' }}
`,
@@ -272,7 +272,7 @@ export class SelectItem extends BaseComponent {
#overlay
[hostAttrSelector]="$attrSelector"
[(visible)]="overlayVisible"
- [options]="overlayOptions"
+ [options]="{ ...overlayOptions, autoMaxWidth: autoWidth }"
[target]="'@parent'"
[appendTo]="$appendTo()"
[unstyled]="unstyled()"
@@ -680,6 +680,11 @@ export class Select extends BaseInput implements AfterViewIni
* @group Props
*/
@Input({ transform: booleanAttribute }) autofocusFilter: boolean = true;
+ /**
+ * Whether the width of the overlay mirrors the width of the component.
+ * @group Props
+ */
+ @Input({ transform: booleanAttribute }) autoWidth: boolean = true;
/**
* When specified, filter displays with this value.
* @group Props
diff --git a/packages/primeng/src/select/style/selectstyle.ts b/packages/primeng/src/select/style/selectstyle.ts
index 90c4e39c687..bf5f063cde9 100644
--- a/packages/primeng/src/select/style/selectstyle.ts
+++ b/packages/primeng/src/select/style/selectstyle.ts
@@ -18,6 +18,18 @@ const style = /*css*/ `
.p-select.ng-invalid.ng-dirty .p-select-label.p-placeholder {
color: dt('select.invalid.placeholder.color');
}
+
+ .p-select-option-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .p-select-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
`;
const classes = {