kit

Labelled fact

Built revision v17.10.0

Phoenix
Topics

Human support

Bring a missing role, layout, or state, or a rendering against the standard, to the session working on kit. Name the package and the entry.

On Shell, Home, List, Record, Form, Stepped flow, Settings, Reports, Unavailable, Issued document

Labelled fact

Amount, Stamp, Tag and Image values keep their roles.

Amount due
£84.00
Standing
Draft
Tags
Regular
Condition photo
Chair with a split seat, photographed after a hall booking.
Chair with a split seat, photographed after a hall booking.
Split chair seat
Standing
Draft
Booking
Cancelled
Amount due
£84.00
1 booking
Issued
By Maya Patel at
Bookings
3
Main Hall,
Meeting Room,
Main Hall, , the spring term choir rehearsal
Hirers' rating
4.5 from 38 reviews
Email
penelope.quintanilla.wexford@meetingrooms.bookings.oakmereprimaryschoolhall.example
Booking reference
BH2025021413001600MEETINGROOM00580PD198LOCKBOX0412Q7
Correction
Reissued with the corrected billing address as OH-INV-2025-0003-R1
Purchase order
Not known
Billing contact
Aisha Khan
Billing address not confirmed
Purpose of hire
Weekly choir rehearsal for the spring term, with the piano moved to the stage end, forty chairs set in rows facing it and the serving hatch open for tea in the interval
Agreed with the caretaker on , on the condition that the hall is cleared by and the chairs are stacked in the store room
Access note
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.

  1. Ring the bell by the side gate.

  2. Wait for the caretaker.

  • Done

    Deposit paid

  • Not done

    Key returned

The side door sticks in the cold.

Gate: 4721
Alarm: 0990

Floor plan: garden-room-plan.pdf

Send the signed form to aisha.khan@oakmereprimaryschool.example, and the hall confirms the booking.

Questions about the invoice go to penelope.quintanilla.wexford@meetingrooms.bookings.oakmereprimaryschoolhall.example, who answers within two days.

Billing email edited where it stands.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here
Hirer
Oakmere Primary School

Billing email waiting to be edited.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here
Confirm the billing contact before editing.
Hirer
Oakmere Primary School

Billing email being edited.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here
accounts@oakmereprimary.org Use the address that receives the hirer’s invoices.

Hirer
Oakmere Primary School

Billing email refused on save.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here
accounts@ Use the address that receives the hirer’s invoices. Enter a complete billing email, such as aisha@oakmereprimary.org.

Hirer
Oakmere Primary School

Billing email reopened holding a kept entry.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here
bursar@oakmereprimary.org Use the address that receives the hirer’s invoices.

Not saved

Hirer
Oakmere Primary School

Class ages being edited, an age range chosen.

Ages
5 to 11, and all older dancers
Ages
5
11

A value in words carries its Amount within the sentence.

Deposit
£50.00, returned once the hall is cleared

A value written across lines stands under its label, beside a sentence carrying an Amount.

Hire fee
£120.00
Cleaning
Charged at £25.00 when the kitchen is left unwashed after the hire

A Labelled fact in a records table cell keeps its sentence.

Deposits
HireDeposit
Oakmere WI
Kept
£20.00 for cleaning the kitchen

A value given an address stands inside a link named by its label; the current one is marked.

Invoiced
£2,096.00
Collected
£1,640.00
Deposit
Unpaid

A Labelled fact in its div form holding a note.

Closing up

Leave by the side gate.

  • Done

    Heating off

  • Not done

    Gate locked

