kit

Form

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.

Form

Open the whole page

Source
<Kit.Phoenix.Layouts.Shell.shell print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" navigation_label="Application" navigation="none" density="desk">
  <:subject>Review a refund for the Oakmere Primary School invoice</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../layout-form/#layout-form">{@owner}</a></:actions>
  <:body>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-form" subject_state={Kit.Phoenix.State.none()}>
      <:task_context heading="Issue refund">
        <Kit.Phoenix.Roles.FactGroup.fact_group><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Hirer</:name><:value>Oakmere Primary School</:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Invoice</:name><:value><Kit.Phoenix.Identifier.identifier value="OH-INV-003" /></:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("In full")])]}><:name>Paid</: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.FactGroup.fact_group>
      </:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id="refund-amount-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)}

          control_rest={%{id: "refund-amount", name: "amount", inputmode: "decimal", value: "120.00"}}
        ><:printed_value>120.00</:printed_value>
          <:label rest={%{for: "refund-amount"}}>Amount (GBP)</:label>
          <:help>Up to the £120.00 paid on this invoice.</:help>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} id="refund-reason-form-group"

          control_rest={%{id: "refund-reason", name: "reason", value: "Returned materials"}}
        ><:printed_value>Returned materials</:printed_value>
          <:label rest={%{for: "refund-reason"}}>Reason</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
      </:form_groups>
      <:consequence>
        <Kit.Phoenix.Roles.InlineConsequence.inline_consequence aria-label="Refund invoice OH-INV-003">
          <:action>{nil}</:action>
          <:subject>Invoice OH-INV-003</:subject>
          <:consequence>Issuing this refund returns £120.00 to the original payment method.</:consequence>
          <:effective_time>The refund is submitted as soon as you confirm.</:effective_time>
          <:correction_path>
            A submitted refund cannot be cancelled. Review the amount and reason before confirming, or <a href="../record/">return to the invoice</a>.
          </:correction_path>
        </Kit.Phoenix.Roles.InlineConsequence.inline_consequence>
      </:consequence>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>
          Issue refund
        </Kit.Phoenix.Roles.PrimaryAction.primary_action>
        <Kit.Phoenix.Roles.WayBack.way_back href="../record/">Return to invoice</Kit.Phoenix.Roles.WayBack.way_back>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form :for={{id, field, state} <- [{"layout-form-heading-only", "hall-name", nil}, {"layout-form-heading-only-inert", "hall-name-inert", Kit.Phoenix.ActionState.inert("rename-hall-action", "Confirm the hall name before renaming.")}]} subject_state={Kit.Phoenix.State.none()} id={id}>
      <:task_context heading="Rename the hall"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id={"#{field}-form-group"}
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)}

          control_rest={%{id: field, name: "name", value: "Oakmere Hall"}}
        ><:printed_value>Oakmere Hall</:printed_value>
          <:label rest={%{for: field}}>Name</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
      </:form_groups>
      <:submit_return action="primary-action" action_state={state}>Rename</:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-form-2" subject_state={Kit.Phoenix.State.none()}>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.row_list columns={2}>
          <Kit.Phoenix.Layouts.Form.row>
            <Kit.Phoenix.Roles.FormGroup.form_group id="form-row-count-1-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "form-row-count-1", name: "count-1", value: "1"}}><:printed_value>1</:printed_value>
              <:label rest={%{for: "form-row-count-1"}}>Count</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <Kit.Phoenix.Roles.FormGroup.form_group id="form-row-amount-1-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "form-row-amount-1", name: "amount-1", value: "20"}}><:printed_value>20</:printed_value>
              <:label rest={%{for: "form-row-amount-1"}}>Amount</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <:mark>
              <Kit.Phoenix.Roles.SelectionControl.selection_control id="form-row-mark-1" name="and-more-1">
                <:fact printed_value="Not marked">This count and more</:fact>
              </Kit.Phoenix.Roles.SelectionControl.selection_control>
            </:mark>
            <:action><Kit.Phoenix.Roles.SecondaryAction.secondary_action type="button" aria-label="Remove row 1">Remove</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:action>
          </Kit.Phoenix.Layouts.Form.row>
          <Kit.Phoenix.Layouts.Form.row>
            <Kit.Phoenix.Roles.FormGroup.form_group id="form-row-count-2-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "form-row-count-2", name: "count-2", value: "2"}}><:printed_value>2</:printed_value>
              <:label rest={%{for: "form-row-count-2"}}>Count</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <Kit.Phoenix.Roles.FormGroup.form_group id="form-row-amount-2-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "form-row-amount-2", name: "amount-2", value: "35"}}><:printed_value>35</:printed_value>
              <:label rest={%{for: "form-row-amount-2"}}>Amount</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <:mark>
              <Kit.Phoenix.Roles.SelectionControl.selection_control id="form-row-mark-2" name="and-more-2" checked>
                <:fact printed_value="Marked">This count and more</:fact>
              </Kit.Phoenix.Roles.SelectionControl.selection_control>
            </:mark>
            <:action><Kit.Phoenix.Roles.SecondaryAction.secondary_action type="button" aria-label="Remove row 2">Remove</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:action>
          </Kit.Phoenix.Layouts.Form.row>
          <:action><Kit.Phoenix.Roles.InertControl.inert_control action="secondary-action" id="form-row-add" words="Save these counts before adding another.">Add a count</Kit.Phoenix.Roles.InertControl.inert_control></:action>
          <:status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Count 2 added.</Kit.Phoenix.Roles.StatusLine.status_line></:status_lines>
        </Kit.Phoenix.Layouts.Form.row_list>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Save</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-stacked-rows">
      <:task_context heading="Send the booking confirmation"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.row_list columns={2}>
          <Kit.Phoenix.Layouts.Form.row :for={{n, name, email, checked} <- [{1, "Grace Adeyemi", "grace.adeyemi@example.com", true}, {2, "Tom Whitfield", "tom.whitfield@example.com", false}]}>
            <Kit.Phoenix.Roles.FormGroup.form_group id={"stacked-rows-name-#{n}-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "stacked-rows-name-#{n}", name: "name-#{n}", value: name}}><:printed_value>{name}</:printed_value>
              <:label rest={%{for: "stacked-rows-name-#{n}"}}>Name</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <Kit.Phoenix.Roles.FormGroup.form_group id={"stacked-rows-email-#{n}-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "stacked-rows-email-#{n}", name: "email-#{n}", type: "email", value: email}}><:printed_value>{email}</:printed_value>
              <:label rest={%{for: "stacked-rows-email-#{n}"}}>Email</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <:mark>
              <Kit.Phoenix.Roles.SelectionControl.selection_control id={"stacked-rows-mark-#{n}"} name={"invoice-#{n}"} checked={checked}>
                <:fact printed_value={if checked, do: "Marked", else: "Not marked"}>Send the invoice too</:fact>
              </Kit.Phoenix.Roles.SelectionControl.selection_control>
            </:mark>
            <:action><Kit.Phoenix.Roles.SecondaryAction.secondary_action type="button" aria-label={"Remove #{name}"}>Remove</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:action>
          </Kit.Phoenix.Layouts.Form.row>
          <:action><Kit.Phoenix.Roles.SecondaryAction.secondary_action type="button">Add a recipient</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:action>
        </Kit.Phoenix.Layouts.Form.row_list>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Send</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-part-list">
      <:task_context heading="Hall contacts"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.part_list>
          <Kit.Phoenix.Layouts.Form.part :for={{n, heading, name, phone, email, remove} <- [{1, "Maria Fernanda Oliveira dos Santos Pereira", "Maria Fernanda Oliveira dos Santos Pereira", "07700 900123", "maria.santos@example.com", "Remove Maria Fernanda Oliveira dos Santos Pereira"}, {2, "Contact 2", nil, nil, nil, "Remove contact 2"}]} heading={heading}>
            <:action><Kit.Phoenix.Roles.InertControl.inert_control action="subtle-action" id={"part-list-remove-#{n}"} words="Confirm this contact before removing it." aria-label={remove}>Remove</Kit.Phoenix.Roles.InertControl.inert_control></:action>
            <Kit.Phoenix.Layouts.Form.row>
              <Kit.Phoenix.Roles.FormGroup.form_group id={"part-list-name-#{n}-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "part-list-name-#{n}", name: "name-#{n}", value: name}}><:printed_value>{name || "No name given"}</:printed_value>
                <:label rest={%{for: "part-list-name-#{n}"}}>Name</:label>
              </Kit.Phoenix.Roles.FormGroup.form_group>
              <Kit.Phoenix.Roles.FormGroup.form_group id={"part-list-phone-#{n}-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "part-list-phone-#{n}", name: "phone-#{n}", type: "tel", value: phone}}><:printed_value>{phone || "No phone number given"}</:printed_value>
                <:label rest={%{for: "part-list-phone-#{n}"}}>Phone</:label>
              </Kit.Phoenix.Roles.FormGroup.form_group>
            </Kit.Phoenix.Layouts.Form.row>
            <Kit.Phoenix.Roles.FormGroup.form_group id={"part-list-email-#{n}-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "part-list-email-#{n}", name: "email-#{n}", type: "email", value: email}}><:printed_value>{email || "No email given"}</:printed_value>
              <:label rest={%{for: "part-list-email-#{n}"}}>Email</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
          </Kit.Phoenix.Layouts.Form.part>
          <:action><Kit.Phoenix.Roles.SecondaryAction.secondary_action type="button">Add another contact</Kit.Phoenix.Roles.SecondaryAction.secondary_action></:action>
          <:status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Contact 2 added.</Kit.Phoenix.Roles.StatusLine.status_line></:status_lines>
        </Kit.Phoenix.Layouts.Form.part_list>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Save contacts</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-section-notice">
      <:task_context heading="Open Oakmere Hall for hire"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.headed_region heading="Hire rates" scope_line="These rates apply to bookings made from tomorrow.">
          <:notices>
            <Kit.Phoenix.Roles.Notice.notice state={Kit.Phoenix.Roles.Notice.State.attention()}>
              <:standing>Two rooms have no hourly rate</:standing>
              <:sentence>A booking for either cannot be priced until it has one.</:sentence>
              <:action><a href="../settings/">Set room rates</a></:action>
            </Kit.Phoenix.Roles.Notice.notice>
          </:notices>
          <Kit.Phoenix.Roles.FormGroup.form_group id="section-notice-deposit-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "section-notice-deposit", name: "deposit", inputmode: "decimal", value: "50.00"}}><:printed_value>50.00</:printed_value>
            <:label rest={%{for: "section-notice-deposit"}}>Deposit (GBP)</:label>
          </Kit.Phoenix.Roles.FormGroup.form_group>
        </Kit.Phoenix.Layouts.Form.headed_region>
        <Kit.Phoenix.Layouts.Form.headed_region heading="Enquiries">
          <Kit.Phoenix.Roles.FormGroup.form_group id="section-notice-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "section-notice-email", name: "email", type: "email", value: "bookings@oakmere.example"}}><:printed_value>bookings@oakmere.example</:printed_value>
            <:label rest={%{for: "section-notice-email"}}>Email for enquiries</:label>
          </Kit.Phoenix.Roles.FormGroup.form_group>
        </Kit.Phoenix.Layouts.Form.headed_region>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Open for hire</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-facts">
      <:task_context heading="Send the hire invoice"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.SelectionControl.group id="invoice-delivery">
          <:legend>Send by</:legend>
          <:choice kind={:radio} control_rest={%{name: "invoice-delivery-group", value: "email"}} checked printed_value="Chosen">Email</:choice>
          <:choice kind={:radio} control_rest={%{name: "invoice-delivery-group", value: "post"}} printed_value="Not chosen">Post</:choice>
        </Kit.Phoenix.Roles.SelectionControl.group>
        <Kit.Phoenix.Roles.FactGroup.fact_group>
          <Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Goes to</:name><:value><Kit.Phoenix.Email.email address="aisha@oakmereprimary.org" /></:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact>
          <Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Due</:name><:value>14 days after it is sent</:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact>
        </Kit.Phoenix.Roles.FactGroup.fact_group>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Send invoice</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form :for={{id, editing, address, state} <- [{"layout-form-web-address", false, "oakmere-dance-academy", Kit.Phoenix.State.none()}, {"layout-form-web-address-editing", true, "oakmere-dance", Kit.Phoenix.State.unsaved(:attention, "Not saved")}]} subject_state={state} id={id} keep={%Kit.Phoenix.Keep{key: "aisha-khan/halls/#{id}", version: "1"}}>
      <:task_context heading="Add a hall"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id={"#{id}-name-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "#{id}-name", name: "name", value: "Oakmere Dance Academy"}}><:printed_value>Oakmere Dance Academy</:printed_value>
          <:label rest={%{for: "#{id}-name"}}>Name</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
          <:name>Web address</:name>
          <:value><Kit.Phoenix.Identifier.identifier value="venues.example.com/oakmere-dance-academy" /></:value>
          <:edit id={"#{id}-address"} label="Change web address" editing={editing} joins_form on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
            <Kit.Phoenix.Roles.FormGroup.form_group id={"#{id}-address-form-group"} kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "#{id}-address-control", name: "address", value: address}}><:printed_value>{address}</:printed_value>
              <:label rest={%{for: "#{id}-address-control"}}>Web address</:label>
              <:help>Comes after venues.example.com/. Use letters, numbers and hyphens.</:help>
            </Kit.Phoenix.Roles.FormGroup.form_group>
          </:edit>
        </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Add the hall</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-empty-region">
      <:task_context heading={[Kit.Phoenix.Words.text("Close Oakmere Hall on "), Kit.Phoenix.Words.time(Kit.Phoenix.Time.day(reader(), ~D[2025-04-25]))]}></:task_context>
      <:form_groups>{nil}</:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Close the hall</Kit.Phoenix.Roles.PrimaryAction.primary_action>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form subject_state={Kit.Phoenix.State.none()} id="layout-form-group-set">
      <:task_context heading="Add items"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.group_set id="form-sizes-set">
          <:legend>How many of each size</:legend>
          <Kit.Phoenix.Roles.FormGroup.form_group id="form-sizes-small">
            <:label>Small</:label>
            <:control :let={binding}><Kit.Phoenix.Roles.NumberField.number_field width="short" binding={binding} reader={reader()} name="small" value="0" /></:control>
            <:printed_value>0</:printed_value>
          </Kit.Phoenix.Roles.FormGroup.form_group>
          <Kit.Phoenix.Roles.FormGroup.form_group id="form-sizes-medium">
            <:label>Medium</:label>
            <:control :let={binding}><Kit.Phoenix.Roles.NumberField.number_field width="short" binding={binding} reader={reader()} name="medium" value="0" /></:control>
            <:printed_value>0</:printed_value>
          </Kit.Phoenix.Roles.FormGroup.form_group>
          <Kit.Phoenix.Roles.FormGroup.form_group :for={{size, name} <- [{"large", "Large"}, {"extra-large", "Extra large"}]} id={"form-sizes-#{size}"}>
            <:label>{name}</:label>
            <:control :let={binding}><Kit.Phoenix.Roles.NumberField.number_field width="short" binding={binding} reader={reader()} name={size} value="0" /></:control>
            <:printed_value>0</:printed_value>
          </Kit.Phoenix.Roles.FormGroup.form_group>
          <:help>Use 0 for a size you are not adding.</:help>
          <:error>Enter at least one item across the sizes.</:error>
        </Kit.Phoenix.Layouts.Form.group_set>
      </:form_groups>
      <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Add items</Kit.Phoenix.Roles.PrimaryAction.primary_action></:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
  </:body>
</Kit.Phoenix.Layouts.Shell.shell>

Form, standing-alone

Open the whole page

Source
<Kit.Phoenix.Layouts.Form.page id="layout-form-standing-alone-form" print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" subject_state={Kit.Phoenix.State.none()} density="desk">
  <:subject>Sign up</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../layout-form/#layout-form-standing-alone">{@owner}</a></:actions>
  <:routes><a href="../../calendar/">Open booking diary</a></:routes>
  <:form_groups>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-name-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "signup-name", name: "name", autocomplete: "name"}}><:printed_value>No name given</:printed_value>
      <:label rest={%{for: "signup-name"}}>Name</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_rest={%{id: "signup-email", name: "email", autocomplete: "email"}}><:printed_value>No email given</:printed_value>
      <:label rest={%{for: "signup-email"}}>Email</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:form_groups>
  <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Create account</Kit.Phoenix.Roles.PrimaryAction.primary_action><Kit.Phoenix.Roles.WayBack.way_back href="../../../site/opening/">Return to kit</Kit.Phoenix.Roles.WayBack.way_back></:submit_return>
  <:submit_return_status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Your details stay on this page.</Kit.Phoenix.Roles.StatusLine.status_line></:submit_return_status_lines>
</Kit.Phoenix.Layouts.Form.page>

Form, standing-alone leading-tenant

Open the whole page

Source
<Kit.Phoenix.Layouts.Form.page id="layout-form-standing-alone-form" print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" tenant={Kit.Phoenix.Tenant.leads("Oakmere Village Hall")} subject_state={Kit.Phoenix.State.none()} density="desk">
  <:subject>Sign up</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../../layout-form/#layout-form-standing-alone-leading-tenant">{@owner}</a></:actions>
  <:routes><a href="../../../calendar/">Open booking diary</a></:routes>
  <:form_groups>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-name-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "signup-name", name: "name", autocomplete: "name"}}><:printed_value>No name given</:printed_value>
      <:label rest={%{for: "signup-name"}}>Name</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_rest={%{id: "signup-email", name: "email", autocomplete: "email"}}><:printed_value>No email given</:printed_value>
      <:label rest={%{for: "signup-email"}}>Email</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:form_groups>
  <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Create account</Kit.Phoenix.Roles.PrimaryAction.primary_action><Kit.Phoenix.Roles.WayBack.way_back href="../../../../site/opening/">Return to kit</Kit.Phoenix.Roles.WayBack.way_back></:submit_return>
  <:submit_return_status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Your details stay on this page.</Kit.Phoenix.Roles.StatusLine.status_line></:submit_return_status_lines>
  <:service_destination href="?service=terms">Service terms</:service_destination>
  <:service_destination href="?service=status">Service status</:service_destination>
