- Ya
- 22 Agosti 2026, 01:13 UTC
- Mwandishi
- kamo
- Ahadi ya
- f410f00
A widget is a live pane that shares the grid, the drag and the ordering with the app cards rather than sitting beside them. Adding the next one is a single registry entry plus a component: it inherits the grid, the per-member show/hide, the settings screen and the five-right policy without any of those places learning its name. The launchpad's masonry had to go. Masonry positions items in independent columns, so nothing in it can ever be two columns wide, and a widget system whose widest size is 'all of them' cannot live there. A real grid gives back a UNIT — one column of width, one row of height — that means the same thing to a card and to a widget, which is what lets a member drag one past the other and still get a page that lines up. No dense auto-flow: dense backfills gaps by pulling later items into earlier holes, and the order here is the member's. Widgets pinned in place by their organization render in their own band ABOVE the sortable grid. Leaving them in and merely refusing to pick them up would still let a movable pane be dropped in front of one — the same outcome the policy exists to prevent, reached from the other side. Show/hide is stored as DEVIATIONS, not as a list of what is on. Storing 'these are on' would freeze a member's page at the moment they last touched it: a widget added to the platform next month, or newly granted to them, would never appear. Storing only where they differ from their organization means the defaults keep flowing through, and Required overrides a stored 'off' so a policy change reaches exactly the members it was aimed at. The two calendar widgets show ONE EVENT PER UNIT OF WIDTH — four side by side on a wide launchpad, one on a phone — with arrows walking through the rest in pages of that same size. Slots are measured from the element rather than read off a breakpoint, so a widget in a narrowed grid or at an odd zoom is told the truth. Events in progress carry a live progress bar, and every 'is this happening now' decision offsets by the server clock: a device running four minutes fast must not show a meeting under way before anybody is in it. Changes arrive over one shared STOMP connection for however many widgets are on the page, with a five-minute poll and a refetch on tab focus underneath it. **************** is where a removed widget is found again — the launchpad leaves no trace of one by design. Self only: a member's arrangement is stored against their own session. Every switch that refuses to move says why, because three of the four policies are the organization's and not the member's. /calendar now opens an event from ?eventId=. Both widgets and the notification cards hand out that link, and until now it landed on the current month with no indication which event was meant.