Skip to content

Commit c69a727

Browse files
wenqi73jelbourn
authored andcommitted
fix(cdk/overlay): add missing transform origin directive input (#17489)
1 parent 9b19e6a commit c69a727

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

src/cdk/overlay/overlay-directives.spec.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,29 @@ describe('Overlay directives', () => {
480480
expect(pane.style.height).toBe('100px');
481481
});
482482

483+
it('should be able to set transform origin selector', () => {
484+
const trigger = fixture.nativeElement.querySelector('#trigger');
485+
486+
trigger.style.position = 'fixed';
487+
trigger.style.top = '200px';
488+
trigger.style.left = '200px';
489+
490+
fixture.componentInstance.positionOverrides = [{
491+
originX: 'start',
492+
originY: 'top',
493+
overlayX: 'start',
494+
overlayY: 'bottom',
495+
}];
496+
497+
fixture.componentInstance.transformOriginSelector = '.cdk-test-panel-class';
498+
fixture.componentInstance.isOpen = true;
499+
fixture.detectChanges();
500+
501+
const target = overlayContainerElement.querySelector('.cdk-test-panel-class')! as HTMLElement;
502+
503+
expect(target.style.transformOrigin).toContain('left bottom');
504+
});
505+
483506
});
484507

485508
describe('outputs', () => {
@@ -569,7 +592,8 @@ describe('Overlay directives', () => {
569592
(overlayKeydown)="keydownHandler($event)"
570593
[cdkConnectedOverlayMinWidth]="minWidth"
571594
[cdkConnectedOverlayMinHeight]="minHeight"
572-
[cdkConnectedOverlayPositions]="positionOverrides">
595+
[cdkConnectedOverlayPositions]="positionOverrides"
596+
[cdkConnectedOverlayTransformOriginOn]="transformOriginSelector">
573597
<p>Menu content</p>
574598
</ng-template>`,
575599
})
@@ -601,6 +625,7 @@ class ConnectedOverlayDirectiveTest {
601625
});
602626
detachHandler = jasmine.createSpy('detachHandler');
603627
attachResult: HTMLElement;
628+
transformOriginSelector: string;
604629
}
605630

606631
@Component({

src/cdk/overlay/overlay-directives.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
171171
/** Whether the overlay is open. */
172172
@Input('cdkConnectedOverlayOpen') open: boolean = false;
173173

174+
/** CSS selector which to set the transform origin. */
175+
@Input('cdkConnectedOverlayTransformOriginOn') transformOriginSelector: string;
176+
174177
/** Whether or not the overlay should attach a backdrop. */
175178
@Input('cdkConnectedOverlayHasBackdrop')
176179
get hasBackdrop() { return this._hasBackdrop; }
@@ -338,7 +341,8 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
338341
.withPush(this.push)
339342
.withGrowAfterOpen(this.growAfterOpen)
340343
.withViewportMargin(this.viewportMargin)
341-
.withLockedPosition(this.lockPosition);
344+
.withLockedPosition(this.lockPosition)
345+
.withTransformOriginOn(this.transformOriginSelector);
342346
}
343347

344348
/** Returns the position strategy of the overlay to be set on the overlay config */

tools/public_api_guard/cdk/overlay.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export declare class CdkConnectedOverlay implements OnDestroy, OnChanges {
2929
positions: ConnectedPosition[];
3030
push: boolean;
3131
scrollStrategy: ScrollStrategy;
32+
transformOriginSelector: string;
3233
viewportMargin: number;
3334
width: number | string;
3435
constructor(_overlay: Overlay, templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, scrollStrategyFactory: any, _dir: Directionality);

0 commit comments

Comments
 (0)