</Kit.Phoenix.Layouts.Form.page>

Form, standing-alone following-tenant

Open the whole page

Source
<Kit.Phoenix.Layouts.Form.page id="layout-form-standing-alone-form" print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" tenant={Kit.Phoenix.Tenant.follows("Oakmere Village Hall")} subject_state={Kit.Phoenix.State.none()} density="desk">
  <:subject>Sign up</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../../layout-form/#layout-form-standing-alone-following-tenant">{@owner}</a></:actions>
  <:routes><a href="../../../calendar/">Open booking diary</a></:routes>
  <:form_groups>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-name-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "signup-name", name: "name", autocomplete: "name"}}><:printed_value>No name given</:printed_value>
      <:label rest={%{for: "signup-name"}}>Name</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
    <Kit.Phoenix.Roles.FormGroup.form_group id="signup-email-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.email()} control_rest={%{id: "signup-email", name: "email", autocomplete: "email"}}><:printed_value>No email given</:printed_value>
      <:label rest={%{for: "signup-email"}}>Email</:label>
    </Kit.Phoenix.Roles.FormGroup.form_group>
  </:form_groups>
  <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Create account</Kit.Phoenix.Roles.PrimaryAction.primary_action><Kit.Phoenix.Roles.WayBack.way_back href="../../../../site/opening/">Return to kit</Kit.Phoenix.Roles.WayBack.way_back></:submit_return>
  <:submit_return_status_lines><Kit.Phoenix.Roles.StatusLine.status_line>Your details stay on this page.</Kit.Phoenix.Roles.StatusLine.status_line></:submit_return_status_lines>
