1- import type { APILabelComponent , APIStringSelectComponent , APITextInputComponent } from 'discord-api-types/v10' ;
1+ import type {
2+ APIChannelSelectComponent ,
3+ APILabelComponent ,
4+ APIMentionableSelectComponent ,
5+ APIRoleSelectComponent ,
6+ APIStringSelectComponent ,
7+ APITextInputComponent ,
8+ APIUserSelectComponent ,
9+ } from 'discord-api-types/v10' ;
210import { ComponentType } from 'discord-api-types/v10' ;
311import { resolveBuilder } from '../../util/resolveBuilder.js' ;
412import { validate } from '../../util/validation.js' ;
513import { ComponentBuilder } from '../Component.js' ;
614import { createComponentBuilder } from '../Components.js' ;
15+ import { ChannelSelectMenuBuilder } from '../selectMenu/ChannelSelectMenu.js' ;
16+ import { MentionableSelectMenuBuilder } from '../selectMenu/MentionableSelectMenu.js' ;
17+ import { RoleSelectMenuBuilder } from '../selectMenu/RoleSelectMenu.js' ;
718import { StringSelectMenuBuilder } from '../selectMenu/StringSelectMenu.js' ;
19+ import { UserSelectMenuBuilder } from '../selectMenu/UserSelectMenu.js' ;
820import { TextInputBuilder } from '../textInput/TextInput.js' ;
921import { labelPredicate } from './Assertions.js' ;
1022
1123export interface LabelBuilderData extends Partial < Omit < APILabelComponent , 'component' > > {
12- component ?: StringSelectMenuBuilder | TextInputBuilder ;
24+ component ?:
25+ | ChannelSelectMenuBuilder
26+ | MentionableSelectMenuBuilder
27+ | RoleSelectMenuBuilder
28+ | StringSelectMenuBuilder
29+ | TextInputBuilder
30+ | UserSelectMenuBuilder ;
1331}
1432
1533/**
@@ -49,7 +67,6 @@ export class LabelBuilder extends ComponentBuilder<APILabelComponent> {
4967
5068 this . data = {
5169 ...structuredClone ( rest ) ,
52- // @ts -expect-error https://github.com/discordjs/discord.js/pull/11078
5370 component : component ? createComponentBuilder ( component ) : undefined ,
5471 type : ComponentType . Label ,
5572 } ;
@@ -98,6 +115,60 @@ export class LabelBuilder extends ComponentBuilder<APILabelComponent> {
98115 return this ;
99116 }
100117
118+ /**
119+ * Sets a user select menu component to this label.
120+ *
121+ * @param input - A function that returns a component builder or an already built builder
122+ */
123+ public setUserSelectMenuComponent (
124+ input : APIUserSelectComponent | UserSelectMenuBuilder | ( ( builder : UserSelectMenuBuilder ) => UserSelectMenuBuilder ) ,
125+ ) : this {
126+ this . data . component = resolveBuilder ( input , UserSelectMenuBuilder ) ;
127+ return this ;
128+ }
129+
130+ /**
131+ * Sets a role select menu component to this label.
132+ *
133+ * @param input - A function that returns a component builder or an already built builder
134+ */
135+ public setRoleSelectMenuComponent (
136+ input : APIRoleSelectComponent | RoleSelectMenuBuilder | ( ( builder : RoleSelectMenuBuilder ) => RoleSelectMenuBuilder ) ,
137+ ) : this {
138+ this . data . component = resolveBuilder ( input , RoleSelectMenuBuilder ) ;
139+ return this ;
140+ }
141+
142+ /**
143+ * Sets a mentionable select menu component to this label.
144+ *
145+ * @param input - A function that returns a component builder or an already built builder
146+ */
147+ public setMentionableSelectMenuComponent (
148+ input :
149+ | APIMentionableSelectComponent
150+ | MentionableSelectMenuBuilder
151+ | ( ( builder : MentionableSelectMenuBuilder ) => MentionableSelectMenuBuilder ) ,
152+ ) : this {
153+ this . data . component = resolveBuilder ( input , MentionableSelectMenuBuilder ) ;
154+ return this ;
155+ }
156+
157+ /**
158+ * Sets a channel select menu component to this label.
159+ *
160+ * @param input - A function that returns a component builder or an already built builder
161+ */
162+ public setChannelSelectMenuComponent (
163+ input :
164+ | APIChannelSelectComponent
165+ | ChannelSelectMenuBuilder
166+ | ( ( builder : ChannelSelectMenuBuilder ) => ChannelSelectMenuBuilder ) ,
167+ ) : this {
168+ this . data . component = resolveBuilder ( input , ChannelSelectMenuBuilder ) ;
169+ return this ;
170+ }
171+
101172 /**
102173 * Sets a text input component to this label.
103174 *
@@ -118,6 +189,7 @@ export class LabelBuilder extends ComponentBuilder<APILabelComponent> {
118189
119190 const data = {
120191 ...structuredClone ( rest ) ,
192+ // The label predicate validates the component.
121193 component : component ?. toJSON ( false ) ,
122194 } ;
123195
0 commit comments