@@ -35,24 +35,37 @@ export type { Dropdown, DropdownActions, TRootEventType };
3535const UNINITIALIZED = {};
3636const IGNORED_STYLES = [' top' , ' left' , ' right' , ' width' , ' height' ];
3737
38- export interface BasicDropdownDefaultBlock {
38+ export interface BasicDropdownDefaultBlock <
39+ TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
40+ > {
3941 uniqueId: string ;
4042 disabled: boolean ;
4143 isOpen: boolean ;
4244 actions: DropdownActions ;
43- Trigger: ComponentLike <BasicDropdownTriggerSignature >;
45+ Trigger: ComponentLike <
46+ Omit <BasicDropdownTriggerSignature <TriggerHtmlTag >, ' Args' > & {
47+ Args: Omit <
48+ BasicDropdownTriggerSignature <TriggerHtmlTag >[' Args' ],
49+ ' htmlTag'
50+ >;
51+ }
52+ >;
4453 Content: ComponentLike <BasicDropdownContentSignature >;
4554}
4655
47- export interface BasicDropdownSignature {
56+ export interface BasicDropdownSignature <
57+ TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
58+ > {
4859 Element: HTMLElement ;
49- Args: BasicDropdownArgs ;
60+ Args: BasicDropdownArgs < TriggerHtmlTag > ;
5061 Blocks: {
51- default: [BasicDropdownDefaultBlock ];
62+ default: [BasicDropdownDefaultBlock < TriggerHtmlTag > ];
5263 };
5364}
5465
55- export interface BasicDropdownArgs {
66+ export interface BasicDropdownArgs <
67+ TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
68+ > {
5669 initiallyOpened? : boolean ;
5770 renderInPlace? : boolean ;
5871 verticalPosition? : VerticalPosition ;
@@ -64,16 +77,21 @@ export interface BasicDropdownArgs {
6477 rootEventType? : TRootEventType ;
6578 preventScroll? : boolean ;
6679 matchTriggerWidth? : boolean ;
80+ triggerHtmlTag? : TriggerHtmlTag ;
6781 onInit? : (dropdown : Dropdown ) => void ;
6882 registerAPI? : (dropdown : Dropdown | null ) => void ;
6983 onOpen? : (dropdown : Dropdown , e ? : Event ) => boolean | void ;
7084 onClose? : (dropdown : Dropdown , e ? : Event ) => boolean | void ;
71- triggerComponent? : ComponentLike <BasicDropdownTriggerSignature > | undefined ;
85+ triggerComponent? :
86+ | ComponentLike <BasicDropdownTriggerSignature <TriggerHtmlTag >>
87+ | undefined ;
7288 contentComponent? : ComponentLike <BasicDropdownContentSignature > | undefined ;
7389 calculatePosition? : CalculatePosition ;
7490}
7591
76- export default class BasicDropdown extends Component <BasicDropdownSignature > {
92+ export default class BasicDropdown <
93+ TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
94+ > extends Component <BasicDropdownSignature <TriggerHtmlTag >> {
7795 @tracked hPosition: HorizontalPosition | null = null ;
7896 @tracked vPosition: VerticalPosition | null = null ;
7997 @tracked top: string | undefined ;
@@ -171,7 +189,7 @@ export default class BasicDropdown extends Component<BasicDropdownSignature> {
171189 }
172190
173191 // Lifecycle hooks
174- constructor (owner : Owner , args : BasicDropdownArgs ) {
192+ constructor (owner : Owner , args : BasicDropdownArgs < TriggerHtmlTag > ) {
175193 super (owner , args );
176194 if (this .args .onInit ) {
177195 this .args .onInit (this .publicAPI );
@@ -306,7 +324,6 @@ export default class BasicDropdown extends Component<BasicDropdownSignature> {
306324 previousVerticalPosition ,
307325 renderInPlace ,
308326 matchTriggerWidth ,
309- dropdown: this ,
310327 },
311328 );
312329 return this .applyReposition (triggerElement , dropdownElement , positionData );
@@ -491,10 +508,14 @@ export default class BasicDropdown extends Component<BasicDropdownSignature> {
491508 );
492509 }
493510
494- get triggerComponent(): ComponentLike <BasicDropdownTriggerSignature > {
511+ get triggerComponent(): ComponentLike <
512+ BasicDropdownTriggerSignature <TriggerHtmlTag >
513+ > {
495514 return (
496515 this .args .triggerComponent ||
497- (BasicDropdownTrigger as ComponentLike <BasicDropdownTriggerSignature >)
516+ (BasicDropdownTrigger as ComponentLike <
517+ BasicDropdownTriggerSignature <TriggerHtmlTag >
518+ >)
498519 );
499520 }
500521
0 commit comments