</Kit.Phoenix.Layouts.Form.page>

Form, no-task-context

Open the whole page

Source
<Kit.Phoenix.Layouts.Shell.shell print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" navigation_label="Application" navigation="none" density="desk">
  <:subject>Add a contact for Oakmere Primary School</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../layout-form/#layout-form-no-task-context">{@owner}</a></:actions>
  <:body>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-no-task-context-form" subject_state={Kit.Phoenix.State.none()}>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id="contact-name-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)}

          control_rest={%{id: "contact-name", name: "name"}}
        ><:printed_value>No name given</:printed_value>
          <:label rest={%{for: "contact-name"}}>Name</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group id="contact-phone-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.telephone()}
          control_rest={%{id: "contact-phone", name: "phone"}}
        ><:printed_value>No phone number given</:printed_value>
          <:label rest={%{for: "contact-phone"}}>Phone</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
      </:form_groups>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>
          Save contact
        </Kit.Phoenix.Roles.PrimaryAction.primary_action>
        <Kit.Phoenix.Roles.WayBack.way_back href="../../record/">Return to invoice</Kit.Phoenix.Roles.WayBack.way_back>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
  </:body>
</Kit.Phoenix.Layouts.Shell.shell>

Form, refused-undo

Open the whole page

Source
<Kit.Phoenix.Layouts.Shell.shell print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" navigation_label="Application" navigation="none" density="desk">
  <:subject>Review a refund for the Oakmere Primary School invoice</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../layout-form/#layout-form-refused-undo">{@owner}</a></:actions>
  <:body>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-refused-undo-form" subject_state={Kit.Phoenix.State.none()}>
      <:page_refusal>
        <Kit.Phoenix.Roles.Refusal.refusal id="form-undo-refused-1">
          <:line>Undo is refused: the invoice was paid after you removed the late fee.</:line>
        </Kit.Phoenix.Roles.Refusal.refusal>
      </:page_refusal>
      <:task_context heading="Issue refund">
        <Kit.Phoenix.Roles.FactGroup.fact_group><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Hirer</:name><:value>Oakmere Primary School</:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Invoice</:name><:value><Kit.Phoenix.Identifier.identifier value="OH-INV-003" /></:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("In full")])]}><:name>Paid</: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.FactGroup.fact_group>
      </:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id="refund-amount-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)}

          control_rest={%{id: "refund-amount", name: "amount", inputmode: "decimal", value: "120.00"}}
        ><:printed_value>120.00</:printed_value>
          <:label rest={%{for: "refund-amount"}}>Amount (GBP)</:label>
          <:help>Up to the £120.00 paid on this invoice.</:help>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} id="refund-reason-form-group"

          control_rest={%{id: "refund-reason", name: "reason", value: "Returned materials"}}
        ><:printed_value>Returned materials</:printed_value>
          <:label rest={%{for: "refund-reason"}}>Reason</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
      </:form_groups>
      <:consequence>
        <Kit.Phoenix.Roles.InlineConsequence.inline_consequence aria-label="Refund invoice OH-INV-003">
          <:action>{nil}</:action>
          <:subject>Invoice OH-INV-003</:subject>
          <:consequence>Issuing this refund returns £120.00 to the original payment method.</:consequence>
          <:effective_time>The refund is submitted as soon as you confirm.</:effective_time>
          <:correction_path>
            A submitted refund cannot be cancelled. Review the amount and reason before confirming, or <a href="../../record/">return to the invoice</a>.
          </:correction_path>
        </Kit.Phoenix.Roles.InlineConsequence.inline_consequence>
      </:consequence>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>
          Issue refund
        </Kit.Phoenix.Roles.PrimaryAction.primary_action>
        <Kit.Phoenix.Roles.WayBack.way_back href="../../record/">Return to invoice</Kit.Phoenix.Roles.WayBack.way_back>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
  </:body>
