@@ -7,13 +7,15 @@ import type {
77 APIComponentInModalActionRow ,
88 APILabelComponent ,
99 APIModalInteractionResponseCallbackData ,
10+ APITextDisplayComponent ,
1011} from 'discord-api-types/v10' ;
1112import { ComponentType } from 'discord-api-types/v10' ;
1213import { ActionRowBuilder , type ModalActionRowComponentBuilder } from '../../components/ActionRow.js' ;
1314import { customIdValidator } from '../../components/Assertions.js' ;
1415import { createComponentBuilder , resolveBuilder } from '../../components/Components.js' ;
1516import { LabelBuilder } from '../../components/label/Label.js' ;
1617import { TextInputBuilder } from '../../components/textInput/TextInput.js' ;
18+ import { TextDisplayBuilder } from '../../components/v2/TextDisplay.js' ;
1719import { normalizeArray , type RestOrArray } from '../../util/normalizeArray.js' ;
1820import { titleValidator , validateRequiredParameters } from './Assertions.js' ;
1921
@@ -29,7 +31,8 @@ export class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCa
2931 /**
3032 * The components within this modal.
3133 */
32- public readonly components : ( ActionRowBuilder < ModalActionRowComponentBuilder > | LabelBuilder ) [ ] = [ ] ;
34+ public readonly components : ( ActionRowBuilder < ModalActionRowComponentBuilder > | LabelBuilder | TextDisplayBuilder ) [ ] =
35+ [ ] ;
3336
3437 /**
3538 * Creates a new modal from API data.
@@ -68,24 +71,31 @@ export class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCa
6871 * Adds components to this modal.
6972 *
7073 * @param components - The components to add
71- * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addActionRowComponents } instead
74+ * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addTextDisplayComponents } instead
7275 */
7376 public addComponents (
7477 ...components : RestOrArray <
7578 | ActionRowBuilder < ModalActionRowComponentBuilder >
7679 | APIActionRowComponent < APIComponentInModalActionRow >
7780 | APILabelComponent
81+ | APITextDisplayComponent
7882 | APITextInputComponent
7983 | LabelBuilder
84+ | TextDisplayBuilder
8085 | TextInputBuilder
8186 >
8287 ) {
8388 this . components . push (
8489 ...normalizeArray ( components ) . map ( ( component , idx ) => {
85- if ( component instanceof ActionRowBuilder || component instanceof LabelBuilder ) {
90+ if (
91+ component instanceof ActionRowBuilder ||
92+ component instanceof LabelBuilder ||
93+ component instanceof TextDisplayBuilder
94+ ) {
8695 return component ;
8796 }
8897
98+ // Deprecated support
8999 if ( component instanceof TextInputBuilder ) {
90100 return new ActionRowBuilder < ModalActionRowComponentBuilder > ( ) . addComponents ( component ) ;
91101 }
@@ -99,6 +109,11 @@ export class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCa
99109 return new LabelBuilder ( component ) ;
100110 }
101111
112+ if ( component . type === ComponentType . TextDisplay ) {
113+ return new TextDisplayBuilder ( component ) ;
114+ }
115+
116+ // Deprecated, should go in a label component
102117 if ( component . type === ComponentType . TextInput ) {
103118 return new ActionRowBuilder < ModalActionRowComponentBuilder > ( ) . addComponents (
104119 new TextInputBuilder ( component ) ,
@@ -128,6 +143,24 @@ export class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCa
128143 return this ;
129144 }
130145
146+ /**
147+ * Adds text display components to this modal.
148+ *
149+ * @param components - The components to add
150+ */
151+ public addTextDisplayComponents (
152+ ...components : RestOrArray <
153+ APITextDisplayComponent | TextDisplayBuilder | ( ( builder : TextDisplayBuilder ) => TextDisplayBuilder )
154+ >
155+ ) {
156+ const normalized = normalizeArray ( components ) ;
157+ const resolved = normalized . map ( ( row ) => resolveBuilder ( row , TextDisplayBuilder ) ) ;
158+
159+ this . components . push ( ...resolved ) ;
160+
161+ return this ;
162+ }
163+
131164 /**
132165 * Adds action rows to this modal.
133166 *
@@ -211,7 +244,9 @@ export class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCa
211244 * @param components - The components to set
212245 * @deprecated Use {@link ModalBuilder.setLabelComponents} instead
213246 */
214- public setComponents ( ...components : RestOrArray < ActionRowBuilder < ModalActionRowComponentBuilder > | LabelBuilder > ) {
247+ public setComponents (
248+ ...components : RestOrArray < ActionRowBuilder < ModalActionRowComponentBuilder > | LabelBuilder | TextDisplayBuilder >
249+ ) {
215250 this . components . splice ( 0 , this . components . length , ...normalizeArray ( components ) ) ;
216251 return this ;
217252 }
0 commit comments