On Shell, Home, List, Record, Form, Stepped flow, Settings, Find, Reports, Calendar
Form group
Room selection while bookings cannot be changed.
- bookings-2025.csv Uploaded
- hirers.xlsx Refused Excel files cannot be added.
Camera not available. Type the reference.
A field that may be left empty, empty and filled, beside a required field.
A search holding text, with Clear.
A search for booking references, with Clear and Scan.
A field that takes a paste of several lines.
The form owns the submit action.
A password that cannot be changed, with Show disabled.
A booking reference that cannot be changed, with Scan disabled.
A file that cannot be changed, with its selector disabled.
Files that cannot be changed, with their selector and Remove disabled.
- bookings-2025.csv Uploaded
A search that cannot be changed, with Clear disabled.
A note that can mention people and jobs.
Ask @Daniel Okafor about the boiler.
- Dana Reyesdana@
oakmerebuilders .co.uk - Adam Priceadam@
oakmerebuilders .co.uk - Daniel Okafordaniel@
okaforplumbing .co.ukNo access - Davies kitchen refitJOB-2214
Daniel Okafor will not be told.
A note that cannot be changed.
Ask @Dana Reyes for the gate code.
A description that takes headings, lists, checklists, quotes, code, mentions, dates and files.
Kitchen refit
Start on once @Dana Reyes has the keys. Keep the boiler off, ventilate the room and read the survey. The lockbox code is 4471.
Floor plan: kitchen-plan.pdf
Strip the units
Move the sink
Isolate the water
Cap the pipes
- Done
Order the worktop
- Not done
Book the electrician
Leave the side gate unlocked.
Gate code: 4471Source
<Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} id="phoenix-form-text" control_rest={%{name: "text", value: "Oakmere Village Hall"}}><:printed_value>Oakmere Village Hall</:printed_value>
<:label>Text</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} id="phoenix-form-number-group" control_rest={%{"id" => "phoenix-form-number", name: "number", value: "12", inputmode: "numeric"}}><:printed_value>12</:printed_value>
<:label>Number</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_rest={%{"id" => "phoenix-form-email", id: "phoenix-form-email-atom", name: "email", value: "aisha@oakmereprimary.org"}}><:printed_value>aisha@oakmereprimary.org</:printed_value>
<:label>Email</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-telephone-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.telephone()} control_rest={%{id: "phoenix-form-telephone", name: "telephone", value: "01632 960 123"}}><:printed_value>01632 960 123</:printed_value>
<:label>Telephone</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-date">
<:label>Date</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.DateField.date_field binding={binding} reader={reader()} name="date" value={Kit.Phoenix.Roles.DateField.Committed.day(Kit.Phoenix.Time.day(reader(), ~D[2025-02-15]))} today={Kit.Phoenix.Time.day(reader(), ~D[2025-02-10])} direction={:either} />
</:control>
<:printed_value><time datetime="2025-02-15">Saturday, 15 February 2025</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-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>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-select-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.select()} control_value="garden" control_rest={%{id: "phoenix-form-select", name: "select"}}><:printed_value>Garden room</:printed_value>
<:label>Select</:label>
<:option value="all">All rooms</:option>
<:option value="garden">Garden room</:option>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line">Room selection while bookings cannot be changed.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-select-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.select()} control_value="garden" control_rest={%{id: "phoenix-form-select-disabled", name: "select-disabled", disabled: true}}><:printed_value>Garden room</:printed_value>
<:label>Select</:label>
<:option value="all">All rooms</:option>
<:option value="garden">Garden room</:option>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-file-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-file", name: "file", accept: ".csv,.tsv"}}>
<:label>File</:label>
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files", name: "files", multiple: true, accept: ".csv,.tsv"}}>
<:label>Files</:label>
<:file name="bookings-2025.csv" name_id="phoenix-form-files-bookings" state="uploaded" state_words="Uploaded" />
<:file name="hirers.xlsx" name_id="phoenix-form-files-hirers" state="refused" state_words="Refused" reason="Excel files cannot be added." />
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-password-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-password", name: "password", value: "oakmere-hall-2025"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("current-password")}>
<:label>Password</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-new-password-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-new-password", name: "new-password", value: "garden-room-keys"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("new-password")}>
<:label>New password</:label>
<:help>At least twelve characters.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-reference-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.scan(:medium)}
stream="camera"
control_rest={%{id: "phoenix-form-reference", name: "reference", value: ""}}
><:printed_value>No reference given</:printed_value>
<:label>Booking reference</:label>
<:help>On the hirer’s confirmation, above the date.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-reference-refused-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.scan(:medium)}
stream="unavailable"
control_rest={%{id: "phoenix-form-reference-refused", name: "reference-refused", value: ""}}
><:printed_value>No reference given</:printed_value>
<:label>Booking reference</:label>
<:help>On the hirer’s confirmation, above the date.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-limited-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.textarea()}
count_key="characters"
control_rest={%{id: "phoenix-form-limited", name: "limited", maxlength: "160", "aria-describedby": "phoenix-form-limited-count"}}
control_value="Side gate open from half past five."
><:printed_value>Side gate open from half past five.</:printed_value>
<:label>Note for the caretaker</:label>
<:count_line rest={%{id: "phoenix-form-limited-count"}}>35 of 160 characters</:count_line>
<:help>The caretaker reads this note when the booking starts.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-parts-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.textarea()}
count_key="message-parts"
control_rest={%{id: "phoenix-form-parts", name: "parts", "aria-describedby": "phoenix-form-parts-count"}}
control_value="Your booking on 14 February is confirmed. The side gate is open from half past five and the caretaker will meet you at the hall door."
><:printed_value>Your booking on 14 February is confirmed. The side gate is open from half past five and the caretaker will meet you at the hall door.</:printed_value>
<:label>Text message to the hirer</:label>
<:count_line rest={%{id: "phoenix-form-parts-count"}}>Sends as 1 message</:count_line>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-textarea-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.textarea()} control_rest={%{id: "phoenix-form-textarea", name: "textarea"}} control_value="Add a note for the caretaker."><:printed_value>Add a note for the caretaker.</:printed_value>
<:label>Text area</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<fieldset>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-range-first">
<:label>First</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.DateField.date_field binding={binding} reader={reader()} name="range-first" value={Kit.Phoenix.Roles.DateField.Committed.day(Kit.Phoenix.Time.day(reader(), ~D[2025-02-10]))} today={Kit.Phoenix.Time.day(reader(), ~D[2025-02-10])} direction={:either} />
</:control>
<:printed_value><time datetime="2025-02-10">Monday, 10 February 2025</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-range-last">
<:label>Last</:label>
<:control :let={binding}>
<Kit.Phoenix.Roles.DateField.date_field binding={binding} reader={reader()} name="range-last" value={Kit.Phoenix.Roles.DateField.Committed.day(Kit.Phoenix.Time.day(reader(), ~D[2025-02-16]))} today={Kit.Phoenix.Time.day(reader(), ~D[2025-02-10])} direction={:either} />
</:control>
<:printed_value><time datetime="2025-02-16">Sunday, 16 February 2025</time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
</fieldset>
<fieldset>
<div>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-chairs-out-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "phoenix-form-chairs-out", name: "chairs-out", inputmode: "numeric"}} control_value="40"><:printed_value>40</:printed_value>
<:label>Chairs out</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-deposit-held-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "phoenix-form-deposit-held", name: "deposit-held", inputmode: "decimal"}} control_value="50"><:printed_value>50</:printed_value>
<:label>Deposit held</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
</div>
</fieldset>
<p class="specimen-case-line" id="role-form-group-marks">A field that may be left empty, empty and filled, beside a required field.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-reference-empty" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} optional control_rest={%{name: "purchase_order"}}>
<:label>Purchase order</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-reference-filled" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} optional control_value="PO-4471" control_rest={%{name: "purchase_order_filled"}}>
<:label>Purchase order</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-hirer-required" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} required control_rest={%{name: "hirer_name"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.other("hirer-name")}>
<:label>Hirer name</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-search">A search holding text, with Clear.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-search" kind={Kit.Phoenix.Roles.FormGroup.Kind.search()} control_value="Oakmere" control_rest={%{name: "q", placeholder: "Find bookings by hirer name"}}>
<:label>Search bookings</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-scan-search">A search for booking references, with Clear and Scan.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-scan-search" kind={Kit.Phoenix.Roles.FormGroup.Kind.search()} scannable control_rest={%{name: "q", placeholder: "Find bookings by reference"}}>
<:label>Search booking references</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-paste">A field that takes a paste of several lines.</p>
<form>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-paste" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} paste={%Kit.Phoenix.Roles.FormGroup.Paste{name: "hirers", kind: "invoices", reader: reader()}} control_rest={%{name: "hirer"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.other("hirer-name")}>
<:label>Hirer</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
</form>
<p>The form owns the submit action.</p>
<p class="specimen-case-line" id="role-form-group-disabled-password">A password that cannot be changed, with Show disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-password-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-password-disabled", name: "password", value: "oakmere-hall-2025", disabled: true}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("current-password")}>
<:label>Password</:label>
<:help>Password cannot be changed.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-scan">A booking reference that cannot be changed, with Scan disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-reference-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.scan(:medium)} stream="camera" control_rest={%{id: "phoenix-form-reference-disabled", name: "reference", value: "", disabled: true}}>
<:label>Booking reference</:label>
<:printed_value>No reference given</:printed_value>
<:help>Booking reference cannot be changed.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-file">A file that cannot be changed, with its selector disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-file-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-file-disabled", name: "file", accept: ".csv,.tsv", disabled: true}}>
<:label>File</:label>
<:help>Files cannot be changed. Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-files">Files that cannot be changed, with their selector and Remove disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files-disabled", name: "files", multiple: true, accept: ".csv,.tsv", disabled: true}}>
<:label>Files</:label>
<:file name="bookings-2025.csv" name_id="phoenix-form-files-disabled-bookings" state="uploaded" state_words="Uploaded" />
<:help>Files cannot be changed. Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-search">A search that cannot be changed, with Clear disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-search-disabled" kind={Kit.Phoenix.Roles.FormGroup.Kind.search()} control_value="Oakmere" control_rest={%{name: "q", placeholder: "Find bookings by hirer name", disabled: true}}>
<:label>Search bookings</:label>
<:help>Search cannot be changed.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-mentions">A note that can mention people and jobs.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-note">
<:label>Note</:label>
<:control :let={binding} labelled_by>
<Kit.Phoenix.Roles.FormGroup.Editor.editor
binding={binding}
name="note"
place={%Kit.Phoenix.AuthoredText.Place{blocks: [], insertions: [:mention]}}
value={Kit.Phoenix.AuthoredText.decode!(~s({"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Ask "},{"type":"mention","attrs":{"kind":"person","id":"p-daniel","label":"Daniel Okafor"}},{"type":"text","text":" about the boiler."}]}]}), %Kit.Phoenix.AuthoredText.Place{blocks: [], insertions: [:mention]})}
not_told={["Daniel Okafor"]}
query_event="mention"
paste_event="paste"
suggestions={%Kit.Phoenix.Roles.FormGroup.Editor.Suggestions{
can_open: [
%Kit.Phoenix.Roles.FormGroup.Editor.Person{id: "p-dana", name: [{:matched, "Da"}, "na Reyes"], email: "dana@oakmerebuilders.co.uk", avatar: Kit.Phoenix.Roles.Avatar.person("Dana Reyes", "DR")},
%Kit.Phoenix.Roles.FormGroup.Editor.Person{id: "p-adam", name: ["A", {:matched, "da"}, "m Price"], email: "adam@oakmerebuilders.co.uk", avatar: Kit.Phoenix.Roles.Avatar.person("Adam Price", "AP")}
],
others: [
%Kit.Phoenix.Roles.FormGroup.Editor.Person{id: "p-daniel", name: [{:matched, "Da"}, "niel Okafor"], email: "daniel@okaforplumbing.co.uk", avatar: Kit.Phoenix.Roles.Avatar.person("Daniel Okafor", "DO"), no_access: true}
],
subjects: [
%Kit.Phoenix.Roles.FormGroup.Editor.Subject{id: "j-2214", identifier: "JOB-2214", name: [{:matched, "Da"}, "vies kitchen refit"], icon: "wrench"}
]
}}
/>
</:control>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-note">A note that cannot be changed.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-note-disabled">
<:label>Note</:label>
<:help>Notes cannot be changed.</:help>
<:control :let={binding} labelled_by>
<Kit.Phoenix.Roles.FormGroup.Editor.editor
binding={binding}
name="note"
place={%Kit.Phoenix.AuthoredText.Place{blocks: [], insertions: [:mention]}}
value={Kit.Phoenix.AuthoredText.decode!(~s({"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Ask "},{"type":"mention","attrs":{"kind":"person","id":"p-dana","label":"Dana Reyes"}},{"type":"text","text":" for the gate code."}]}]}), %Kit.Phoenix.AuthoredText.Place{blocks: [], insertions: [:mention]})}
disabled
/>
</:control>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-every-block">A description that takes headings, lists, checklists, quotes, code, mentions, dates and files.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-description">
<:label>Description</:label>
<:control :let={binding} labelled_by>
<Kit.Phoenix.Roles.FormGroup.Editor.editor
binding={binding}
name="description"
place={%Kit.Phoenix.AuthoredText.Place{blocks: [:heading, :bullet_list, :ordered_list, :task_list, :blockquote, :code_block], insertions: [:mention, :date, :file]}}
value={Kit.Phoenix.AuthoredText.decode!(~s({"type":"doc","content":[{"type":"heading","content":[{"type":"text","text":"Kitchen refit"}]},{"type":"paragraph","content":[{"type":"text","text":"Start on "},{"type":"date","attrs":{"date":"2025-02-17"}},{"type":"text","text":" once "},{"type":"mention","attrs":{"kind":"person","id":"p-dana","label":"Dana Reyes"}},{"type":"text","text":" has the keys. Keep the "},{"type":"text","marks":[{"type":"bold"}],"text":"boiler"},{"type":"text","text":" off, "},{"type":"text","marks":[{"type":"italic"}],"text":"ventilate"},{"type":"text","text":" the room and read "},{"type":"text","marks":[{"type":"link","attrs":{"href":"https://oakmerebuilders.co.uk/survey"}}],"text":"the survey"},{"type":"text","text":". The lockbox code is "},{"type":"text","marks":[{"type":"code"}],"text":"4471"},{"type":"text","text":"."}]},{"type":"paragraph","content":[{"type":"text","text":"Floor plan: "},{"type":"file","attrs":{"id":"floor-plan","name":"kitchen-plan.pdf"}}]},{"type":"bulletList","content":[{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Strip the units"}]}]},{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Move the sink"}]}]}]},{"type":"orderedList","content":[{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Isolate the water"}]}]},{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Cap the pipes"}]}]}]},{"type":"taskList","content":[{"type":"taskItem","attrs":{"checked":true},"content":[{"type":"paragraph","content":[{"type":"text","text":"Order the worktop"}]}]},{"type":"taskItem","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"type":"text","text":"Book the electrician"}]}]}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"type":"text","text":"Leave the side gate unlocked."}]}]},{"type":"codeBlock","content":[{"type":"text","text":"Gate code: 4471"}]}]}), %Kit.Phoenix.AuthoredText.Place{blocks: [:heading, :bullet_list, :ordered_list, :task_list, :blockquote, :code_block], insertions: [:mention, :date, :file]})}
today={Kit.Phoenix.Time.day(reader(), ~D[2025-02-10])}
query_event="mention"
upload={Phoenix.LiveView.UploadConfig.build(:description_files, "phoenix-form-description-files", accept: :any)}
file_words={%Kit.Phoenix.Roles.FormGroup.Editor.FileWords{uploading: "Uploading", uploaded: "Uploaded", refused: "Refused"}}
/>
</:control>
</Kit.Phoenix.Roles.FormGroup.form_group>
Form group, error
The email control is described by its help, then its error, and is invalid.
Source
<p class="specimen-case-line">The email control is described by its help, then its error, and is invalid.</p>
<fieldset>
<Kit.Phoenix.Roles.FormGroup.form_group
id="billing-email-error-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.email()}
autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.other("hirer-billing-email")}
control_rest={
%{
"id" => "billing-email-error",
"name" => "email",
"value" => "accounts@"
}
}
>
<:printed_value>accounts@</:printed_value>
<:label rest={%{"for" => "billing-email-error"}}>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>
<Kit.Phoenix.Roles.FormGroup.form_group id="form-error-neighbour-form-group"
kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)}
control_rest={%{id: "form-error-neighbour", name: "text", value: "Oakmere Village Hall"}}
><:printed_value>Oakmere Village Hall</:printed_value>
<:label rest={%{for: "form-error-neighbour"}}>Text</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
</fieldset>
Form group, shown
A shown password that cannot be changed, with Hide disabled.
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-password-shown-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-password-shown", name: "password", type: "text", value: "oakmere-hall-2025"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("current-password")}>
<:label rest={%{for: "phoenix-form-password-shown"}}>Password</:label>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-new-password-shown-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-new-password-shown", name: "new-password", type: "text", value: "garden-room-keys"}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("new-password")}>
<:label rest={%{for: "phoenix-form-new-password-shown"}}>New password</:label>
<:help>At least twelve characters.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-disabled-hide">A shown password that cannot be changed, with Hide disabled.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-password-shown-disabled-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.password()} control_rest={%{id: "phoenix-form-password-shown-disabled", name: "password", type: "text", value: "oakmere-hall-2025", disabled: true}} autocomplete={Kit.Phoenix.Roles.FormGroup.Autocomplete.actor("current-password")}>
<:label>Password</:label>
<:help>Password cannot be changed.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
Form group, chosen
- bookings-2025.csv Chosen
- hirers.csv Chosen
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-chosen-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files-chosen", name: "files", multiple: true, accept: ".csv,.tsv"}}>
<:label rest={%{for: "phoenix-form-files-chosen"}}>Hirer records</:label>
<:file name="bookings-2025.csv" name_id="phoenix-form-files-chosen-bookings" state="chosen" state_words="Chosen" />
<:file name="hirers.csv" name_id="phoenix-form-files-chosen-hirers" state="chosen" state_words="Chosen" />
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
Form group, uploading
- oakmere-primary-school-bookings-and-collections-2025.csv Uploading
- hirers.csv Uploading
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-uploading-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files-uploading", name: "files", multiple: true, accept: ".csv,.tsv"}}>
<:label rest={%{for: "phoenix-form-files-uploading"}}>Hirer records</:label>
<:file name="oakmere-primary-school-bookings-and-collections-2025.csv" name_id="phoenix-form-files-uploading-bookings" state="uploading" state_words="Uploading" />
<:file name="hirers.csv" name_id="phoenix-form-files-uploading-hirers" state="uploading" state_words="Uploading" />
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
Form group, uploaded
- oakmere-primary-school-bookings-and-collections-2025.csv Uploaded
- hirers.csv Uploaded
An uploaded file whose name opens it.
- media-audio.mp3 Uploaded
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-uploaded-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files-uploaded", name: "files", multiple: true, accept: ".csv,.tsv"}}>
<:label rest={%{for: "phoenix-form-files-uploaded"}}>Hirer records</:label>
<:file name="oakmere-primary-school-bookings-and-collections-2025.csv" name_id="phoenix-form-files-uploaded-bookings" state="uploaded" state_words="Uploaded" />
<:file name="hirers.csv" name_id="phoenix-form-files-uploaded-hirers" state="uploaded" state_words="Uploaded" />
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<p class="specimen-case-line" id="role-form-group-linked-file">An uploaded file whose name opens it.</p>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-file-linked-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-file-linked", name: "audio", accept: ".mp3"}}>
<:label>Audio file</:label>
<:file name="media-audio.mp3" name_id="phoenix-form-file-linked-name" href="../../media/media-audio.mp3" state="uploaded" state_words="Uploaded" />
<:help>Accepts MP3 files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
Form group, refused
- hirers.xlsx Refused Excel files cannot be added.
- bookings-2025.csv Uploaded
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-files-refused-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-files-refused", name: "files", multiple: true, accept: ".csv,.tsv"}}>
<:label rest={%{for: "phoenix-form-files-refused"}}>Hirer records</:label>
<:file name="hirers.xlsx" name_id="phoenix-form-files-refused-hirers" state="refused" state_words="Refused" reason="Excel files cannot be added." />
<:file name="bookings-2025.csv" name_id="phoenix-form-files-refused-bookings" state="uploaded" state_words="Uploaded" />
<:help>Accepts CSV and TSV files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<fieldset>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-floor-plan-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-floor-plan", name: "floor-plan", accept: ".pdf"}}>
<:label rest={%{for: "phoenix-form-floor-plan"}}>Floor plan</:label>
<:help>Accepts PDF files.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-form-hall-photo-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.file()} control_rest={%{id: "phoenix-form-hall-photo", name: "hall-photo", accept: ".jpg,.jpeg,.png"}}>
<:label rest={%{for: "phoenix-form-hall-photo"}}>Hall photo</:label>
<:file name="main-hall.heic" name_id="phoenix-form-hall-photo-main-hall" state="refused" state_words="Refused" reason="HEIC images cannot be added." />
<:help>Accepts JPEG and PNG images.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
</fieldset>