66 FormEventProducer ,
77 FormHub ,
88 InputForm ,
9+ MultiButtonElementButton ,
910 MultiButtonForm ,
1011 NormalizedTextContent ,
1112 triggerEvent ,
@@ -78,6 +79,14 @@ const configureFormMultiButton = (form: MultiButtonForm, args: FormArguments): M
7879 const element = form . elements [ i ] ;
7980 if ( element . type === 'button' ) {
8081 dialogue = dialogue . addButton ( i . toString ( ) , toRawMessage ( args . normalize ( element . text ) ) , element . icon ) ;
82+ } else if ( element . type === 'divider' ) {
83+ dialogue = dialogue . addDivider ( ) ;
84+ } else if ( element . type === 'header' ) {
85+ dialogue = dialogue . addHeader ( toRawMessage ( args . normalize ( element . text ) ) ) ;
86+ } else if ( element . type === 'label' ) {
87+ dialogue = dialogue . addLabel ( toRawMessage ( args . normalize ( element . text ) ) ) ;
88+ } else {
89+ assertNever ( element ) ;
8190 }
8291 }
8392
@@ -119,16 +128,19 @@ const configureFormInput = (form: InputForm, args: FormArguments): InputScriptDi
119128 for ( let i = 0 ; i < form . elements . length ; ++ i ) {
120129 const element = form . elements [ i ] ;
121130 if ( element . type === 'slider' ) {
122- dialogue = dialogue . addElement (
123- inputSlider (
124- element . name ?? i . toString ( ) ,
125- toRawMessage ( args . normalize ( element . text ) ) ,
126- element . min ,
127- element . max ,
128- element . step ,
129- element . defaultValue
130- )
131+ let input = inputSlider (
132+ element . name ?? i . toString ( ) ,
133+ toRawMessage ( args . normalize ( element . text ) ) ,
134+ element . min ,
135+ element . max ,
136+ element . step ,
137+ element . defaultValue
131138 ) ;
139+ if ( element . tooltip ) {
140+ input = input . withTooltip ( toRawMessage ( args . normalize ( element . tooltip ) ) ) ;
141+ }
142+
143+ dialogue = dialogue . addElement ( input ) ;
132144 } else if ( element . type === 'dropdown' ) {
133145 let dropdown = inputDropdown ( element . name ?? i . toString ( ) , toRawMessage ( args . normalize ( element . text ) ) ) ;
134146 if ( element . defaultValue ) {
@@ -141,20 +153,39 @@ const configureFormInput = (form: InputForm, args: FormArguments): InputScriptDi
141153 dropdown = dropdown . addOption ( toRawMessage ( args . normalize ( option . text ) ) , option . value ) ;
142154 }
143155
156+ if ( element . tooltip ) {
157+ dropdown = dropdown . withTooltip ( toRawMessage ( args . normalize ( element . tooltip ) ) ) ;
158+ }
159+
144160 dialogue = dialogue . addElement ( dropdown ) ;
145161 } else if ( element . type === 'text' ) {
146- dialogue = dialogue . addElement (
147- inputText (
148- element . name ?? i . toString ( ) ,
149- toRawMessage ( args . normalize ( element . text ) ) ,
150- toRawMessage ( args . normalize ( element . placeholder ) ) ,
151- element . defaultValue
152- )
162+ let input = inputText (
163+ element . name ?? i . toString ( ) ,
164+ toRawMessage ( args . normalize ( element . text ) ) ,
165+ toRawMessage ( args . normalize ( element . placeholder ) ) ,
166+ element . defaultValue
153167 ) ;
168+ if ( element . tooltip ) {
169+ input = input . withTooltip ( toRawMessage ( args . normalize ( element . tooltip ) ) ) ;
170+ }
171+ dialogue = dialogue . addElement ( input ) ;
154172 } else if ( element . type === 'toggle' ) {
155- dialogue = dialogue . addElement (
156- inputToggle ( element . name ?? i . toString ( ) , toRawMessage ( args . normalize ( element . text ) ) , element . defaultValue )
173+ let input = inputToggle (
174+ element . name ?? i . toString ( ) ,
175+ toRawMessage ( args . normalize ( element . text ) ) ,
176+ element . defaultValue
157177 ) ;
178+ if ( element . tooltip ) {
179+ input = input . withTooltip ( toRawMessage ( args . normalize ( element . tooltip ) ) ) ;
180+ }
181+
182+ dialogue = dialogue . addElement ( input ) ;
183+ } else if ( element . type === 'label' ) {
184+ dialogue = dialogue . addLabel ( toRawMessage ( args . normalize ( element . text ) ) ) ;
185+ } else if ( element . type === 'divider' ) {
186+ dialogue = dialogue . addDivider ( ) ;
187+ } else if ( element . type === 'header' ) {
188+ dialogue = dialogue . addHeader ( toRawMessage ( args . normalize ( element . text ) ) ) ;
158189 } else {
159190 assertNever ( element ) ;
160191 }
@@ -184,7 +215,11 @@ const renderForm = async (player: Player, formHub: FormHub, form: Form, args: Fo
184215 if ( form . type === 'multi-button' ) {
185216 const multiButtonForm = form as MultiButtonForm ;
186217 const selected = parseInt ( response . selected ) ;
187- return new FormEventProducer ( formHub , multiButtonForm . elements [ selected ] . action , args ) ;
218+ return new FormEventProducer (
219+ formHub ,
220+ ( multiButtonForm . elements [ selected ] as MultiButtonElementButton ) . action ,
221+ args
222+ ) ;
188223 } else if ( form . type === 'dual-button' ) {
189224 const dualButtonForm = form as DualButtonForm ;
190225 if ( response . selected === 'top' ) {
0 commit comments