Source
<p class="specimen-case-line">Amount, Stamp, Tag and Image values keep their roles.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Amount due</:name>
    <:value><Kit.Phoenix.Roles.Amount.amount value={Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00"))} /></:value>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Standing</:name>
    <:value><Kit.Phoenix.Roles.Stamp.stamp state="neutral">Draft</Kit.Phoenix.Roles.Stamp.stamp></:value>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Tags</:name>
    <:value><Kit.Phoenix.Roles.Tag.run id="fact-tags" reader={reader()} tags={[%Kit.Phoenix.Roles.Tag{name: "Regular", colour: nil}]} /></:value>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Condition photo</:name>
    <:value><Kit.Phoenix.Roles.Image.image id="fact-photo" overlay="fact-photo-overlay" src="../../chair-damage.svg" alt="Chair with a split seat, photographed after a hall booking." width={800} height={500} failure_words="The photo cannot be shown." /></:value>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.ImageOverlay.image_overlay id="fact-photo-overlay" failure_words="The photo cannot be shown." tabindex="-1" aria-labelledby="fact-photo-overlay-caption" open_file_href="../../chair-damage.svg" close_href="#fact-photo" actions_label="Condition photo" width={800} height={500} image_rest={%{src: "../../chair-damage.svg", alt: "Chair with a split seat, photographed after a hall booking."}}>
  <:caption rest={%{id: "fact-photo-overlay-caption"}}>Split chair seat</:caption>
</Kit.Phoenix.Roles.ImageOverlay.image_overlay>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Standing</:name>
  <:value stamp="neutral">Draft</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Booking</:name>
  <:value stamp="settled-ended">Cancelled</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 1)), Kit.Phoenix.Words.text(" booking")])]}>
  <:name>Amount due</:name>
  <:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "84.00")))]} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("By Maya Patel at "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.time_of_day(reader(), ~U[2025-04-03 08:12:00Z]))])]}>
  <:name>Issued</:name>
  <:value><Kit.Phoenix.Roles.Time.time value={Kit.Phoenix.Time.day(reader(), ~D[2025-04-03])} /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[
  Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Main Hall, "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-12]))]),
  Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Meeting Room, "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-15]))]),
  Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Main Hall, "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-19])), Kit.Phoenix.Words.text(", the spring term choir rehearsal")])
]}>
  <:name>Bookings</:name>
  <:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 3))]} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirers' rating</:name>
  <:value><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")]} /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Email</:name>
  <:value><Kit.Phoenix.Email.email address="penelope.quintanilla.wexford@meetingrooms.bookings.oakmereprimaryschoolhall.example" /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Booking reference</:name>
  <:value><code>BH2025021413001600MEETINGROOM00580PD198LOCKBOX0412Q7</code></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Correction</:name>
  <:value>Reissued with the corrected billing address as <Kit.Phoenix.Identifier.identifier value="OH-INV-2025-0003-R1" /></:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Purchase order</:name>
  <:value>Not known</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Billing address not confirmed")])]}>
  <:name>Billing contact</:name>
  <:value>Aisha Khan</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Agreed with the caretaker on "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-03-28])), Kit.Phoenix.Words.text(", on the condition that the hall is cleared by "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.clock(reader(), ~T[21:30:00])), Kit.Phoenix.Words.text(" and the chairs are stacked in the store room")])]}>
  <:name>Purpose of hire</:name>
  <:value>Weekly choir rehearsal for the spring term, with the piano moved to the stage end, forty chairs set in rows facing it and the serving hatch open for tea in the interval</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Access note</:name>
  <:authored_text 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-labelled-fact"; :subject, _id -> nil end, file_link: fn _id -> "#role-labelled-fact" end}} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p>Send the signed form to <Kit.Phoenix.Email.email address="aisha.khan@oakmereprimaryschool.example" />, and the hall confirms the booking.</p>
