The [`web-sys` crate](https://crates.io/crates/web-sys) provides bindings for Web APIs. This is procedurally generated from browser WebIDL which is why some of the names are so long and why some of the types are vague. ## Features in `web-sys` The `web-sys` crate with all of it's features enabled can add lots of bloat to a Wasm application, in order to get around this issue most types are feature gated so that you only include the types you require for your application. Yew includes a number of features from `web-sys` and exposes some types in it's public API, you will often need to add `web-sys` as a dependency yourself. ## Inheritance in `web-sys` In the [Simulating inheritance section](../wasm-bindgen#simulating-inheritance) you can read how in general Rust provides an approach to simulate inheritance in JavaScript. This is very important in `web-sys` as understanding what methods are available on a type means understanding it's inheritance. This section is going to look at a specific element and list out it's inheritance using Rust by calling [`Deref::deref`](https://doc.rust-lang.org/std/ops/trait.Deref.html#tymethod.deref) until the value is [`JsValue`](../wasm-bindgen#jsvalue): ```rust use std::ops::Deref; use web_sys::{ Element, EventTarget, HtmlElement, HtmlTextAreaElement, Node, }; fn inheritance_of_text_area(text_area: HtmlTextAreaElement) { // HtmlTextAreaElement is