</Kit.Phoenix.Layouts.Shell.shell>

Form, unsaved

Open the whole page

Source
<Kit.Phoenix.Layouts.Shell.shell print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" navigation_label="Application" navigation="none" density="desk">
  <:subject>Review a refund for the Oakmere Primary School invoice</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../layout-form/#layout-form-unsaved">{@owner}</a></:actions>
  <:body>
    <Kit.Phoenix.Layouts.Form.form id="form-unsaved-refund" subject_state={Kit.Phoenix.State.unsaved(:attention, "Not saved")} keep={%Kit.Phoenix.Keep{key: "aisha-khan/refund/OH-INV-003", version: "4"}}>
      <:task_context heading="Issue refund">
        <Kit.Phoenix.Roles.FactGroup.fact_group><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Hirer</:name><:value>Oakmere Primary School</:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact><:name>Invoice</:name><:value><Kit.Phoenix.Identifier.identifier value="OH-INV-003" /></:value></Kit.Phoenix.Roles.LabelledFact.labelled_fact><Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("In full")])]}><:name>Paid</: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.FactGroup.fact_group>
      </:task_context>
      <:form_groups>
        <Kit.Phoenix.Roles.FormGroup.form_group id="unsaved-refund-amount-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)}
          control_rest={%{id: "unsaved-refund-amount", name: "amount", inputmode: "decimal", value: "80.00"}}
        ><:printed_value>80.00</:printed_value>
          <:label rest={%{for: "unsaved-refund-amount"}}>Amount (GBP)</:label>
          <:help>Up to the £120.00 paid on this invoice.</:help>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group id="unsaved-refund-reason-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)}
          control_rest={%{id: "unsaved-refund-reason", name: "reason", value: "Returned materials"}}
        ><:printed_value>Returned materials</:printed_value>
          <:label rest={%{for: "unsaved-refund-reason"}}>Reason</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.LabelledFact.labelled_fact>
          <:name>Send the receipt to</:name>
          <:value><Kit.Phoenix.Email.email address="office@oakmereprimary.org" /></:value>
          <:edit id="unsaved-refund-contact-edit" label="Change where the receipt goes" editing={true} joins_form on_edit={%Phoenix.LiveView.JS{}} on_cancel={%Phoenix.LiveView.JS{}} on_save={%Phoenix.LiveView.JS{}}>
            <Kit.Phoenix.Roles.FormGroup.form_group id="unsaved-refund-contact-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:wide)} control_rest={%{id: "unsaved-refund-contact", name: "contact", type: "email", value: "bursar@oakmereprimary.org"}}><:printed_value>bursar@oakmereprimary.org</:printed_value>
              <:label rest={%{for: "unsaved-refund-contact"}}>Send the receipt to</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
          </:edit>
        </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
        <Kit.Phoenix.Roles.FormGroup.form_group id="unsaved-refund-note-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.textarea()}
          control_value="The school returned the unused chairs and one projector on Friday. Refund the hire of those items only; the hall hire stands."
          control_rest={%{id: "unsaved-refund-note", name: "note", rows: "6"}}
        ><:printed_value>The school returned the unused chairs and one projector on Friday. Refund the hire of those items only; the hall hire stands.</:printed_value>
          <:label rest={%{for: "unsaved-refund-note"}}>Note for the hirer</:label>
          <:help>The hirer sees this note on the receipt.</:help>
        </Kit.Phoenix.Roles.FormGroup.form_group>
        <Kit.Phoenix.Roles.FormGroup.form_group id="unsaved-refund-internal-form-group"
          kind={Kit.Phoenix.Roles.FormGroup.Kind.textarea()}
          control_value="Checked the returns log with the caretaker."
          control_rest={%{id: "unsaved-refund-internal", name: "internal", rows: "6"}}
        ><:printed_value>Checked the returns log with the caretaker.</:printed_value>
          <:label rest={%{for: "unsaved-refund-internal"}}>Note for the team</:label>
        </Kit.Phoenix.Roles.FormGroup.form_group>
      </:form_groups>
      <:refusal>
        <Kit.Phoenix.Roles.Refusal.refusal id="form-unsaved-refused">
          <:line>Refund not issued: the payment provider is not answering. Your entry is kept on this device.</:line>
        </Kit.Phoenix.Roles.Refusal.refusal>
      </:refusal>
      <:submit_return>
        <Kit.Phoenix.Roles.PrimaryAction.primary_action>Issue refund</Kit.Phoenix.Roles.PrimaryAction.primary_action>
        <Kit.Phoenix.Roles.WayBack.way_back href="../../record/">Return to invoice</Kit.Phoenix.Roles.WayBack.way_back>
      </:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
  </:body>