<p>Questions about the invoice go to <a href="mailto:penelope.quintanilla.wexford@meetingrooms.bookings.oakmereprimaryschoolhall.example"><Kit.Phoenix.Email.email address="penelope.quintanilla.wexford@meetingrooms.bookings.oakmereprimaryschoolhall.example" /></a>, who answers within two days.</p>
<p>Billing email edited where it stands.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit id="billing-email-edit" label="Edit billing email" editing={false} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="billing-email-edit-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="accounts@oakmereprimary.org" control_rest={%{"name" => "email"}}>
      <:printed_value>accounts@oakmereprimary.org</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirer</:name>
  <:value>Oakmere Primary School</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">Billing email waiting to be edited.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit state={Kit.Phoenix.ActionState.inert("billing-email-inert-action", "Confirm the billing contact before editing.")} id="billing-email-inert" label="Edit billing email" editing={false} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="billing-email-inert-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="accounts@oakmereprimary.org" control_rest={%{"name" => "email"}}>
      <:printed_value>accounts@oakmereprimary.org</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirer</:name>
  <:value>Oakmere Primary School</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p>Billing email being edited.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit id="billing-email-editing" label="Edit billing email" editing={true} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="billing-email-editing-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="accounts@oakmereprimary.org" control_rest={%{"name" => "email"}}>
      <:printed_value>accounts@oakmereprimary.org</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirer</:name>
  <:value>Oakmere Primary School</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p>Billing email refused on save.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit id="billing-email-refused" label="Edit billing email" editing={true} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="billing-email-refused-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="accounts@" control_rest={%{"name" => "email"}}>
      <:printed_value>accounts@</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
      <:error>Enter a complete billing email, such as aisha@oakmereprimary.org.</:error>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirer</:name>
  <:value>Oakmere Primary School</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p>Billing email reopened holding a kept entry.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit id="billing-email-kept" label="Edit billing email" editing={true} keep={%Kit.Phoenix.Keep{key: "aisha-khan/hirer/oakmere-primary/billing-email", version: "12"}} unsaved={Kit.Phoenix.State.unsaved(:attention, "Not saved")} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="billing-email-kept-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="bursar@oakmereprimary.org" control_rest={%{"name" => "email"}}>
      <:printed_value>bursar@oakmereprimary.org</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Hirer</:name>
  <:value>Oakmere Primary School</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p>Class ages being edited, an age range chosen.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Ages</:name>
  <:value>5 to 11, and all older dancers</:value>
  <:edit id="class-ages-editing" label="Edit ages" editing={true} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.SelectionControl.radio_group id="class-ages-editing-group">
      <:legend>Ages</:legend>
      <:choice kind={:radio} control_rest={%{name: "class-ages", value: "all"}} printed_value="Not chosen">All ages</:choice>
      <:choice kind={:radio} control_rest={%{name: "class-ages", value: "range"}} checked printed_value="Chosen">An age range</:choice>
      <:choice kind={:radio} control_rest={%{name: "class-ages", value: "audition"}} printed_value="Not chosen">By audition</:choice>
      <:fields choice="range">
        <Kit.Phoenix.Roles.FormGroup.form_group id="class-ages-editing-youngest-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "class-ages-editing-youngest", name: "youngest-age", inputmode: "numeric", value: "5"}}>
          <:printed_value>5</:printed_value>
          <:label rest={%{for: "class-ages-editing-youngest"}}>Youngest age</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group id="class-ages-editing-oldest-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "class-ages-editing-oldest", name: "oldest-age", inputmode: "numeric", value: "11"}}>
          <:printed_value>11</:printed_value>
          <:label rest={%{for: "class-ages-editing-oldest"}}>Oldest age</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.SelectionControl.group id="class-ages-editing-older">
          <:choice kind={:checkbox} control_rest={%{name: "include-older", value: "true"}} checked printed_value="Included">Include all older dancers</:choice>
        </Kit.Phoenix.Roles.SelectionControl.group>
      </:fields>
    </Kit.Phoenix.Roles.SelectionControl.radio_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">A value in words carries its Amount within the sentence.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <:name>Deposit</:name>
  <:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "50.00"))), Kit.Phoenix.Words.text(", returned once the hall is cleared")]} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">A value written across lines stands under its label, beside a sentence carrying an Amount.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Hire fee</:name>
    <:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "120.00")))]} />
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Cleaning</:name>
    <:value words={[
      Kit.Phoenix.Words.text("Charged at "),
      Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "25.00"))),
      Kit.Phoenix.Words.text(" when the kitchen is left unwashed after the hire")
    ]} />
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">A Labelled fact in a records table cell keeps its sentence.</p>
<Kit.Phoenix.Layouts.Record.rows>
  <Kit.Phoenix.Table.rows_table>
    <:caption>Deposits</:caption>
    <:subject_heading label="Hire" />
    <:column_headings label="Deposit" />
    <:row facts={[%Kit.Phoenix.Table.FactCell{content: Kit.Phoenix.Table.Fact.content(~H"""
    <Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Kept</:name><:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "20.00"))), Kit.Phoenix.Words.text(" for cleaning the kitchen")]} /></Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    """)}]}><a href="../../record/">Oakmere WI</a></:row>
  </Kit.Phoenix.Table.rows_table>
