Repository: material-ui
Issue: Support for bottom sheets from Material Design specs
Labels: new feature,design: material

- [x] I have searched the [issues](https://github.com/mui-org/material-ui/issues) of this repository and believe that this is not a duplicate.

## Summary 💡

It would be great to have an implementation of the Bottom sheet component from the 2019 Material Design specs (https://material.io/components/sheets-bottom/#). I didn't see an issue for it already so I figured I'd create this one to get the conversation started. I'd be potentially interested in helping to create that implementation, though not in the immediate future.

The specs break the component down into three types, which each have pretty distinct behaviour:

1. Standard bottom sheets

* These are permanently anchored to the bottom of the app and are elevated above the other content
* There are no guidelines on how these should look, other than that they should always be 100% width and anchored to the very bottom of the page

2. Modal bottom sheets

* These are sheets that appear after some user interaction and cover part of the screen, with a modal backdrop covering the rest of it
* Once open, they can potentially opened in "full screen" by swiping up
* They can be closed by swiping down or tapping on the backdrop
  * It's recommended to have some UI like a close button to close the fullscreen mode
* Again, there are very few guidelines on how these should look

3. Expanding bottom sheets

* These are a very specific UI component that appears at the bottom right of the screen and, when clicked, open a fullscreen modal sheet

I don't think it's necessary to provide a component for Standard bottom sheets, since this can already be achieved very easily, however it would be useful to have components for Modal bottom sheets and Expanding bottom sheets. Since they quite different, I think they should be separate components. I am more interested in the Modal bottom sheets which I have seen used much more in real applications and I think has more use cases, so I think that work should be considered a higher priority.

Since the specs don't give much direction on the visuals of the modal sheet, I think that should be completely left to the user, and only the behaviour should be implemented. Perhaps, with the exception of an optional bar element (not sure what to call it, see screenshots).

P.S. maybe we could call the bar element a "handle bar" or "handle" ?

<details>
  <summary>Examples 🌈</summary

Standard bottom sheets are permanently anchored to the bottom of the app, and cannot be resized or moved:

![image](https://user-images.githubusercontent.com/2432634/70570057-6a236d00-1b58-11ea-9f05-53a893ef1ce1.png)

Modal bottom sheets can be opened over top of other content:

![image](https://user-images.githubusercontent.com/2432634/70570814-deaadb80-1b59-11ea-8c5e-94b891eb8196.png)

Modal bottom sheets should only open to full height if their content fills < 50% of the screen's height:

![image](https://user-images.githubusercontent.com/2432634/70571038-452ff980-1b5a-11ea-8418-53563e372e3d.png)

Modal bottom sheets can be opened to full screen mode:

![image](https://user-images.githubusercontent.com/2432634/70571091-61339b00-1b5a-11ea-8475-cc2ab7558e00.png)

Expanding bottom sheets should follow the spec exactly:

![image](https://user-images.githubusercontent.com/2432634/70571126-70b2e400-1b5a-11ea-9f83-09e1930fa4f5.png)

Examples of modal bottom sheets "in the wild":

Google Tasks:

![01-Google-Tasks-Options](https://user-images.githubusercontent.com/2432634/70571912-f5eac880-1b5b-11ea-8a75-51aeae81be2a.png)
![02-Google-Tasks-New-Task](https://user-images.githubusercontent.com/2432634/70571913-f5eac880-1b5b-11ea-8632-93f389cb0af6.png)

Note the "bar" thing on the small version and how it disappears on the medium and fullscreen versions:

![03-Google-Tasks-Menu-Small](https://user-images.githubusercontent.com/2432634/70571914-f5eac880-1b5b-11ea-8501-28f35383b438.png)
![04-Google-Tasks-Menu-Medium](https://user-images.githubusercontent.com/2432634/70571915-f5eac880-1b5b-11ea-8b29-f614d2a0469c.png)
![05-Google-Tasks-Menu-Fullscreen](https://user-images.githubusercontent.com/2432634/70571916-f5eac880-1b5b-11ea-9ad7-fbfa3f7bbdd3.png)

Google Keep:

![06-Google-Keep-Options](https://user-images.githubusercontent.com/2432634/70571924-fbe0a980-1b5b-11ea-8620-094e96d011ee.png)
![07-Google-Keep-Add](https://user-images.githubusercontent.com/2432634/70571925-fbe0a980-1b5b-11ea-850d-4c27cbe7e230.png)

OneVersion:

Note the "bar" thing on the small version, and how it morphs to the "collapse" icon in the fullscreen version:

![08-OneVersion-Small](https://user-images.githubusercontent.com/2432634/70571936-013df400-1b5c-11ea-9c83-df6479d20d9a.png)
![09-OneVersion-Fullscreen](https://user-images.githubusercontent.com/2432634/70571937-013df400-1b5c-11ea-827b-d4795e384fe3.png)

</details>

## Motivation 🔦

I think these are a really useful component which I've been seeing more and more in modern apps and I find are delightful to use. They are a great way to make options available to mobile users since it keeps things accessible to the thumbs at the bottom of the screen. It also helps to keep context with the activity you were in before opening the sheet. I would like to use something like this in one of my projects in the future.

I think the most complex part of implementing a bottom sheet is the swiping interactions and making them nice and fluid. If they don't work well, it loses much of its magic and delight-fullness. This is why I think it should be part of mui core, so that it is easy for developers to add a bottom sheet with solid behaviour with little effort.