Modal

Modal

A Modal is basically a card that will sit on top of all content. It should only be used for actions that to user needs to take right now, generally for a delete confirmation or something or urgent importance.

Modals are set programmatically in Bubbles. Add the Modal component to your __layout.svelte file as shown here and then use the helper function showModal to bring up the modal. The showModal function will add the required components to a the modalStore. You can also programmatically hide the modal using the hideModal function.

The modalStore is a svelte store that controls the modal. You can edit it directly if you wish to manipulate the modal, but the showModal helper is designed to do that for you.

Generally, your modal will display a form or a message to the user with some buttons.




Props

Since you are not using the Modal component directly and instead the showModal function, the props shown are for that.


title string
The title of the modal


options object
The rest of the modal options are optional, but it's obviously wise to include at least one.


options.height number
The height in vh values that you want the modal to be.


options.type "default"|"side"
The default modal is displayed in the middle, but a modal can also be full height on the side. A modal that has a form component with more than 2 inputs, or 1 select input, will default to the side.


options.img string
The path to an image to display at the top of the modal. Good to use then there is not a lot of content in the modal.


options.message string
The message you want the modal to display if any. Usually a description of what the modal is asking from them.


options.form Array<Input>
This lets you pass a whole form input into the modal if you want to collect data from the user in a modal.


options.footer Array<Button>
You may want to add buttons to your modal that will be locked to the bottom of your modal. You can add an array of buttons here. If you have also included a form, you can choose to have the buttons (like the submit button) in the form array, or you can add the submit button in the footer.

Modal Demos
<script>
  // Add the modal component to your root layout component
  //__layout.svelte
  //<Modal />;

  import { Button, Modal, showModal, hideModal } from "bubbles-ui";
</script>

<Button
  label="Message Modal"
  wide={true}
  mb={true}
  onclick={() =>
    showModal("Message Modal", {
      img: "/favicon.png",
      message: "This is a message modal. Good for things like confirming an un-doable action for the user",
      footer: [
        {
          label: "Close Modal",
          color: "gray-light",
          onclick: () => {
            hideModal();
          },
        },
      ],
    })}
/>

<Button
  label="Form Modal"
  wide={true}
  mb={true}
  onclick={() =>
    showModal("Form Modal", {
      message:
        "This is a form modal. It can have a message option too! Just add Form details just like you would with any other form. You can include the submit buttons in the form, which will cause them to not be locked at the bottom. Or you can include the submit buttons in the footer, which will cause the buttons to be sticky at the bottom of the modal.",
      form: [
        {
          type: "text",
          id: "name",
          label: "Name",
          error: "An error occurred",
          vob: "true",
          validation: "required|string",
        },
        {
          type: "button",
          label: "Submit",
          onsubmit: () => {
            hideModal();
          },
        },
      ],
    })}
/>