D72. Blocks placed by hand: the flow first, a place where the author drops it, back in the flow below the minimum window (6 Nov 2026)
Authors coming from Storyline, PowerPoint or Canva expect to put a block where they want it and to size it by hand. Elabora’s screens are flows (a column, or the zones of a layout) that hold at every window, on phones too, and are read in one order. The study of 6 Nov (Lin 52, elabora-notes/reports/placement-libre/rapport.md) compared four directions; the founder chose the third, « le fil d’abord », with the tidying of the fourth and the zones of the second, and asked for slides and scroll pages in the first version: « Conceptuellement, les slides ou les pages Rise sont la même chose chez nous. C’est juste une grande slide. »
Decided:
- A block placed by hand keeps its anchor.
block.place: { x, y, width, height?, z? }(schemas 0.1.11), only on the blocks of a screen itself (E_PLACED_NESTEDin a layer or a component’s slots). The anchor is the block’s slot and its rank in the screen’s list, as before: its reading order, its focus order, and where it goes when it is not placed. Removingplaceputs the block back there. - Units: shares of the placement frame. The frame is the reference window (
presentation.fit.reference, 1600×900 by default) at the width of the screen’s area (#t-main), at most the reference width in rem (centred beyond it).xandwidthare shares of its width,yandheightof its height (the reference ratio at that width): the same unit ashotspotsandfocus, readable as px at the reference (x × 1600).heightleft out: the block’s content sets it (a picture, its proportions); with it, a picture fills the box around its focal point.zorders placed blocks (higher in front); placed blocks are drawn over the flow. - Slides and pages, one rule for
y. In slides the frame is centred in the slide andyis measured from its top; a block that would leave a slide shorter than the frame (its bars take room) is kept inside it. In scroll presentationyis measured from the block’s anchor, the top of the next block of its list in the flow (else the end of the one before it): a placed block moves with the text before it, as « Move with text » does in Word and Pages. A page is a tall slide whose blocks follow their text. - Below the minimum, the flow. At windows narrower than
presentation.fit.minimum(1280 px by default, slides and pages alike), on phones and portrait tablets, and when the learner enlarges the text (« Affichage »), a placed block reads in the flow at its anchor: the threshold where a slide already reads as a page. The editor’s canvas places them at any width but a phone’s (page optionplacing=editor); its menu « Fenêtre de 1280 × 720 » shows the minimum. - The player places, CSS draws.
@elabora/playerplacement.tsmeasures the frame and each anchor from the page’s offsets (what a fade or a glide moves for a moment is left out) and writes px in custom properties of the block’s containing block;player.csslifts.t-block[data-t-place]with them. Every read before every write, again on resize, on a step shown, a size class crossed, fonts loaded.#elabora-app[data-t-placing]says it is on; a slot holding only placed blocks has[data-t-placed-only]for a layout to fold it. - The editor’s canvas.
elabora/liftshows a dragged block out of the flow at a box of the viewport (it stays there when the page scrolls), or at a place in the frame (a handle’s preview);release: "render"holds it until the render of the change.elabora/motionmakes the next render glide from what the page shows (FLIP, the player’s curve; less motion: at once). Its layout report givesplaced,anchor,covers(the blocks whose lines of text it lies over) andplacing: the frame, the flow’s places zone by zone, the column’s widths. The engine’scanvasView { preview }renders a change before it is made (a handle’s step), nothing written. - The app’s gestures (direction C): a drag goes to a place in the flow when the dragged block’s box comes into a zone, the place nearest to its top, whatever point the pointer holds (the founder’s case: a large picture held by its corner, its top near its place, goes back there); anywhere else, or with the key held (⌘ on a Mac, Alt elsewhere, as PowerPoint does), it is placed by hand and its anchor follows: the zone on its side, the rank at its height. Handles step through the sizes of the zone (the column’s half, full, wide and bleed widths), gliding from one to the next; with the key, or on a placed block, any size. The page scrolls under a drag near the stage’s edges and with the wheel, the block under the pointer. The first block an author places brings a note, once per author, with « Mettre au propre » and « Ranger ».
- Commands.
place_block { block, place | null, slot?, after?, position? }: the place and the anchor in one change (CLIelabora block place);arrange_screen { screen, blocks? }, « Ranger »: placed blocks back in the flow, each at its anchor (MCPelabora_arrange_screen, CLIelabora screen arrange);update_blocktakesplace(MCPelabora_update_block). The summary’s outline counts each screen’s placed blocks. - Checks.
I_BLOCK_PLACED(a screen’s placed blocks, for the agent),E_PLACED_NESTED,W_PLACED_OUTSIDE(validate);W_PLACED_OVERLAP(lines of text covered),W_PLACED_OVERFLOW(content past its height or the slide),W_PLACED_TARGET(a button under 44 px), measured byelabora fitat the reference and the minimum; pages with placed blocks are measured at the minimum too. - « Mettre au propre ». The author’s AI reads the places as a sketch and puts the blocks in a layout of the module, or a new one, then removes the places; the app’s request names the other screens with placed blocks, for one visual language.
Weighed:
yfrom the top of a page. Rejected: a paragraph added above, or text reflowing at 1280 px (rem shrinks less than the window), would leave a placed block beside the wrong text; down a long page the gap grows.- The frame in rem (100rem wide). Rejected: at 1280 px a 100rem frame is 1400 px, wider than the window; blocks near its edges would be cut.
- A position per window size. Rejected: the complaint best documented in other tools (Captivate, Rise, Wix).
- The pointer decides between the flow and a place. Rejected by the founder: a large block held far from its edge ends up placed beside the line it was meant to go back to.
- Space, then ⌥, for the key. Space (the study’s choice) was replaced by the founder with ⌘/Alt, PowerPoint’s.
Revisit if: authors ask for placed blocks in layers or inside components; the editor’s canvas shows the bars’ room (the slide in the editor is taller than in a package); Storyline’s import keeps positions as placed blocks (next, after this version); an option keeps a whole screen at scale below the minimum (presentation.placed: "scale", studied).