</Kit.Phoenix.Layouts.Record.rows>
<p class="specimen-case-line">A value given an address stands inside a link named by its label; the current one is marked.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Invoiced</:name>
    <:value id="fact-invoiced" href="?measure=invoiced" current words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "2096.00")))]} />
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Collected</:name>
    <:value id="fact-collected" href="?measure=collected" words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, "1640.00")))]} />
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
    <:name>Deposit</:name>
    <:value id="fact-deposit" href="?view=deposit" stamp="attention">Unpaid</:value>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">A Labelled fact in its div form holding a note.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact element="div">
  <:name>Closing up</:name>
  <:authored_text text={%Kit.Phoenix.AuthoredText.Shown{value: %Kit.Phoenix.AuthoredText{content: [{:paragraph, [{:text, "Leave by the side gate.", []}]}, {:task_list, [{true, [{:paragraph, [{:text, "Heating off", []}]}]}, {false, [{:paragraph, [{:text, "Gate locked", []}]}]}]}]}, reader: reader(), mention_link: fn _kind, _id -> nil end, file_link: fn _id -> nil end}} />
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>

Labelled fact, failed

Standing
Cancelled
By Maya Patel on

This meeting was not reinstated: the connection dropped before it saved.

With Try again unavailable.

Standing
Cancelled
By Maya Patel on

This meeting was not reinstated: the connection dropped before it saved.

Try again once you are back online.

With the edit open.

Billing email
accounts@oakmereprimary.org
Invoices for every hire go here

Billing email was not changed to finance@oakmereprimary.org: the connection dropped before it saved.

finance@oakmereprimary.org Use the address that receives the hirer’s invoices.

Source
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("By Maya Patel on "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-18]))])]} standing={Kit.Phoenix.Roles.LabelledFact.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{})}>
  <:name>Standing</:name>
  <:value stamp="settled">Cancelled</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">With Try again unavailable.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("By Maya Patel on "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-18]))])]} standing={Kit.Phoenix.Roles.LabelledFact.Standing.failed("This meeting was not reinstated: the connection dropped before it saved.", %{}, Kit.Phoenix.ActionState.inert("role-labelled-fact-failed-try-again", "Try again once you are back online."))}>
  <:name>Standing</:name>
  <:value stamp="settled">Cancelled</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">With the edit open.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Invoices for every hire go here")])]} standing={Kit.Phoenix.Roles.LabelledFact.Standing.failed("Billing email was not changed to finance@oakmereprimary.org: the connection dropped before it saved.", %{})}>
  <:name>Billing email</:name>
  <:value><Kit.Phoenix.Email.email address="accounts@oakmereprimary.org" /></:value>
  <:edit id="role-labelled-fact-failed-editing" label="Edit billing email" editing={true} on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
    <Kit.Phoenix.Roles.FormGroup.form_group id="role-labelled-fact-failed-editing-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_value="finance@oakmereprimary.org" control_rest={%{"name" => "email"}}>
      <:printed_value>finance@oakmereprimary.org</:printed_value>
      <:label>Billing email</:label>
      <:help>Use the address that receives the hirer’s invoices.</:help>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:edit>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>

Labelled fact, conflict

Room
Garden Room

Maya Patel moved this meeting to the Garden Room while you were moving it to the Main Hall.

With the action unavailable.

Room
Garden Room

Maya Patel moved this meeting to the Garden Room while you were moving it to the Main Hall.

The Main Hall is taken at that time.

Source
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact standing={Kit.Phoenix.Roles.LabelledFact.Standing.conflict("Maya Patel moved this meeting to the Garden Room while you were moving it to the Main Hall.", "Move it to the Main Hall", %{})}>
  <:name>Room</:name>
  <:value>Garden Room</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<p class="specimen-case-line">With the action unavailable.</p>
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact standing={Kit.Phoenix.Roles.LabelledFact.Standing.conflict("Maya Patel moved this meeting to the Garden Room while you were moving it to the Main Hall.", "Move it to the Main Hall", %{}, Kit.Phoenix.ActionState.inert("role-labelled-fact-conflict-action", "The Main Hall is taken at that time."))}>
  <:name>Room</:name>
  <:value>Garden Room</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>

Labelled fact, processing

Standing
Scheduled

Reinstating this meeting…

Source
<Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.LabelledFact.labelled_fact standing={Kit.Phoenix.Roles.LabelledFact.Standing.processing("Reinstating this meeting…")}>
  <:name>Standing</:name>
  <:value stamp="settled">Scheduled</:value>
</Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>