- Shipped
- August 22, 2026 at 10:04 PM UTC
- Author
- kamo
- Commit
- e149aef
The first INSTANCED widget. A member hangs as many frames as they like, each with its own contents, its own moulding and its own place in the grid, all from one registry entry. THE MITRE. A frame is ONE moulding profile repeated on four sides and cut at 45° where they meet, which is how a real frame is made and the reason this model has no "top border" or "left border" — there is nothing to keep in step because there is only one thing. A member designs the cross-section, the four sides fall out of it, and every corner is a 45° line BY CONSTRUCTION rather than by a style anyone can get wrong. Each side is a trapezoid clipped out of a full-size box and painted with a gradient running from the outer edge inward; the sloped ends are the mitre, and four of them tile the border with no overlap and no seam. `border-*` colours would have been free and were the wrong tool: they cannot carry a multi-band profile or a texture, and a member who edited one side would have three more to fix. THE PICTURE. Aspect ratio always kept, frame always filled, overflow cropped. Letterboxing inside a moulding looks like a fault in the frame rather than a property of the photo. Instances travel as `widget:picture-frame#<uuid>` through the layout, the pane store and the show/hide preference, so a frame keeps its own size, colour, logo and position and hiding one leaves its siblings alone. The id vocabulary moved into widgetIds — pure and covered, because those strings are persisted in every member's stored arrangement and their shape is load-bearing. An instance defaults to SHOWN: the member made it, and making it is the decision to have it. The editor at **************** puts the frame at hanging size on the left and everything that changes it on the right. The preview is the SAME component the launchpad renders, not a facsimile — a moulding that looks refined at 90px is a slab at 400, and two renderers would drift with the preview being the one that drifted. Saves are debounced and optimistic: designing a frame is a hundred small changes in a minute, so a save button would mean losing the lot to a mis-click. Every colour in a stored design is pattern-checked before it reaches a gradient. These blobs are member-authored data being interpolated into a style attribute, and the check is what keeps a saved frame from being a way to write arbitrary CSS. Media reorders with arrows rather than by dragging: this grid sits inside a page reachable from a launchpad the member already drags panes around on, and a second differently-behaved drag surface is how people move the wrong thing. Arrows also work on a phone and with a keyboard. Uploads go one at a time — firing twenty concurrent multipart requests at one pod is how a member with a holiday folder takes the service down for everyone else on it.