Skip to content

Prompt

INFO

Are you looking for a modal with no close icon, centered text, and the ability to display an image in the header of the modal? Try KModal instead.

The KPrompt component is used to display a dialog that prompts a user to take an action.

html
<KButton appearance="primary" @click="defaultIsOpen = true">Prompt</KButton>

<KPrompt :is-visible="defaultIsOpen" message="Hello, World?" @canceled="defaultIsOpen = false" @proceed="defaultIsOpen = false" />
ts
import { defineComponent, ref } from 'vue'

export default defineComponent({
  setup () {
    const defaultIsOpen = ref(false)

    return {
      defaultIsOpen
    }
  }
})

Props

isVisible

Tells the component whether or not to render the open prompt.

title

Text displayed in header if not using slot. If no title is provided, the prompt type is used.

message

Text to display in body section if not using slot.

html
<KPrompt :is-visible="contentIsOpen" title="Look Mah!" message="I'm prompting you" @canceled="contentIsOpen = false" @proceed="contentIsOpen = false" />

actionButtonText

Change the text content of the submit/proceed button.

cancelButtonText

Change the text content of the close/cancel button.

html
<KPrompt :is-visible="contentIsOpen" actionButtonText="Let's do it!" cancelButtonText="Abort" @canceled="buttonsIsOpen = false" @proceed="buttonsIsOpen = false" />

actionPending

This boolean indicates if an action is being taken on the dialog and we should disable the action button to prevent spam clicking.

html
<KPrompt :is-visible="pendingIsOpen" message="Click Cancel to close me" :action-pending="true" @canceled="pendingIsOpen = false" @proceed="pendingIsOpen = false" />

type

This prop determines the look and feel of the dialog. Can be danger, warning, or info. Defaults to info.

Information

Use the info prompt type to notify the user about general information associated with the action about to be taken.

html
<KPrompt :is-visible="infoIsOpen" message="You have been informed 🕵🏻‍♂️" @canceled="infoIsOpen = false" @proceed="infoIsOpen = false" />

Warning

Use the warning prompt type if the user needs to be notified that there is a risk associated with the action about to be taken. We will display a warning icon and prepend the 'Warning:' in the title for this flavor.

html
<KPrompt :is-visible="warningIsOpen" message="I'm warning you 🤔" type="warning" @canceled="warningIsOpen = false" @proceed="warningIsOpen = false" />

Danger

Use the danger prompt type if the user is taking an irreversible action, like deleting an item. You can use this type in conjuction with confirmationText to further restrict the action.

html
<KPrompt :is-visible="dangerIsOpen" type="danger" message="This is dangerous ☠️" @canceled="dangerIsOpen = false" @proceed="dangerIsOpen = false" />

confirmationText

Provide a string the user must type before the action button becomes enabled

html
<KPrompt :is-visible="dangerConfirmIsOpen" type="danger" message="This is dangerous ☠️" confirmationText="I Agree" @canceled="dangerConfirmIsOpen = false" @proceed="dangerConfirmIsOpen = false" />

preventProceedOnEnter

If you don't want to emit the proceed event upon pressing the Enter key, you can prevent it using this prop. Defaults to false.

html
<KPrompt :is-visible="preventProceed" type="danger" message="I don't care if you press Enter" prevent-proceed-on-enter @canceled="preventProceed = false" @proceed="preventProceed = false" />

tabbableOptions

Options to be passed to focus-trap, which is responsible for trapping focus inside the prompt box. If you're experiencing issues with testing <KPrompt> in jsdom, you can pass this prop according to the focus-trap documentation.

Slots

There are 3 designated slots you can use to display content in the modal.

  • header-content
  • body-content
  • action-buttons - Contains cancel & action buttons by default.
html
<KPrompt :is-visible="slotsIsOpen" @canceled="slotsIsOpen = false" @proceed="slotsIsOpen = false">
  <template v-slot:header-content>
    <KIcon icon="immunity" color="#7F01FE" size="20" />
    Look Mah!
  </template>
  <template v-slot:body-content>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec justo libero. Nullam accumsan quis ipsum vitae tempus. Integer non pharetra orci. Suspendisse potenti.
  </template>
  <template v-slot:action-buttons>
    <KButton appearance="outline" @click="slotsIsOpen = false">Close</KButton>
  </template>
</KPrompt>

Events

  • @canceled - Emitted when cancel/close button is clicked or the Escape key is pressed
  • @proceed - Emitted when action button is clicked or the Enter key is pressed

Theming

VariablePurpose
--KPromptMaxHeightMax height of body content in prompt

Released under the Apache-2.0 License.