</Kit.Phoenix.Layouts.Shell.shell>

Form, inert

Open the whole page

Source
<Kit.Phoenix.Layouts.Shell.shell print_identity={@print.identity} print_subject={@print.subject} print_standing={@print.standing} print_tenant={@print.tenant} product="kit" navigation_label="Application" navigation="none" density="desk">
  <:subject>Form</:subject>
  <:lede words={@owner} />
  <:lede words="Layout example" />
  <:actions><a href="../../layout-form/#layout-form-inert">{@owner}</a></:actions>
  <:body>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-inert-form" subject_state={Kit.Phoenix.State.none()}>
      <:task_context heading="Counts"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.row_list columns={2}>
          <Kit.Phoenix.Layouts.Form.row>
            <Kit.Phoenix.Roles.FormGroup.form_group id="inert-row-count-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "inert-row-count", name: "count", value: "1"}}><:printed_value>1</:printed_value>
              <:label rest={%{for: "inert-row-count"}}>Count</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <Kit.Phoenix.Roles.FormGroup.form_group id="inert-row-amount-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:narrow)} control_rest={%{id: "inert-row-amount", name: "amount", value: "20"}}><:printed_value>20</:printed_value>
              <:label rest={%{for: "inert-row-amount"}}>Amount</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
            <:mark><Kit.Phoenix.Roles.SelectionControl.selection_control id="inert-row-mark" name="and-more"><:fact printed_value="Not marked">This count and more</:fact></Kit.Phoenix.Roles.SelectionControl.selection_control></:mark>
            <:action><Kit.Phoenix.Roles.InertControl.inert_control action="secondary-action" id="inert-row-remove" words="Save this count before removing it." aria-label="Remove row 1">Remove</Kit.Phoenix.Roles.InertControl.inert_control></:action>
          </Kit.Phoenix.Layouts.Form.row>
          <:action><Kit.Phoenix.Roles.InertControl.inert_control action="secondary-action" id="inert-row-add" words="Save these counts before adding another.">Add a count</Kit.Phoenix.Roles.InertControl.inert_control></:action>
        </Kit.Phoenix.Layouts.Form.row_list>
      </:form_groups>
      <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Save</Kit.Phoenix.Roles.PrimaryAction.primary_action></:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
    <Kit.Phoenix.Layouts.Form.form id="layout-form-inert-form-2" subject_state={Kit.Phoenix.State.none()}>
      <:task_context heading="Hall contacts"></:task_context>
      <:form_groups>
        <Kit.Phoenix.Layouts.Form.part_list>
          <Kit.Phoenix.Layouts.Form.part heading="Contact 1">
            <:action><Kit.Phoenix.Roles.SubtleAction.subtle_action type="button" aria-label="Remove contact 1">Remove</Kit.Phoenix.Roles.SubtleAction.subtle_action></:action>
            <Kit.Phoenix.Roles.FormGroup.form_group id="inert-contact-name-form-group" kind={Kit.Phoenix.Roles.FormGroup.Kind.text(:medium)} control_rest={%{id: "inert-contact-name", name: "name", value: "Grace Adeyemi"}}><:printed_value>Grace Adeyemi</:printed_value>
              <:label rest={%{for: "inert-contact-name"}}>Name</:label>
            </Kit.Phoenix.Roles.FormGroup.form_group>
          </Kit.Phoenix.Layouts.Form.part>
          <:action><Kit.Phoenix.Roles.InertControl.inert_control action="secondary-action" id="inert-part-add" words="Save these contacts before adding another.">Add another contact</Kit.Phoenix.Roles.InertControl.inert_control></:action>
        </Kit.Phoenix.Layouts.Form.part_list>
      </:form_groups>
      <:submit_return><Kit.Phoenix.Roles.PrimaryAction.primary_action>Save contacts</Kit.Phoenix.Roles.PrimaryAction.primary_action></:submit_return>
    </Kit.Phoenix.Layouts.Form.form>
  </:body>
</Kit.Phoenix.Layouts.Shell.shell>