kit

Form group

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, Find, Reports, Calendar

Form group

Oakmere Village Hall
12
aisha@oakmereprimary.org
01632 960 123
Garden room

Room selection while bookings cannot be changed.

Garden room
Accepts CSV and TSV files.
  • bookings-2025.csv Uploaded
  • hirers.xlsx Refused Excel files cannot be added.
Accepts CSV and TSV files.
At least twelve characters.
No reference given On the hirer’s confirmation, above the date.
No reference given On the hirer’s confirmation, above the date.
Side gate open from half past five. 35 of 160 characters The caretaker reads this note when the booking starts.
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. Sends as 1 message
Add a note for the caretaker.
40
50

A field that may be left empty, empty and filled, beside a required field.

A field that takes a paste of several lines.

The form owns the submit action.

A password that cannot be changed, with Show disabled.

Password cannot be changed.

A booking reference that cannot be changed, with Scan disabled.

No reference given Booking reference cannot be changed.

A file that cannot be changed, with its selector disabled.

Files cannot be changed. Accepts CSV and TSV files.

Files that cannot be changed, with their selector and Remove disabled.

  • bookings-2025.csv Uploaded
Files cannot be changed. Accepts CSV and TSV files.
Search cannot be changed.

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.

      Notes cannot be changed.

      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

      1. Isolate the water

      2. Cap the pipes

      • Done

        Order the worktop

      • Not done

        Book the electrician

      Leave the side gate unlocked.

      Gate code: 4471

        Source
        <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.

        accounts@ Use the address that receives the hirer’s invoices. Enter a complete billing email, such as aisha@oakmereprimary.org.
        Oakmere Village Hall
        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

        At least twelve characters.

        A shown password that cannot be changed, with Hide disabled.

        Password cannot be changed.
        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
        Accepts CSV and TSV files.
        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
        Accepts CSV and TSV files.
        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
        Accepts CSV and TSV files.

        An uploaded file whose name opens it.

        Accepts MP3 files.
        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
        Accepts CSV and TSV files.
        Accepts PDF files.
        • main-hall.heic Refused HEIC images cannot be added.
        Accepts JPEG and PNG images.
        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>