Modal

Renders a modal.

Read more Read less

Examples

<.modal id="confirm-modal" title="My Title" action_title="My Action" on_action={JS.push("submit")}>
  This is a modal.
</.modal>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-default"}
    phx-click={DesignSystem.show_modal("modal-single-default")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-default"
    title="My Title"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-default"}]]}}
    action_title="My close modal"
  >
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-with-description"}
    phx-click={DesignSystem.show_modal("modal-single-with-description")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-with-description"
    title="My Title"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-with-description"}]]}}
    action_title="My close modal"
  >
    <:description>Description goes <b>here</b></:description>
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-destructive"}
    phx-click={DesignSystem.show_modal("modal-single-destructive")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-destructive"
    title="Are you sure?"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-destructive"}]]}}
    destructive
    action_title="My close modal"
  >
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-with-disable-action"}
    phx-click={DesignSystem.show_modal("modal-single-with-disable-action")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-with-disable-action"
    title="My Title"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-with-description-and-custom-actions"}]]}}
    action_title="My close modal"
    action_disabled
  >
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-with-description-and-custom-actions"}
    phx-click={DesignSystem.show_modal("modal-single-with-description-and-custom-actions")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-with-description-and-custom-actions"
    title="My Title"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-with-description-and-custom-actions"}]]}}
    action_title="My close modal"
  >
    <:description>Description goes <b>here</b></:description>
    <div data-test-id="modal-content">Content goes here</div>
    <:actions><.button>Custom action</.button></:actions>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-with-custom-actions-and-without-cancel"}
    phx-click={DesignSystem.show_modal("modal-single-with-custom-actions-and-without-cancel")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-with-custom-actions-and-without-cancel"
    title="My Title"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-with-custom-actions-and-without-cancel"}]]}}
    hide_cancel
    action_title="My close modal"
  >
    <div data-test-id="modal-content">Content goes here</div>
    <:actions><.button>Custom action</.button></:actions>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-long-title"}
    phx-click={DesignSystem.show_modal("modal-single-long-title")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-long-title"
    title="Very long title with a lot to say and even more"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-default"}]]}}
    action_title="My close modal"
  >
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-form"}
    phx-click={DesignSystem.show_modal("modal-single-form")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-form"
    title="Please provide information to continue"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-form"}]]}}
    action_title="Save"
  >
    <:description>Description goes here</:description>
    <.simple_form for={%{id: "example"}} actions_layout="cluster" data-test-id="modal-content">
      <.input name="Name" value="" label="Name" />
      <.input name="Email" value="" label="Email" />
    </.simple_form>
  </.modal>
</div>
<div data-test-id="modal-variation-container">
  <.button
    id={"button-modal-single-file-upload"}
    phx-click={DesignSystem.show_modal("modal-single-file-upload")}
  >
    Open modal
  </.button>

  <.modal
    id="modal-single-file-upload"
    title="Upload file"
    on_action={%JS{ops: [["exec", %{attr: "data-cancel", to: "#modal-single-file-upload"}]]}}
    action_title="Confirm"
  >
    <.live_upload_zone id="upload-zone-single-image-upload" type={:image} upload_callback={&Storybook.Modal.Modal.upload_callback/1} />
    <div data-test-id="modal-content">Content goes here</div>
  </.modal>
</div>