Repository: vscode
Issue: API Proposal for multiline quick input
Labels: feature-request,quick-pick,api-proposal

## Problem

Currently there's no way to take a multiline input via `showInputBox`. We need one because we use `showInputBox` to take the commit message (which can be multiline) in git extension. (#40295, #39969)

## Solution APIs

<details><summary>TLDR: allow passing a <code>multiline</code> property to the <code>showInputBox</code> options</summary><br>

- **PROPOSED** API: Allow passing a `multiline` property to the `showInputBox` options.

	- Problem: Users can have `{ multiline: true, password: true }` which won't work because it's a textarea. More importantly in future there could be more options applicable to only multiline (eg an option mapping to textarea's `row` attribute) or to only singleline

		- **PROPOSED** Solution: It's okay just document it
		- Solution: It's okay just document it and throw an error if such case arises
		- Solution: make the type of options like ```{ multiline?: false, password?: boolean } | { multiline?: true, password?: false }```

            - Problem: Terrible typescript inference and error message ergonomics if the options are not literal
			- Problem: It's typescript-only solutiton

- API: Have another function called `showMultilineInputBox` that takes options only applicable to it (meaning doesn't take `password` property as option)

	- Problem: Feels a little overkill especially at the moment as we only one option (ie `password`) exclusive to singleline. It would have been okay if we had a bunch of options only exclusive to multiline eg `maxHeight`, `autoGrow`, `initialRows`, etc. or bunch of options exclusive to singleline</details>

## Solution Behaviors

<details><summary>TLDR: when <code>multiline</code> is set to true, <code>showInputBox</code> shows a multline quick input where the user hits shift+enter to insert a newline and works exactly like current quick input</summary><br>

- **PROPOSED** Behavior: Allow users to insert a newline with shift+enter instead of submitting
	- Prior art: In chrome developer console enter executes the code but shift+enter inserts a newline. As in, usually afaik in scenarios where enter is already taken, shift+enter mimics the "usual" enter behavior. I guess it's also [popu](https://twitter.com/jaffathecake/status/1290306529539821568)[lar](https://twitter.com/rauschma/status/1095298670017343488) convention.
- Behavior: Allow users to insert a newline with enter instead of submitting and have shift+enter submit it.
	- Problem: The behavior is not "additive" to singleline behavior as user would expect enter to submit it in multiline also as it does in singleline
- Behavior: Allow users to insert a newline with enter instead of submitting and have a button to submit it. 
	- Problem: Kinda kills the whole point of "quick input" you'll have to press tab to focus to button and hit enter, foreign to quick action ui and not additive to singleline behavior</details>

## Implementation

For currently proposed api and behavior: #98042, [demo](https://github.com/microsoft/vscode/issues/40295#issuecomment-629862549)

cc @jrieken @chrmarti @joaomoreno