On Shell, Home, List, Record, Stepped flow, Settings, Find, Calendar, Help
Row
Two facts and the supporting line stay on desktop.
Hirer: Priya Shah
Amount: £25.00
| Invoice | Status | Hirer | Amount |
|---|---|---|---|
| INV-001Hire of Main Hall. | Awaiting payment | Priya Shah | £25.00 |
A closed question: Ava's answer is recorded and Ben has none.
Collection is closed. Clara has a recorded answer; Daniel has none.
A room whose name opens its details.
Seats 40
Invoice
£84.00
4.5 from 38 reviews
Main Hall hire
Invoice details
Before you arrive
Ask @Aisha Khan to confirm the address for B-1042 Garden room before .
Read the hire terms first, then use 4721 at the gate.
Bring your own chairs.
Leave the hall by ten.
Ring the bell by the side gate.
Wait for the caretaker.
- Done
Deposit paid
- Not done
Key returned
The side door sticks in the cold.
Gate: 4721
Alarm: 0990Floor plan: garden-room-plan.pdf
Invoiced: £84.00 · Collected: £24.00 · Outstanding: £60.00 · payment expected after the hirer confirms the billing address, purchase order and named contact for Saturday’s Main Hall bookingPart payment taken by card on ; the balance stays outstanding until the reissued invoice is agreed, and the deposit is held against the Garden Room key that has not come back
Sent to aisha@oakmereprimary.org ·
Invited Mon · not yet accepted
Invited Tue · not yet accepted
Invited Wed · not yet accepted
Details
- Sent to
- Priya Shah
- priya@
stannesscouts.org
Wednesday · Main Hall
Wednesday · Main Hall
Thursday · Garden Room
Ballroom beginners · 1:30 am
Tuesday · Main Hall
Third in the room list
A Row of several separate facts that wrap as whole facts.
Hirer: Priya Shah
Day: Saturday
Seats: 40
Deposit: £50.00
Balance: £34.00
Key: with the caretaker
Cleaning: booked
A supporting line of long words that ends in a time.
InvoiceThe deposit, the cleaning charge and the return of the key are held against the Saturday booking until
A run at the Desk width: one Row folds its actions into More, and one without More wraps them.
Invitations
Invited Mon · not yet accepted
Invited Tue · not yet accepted
Payment reminder sent to the school office.
A run whose Rows each hold an inert action and its words.
Meetings
Main Hall ·
This booking is closed. Reopen it to move a meeting.
Main Hall ·
This booking is closed. Reopen it to move a meeting.
A Row at the Desk width whose actions wrap where no fold remains.
Invitation
Invited Wed · not yet accepted
A run at the Desk width whose Stamps wrap at their words where nothing else fits.
Bookings
Main Hall · Thursdays
Garden Room · Saturdays
A question at the Desk width whose actions wrap where no fold remains.
Register
Wednesday · Main Hall
A question whose label wraps.
Thursday bookings
Thursday · Garden Room
A question whose act sends an email, its preview before the actions.
Teacher · Tuesday beginners
The invitation lasts 7 days.
The invitation, as Aisha will get it
- Channel
- Email to aisha@
oakmereprimary.org
- Subject
- Teach at Oakmere Village Hall
Goes when you send it.
A question answered in a Dialog, with its whole Scope line.
Your answer sets the location for Monday’s choir rehearsal, Tuesday’s committee meeting and Thursday’s reading group.
An email as the subject.
Sends the invoices
A web address as the subject.
venues.example.com/oakmere-primary-school-parents-associationBooking page
A person as the subject, with their availability.
Books the choir rehearsals
An unread notification.
Paid by Aisha Khan
Source
<p class="specimen-case-line">Two facts and the supporting line stay on desktop.</p>
<div id="row-desktop-only">
<Kit.Phoenix.Roles.Row.row id="desktop-facts-row">
<:subject href="#role-row" supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Hire of Main Hall.")]) |> Kit.Phoenix.Supporting.desktop_only()]}>INV-001</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts desktop_only>Hirer: Priya Shah</:facts>
<:facts desktop_only>Amount: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "25.00"))} /></:facts>
</Kit.Phoenix.Roles.Row.row>
<div class="specimen-table-contained">
<Kit.Phoenix.Table.rows_table>
<:subject_heading label="Invoice" />
<:column_headings label="Status">Status</:column_headings>
<:column_headings label="Hirer">Hirer</:column_headings>
<:column_headings label="Amount" kind="amount">Amount</:column_headings>
<:row rest={%{id: "desktop-facts-record"}} subject_supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Hire of Main Hall.")]) |> Kit.Phoenix.Supporting.desktop_only()]} facts={[
%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.content(~H(<Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp>))},
%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.content("Priya Shah"), desktop_only: true},
%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "25.00")))]), desktop_only: true}
]}><a href="#role-row">INV-001</a></:row>
</Kit.Phoenix.Table.rows_table>
</div>
</div>
<p class="specimen-case-line">A closed question: Ava's answer is recorded and Ben has none.</p>
<div id="row-closed-choices">
<Kit.Phoenix.Roles.Row.row choices_reason="Attendance is closed.">
<:subject href="#role-row" rest={%{id: "row-closed-ava"}}>Ava Patel</:subject>
<:choices checked control_rest={%{value: "present", disabled: true}} printed_value="Chosen">Present</:choices>
<:choices control_rest={%{value: "absent", disabled: true}} printed_value="Not chosen">Absent</:choices>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row choices_reason="Attendance is closed.">
<:subject href="#role-row" rest={%{id: "row-closed-ben"}}>Ben Lewis</:subject>
<:choices control_rest={%{value: "present", disabled: true}} printed_value="Not chosen">Present</:choices>
<:choices control_rest={%{value: "absent", disabled: true}} printed_value="Not chosen">Absent</:choices>
</Kit.Phoenix.Roles.Row.row>
</div>
<p class="specimen-case-line">Collection is closed. Clara has a recorded answer; Daniel has none.</p>
<div id="row-closed-fields">
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Clara Webb</:subject>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-closed-clara" kind={Kit.Phoenix.Roles.FormGroup.Kind.select()} control_value="collected" control_rest={%{name: "collection-clara", disabled: true}}>
<:label>Collection</:label>
<:option value="">Not recorded</:option><:option value="collected">Collected</:option><:option value="not-collected">Not collected</:option>
<:printed_value>Collected</:printed_value>
<:reason>Collection is closed.</:reason>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Daniel Reed</:subject>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-closed-daniel" kind={Kit.Phoenix.Roles.FormGroup.Kind.select()} control_value="" control_rest={%{name: "collection-daniel", disabled: true}}>
<:label>Collection</:label>
<:option value="">Not recorded</:option><:option value="collected">Collected</:option><:option value="not-collected">Not collected</:option>
<:printed_value>No answer recorded</:printed_value>
<:reason>Collection is closed.</:reason>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
</Kit.Phoenix.Roles.Row.row>
</div>
<p class="specimen-case-line">A room whose name opens its details.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject dialog="row-room-dialog" rest={%{id: "row-room-opener"}}>Garden Room</:subject>
<:facts>Seats <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.count(reader(), 40)} /></:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Dialog.dialog id="row-room-dialog" return_focus="row-room-opener" aria-labelledby="row-room-dialog-title">
<:heading rest={%{id: "row-room-dialog-title"}}>Garden Room</:heading>
<:form_groups><form id="row-room-form">
<Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} id="row-room-name-group" control_rest={%{id: "row-room-name", name: "name", type: "text", value: "Garden Room"}}>
<:label rest={%{for: "row-room-name"}}>Room name</:label><:printed_value>Garden Room</:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</form></:form_groups>
<:primary_action rest={%{type: "submit", form: "row-room-form"}}>Save room</:primary_action>
<:secondary_action>Cancel</:secondary_action>
</Kit.Phoenix.Roles.Dialog.dialog>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="oak" /><span>Select Oakmere Primary School</span>
</:selection>
<:subject href="#role-row">Oakmere Primary School</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invoice</:facts>
<:facts><Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00"))} /></:facts>
<:facts><Kit.Phoenix.Roles.Rating.shown score={Kit.Phoenix.Amount.score(reader(), Decimal.new("4.5"), 1)} words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.score(reader(), Decimal.new("4.5"), 1)), Kit.Phoenix.Words.text(" from "), Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 38)), Kit.Phoenix.Words.text(" reviews")]} spoken={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.score(reader(), Decimal.new("4.5"), 1)), Kit.Phoenix.Words.text(" out of "), Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 5)), Kit.Phoenix.Words.text(", from "), Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 38)), Kit.Phoenix.Words.text(" reviews")]} /></:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Withdraw</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="north" /><span>Select Oakmere Primary School invoice</span>
</:selection>
<:subject href="#role-row">Oakmere WI</:subject>
<:facts>Main Hall hire</:facts>
<:expansion_summary>Invoice details</:expansion_summary>
<:expansion authored_text={%Kit.Phoenix.AuthoredText.Shown{value: %Kit.Phoenix.AuthoredText{content: [ {:heading, [{:text, "Before you arrive", []}]}, {:paragraph, [{:text, "Ask ", []}, {:mention, %Kit.Phoenix.AuthoredText.Mention{kind: :person, id: "aisha-khan", label: "Aisha Khan"}}, {:text, " to confirm ", []}, {:text, "the address", [:bold]}, {:text, " for ", []}, {:mention, %Kit.Phoenix.AuthoredText.Mention{kind: :subject, id: "b-1042", label: "B-1042 Garden room"}}, {:text, " before ", []}, {:date, ~D[2025-03-14]}, {:text, ".", []}, :hard_break, {:text, "Read the ", []}, {:text, "hire terms", [{:link, "https://example.com/hire-terms"}]}, {:text, " first, ", []}, {:text, "then", [:italic]}, {:text, " use ", []}, {:text, "4721", [:code]}, {:text, " at the gate.", []}]}, {:bullet_list, [[{:paragraph, [{:text, "Bring your own chairs.", []}]}], [{:paragraph, [{:text, "Leave the hall by ten.", []}]}]]}, {:ordered_list, [[{:paragraph, [{:text, "Ring the bell by the side gate.", []}]}], [{:paragraph, [{:text, "Wait for the caretaker.", []}]}]]}, {:task_list, [{true, [{:paragraph, [{:text, "Deposit paid", []}]}]}, {false, [{:paragraph, [{:text, "Key returned", []}]}]}]}, {:blockquote, [{:paragraph, [{:text, "The side door sticks in the cold.", []}]}]}, {:code_block, "Gate: 4721\nAlarm: 0990"}, {:paragraph, [{:text, "Floor plan: ", []}, {:file, %Kit.Phoenix.AuthoredText.File{id: "floor-plan", name: "garden-room-plan.pdf"}}]} ]}, reader: reader(), mention_link: fn :person, _id -> "#role-row"; :subject, _id -> nil end, file_link: fn _id -> "#role-row" end}} />
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject
supporting={[
Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("1 invoice awaiting correction: the March hire was billed at the weekday rate and the committee has asked for it to be reissued at the weekend rate for the Saturday sessions")]),
Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Due "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-30]))])
]}
><a href="#role-row">Oakmere WI</a></:subject>
<:facts supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Part payment taken by card on "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-12])), Kit.Phoenix.Words.text("; the balance stays outstanding until the reissued invoice is agreed, and the deposit is held against the Garden Room key that has not come back")])]}>Invoiced: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00"))} /> · Collected: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "24.00"))} /> · Outstanding: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "60.00"))} /> · payment expected after the hirer confirms the billing address, purchase order and named contact for Saturday’s Main Hall booking</:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject>Oakmere WI</:subject>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject>Your invoice is ready</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="alert">Address refused</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Sent to aisha@oakmereprimary.org · <Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.day(reader(), ~D[2025-02-03])} /></:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="willowbrook" /><span>Select Willowbrook Community Centre, Long Meadow Lane annexe</span>
</:selection>
<:subject href="#role-row">Willowbrook Community Centre, Long Meadow Lane annexe</:subject>
<:facts>Invited Mon · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Resend</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Withdraw</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Oakmere Primary School</:subject>
<:facts>Invited Tue · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Resend</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Copy invitation link</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Withdraw</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.ActionMenu.action_menu id="role-row-fold" label="More actions for this invitation" groups={[]} />
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">St Anne’s Scout Group</:subject>
<:facts>Invited Wed · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Withdraw</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
<:expansion_summary>Details</:expansion_summary>
<:expansion expanded>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Sent to</:name><:value>Priya Shah</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Email</:name><:value><Kit.Phoenix.Email.email address="priya@stannesscouts.org" /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
</:expansion>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="stannes-register" /><span>Select St Anne’s Scout Group</span>
</:selection>
<:subject href="#role-row" rest={%{id: "row-choices-stannes"}}>St Anne’s Scout Group</:subject>
<:facts>Wednesday · Main Hall</:facts>
<:choices control_rest={%{value: "present"}} checked printed_value="Chosen">Present</:choices>
<:choices control_rest={%{value: "apologies"}} printed_value="Not chosen">Apologies</:choices>
<:choices control_rest={%{value: "absent"}} printed_value="Not chosen">Absent</:choices>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the register</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="stannes-time" /><span>Select St Anne’s Scout Group</span>
</:selection>
<:subject href="#role-row" rest={%{id: "row-question-stannes"}}>St Anne’s Scout Group</:subject>
<:facts>Wednesday · Main Hall</:facts>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-question-time">
<:label>Time</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.TimeField.time_field binding={binding} reader={reader()} name="time" value={Kit.Phoenix.Roles.TimeField.Committed.clock(Kit.Phoenix.Time.clock(reader(), ~T[10:00:00]))} />
</:control>
<:printed_value><time datetime="10:00">10:00</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the register</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="brookfield-time" /><span>Select Brookfield Choir</span>
</:selection>
<:subject href="#role-row" rest={%{id: "row-question-brookfield"}}>Brookfield Choir</:subject>
<:facts>Thursday · Garden Room</:facts>
<:question>
<div>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-question-brookfield-time">
<:label>Time</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.TimeField.time_field binding={binding} reader={reader()} name="time" value={Kit.Phoenix.Roles.TimeField.Committed.clock(Kit.Phoenix.Time.clock(reader(), ~T[19:30:00]))} />
</:control>
<:printed_value><time datetime="19:30">19:30</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</div>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the register</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Sunday 26 October</:subject>
<:facts>Ballroom beginners · 1:30 am</:facts>
<:question>
<Kit.Phoenix.Roles.SelectionControl.group id="row-question-which-time">
<:legend>Which 1:30 am</:legend>
<:choice kind={:radio} control_rest={%{name: "which-time", value: "earlier"}} printed_value="Not chosen">The earlier one</:choice>
<:choice kind={:radio} control_rest={%{name: "which-time", value: "later"}} printed_value="Not chosen">The later one</:choice>
<:help>The clocks go back at 2 am, so 1:30 am happens twice.</:help>
<:error>Choose which 1:30 am the class starts.</:error>
</Kit.Phoenix.Roles.SelectionControl.group>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the class</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Oakmere WI</:subject>
<:facts>Tuesday · Main Hall</:facts>
<:question>
<Kit.Phoenix.Roles.SelectionControl.group id="row-question-post-invoice">
<:choice kind={:checkbox} control_rest={%{name: "post-invoice"}} printed_value="Not chosen">Post the invoice too</:choice>
<:help>It goes to the hall’s address.</:help>
</Kit.Phoenix.Roles.SelectionControl.group>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Garden room</:subject>
<:facts>Third in the room list</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Move</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="hartley" /><span>Select Hartley Scouts</span>
</:selection>
<:subject href="#role-row">Hartley Scouts</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invoice</:facts>
<:facts><Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "126.00"))} /></:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Resend</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
<:status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Invoice resent to treasurer@hartleyscouts.org.uk.</Kit.Phoenix.Roles.StatusLine.status_line></:status_lines>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">A Row of several separate facts that wrap as whole facts.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Garden Room hire</:subject>
<:facts>Hirer: Priya Shah</:facts>
<:facts>Day: Saturday</:facts>
<:facts>Seats: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.count(reader(), 40)} /></:facts>
<:facts>Deposit: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "50.00"))} /></:facts>
<:facts>Balance: <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "34.00"))} /></:facts>
<:facts>Key: with the caretaker</:facts>
<:facts>Cleaning: booked</:facts>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">A supporting line of long words that ends in a time.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row" supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Accepted the revised Garden Room terms and asked for the key arrangements, the deposit and the cleaning rota to be confirmed in writing by "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2026-10-16]))])]}>Oakmere Primary School</:subject>
<:facts supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("The deposit, the cleaning charge and the return of the key are held against the Saturday booking until "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2026-10-30]))])]}>Invoice</:facts>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">A run at the Desk width: one Row folds its actions into More, and one without More wraps them.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Invitations" style="inline-size: min(100%, calc(var(--kit-desk-width) + 2 * var(--kit-inset-tight)));">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">St Anne’s Scout Group</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invited Mon · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send reminder</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Copy invitation link</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Withdraw</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.ActionMenu.action_menu id="role-row-width-fold" label="More actions for this invitation" groups={[]} />
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Oakmere Primary School</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invited Tue · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send a payment reminder</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Copy the invitation link</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
<:status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Payment reminder sent to the school office.</Kit.Phoenix.Roles.StatusLine.status_line></:status_lines>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A run whose Rows each hold an inert action and its words.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Meetings">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Tuesday 22 April</:subject>
<:facts>Main Hall · <Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.clock(reader(), ~T[19:00:00])} /></:facts>
<:actions action="secondary-action" action_state={Kit.Phoenix.ActionState.inert("role-row-inert-move-mid-april", "This booking is closed. Reopen it to move a meeting.")}>Move this meeting</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Tuesday 29 April</:subject>
<:facts>Main Hall · <Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.clock(reader(), ~T[19:00:00])} /></:facts>
<:actions action="secondary-action" action_state={Kit.Phoenix.ActionState.inert("role-row-inert-move-late-april", "This booking is closed. Reopen it to move a meeting.")}>Move this meeting</:actions>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A Row at the Desk width whose actions wrap where no fold remains.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Invitation" style="inline-size: min(100%, calc(var(--kit-desk-width) + 2 * var(--kit-inset-tight)));">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Hartley and District Scouts, Tuesday Explorers</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invited Wed · not yet accepted</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send a reminder to the treasurer</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Copy the invitation link</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A run at the Desk width whose Stamps wrap at their words where nothing else fits.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Bookings" style="inline-size: min(100%, calc(var(--kit-desk-width) + 2 * var(--kit-inset-tight)));">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Riverside Community Choir</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="attention">Held until the deposit and the first month’s hire are paid in full</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Main Hall · Thursdays</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send the treasurer a payment reminder</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Release the hold</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Oakmere WI</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Garden Room · Saturdays</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send the treasurer a payment reminder</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Release the hold</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A question at the Desk width whose actions wrap where no fold remains.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Register" style="inline-size: min(100%, calc(var(--kit-desk-width) + 2 * var(--kit-inset-tight)));">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Hartley Scouts</:subject>
<:facts>Wednesday · Main Hall</:facts>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-question-register-time">
<:label>Time</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.TimeField.time_field binding={binding} reader={reader()} name="time" value={Kit.Phoenix.Roles.TimeField.Committed.clock(Kit.Phoenix.Time.clock(reader(), ~T[18:30:00]))} />
</:control>
<:printed_value><time datetime="18:30">18:30</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the register for Wednesday evening</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Send the register to the Explorers’ leader</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A question whose label wraps.</p>
<Kit.Phoenix.Roles.HeadedRegion.headed_region heading="Thursday bookings" style="inline-size: min(100%, var(--kit-focused-width));">
<:content>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Brookfield Choir</:subject>
<:facts>Thursday · Garden Room</:facts>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-question-setup-time">
<:label>Time the choir needs the room from, with half an hour to set out the chairs</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.TimeField.time_field binding={binding} reader={reader()} name="time" value={Kit.Phoenix.Roles.TimeField.Committed.clock(Kit.Phoenix.Time.clock(reader(), ~T[19:00:00]))} />
</:control>
<:printed_value><time datetime="19:00">19:00</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open the register</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
</:content>
</Kit.Phoenix.Roles.HeadedRegion.headed_region>
<p class="specimen-case-line">A question whose act sends an email, its preview before the actions.</p>
<Kit.Phoenix.Roles.Row.row scope_line="The invitation lasts 7 days.">
<:subject href="#role-row">Aisha Khan</:subject>
<:facts>Teacher · Tuesday beginners</:facts>
<:question>
<Kit.Phoenix.Roles.FormGroup.form_group id="row-invite-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="aisha@oakmereprimary.org" control_rest={%{id: "row-invite-email", name: "email"}}><:printed_value>aisha@oakmereprimary.org</:printed_value>
<:label rest={%{for: "row-invite-email"}}>Email</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
</:question>
<:outbound_previews>
<Kit.Phoenix.Roles.OutboundPreview.headed_region heading="The invitation, as Aisha will get it">
<Kit.Phoenix.Roles.OutboundPreview.outbound_preview>
<:facts>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Channel</:name><:value>Email to <Kit.Phoenix.Email.email address="aisha@oakmereprimary.org" /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Subject</:name><:value>Teach at Oakmere Village Hall</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
</:facts>
<:email title="Teach at Oakmere Village Hall" document="<!doctype html><html lang=en><head><style>body{margin:0;padding:24px;font-family:Georgia,serif;color:#222222;background:#ffffff}p{margin:0 0 12px;font-size:15px;line-height:1.5}</style></head><body><p>Hello Aisha,</p><p>You are invited to teach Tuesday beginners at Oakmere Village Hall.</p><p>Accept within 7 days.</p></body></html>" />
</Kit.Phoenix.Roles.OutboundPreview.outbound_preview>
<:time>Goes when you send it.</:time>
</Kit.Phoenix.Roles.OutboundPreview.headed_region>
</:outbound_previews>
<:actions>
<Kit.Phoenix.Roles.PrimaryAction.primary_action>Send invitation</Kit.Phoenix.Roles.PrimaryAction.primary_action>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Don’t send</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row id="row-dialog-question" scope_line="Your answer sets the location for Monday’s choir rehearsal, Tuesday’s committee meeting and Thursday’s reading group.">
<:subject>Which location is this?</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">To answer</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:actions><Kit.Phoenix.Roles.SecondaryAction.secondary_action id="row-location-opener" phx-click={Kit.Phoenix.Modal.open("row-location-dialog")}>Add a location</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:actions>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Dialog.dialog id="row-location-dialog" return_focus="row-location-opener" aria-labelledby="row-location-dialog-title">
<:heading rest={%{id: "row-location-dialog-title"}}>Add a location</:heading>
<:form_groups><form id="row-location-form">
<Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} id="row-location-name-group" control_rest={%{id: "row-location-name", name: "name", type: "text", value: "Garden Room"}}><:label rest={%{for: "row-location-name"}}>Location name</:label><:printed_value>Garden Room</:printed_value></Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} id="row-location-address-group" control_rest={%{id: "row-location-address", name: "address", type: "text", value: "Oakmere Village Hall, High Street"}}><:label rest={%{for: "row-location-address"}}>Address</:label><:printed_value>Oakmere Village Hall, High Street</:printed_value></Kit.Phoenix.Roles.FormGroup.form_group>
</form></:form_groups>
<:primary_action rest={Kit.Phoenix.Modal.dismissing(%{"type" => "button"})}>Use this location</:primary_action>
<:secondary_action>Cancel</:secondary_action>
</Kit.Phoenix.Roles.Dialog.dialog>
<p class="specimen-case-line">An email as the subject.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject><Kit.Phoenix.Email.email address="accounts.receivable.northeast-region.billing@hartfordcommunitydancestudio.com" /></:subject>
<:facts>Sends the invoices</:facts>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">A web address as the subject.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject><Kit.Phoenix.Identifier.identifier value="venues.example.com/oakmere-primary-school-parents-association" /></:subject>
<:facts>Booking page</:facts>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">A person as the subject, with their availability.</p>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row" avatar={Kit.Phoenix.Roles.Avatar.person("Aisha Khan", "AK", "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48cmVjdCB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIGZpbGw9IiM4ZmE1YjYiLz48Y2lyY2xlIGN4PSI0OCIgY3k9IjM4IiByPSIxOCIgZmlsbD0iI2U4YzlhOCIvPjxwYXRoIGQ9Ik00OCA2MGMtMTcgMC0yOSAxMS0zMSAyNnYxMGg2MlY4NmMtMi0xNS0xNC0yNi0zMS0yNnoiIGZpbGw9IiMzZjVkNTIiLz48cGF0aCBkPSJNMzAgMzRjMC0xMiA4LTIwIDE4LTIwczE4IDggMTggMjBjMC02LTYtOC0xOC04cy0xOCAyLTE4IDh6IiBmaWxsPSIjNGEzYTJmIi8+PC9zdmc+", "Away")}>Aisha Khan</:subject>
<:facts>Books the choir rehearsals</:facts>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">An unread notification.</p>
<Kit.Phoenix.Roles.Row.row unread>
<:selection><Kit.Phoenix.Roles.SelectionControl.selection_control name="notification" value="paid" /><span>Select Oakmere Primary School paid its invoice</span></:selection>
<:subject href="#role-row">Oakmere Primary School paid its invoice</:subject>
<:facts>Paid by Aisha Khan</:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row id="role-row-empty-region">
<:subject href="#role-row">Oakmere Primary School</:subject>
<:facts><span :if={false}>Invoice</span></:facts>
</Kit.Phoenix.Roles.Row.row>
<details>
<summary>Show a row arriving</summary>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Main Hall</:subject>
<:facts>Tuesday</:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row>
<:subject href="#role-row">Committee room</:subject>
<:facts>Wednesday</:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.Row.row {Kit.Phoenix.Motion.arrival(true)}>
<:subject href="#role-row">Kitchen</:subject>
<:facts>Thursday</:facts>
</Kit.Phoenix.Roles.Row.row>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Add a row</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</details>
Row, selected
Invoice · £84.00
Source
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control checked name="record" value="oak" /><span>Select Oakmere Primary School</span>
</:selection>
<:subject href="#role-row-selected">Oakmere Primary School</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invoice · <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00"))} /></:facts>
</Kit.Phoenix.Roles.Row.row>
Row, expanded
Invoice · £84.00
Invoice details
- Bookings
- 2
- Each
- £42.00
Source
<Kit.Phoenix.Roles.Row.row>
<:selection>
<Kit.Phoenix.Roles.SelectionControl.selection_control name="record" value="oak" /><span>Select Oakmere Primary School</span>
</:selection>
<:subject href="#role-row-expanded">Oakmere Primary School</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Awaiting payment</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts>Invoice · <Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00"))} /></:facts>
<:expansion_summary>Invoice details</:expansion_summary>
<:expansion expanded>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Bookings</:name><:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 2))]} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<:name>Each</:name><:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "42.00")))]} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
</:expansion>
</Kit.Phoenix.Roles.Row.row>
Row, failed
On a Row.
· Main Hall
This meeting was not reinstated: the connection dropped before it saved.
On a records row.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal This meeting was not reinstated: the connection dropped before it saved. |
Main Hall |
On a Row with Try again unavailable.
· Main Hall
This meeting was not reinstated: the connection dropped before it saved.
Try again once you are back online.
On a records row with Try again unavailable.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal This meeting was not reinstated: the connection dropped before it saved. Try again once you are back online. |
Main Hall |
Source
<p class="specimen-case-line">On a Row.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{})}>
<:subject href="#role-row-failed">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{})} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-failed">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>
<p class="specimen-case-line">On a Row with Try again unavailable.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{}, Kit.Phoenix.ActionState.inert("role-row-failed-try-again", "Try again once you are back online."))}>
<:subject href="#role-row-failed">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row with Try again unavailable.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{}, Kit.Phoenix.ActionState.inert("role-row-failed-records-try-again", "Try again once you are back online."))} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-failed">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>
Row, conflict
On a Row.
· Main Hall
Maya Patel cancelled this meeting while you were moving it to the Garden Room.
On a records row.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal Maya Patel cancelled this meeting while you were moving it to the Garden Room. |
Main Hall |
On a Row with the action unavailable.
· Main Hall
Maya Patel cancelled this meeting while you were moving it to the Garden Room.
Reinstate this meeting before moving it.
On a records row with the action unavailable.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal Maya Patel cancelled this meeting while you were moving it to the Garden Room. Reinstate this meeting before moving it. |
Main Hall |
Source
<p class="specimen-case-line">On a Row.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.conflict("Maya Patel cancelled this meeting while you were moving it to the Garden Room.", "Move it to the Garden Room", %{})}>
<:subject href="#role-row-conflict">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Reinstate this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.conflict("Maya Patel cancelled this meeting while you were moving it to the Garden Room.", "Move it to the Garden Room", %{})} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Reinstate this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-conflict">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>
<p class="specimen-case-line">On a Row with the action unavailable.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.conflict("Maya Patel cancelled this meeting while you were moving it to the Garden Room.", "Move it to the Garden Room", %{}, Kit.Phoenix.ActionState.inert("role-row-conflict-action", "Reinstate this meeting before moving it."))}>
<:subject href="#role-row-conflict">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Reinstate this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row with the action unavailable.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.conflict("Maya Patel cancelled this meeting while you were moving it to the Garden Room.", "Move it to the Garden Room", %{}, Kit.Phoenix.ActionState.inert("role-row-conflict-records-action", "Reinstate this meeting before moving it."))} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Reinstate this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-conflict">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>
Row, processing
On a Row.
· Main Hall
Reinstating this meeting…
On a records row.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal Reinstating this meeting… |
Main Hall |
Source
<p class="specimen-case-line">On a Row.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.processing("Reinstating this meeting…")}>
<:subject href="#role-row-processing">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.processing("Reinstating this meeting…")} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-processing">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>
Row, unsaved
On a Row.
· Main Hall
This meeting will be reinstated when you are back online.
On a records row.
| Meeting | When | Room | |
|---|---|---|---|
| Choir rehearsal This meeting will be reinstated when you are back online. |
Main Hall |
Source
<p class="specimen-case-line">On a Row.</p>
<Kit.Phoenix.Roles.Row.row standing={Kit.Phoenix.Roles.Row.Standing.unsaved("This meeting will be reinstated when you are back online.")}>
<:subject href="#role-row-unsaved">Choir rehearsal</:subject>
<:stamp><Kit.Phoenix.Roles.Stamp.stamp state="settled">Cancelled</Kit.Phoenix.Roles.Stamp.stamp></:stamp>
<:facts><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z])} /> · Main Hall</:facts>
<:actions>
<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>
</:actions>
</Kit.Phoenix.Roles.Row.row>
<p class="specimen-case-line">On a records row.</p>
<div class="specimen-table-contained"><Kit.Phoenix.Table.rows_table>
<:subject_heading label="Meeting" />
<:column_headings label="When" kind="time">When</:column_headings>
<:column_headings label="Room">Room</:column_headings>
<:row standing={Kit.Phoenix.Roles.Row.Standing.unsaved("This meeting will be reinstated when you are back online.")} actions={[~H[<Kit.Phoenix.Roles.SecondaryAction.secondary_action>Open this meeting</Kit.Phoenix.Roles.SecondaryAction.secondary_action>]]} facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.time(Kit.Phoenix.Time.moment_with_weekday(reader(), ~U[2025-04-22 18:00:00Z]))])}, %Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.words([Kit.Phoenix.Words.text("Main Hall")])}]}><a href="#role-row-unsaved">Choir rehearsal</a></:row>
</Kit.Phoenix.Table.rows_table></div>