//! The first-party widget set. //! //! A widget is an assembly of primitives under a name. `makeover-layout` grew //! [`Region::Widget`](makeover_layout::Region::Widget) at 0.20.0 to make one //! sayable; this crate is where ours live. //! //! # Why this is not a makeover crate //! //! It was going to be, as `makeover-basics`, and the carousel proved it could //! not be. A widget is an assembly of [`Node`](quasi_router::Node)s, and //! `Node`, [`Slot`](quasi_router::Slot) and [`Picture`](quasi_router::Picture) //! are `quasi-router`'s. That is not an accident of which crate somebody typed //! them into: `makeover-layout` defers every address by rule, and //! `layout::Image` carries a shape and its alt text and deliberately no source. //! So a widget with a picture in it is unsayable below `quasi-router` by //! construction, and the widget tier sits above the description suite rather //! than inside it. //! //! The consequence worth knowing is the good one: nothing here is a new //! drawing surface. Every widget is made of members the vocabulary already //! has, so a renderer that has never heard of one walks its body and draws //! primitives. Naming a widget costs no renderer release, and a widget is //! never how a primitive gets added by the back door. //! //! # What belongs here //! //! What more than one of our apps wants, and what one of them wants badly //! enough to be worth sharing the shape of. The first-party set stays //! deliberately thin: the suite ships the tier, and every widget shipped here //! is one the ecosystem does not get to name itself. //! //! A thing that needs a member the vocabulary does not have is still a finding //! about the vocabulary. A thing specific to one app is still //! [`Region::Bespoke`](makeover_layout::Region::Bespoke). //! //! # Adopting one in a webview app //! //! The description emits a plain `