@@ -37,6 +37,7 @@ const IGNORED_STYLES = ['top', 'left', 'right', 'width', 'height'];
3737
3838export interface BasicDropdownDefaultBlock <
3939 TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
40+ ContentHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
4041> {
4142 uniqueId: string ;
4243 disabled: boolean ;
@@ -50,21 +51,30 @@ export interface BasicDropdownDefaultBlock<
5051 >;
5152 }
5253 >;
53- Content: ComponentLike <BasicDropdownContentSignature >;
54+ Content: ComponentLike <
55+ Omit <BasicDropdownContentSignature <ContentHtmlTag >, ' Args' > & {
56+ Args: Omit <
57+ BasicDropdownContentSignature <ContentHtmlTag >[' Args' ],
58+ ' htmlTag'
59+ >;
60+ }
61+ >;
5462}
5563
5664export interface BasicDropdownSignature <
5765 TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
66+ ContentHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
5867> {
5968 Element: HTMLElement ;
60- Args: BasicDropdownArgs <TriggerHtmlTag >;
69+ Args: BasicDropdownArgs <TriggerHtmlTag , ContentHtmlTag >;
6170 Blocks: {
62- default: [BasicDropdownDefaultBlock <TriggerHtmlTag >];
71+ default: [BasicDropdownDefaultBlock <TriggerHtmlTag , ContentHtmlTag >];
6372 };
6473}
6574
6675export interface BasicDropdownArgs <
6776 TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
77+ ContentHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
6878> {
6979 initiallyOpened? : boolean ;
7080 renderInPlace? : boolean ;
@@ -78,21 +88,24 @@ export interface BasicDropdownArgs<
7888 preventScroll? : boolean ;
7989 matchTriggerWidth? : boolean ;
8090 triggerHtmlTag? : TriggerHtmlTag ;
81- contentHtmlTag? : keyof HTMLElementTagNameMap ;
91+ contentHtmlTag? : ContentHtmlTag ;
8292 onInit? : (dropdown : Dropdown ) => void ;
8393 registerAPI? : (dropdown : Dropdown | null ) => void ;
8494 onOpen? : (dropdown : Dropdown , e ? : Event ) => boolean | void ;
8595 onClose? : (dropdown : Dropdown , e ? : Event ) => boolean | void ;
8696 triggerComponent? :
8797 | ComponentLike <BasicDropdownTriggerSignature <TriggerHtmlTag >>
8898 | undefined ;
89- contentComponent? : ComponentLike <BasicDropdownContentSignature > | undefined ;
99+ contentComponent? :
100+ | ComponentLike <BasicDropdownContentSignature <ContentHtmlTag >>
101+ | undefined ;
90102 calculatePosition? : CalculatePosition ;
91103}
92104
93105export default class BasicDropdown <
94106 TriggerHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
95- > extends Component <BasicDropdownSignature <TriggerHtmlTag >> {
107+ ContentHtmlTag extends keyof HTMLElementTagNameMap = ' div' ,
108+ > extends Component <BasicDropdownSignature <TriggerHtmlTag , ContentHtmlTag >> {
96109 @tracked hPosition: HorizontalPosition | null = null ;
97110 @tracked vPosition: VerticalPosition | null = null ;
98111 @tracked top: string | undefined ;
@@ -190,7 +203,10 @@ export default class BasicDropdown<
190203 }
191204
192205 // Lifecycle hooks
193- constructor (owner : Owner , args : BasicDropdownArgs <TriggerHtmlTag >) {
206+ constructor (
207+ owner : Owner ,
208+ args : BasicDropdownArgs <TriggerHtmlTag , ContentHtmlTag >,
209+ ) {
194210 super (owner , args );
195211 if (this .args .onInit ) {
196212 this .args .onInit (this .publicAPI );
@@ -520,10 +536,14 @@ export default class BasicDropdown<
520536 );
521537 }
522538
523- get contentComponent(): ComponentLike <BasicDropdownContentSignature > {
539+ get contentComponent(): ComponentLike <
540+ BasicDropdownContentSignature <ContentHtmlTag >
541+ > {
524542 return (
525543 this .args .contentComponent ||
526- (BasicDropdownContent as ComponentLike <BasicDropdownContentSignature >)
544+ (BasicDropdownContent as ComponentLike <
545+ BasicDropdownContentSignature <ContentHtmlTag >
546+ >)
527547 );
528548 }
529549
0 commit comments