Container Screen
The Workspace and Project screen — a container's own card with its children filed beneath it.
The Container Screen shows one folio that holds others: its own card at the top, and its children listed beneath. Workspace and Project are the same screen — one page that prints each tier's own words.
In plain terms: a file with the files inside it. Opening a drawer and opening a folder look the same, because they are the same act.
This page was document-home until 2026-09-20. There is no separate home
screen: /app/canvas provisions your Workspace and sends you to it.
Route
/app/canvas/$routeKey, the same address the
Document Work Screen uses. The folio's
kind picks the screen; see Canvas Frame.
| Container | Children it lists | Code |
|---|---|---|
| Workspace | Projects | src/pages/folio-container/ |
| Project | Documents | src/pages/folio-container/ |
Which children a tier files comes from the domain's containment table, not from a check on the kind — a new tier joins by adding a row there.
What's on screen
Container Screen
├── Location line ← "In Workspace: …", where there is a parent
├── Container card ← this folio's own card: name, guide, tags, contents count
└── Children
├── List toolbar ← Insert + at the left, Filter at the right
└── Child cards ← one per child, newest first, each openable and selectableThe container's card and every child card are the same furniture as the document canvas — see The Stack. The list is a navigation surface, so it sits on the canvas ground rather than on paper.
Clicking a row
Where you click is what it means. Bare card paint opens the folio. The mark menu, the editable heading and Goldie's glyph select the row instead. Keyboard users open through the card's own Open button.
Nothing arrives selected, and a click on empty surface or Escape puts a row back down — the frame owns that, not the screen.
Goldie is per row: one row's panel is open at a time, and it carries that folio's own conversation. Selecting a row is what brings its About rows with it.
The list toolbar
Every list page carries the same toolbar between its header card and its list (owner, 2026-10-01):
[ Insert + ] [ ≡ Filter ]
‹this page's filter chips›- Insert + (left) opens the insert search card. It always inserts the page's child kind, one level down. It replaced the "Add a library / project / document / module" rows.
- Insert is the canvas's own insert row, on the same geometry: the plus in the gutter where every card's mark sits, the words starting where every card's title starts, on the card rail. It reads as one button defined by its background: a single pill whose fill spans the plus and the words, in the folio menu's "Insert…" colours — pale gold at rest, a shade deeper on hover, and while its search is open the deeper shade with the plus on an ink tile inside it. The button itself is that one shape: it reaches left past the gutter's plus, and its padding puts the words back at the text column. Nothing draws a background behind the words alone. A "Blank …" result row has no gutter mark; its plus is at the right. No border, and no card behind the row; the pill's padding never moves the plus or the words. The bottom insert rows stay plain (owner, 2026-10-01).
- Every list page uses the one
ListToolbarcomponent (src/shared/ui/molecules/list-toolbar/) and passes props only — the Insert's words and search, the filter groups, the position. No screen styles its own toolbar (owner, 2026-10-01). Its stories show every state. - Filter (right) stands apart from Insert — never in one card with it — on the same line, its right edge on the list cards' own. Its chips sit on their own line below, right-aligned to the same edge. It the page's chip row below it and counts the chips that are on, so a filter left on is never hidden.
| Page | Insert | Filter chips | Order |
|---|---|---|---|
| Libraries | top; adds a Library | Show: Mine · Shared with me · Marketplace; Price: Free · Paid (greyed, coming soon), shown only while Marketplace is chosen and cleared when it is not | newest at top |
| Workspace | top; adds a Project | Show: Mine · Shared with me, one at a time | newest at top (last edit, else creation) |
| Project | top; adds a Document | as Workspace | as Workspace |
| Document canvas | top and bottom; adds a Module | Show: All · Modules · Data · Content, one at a time, All by default | clause order |
| A Library's own Workspace | Insert into… only: ticks the Library on or off a Workspace's search list | none | unchanged |
On the document canvas the two Inserts differ by where they land: the top one
inserts at the top of the module list, the bottom one at the true end, even
while a filter hides rows. The filter only hides rows that do not match:
Modules hides every block and keeps the module cards; Content or Data hides
the other kind's blocks. A filter group may depend on another (showWhen):
it shows only while that group's answer is chosen, and is cleared when
hidden. The
left-margin plus and the row menu's Insert are unchanged.
On Library pages the left end is still the page's main action, turned
round (owner, 2026-10-01). A working copy's Insert + inserts one level
below, into this folio. A Library master's Insert into… inserts this
item one level above: it copies it into a chosen existing destination —
a Library into a Workspace, a Project into a Workspace, a Document into a
Project, a Module into a Document. It replaced the separate "Use this …"
card, and its search card is headed with the item's name so it reads as a
sentence: "Insert Cooking With Gas into…". A Library Document, Module or
Block page puts it at the left of the document's toolbar the same way. A
Library's own page (its
Workspace) gets the toolbar with Insert into… alone and no Filter
(owner, 2026-10-01, revising 2026-09-26): its destinations are the
account's Workspaces, each a checkbox: ticked where the Workspace already
searches this Library. Choosing one toggles it — added to, or taken off,
that Workspace's search list through the search card's own Keep selection
(library/searchScope.keepSelection), every other Library on the list kept.
No confirmation: unticking removes only a search link.
How work moves between a working copy and a Library (owner, 2026-10-01):
| Direction | How | Where |
|---|---|---|
| Working copy → Library | Publish a Document, Module or Block from the Document's menu (src/features/publish-to-library); never a Project (owner, 2026-10-01) | Working copy |
| Library → working copy | Insert into…, one level above | Library pages |
| Library item → here | Insert +, through the library search card, one level below | Working copy |
Nothing is made in a Library: masters arrive only by publishing from a working copy (Libraries, owner ruling 2026-09-26).
In plain terms: a Library is a precedent bank. You file finished precedents in, you take copies out, and you never draft inside it.
Workspace and Project cards carry whose they are (viewerHolds on the list
data, owner 2026-10-01): Mine keeps the cards the viewer holds, Shared
with me the cards someone else holds and the viewer was let into. The
Tags, Edited, When and Owner chips were dropped the same day.
In plain terms: every drawer has the same strip across its top. "New" on the left, "Show only…" on the right. What "new" makes is always the next thing down: a Library in Libraries, a Project in a Workspace, a Document in a Project, a Module in a Document.
Adding a child
- Workspace → Insert a project creates the Project and stays put. A new Project is empty, so opening it would show nothing.
- Project → Insert a document creates the document and opens it, because the document is what was asked for.
An add in flight refuses a second one.
Reads and writes
Arriving reads api.folio.home.container — the folio, its children, and its
parent for the trail — and records a visit, which moves the folio up the recent
list. A failed visit is bookkeeping: it is logged, and the screen carries on.
Writes are per row, each through its own mutation: rename, guide, tags, duplicate, and delete. Delete is reversible list visibility, not destruction; the confirmation names what goes with it. See Folio operations.
Related
- Canvas Frame — the chrome this screen sits in
- Document Work Screen — what opens when a document row is opened
- Folios schema — what a container and its children are
- The Stack — the card furniture
Canvas Frame
The one chrome every canvas screen sits in — account rail, work bar, scrolling surface, Inspector — and how the container screens and the document screen fill it differently.
Document Work Screen
The active document screen — the document on the left, the capability-gated Inspector beside it.