{"version":3,"file":"message-input.cjs","sources":["../../../recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue","../../../recipes/conversation_view/message_input/extensions/meeting_pill/meeting_pill.js","../../../recipes/conversation_view/message_input/message_input.vue"],"sourcesContent":["<template>\n  <node-view-wrapper class=\"d-recipe-message-input-meeting-pill\">\n    <dt-item-layout\n      class=\"d-recipe-message-input-meeting-pill__layout\"\n      unstyled\n    >\n      <template #left>\n        <div class=\"d-recipe-message-input-meeting-pill__icon\">\n          <dt-icon-video\n            size=\"400\"\n          />\n        </div>\n      </template>\n      {{ node.attrs.text }}\n      <template #right>\n        <div class=\"d-recipe-message-input-meeting-pill__close\">\n          <dt-button\n            circle\n            importance=\"clear\"\n            size=\"xs\"\n            :aria-label=\"closeButtonTitle\"\n            :title=\"closeButtonTitle\"\n            @click=\"close\"\n          >\n            <template #icon>\n              <dt-icon-close\n                size=\"300\"\n              />\n            </template>\n          </dt-button>\n        </div>\n      </template>\n    </dt-item-layout>\n  </node-view-wrapper>\n</template>\n\n<script>\nimport { NodeViewWrapper, nodeViewProps } from '@tiptap/vue-3';\nimport { DtItemLayout } from '@/components/item_layout';\nimport { DtIconClose, DtIconVideo } from '@dialpad/dialtone-icons/vue3';\nimport { DtButton } from '@/components/button';\nimport { DialtoneLocalization } from '@/localization';\n\nexport default {\n  name: 'MeetingPill',\n\n  components: {\n    NodeViewWrapper,\n    DtItemLayout,\n    DtIconClose,\n    DtButton,\n    DtIconVideo,\n  },\n\n  props: nodeViewProps,\n\n  emits: ['meeting-pill-close'],\n\n  data () {\n    return {\n      i18n: new DialtoneLocalization(),\n    };\n  },\n\n  computed: {\n    closeButtonTitle () {\n      return this.i18n.$t('DIALTONE_CLOSE_BUTTON');\n    },\n  },\n\n  methods: {\n    close (e) {\n      // Get the callback from extension storage\n      const onCloseCallback = this.editor?.storage?.meetingPill?.onClose;\n\n      if (onCloseCallback && typeof onCloseCallback === 'function') {\n        onCloseCallback(e);\n      }\n    },\n  },\n};\n</script>\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { VueNodeViewRenderer } from '@tiptap/vue-3';\nimport MeetingPill from './MeetingPill.vue';\n\nexport default Node.create({\n  name: 'meetingPill',\n\n  atom: true,\n  group: 'inline',\n  inline: true,\n\n  addOptions () {\n    return {\n      onClose: () => {},\n    };\n  },\n\n  addStorage () {\n    return {\n      onClose: this.options.onClose,\n    };\n  },\n\n  addNodeView () {\n    return VueNodeViewRenderer(MeetingPill);\n  },\n\n  addAttributes () {\n    return {\n      text: {\n        default: 'Please pass in \"text\" attribute',\n      },\n    };\n  },\n\n  parseHTML () {\n    return [\n      {\n        tag: 'meeting-pill',\n      },\n    ];\n  },\n\n  renderText () {\n    return '/dpm';\n  },\n\n  renderHTML ({ HTMLAttributes }) {\n    return ['meeting-pill', mergeAttributes(HTMLAttributes)];\n  },\n});\n","<!-- eslint-disable max-lines -->\n<template>\n  <div\n    data-qa=\"dt-recipe-message-input\"\n    role=\"presentation\"\n    class=\"d-recipe-message-input\"\n    v-bind=\"addClassStyleAttrs($attrs)\"\n    @dragover.prevent\n    @drop.prevent=\"onDrop\"\n    @paste=\"onPaste\"\n    @mousedown=\"onMousedown\"\n  >\n    <!-- @slot Renders above the input, but still within the borders. -->\n    <slot name=\"top\" />\n\n    <!-- set key to selectedText to force update. otherwise this component may not reflect the active selection -->\n    <dt-recipe-message-input-topbar\n      v-if=\"richText\"\n      :key=\"selectedText\"\n      :bold-button-options=\"boldButtonOptions\"\n      :italic-button-options=\"italicButtonOptions\"\n      :strike-button-options=\"strikeButtonOptions\"\n      :bullet-list-button-options=\"bulletListButtonOptions\"\n      :ordered-list-button-options=\"orderedListButtonOptions\"\n      :block-quote-button-options=\"blockQuoteButtonOptions\"\n      :code-button-options=\"codeButtonOptions\"\n      :code-block-button-options=\"codeBlockButtonOptions\"\n      :is-selection-active=\"isSelectionActive\"\n      @click=\"handleTopbarClick\"\n    >\n      <template #link>\n        <dt-recipe-message-input-link\n          ref=\"link\"\n          :open=\"linkDialogOpen\"\n          :link-button-options=\"linkButtonOptions\"\n          :is-selection-active=\"isSelectionActive\"\n          @opened=\"linkDialogOpened\"\n          @set-link=\"setLink\"\n          @remove-link=\"removeLink\"\n        />\n      </template>\n    </dt-recipe-message-input-topbar>\n    <!-- Some wrapper to restrict the height and show the scrollbar -->\n    <div\n      v-dt-scrollbar\n      class=\"d-recipe-message-input__editor-wrapper\"\n      :style=\"{ 'max-height': maxHeight }\"\n    >\n      <dt-rich-text-editor\n        ref=\"richTextEditor\"\n        v-model=\"internalInputValue\"\n        :allow-blockquote=\"richText\"\n        :allow-bold=\"richText\"\n        :allow-bullet-list=\"richText\"\n        :allow-code=\"richText\"\n        :allow-codeblock=\"richText\"\n        :allow-italic=\"richText\"\n        :allow-strike=\"richText\"\n        :allow-underline=\"richText\"\n        :paste-rich-text=\"richText\"\n        :editable=\"editable\"\n        :input-aria-label=\"inputAriaLabel\"\n        :input-class=\"inputClass\"\n        :output-format=\"outputFormat\"\n        :auto-focus=\"autoFocus\"\n        :link=\"richText\"\n        :placeholder=\"placeholder\"\n        :prevent-typing=\"preventTyping\"\n        :mention-suggestion=\"mentionSuggestion\"\n        :channel-suggestion=\"channelSuggestion\"\n        :slash-command-suggestion=\"slashCommandSuggestion\"\n        :additional-extensions=\"additionalExtensions\"\n        :hide-link-bubble-menu=\"hideLinkBubbleMenu\"\n        v-bind=\"removeClassStyleAttrs($attrs)\"\n        @input=\"onInput\"\n        @text-input=\"onTextInput\"\n        @enter=\"onSend\"\n        @selected=\"selectedText = $event\"\n        @selected-command=\"$emit('selected-command', $event)\"\n        @edit-link=\"initLinkDialog\"\n        @focus=\"isFocused = true\"\n        @blur=\"isFocused = false\"\n      />\n    </div>\n    <!-- @slot Slot for attachment carousel -->\n    <slot name=\"middle\" />\n    <!-- Section for the bottom UI -->\n    <section class=\"d-recipe-message-input__bottom-section\">\n      <!-- Left content -->\n      <div class=\"d-recipe-message-input__bottom-section-left\">\n        <dt-stack\n          gap=\"200\"\n          direction=\"row\"\n        >\n          <dt-button\n            v-if=\"showImagePicker\"\n            v-dt-tooltip:top-start=\"imagePickerButtonLabel\"\n            data-qa=\"dt-recipe-message-input-image-btn\"\n            size=\"sm\"\n            class=\"d-recipe-message-input__button\"\n            kind=\"muted\"\n            importance=\"clear\"\n            :aria-label=\"imagePickerButtonLabel\"\n            @click=\"onSelectImage\"\n            @mouseenter=\"imagePickerFocus = true\"\n            @mouseleave=\"imagePickerFocus = false\"\n            @focus=\"imagePickerFocus = true\"\n            @blur=\"imagePickerFocus = false\"\n          >\n            <template #icon>\n              <dt-icon-image size=\"300\" />\n            </template>\n          </dt-button>\n          <dt-input\n            ref=\"messageInputImageUpload\"\n            data-qa=\"dt-recipe-message-input-image-input\"\n            accept=\"image/*, video/*\"\n            type=\"file\"\n            class=\"d-recipe-message-input__image-input\"\n            multiple\n            hidden\n            @input=\"onImageUpload\"\n          />\n          <dt-popover\n            v-if=\"showEmojiPicker\"\n            open.sync=\"emojiPickerOpened\"\n            data-qa=\"dt-recipe-message-input-emoji-picker-popover\"\n            initial-focus-element=\"#searchInput\"\n            padding=\"none\"\n          >\n            <template #anchor=\"{ attrs }\">\n              <dt-button\n                v-dt-tooltip=\"emojiPickerButtonLabel\"\n                v-bind=\"attrs\"\n                data-qa=\"dt-recipe-message-input-emoji-picker-btn\"\n                size=\"sm\"\n                class=\"d-recipe-message-input__button\"\n                kind=\"muted\"\n                importance=\"clear\"\n                :aria-label=\"emojiPickerButtonLabel\"\n                @click=\"toggleEmojiPicker\"\n                @mouseenter=\"emojiPickerFocus = true\"\n                @mouseleave=\"emojiPickerFocus = false\"\n                @focus=\"emojiPickerFocus = true\"\n                @blur=\"emojiPickerFocus = false\"\n              >\n                <template #icon>\n                  <dt-icon-very-satisfied\n                    v-if=\"emojiPickerHovered\"\n                    size=\"300\"\n                  />\n                  <dt-icon-satisfied\n                    v-else\n                    size=\"300\"\n                  />\n                </template>\n              </dt-button>\n            </template>\n            <template #content=\"{ close }\">\n              <dt-emoji-picker\n                v-bind=\"emojiPickerProps\"\n                @add-emoji=\"$emit('add-emoji')\"\n                @skin-tone=\"onSkinTone\"\n                @selected-emoji=\"(emoji) => onSelectEmoji(emoji, close)\"\n              />\n            </template>\n          </dt-popover>\n          <!-- @slot Slot for emojiGiphy picker -->\n          <slot name=\"emojiGiphyPicker\" />\n          <!-- @slot Slot to add extra action icons next to default ones -->\n          <slot name=\"customActionIcons\" />\n        </dt-stack>\n      </div>\n      <!-- Right content -->\n      <div class=\"d-recipe-message-input__bottom-section-right\">\n        <dt-stack\n          direction=\"row\"\n          gap=\"300\"\n        >\n          <!-- @slot Slot for sms count -->\n          <div class=\"d-recipe-message-input__sms-count\">\n            <slot name=\"smsCount\" />\n          </div>\n\n          <!-- Optionally displayed remaining character counter -->\n          <dt-tooltip\n            v-if=\"Boolean(showCharacterLimit)\"\n            class=\"d-recipe-message-input__remaining-char-tooltip\"\n            placement=\"top-end\"\n            :enabled=\"characterLimitTooltipEnabled\"\n            :message=\"showCharacterLimit.message\"\n            :offset=\"[10, 8]\"\n          >\n            <template #anchor>\n              <p\n                v-show=\"displayCharacterLimitWarning\"\n                class=\"d-recipe-message-input__remaining-char\"\n                data-qa=\"dt-recipe-message-input-character-limit\"\n              >\n                {{ showCharacterLimit.count - inputLength }}\n              </p>\n            </template>\n          </dt-tooltip>\n\n          <!-- Cancel button for edit mode -->\n          <dt-button\n            v-if=\"showCancel\"\n            v-dt-tooltip=\"cancelButtonLabel\"\n            data-qa=\"dt-recipe-message-input-cancel-button\"\n            class=\"d-recipe-message-input__button d-recipe-message-input__cancel-button\"\n            size=\"sm\"\n            kind=\"muted\"\n            importance=\"clear\"\n            :aria-label=\"cancelButtonLabel\"\n            @click=\"onCancel\"\n          >\n            <p>{{ cancelButtonLabel }}</p>\n          </dt-button>\n\n          <!-- @slot Slot for sendButton picker -->\n          <slot name=\"sendButton\">\n            <!-- Send button -->\n            <!-- Right positioned UI - send button -->\n            <dt-button\n              v-if=\"showSend\"\n              v-dt-tooltip:top-end=\"sendButtonLabel\"\n              data-qa=\"dt-recipe-message-input-send-btn\"\n              size=\"sm\"\n              kind=\"default\"\n              importance=\"primary\"\n              :class=\"[\n                'd-recipe-message-input__button d-recipe-message-input__send-button',\n                {\n                  'd-recipe-message-input__send-button--disabled': isSendDisabled,\n                  'd-btn--icon-only': showSendIcon,\n                },\n              ]\"\n              :aria-label=\"sendButtonLabel\"\n              :aria-disabled=\"isSendDisabled\"\n              @click=\"onSend\"\n            >\n              <template\n                v-if=\"showSendIcon\"\n                #icon\n              >\n                <!-- @slot Slot for send button icon -->\n                <slot\n                  name=\"sendIcon\"\n                  :icon-size=\"sendIconSize\"\n                >\n                  <dt-icon-send :size=\"sendIconSize\" />\n                </slot>\n              </template>\n              <template v-if=\"showSend.text\">\n                <p>{{ showSend.text }}</p>\n              </template>\n            </dt-button>\n          </slot>\n        </dt-stack>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport {\n  DtRichTextEditor,\n  RICH_TEXT_EDITOR_OUTPUT_FORMATS,\n  RICH_TEXT_EDITOR_AUTOFOCUS_TYPES,\n} from '@/components/rich_text_editor';\nimport lastActiveNodes from './last_active_nodes';\nimport { removeClassStyleAttrs, returnFirstEl, addClassStyleAttrs } from '@/common/utils';\nimport MeetingPill from './extensions/meeting_pill/meeting_pill';\nimport { DtButton } from '@/components/button';\nimport { DtEmojiPicker } from '@/components/emoji_picker';\nimport { DtPopover } from '@/components/popover';\nimport { DtInput } from '@/components/input';\nimport { DtTooltip } from '@/components/tooltip';\nimport { DtStack } from '@/components/stack';\nimport {\n  DtIconImage, DtIconVerySatisfied, DtIconSatisfied, DtIconSend,\n} from '@dialpad/dialtone-icons/vue3';\nimport DtRecipeMessageInputTopbar from './message_input_topbar.vue';\nimport DtRecipeMessageInputLink from './message_input_link.vue';\nimport { DialtoneLocalization } from '@/localization';\n\nimport {\n  EDITOR_SUPPORTED_LINK_PROTOCOLS,\n  EDITOR_DEFAULT_LINK_PREFIX,\n} from '../editor/editor_constants.js';\n\nexport default {\n  compatConfig: { MODE: 3 },\n  name: 'DtRecipeMessageInput',\n\n  components: {\n    DtButton,\n    DtEmojiPicker,\n    DtInput,\n    DtPopover,\n    DtRecipeMessageInputTopbar,\n    DtRecipeMessageInputLink,\n    DtRichTextEditor,\n    DtTooltip,\n    DtStack,\n    DtIconImage,\n    DtIconVerySatisfied,\n    DtIconSatisfied,\n    DtIconSend,\n  },\n\n  inheritAttrs: false,\n\n  props: {\n    /**\n     * Displays all the buttons for rich text formatting above the message input, and enables it within the editor.\n     * Rich text formatting for the purposes of this component is defined as:\n     *\n     * bold, italic, strikethrough, lists, blockquotes, inline code tags, and code blocks.\n     *\n     * If you are sending a message to a phone rather than a Dialpad to Dialpad message, you should have this as false.\n     */\n    richText: {\n      type: Boolean,\n      default: true,\n    },\n\n    /**\n     * Value of the input. The object format should match TipTap's JSON\n     * document structure: https://tiptap.dev/guide/output#option-1-json\n     */\n    modelValue: {\n      type: [Object, String],\n      default: '',\n    },\n\n    /**\n     * Whether the input is editable\n     */\n    editable: {\n      type: Boolean,\n      default: true,\n    },\n\n    /**\n     * Descriptive label for the input element\n     */\n    inputAriaLabel: {\n      type: String,\n      required: true,\n      default: '',\n    },\n\n    /**\n     * Prevents the user from typing any further. Deleting text will still work.\n     */\n    preventTyping: {\n      type: Boolean,\n      default: false,\n    },\n\n    /**\n     * Additional class name for the input element. Only accepts a String value\n     * because this is passed to the editor via options. For multiple classes,\n     * join them into one string, e.g. \"d-p8 d-hmx96\"\n     */\n    inputClass: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * Whether the input should receive focus after the component has been\n     * mounted. Either one of `start`, `end`, `all` or a Boolean or a Number.\n     * - `start`  Sets the focus to the beginning of the input\n     * - `end`    Sets the focus to the end of the input\n     * - `all`    Selects the whole contents of the input\n     * - `Number` Sets the focus to a specific position in the input\n     * - `true`   Defaults to `start`\n     * - `false`  Disables autofocus\n     * @values true, false, start, end, all, number\n     */\n    autoFocus: {\n      type: [Boolean, String, Number],\n      default: false,\n      validator (autoFocus) {\n        if (typeof autoFocus === 'string') {\n          return RICH_TEXT_EDITOR_AUTOFOCUS_TYPES.includes(autoFocus);\n        }\n        return true;\n      },\n    },\n\n    /**\n     * The output format that the editor uses when emitting the \"@input\" event.\n     * One of `text`, `json`, `html`. See https://tiptap.dev/guide/output for\n     * examples.\n     * @values text, json, html\n     */\n    outputFormat: {\n      type: String,\n      default: 'json',\n      validator (outputFormat) {\n        return RICH_TEXT_EDITOR_OUTPUT_FORMATS.includes(outputFormat);\n      },\n    },\n\n    /**\n     * Placeholder text\n     */\n    placeholder: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * Disable Send Button\n     */\n    disableSend: {\n      type: Boolean,\n      default: false,\n    },\n\n    /**\n     * Content area needs to dynamically adjust height based on the conversation area height.\n     * can be vh|px|rem|em|%\n     */\n    maxHeight: {\n      type: String,\n      default: 'unset',\n    },\n\n    // Emoji picker props\n    showEmojiPicker: {\n      type: Boolean,\n      default: true,\n    },\n\n    /**\n     * Props to pass into the emoji picker.\n     */\n    emojiPickerProps: {\n      type: Object,\n      default: () => ({}),\n    },\n\n    /**\n     * Enable character Limit warning\n     */\n    showCharacterLimit: {\n      type: [Boolean, Object],\n      default: () => ({ count: 1500, warning: 500, message: '' }),\n    },\n\n    showImagePicker: {\n      type: [Boolean, Object],\n      default: () => ({}),\n    },\n\n    /**\n     * Send button defaults.\n     * TODO (Dialtone 10):\n     * - Change to `showSendButton`, boolean only.\n     */\n    showSend: {\n      type: [Boolean, Object],\n      default: () => ({}),\n    },\n\n    /**\n     * TODO (Dialtone 10):\n     * - Add a prop `iconOnly` default: true to control if localized send button text should be shown\n     */\n\n    /**\n     * Cancel button defaults.\n     * TODO (Dialtone 10): Change to `showCancelButton`, boolean only.\n     */\n    showCancel: {\n      type: [Boolean, Object],\n      default: () => ({}),\n    },\n\n    /**\n     * suggestion object containing the items query function.\n     * The valid keys passed into this object can be found here: https://tiptap.dev/api/utilities/suggestion\n     *\n     * The only required key is the items function which is used to query the contacts for suggestion.\n     * items({ query }) => { return [ContactObject]; }\n     * ContactObject format:\n     * { name: string, avatarSrc: string, id: string }\n     *\n     * When null, it does not add the plugin.\n     */\n    mentionSuggestion: {\n      type: Object,\n      default: null,\n    },\n\n    /**\n     * suggestion object containing the items query function.\n     * The valid keys passed into this object can be found here: https://tiptap.dev/api/utilities/suggestion\n     *\n     * The only required key is the items function which is used to query the channels for suggestion.\n     * items({ query }) => { return [ChannelObject]; }\n     * ChannelObject format:\n     * { name: string, id: string, locked: boolean }\n     *\n     * When null, it does not add the plugin. Setting locked to true will display a lock rather than hash.\n     */\n    channelSuggestion: {\n      type: Object,\n      default: null,\n    },\n\n    /**\n     * suggestion object containing the items query function.\n     * The valid keys passed into this object can be found here: https://tiptap.dev/api/utilities/suggestion\n     *\n     * The only required key is the items function which is used to query the slash commands for suggestion.\n     * items({ query }) => { return [SlashCommandObject]; }\n     * SlashCommandObject format:\n     * { command: string, description: string, parametersExample?: string }\n     * The \"parametersExample\" parameter is optional, and describes an example\n     * of the parameters that command can take.\n     *\n     * When null, it does not add the plugin.\n     */\n    slashCommandSuggestion: {\n      type: Object,\n      default: null,\n    },\n\n    /**\n     * descriptive text fields for the bold button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    boldButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + B',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the italic button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    italicButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + I',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the strikethrough button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    strikeButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + Shift + S',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the link button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    linkButtonOptions: {\n      type: Object,\n      default: () => ({\n        // TODO: implement mod k\n        keyboardShortcutText: 'Mod + K',\n        linkPlaceholder: 'e.g. https://www.dialpad.com',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the bullet list button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    bulletListButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + Shift + 8',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the ordered list button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    orderedListButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + Shift + 7',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the italic button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    blockQuoteButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + Shift + B',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the code button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    codeButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + E',\n      }),\n    },\n\n    /**\n     * descriptive text fields for the code block button\n     *\n     * object format:\n     * { keyboardShortcutText: string }\n     */\n    codeBlockButtonOptions: {\n      type: Object,\n      default: () => ({\n        keyboardShortcutText: 'Mod + Alt + C',\n      }),\n    },\n  },\n\n  emits: [\n    /**\n     * Fires when send button is clicked\n     *\n     * @event submit\n     * @type {String}\n     */\n    'submit',\n\n    /**\n     * Fires when media is selected from image button\n     *\n     * @event select-media\n     * @type {Array}\n     */\n    'select-media',\n\n    /**\n     * Fires when media is dropped into the message input\n     *\n     * @event add-media\n     * @type {Array}\n     */\n    'add-media',\n\n    /**\n     * Fires when media is pasted into the message input\n     *\n     * @event paste-media\n     * @type {Array}\n     */\n    'paste-media',\n\n    /**\n     * Fires when cancel button is pressed (only on edit mode)\n     *\n     * @event cancel\n     * @type {Boolean}\n     */\n    'cancel',\n\n    /**\n     * Fires when skin tone is selected from the emoji picker\n     *\n     * @event skin-tone\n     * @type {String}\n     */\n    'skin-tone',\n\n    /**\n     * Fires when emoji is selected from the emoji picker\n     *\n     * @event selected-emoji\n     * @type {String}\n     */\n    'selected-emoji',\n\n    /**\n     * Fires when a slash command is selected\n     *\n     * @event selected-command\n     * @type {String}\n     */\n    'selected-command',\n\n    /**\n     * Fires when meeting pill is closed\n     *\n     * @event meeting-pill-close\n     * @type {String}\n     */\n    'meeting-pill-close',\n\n    /**\n     * Event to sync the value with the parent\n     * @event update:modelValue\n     * @type {String|JSON}\n     */\n    'update:modelValue',\n\n    /**\n     * Emitted when input changes, returns text content only\n     * @event text-input\n     * @type {String}\n     */\n    'text-input',\n\n    /**\n     * Emitted when the 'Add emoji' button is clicked\n     * @event add-emoji\n     * @type {Boolean}\n     */\n    'add-emoji',\n  ],\n\n  data () {\n    return {\n      // If an ordered list is nested within an unordered list, we only want to show the currently selected list as\n      // active. This function performs the logic to determine the farthest active node from the root.\n      lastActiveNodes,\n      additionalExtensions: [\n        MeetingPill.configure({\n          onClose: (event) => {\n            this.$emit('meeting-pill-close', event);\n          },\n        }),\n      ],\n\n      internalInputValue: this.modelValue, // internal input content\n      imagePickerFocus: false,\n      emojiPickerFocus: false,\n      emojiPickerOpened: false,\n      isFocused: false,\n      linkOptions: {\n        class: 'd-link d-c-text d-d-inline-block',\n      },\n\n      linkDialogOpen: false,\n      selectedText: '',\n      text: '',\n      hideLinkBubbleMenu: false,\n      i18n: new DialtoneLocalization(),\n    };\n  },\n\n  computed: {\n    showSendIcon () {\n      return !this.showSend.text;\n    },\n\n    inputLength () {\n      return this.text.length;\n    },\n\n    displayCharacterLimitWarning () {\n      return (\n        Boolean(this.showCharacterLimit) &&\n        this.showCharacterLimit.count - this.inputLength <=\n          this.showCharacterLimit.warning\n      );\n    },\n\n    characterLimitTooltipEnabled () {\n      return (\n        this.showCharacterLimit.message &&\n        this.showCharacterLimit.count - this.inputLength < 0\n      );\n    },\n\n    isSendDisabled () {\n      return (\n        this.disableSend ||\n        (this.showCharacterLimit &&\n          this.inputLength > this.showCharacterLimit.count)\n      );\n    },\n\n    emojiPickerHovered () {\n      return this.emojiPickerFocus || this.emojiPickerOpened;\n    },\n\n    sendIconSize () {\n      return '300';\n    },\n\n    sendButtonLabel () {\n      return this.i18n.$t('DIALTONE_MESSAGE_INPUT_SEND_BUTTON_ARIA_LABEL');\n    },\n\n    imagePickerButtonLabel () {\n      return this.i18n.$t('DIALTONE_MESSAGE_INPUT_IMAGE_PICKER_BUTTON_ARIA_LABEL');\n    },\n\n    emojiPickerButtonLabel () {\n      return this.i18n.$t('DIALTONE_MESSAGE_INPUT_EMOJI_PICKER_BUTTON_ARIA_LABEL');\n    },\n\n    cancelButtonLabel () {\n      return this.i18n.$t('DIALTONE_MESSAGE_INPUT_CANCEL_BUTTON_ARIA_LABEL');\n    },\n  },\n\n  watch: {\n    modelValue (newValue) {\n      this.internalInputValue = newValue;\n    },\n\n    emojiPickerOpened (newValue) {\n      if (!newValue) {\n        this.$refs.richTextEditor?.focusEditor();\n      }\n    },\n  },\n\n  created () {\n    if (this.modelValue && this.outputFormat === 'text') {\n      this.internalInputValue = this.modelValue.replace(/\\n/g, '<br>');\n    } else {\n      this.internalInputValue = this.modelValue;\n    }\n  },\n\n  methods: {\n    removeClassStyleAttrs,\n    addClassStyleAttrs,\n\n    linkDialogOpened (value) {\n      this.linkDialogOpen = value;\n      if (value === true) {\n        this.initLinkDialog();\n      } else {\n        this.hideLinkBubbleMenu = false;\n        this.$refs.richTextEditor?.focusEditor();\n      }\n    },\n\n    handleTopbarClick (type) {\n      const editor = this.$refs.richTextEditor?.editor;\n      // Key is the name returned in the event, value is the name of the TipTap command function to run.\n      const typeToCommandMap = {\n        bold: () => editor?.chain().focus().toggleBold().run(),\n        italic: () => editor?.chain().focus().toggleItalic().run(),\n        strike: () => editor?.chain().focus().toggleStrike().run(),\n        bulletList: () => editor?.chain().focus().toggleBulletList().run(),\n        orderedList: () => editor?.chain().focus().toggleOrderedList().run(),\n        blockquote: () => editor?.chain().focus().toggleBlockquote().run(),\n        code: () => editor?.chain().focus().toggleCode().run(),\n        codeBlock: () => editor?.chain().focus().toggleCodeBlock().run(),\n      };\n\n      if (editor && typeToCommandMap[type]) {\n        typeToCommandMap[type]();\n      }\n    },\n\n    // Checks if the node currently selected is active ex/ the bold button is active if the selected text is bold\n    // eslint-disable-next-line complexity\n    isSelectionActive (type) {\n      if (['bulletList', 'orderedList'].includes(type)) {\n        return this.lastActiveNodes(this.$refs.richTextEditor?.editor?.state, [{ type: 'bulletList' }, { type: 'orderedList' }]).includes(type) && this.isFocused;\n      }\n      return this.$refs.richTextEditor?.editor?.isActive(type) && this.isFocused;\n    },\n\n    initLinkDialog () {\n      this.$refs.link.setInitialValues(this.selectedText, this.$refs.richTextEditor?.editor?.getAttributes('link')?.href);\n      this.hideLinkBubbleMenu = true;\n      this.linkDialogOpen = true;\n    },\n\n    removeLink () {\n      this.$refs.richTextEditor?.removeLink();\n      this.linkDialogOpen = false;\n    },\n\n    setLink (linkText, linkInput) {\n      this.$refs.richTextEditor.setLink(\n        linkInput, linkText, this.linkOptions, EDITOR_SUPPORTED_LINK_PROTOCOLS, EDITOR_DEFAULT_LINK_PREFIX,\n      );\n      this.linkDialogOpen = false;\n    },\n\n    // Mousedown instead of click because it fires before the blur event.\n    onMousedown (e) {\n      const isWithinInput = returnFirstEl(this.$refs.richTextEditor.$el)\n        .querySelector('.tiptap')\n        .contains(e.target);\n\n      // If the click is not within the tiptap rich text editor input itself, but still within the wrapping div,\n      // focus the editor.\n      if (!isWithinInput) {\n        // Prevent default prevents blurring the rich text editor input when it is already focused.\n        e.preventDefault();\n        this.$refs.richTextEditor.focusEditor();\n      }\n    },\n\n    onDrop (e) {\n      const dt = e.dataTransfer;\n      const files = Array.from(dt.files);\n      this.$emit('add-media', files);\n    },\n\n    onPaste (e) {\n      if (e.clipboardData.files.length) {\n        e.stopPropagation();\n        e.preventDefault();\n        const files = [...e.clipboardData.files];\n        this.$emit('paste-media', files);\n      }\n    },\n\n    onSkinTone (skinTone) {\n      this.$emit('skin-tone', skinTone);\n    },\n\n    onSelectEmoji (emoji, close) {\n      if (!emoji) {\n        return;\n      }\n\n      if (!emoji.shift_key) {\n        close();\n      }\n\n      // Insert emoji into the editor\n      this.$refs.richTextEditor.editor.commands.insertContent({\n        type: 'emoji',\n        attrs: {\n          code: emoji.shortname,\n        },\n      });\n      this.$emit('selected-emoji', emoji);\n    },\n\n    onSelectImage () {\n      this.$refs.messageInputImageUpload.$refs.input.click();\n    },\n\n    onImageUpload () {\n      this.$emit(\n        'select-media',\n        this.$refs.messageInputImageUpload.$refs.input.files,\n      );\n    },\n\n    toggleEmojiPicker () {\n      this.emojiPickerOpened = !this.emojiPickerOpened;\n    },\n\n    onSend () {\n      if (this.isSendDisabled) {\n        return;\n      }\n      this.$emit('submit', this.internalInputValue);\n    },\n\n    onCancel () {\n      this.$emit('cancel');\n    },\n\n    onInput (event) {\n      this.$emit('update:modelValue', event);\n    },\n\n    onTextInput (event) {\n      this.text = event;\n      this.$emit('text-input', event);\n    },\n  },\n};\n</script>\n"],"names":["_sfc_main","NodeViewWrapper","DtItemLayout","DtIconClose","DtButton","DtIconVideo","nodeViewProps","DialtoneLocalization","e","onCloseCallback","_c","_b","_a","_hoisted_1","_hoisted_2","_createBlock","_component_node_view_wrapper","_withCtx","_createVNode","_component_dt_item_layout","_createElementVNode","_component_dt_icon_video","_component_dt_button","$options","_component_dt_icon_close","_createTextVNode","_ctx","MeetingPill","Node","VueNodeViewRenderer","HTMLAttributes","mergeAttributes","DtEmojiPicker","DtInput","DtPopover","DtRecipeMessageInputTopbar","DtRecipeMessageInputLink","DtRichTextEditor","DtTooltip","DtStack","DtIconImage","DtIconVerySatisfied","DtIconSatisfied","DtIconSend","autoFocus","RICH_TEXT_EDITOR_AUTOFOCUS_TYPES","outputFormat","RICH_TEXT_EDITOR_OUTPUT_FORMATS","lastActiveNodes","event","newValue","removeClassStyleAttrs","addClassStyleAttrs","value","type","editor","typeToCommandMap","_d","linkText","linkInput","EDITOR_SUPPORTED_LINK_PROTOCOLS","EDITOR_DEFAULT_LINK_PREFIX","returnFirstEl","dt","files","skinTone","emoji","close","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_mergeProps","_cache","_withModifiers","args","_renderSlot","$props","_component_dt_recipe_message_input_topbar","$data","_component_dt_recipe_message_input_link","_createCommentVNode","_normalizeStyle","_component_dt_rich_text_editor","$event","_component_dt_stack","_component_dt_icon_image","_directive_dt_tooltip","_component_dt_input","_component_dt_popover","attrs","_component_dt_icon_very_satisfied","_component_dt_icon_satisfied","_component_dt_emoji_picker","_component_dt_tooltip","_normalizeClass","_createSlots","_hoisted_5","_toDisplayString","_component_dt_icon_send"],"mappings":"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"}