{"version":3,"file":"emoji_picker.vue.cjs","sources":["../../../components/emoji_picker/emoji_picker.vue"],"sourcesContent":["<template>\n  <div\n    class=\"d-emoji-picker\"\n  >\n    <div class=\"d-emoji-picker--header\">\n      <emoji-tabset\n        ref=\"tabsetRef\"\n        :emoji-filter=\"internalSearchQuery\"\n        :show-recently-used-tab=\"showRecentlyUsedTab\"\n        :scroll-into-tab=\"scrollIntoTab\"\n        :tab-set-labels=\"tabSetLabels\"\n        @focus-skin-selector=\"$refs.skinSelectorRef.focusSkinSelector()\"\n        @focus-search-input=\"showSearch\n          ? $refs.searchInputRef.focusSearchInput()\n          : $refs.emojiSelectorRef.focusEmojiSelector()\"\n        @selected-tabset=\"scrollToSelectedTabset\"\n        @keydown.esc.native=\"$emit('close')\"\n      />\n    </div>\n    <div class=\"d-emoji-picker--body\">\n      <emoji-search\n        v-if=\"showSearch\"\n        ref=\"searchInputRef\"\n        :model-value=\"internalSearchQuery\"\n        :search-placeholder-label=\"searchPlaceholderLabel\"\n        @update:model-value=\"newValue => internalSearchQuery = newValue\"\n        @select-first-emoji=\"$emit('selected-emoji', highlightedEmoji)\"\n        @focus-tabset=\"$refs.tabsetRef.focusTabset()\"\n        @focus-emoji-selector=\"$refs.emojiSelectorRef.focusEmojiSelector()\"\n        @keydown.esc.native=\"$emit('close')\"\n      />\n      <emoji-selector\n        ref=\"emojiSelectorRef\"\n        :emoji-filter=\"internalSearchQuery\"\n        :skin-tone=\"skinTone\"\n        :tab-set-labels=\"tabSetLabels\"\n        :search-results-label=\"searchResultsLabel\"\n        :search-no-results-label=\"searchNoResultsLabel\"\n        :recently-used-emojis=\"recentlyUsedEmojis\"\n        :selected-tabset=\"selectedTabset\"\n        @scroll-into-tab=\"updateScrollIntoTab\"\n        @highlighted-emoji=\"updateHighlightedEmoji\"\n        @selected-emoji=\"$emit('selected-emoji', $event)\"\n        @focus-skin-selector=\"$refs.skinSelectorRef.focusSkinSelector()\"\n        @focus-search-input=\"showSearch ? $refs.searchInputRef.focusSearchInput() : $refs.tabsetRef.focusTabset()\"\n        @keydown.esc.native=\"$emit('close')\"\n      />\n    </div>\n    <div class=\"d-emoji-picker--footer\">\n      <emoji-description :emoji=\"highlightedEmoji\" />\n      <emoji-skin-selector\n        ref=\"skinSelectorRef\"\n        :is-hovering=\"!!highlightedEmoji\"\n        :skin-selector-button-tooltip-label=\"skinSelectorButtonTooltipLabel\"\n        :skin-tone=\"skinTone\"\n        @skin-tone=\"$emit('skin-tone', $event)\"\n        @focus-tabset=\"$refs.tabsetRef.focusTabset()\"\n        @focus-last-emoji=\"$refs.emojiSelectorRef.focusLastEmoji()\"\n        @keydown.esc.native=\"$emit('close')\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport EmojiTabset from './modules/emoji_tabset.vue';\nimport EmojiSearch from './modules/emoji_search.vue';\nimport EmojiSelector from './modules/emoji_selector.vue';\nimport EmojiDescription from './modules/emoji_description.vue';\nimport EmojiSkinSelector from './modules/emoji_skin_selector.vue';\n\nexport default {\n  name: 'DtEmojiPicker',\n\n  components: {\n    EmojiTabset,\n    EmojiSearch,\n    EmojiSelector,\n    EmojiDescription,\n    EmojiSkinSelector,\n  },\n\n  props: {\n    /**\n     * The array with recently used  emoji object\n     * This list is necessary to fill the recently used tab\n     * @type {Array}\n     * @default []\n     * @example\n     * <dt-emoji-picker :recentlyUsedEmojis=\"[emojiObject, emojiObject]\" />\n     */\n    // TODO try to simplify this to achieve an array of unicode characters and not an entire emoji data object\n    recentlyUsedEmojis: {\n      type: Array,\n    },\n\n    /**\n     * The placeholder text for the search input\n     * @type {String}\n     * @required\n     * @example\n     * <dt-emoji-picker :searchPlaceholderLabel=\"'Search...'\" />\n     */\n    searchPlaceholderLabel: {\n      type: String,\n      required: true,\n    },\n\n    /**\n     * The label for the search results tab\n     * @type {String}\n     * @required\n     * @example\n     * <dt-emoji-picker :searchResultsLabel=\"'Search results'\" />\n     */\n    searchResultsLabel: {\n      type: String,\n      required: true,\n    },\n\n    /**\n     * The label for the search no results\n     * @type {String}\n     * @required\n     * @example\n     * <dt-emoji-picker :searchNoResultsLabel=\"'No results'\" />\n     */\n    searchNoResultsLabel: {\n      type: String,\n      required: true,\n    },\n\n    /**\n     * The list of tabsets to show, it is necessary to be updated with the correct language\n     * It must respect the provided order.\n     * @type {Array}\n     * @required\n     * @example\n     * <dt-emoji-picker\n     *  :tabSetLabels=\"['Most recently used', 'Smileys and people', 'Nature',\n     *    'Food', 'Activity', 'Travel', 'Objects', 'Symbols', 'Flags']\" />\n     */\n    tabSetLabels: {\n      type: Array,\n      required: true,\n    },\n\n    /**\n     * The skin tone to show the emojis\n     * This prop gives the possibility to use the skin tone selected by the user previously\n     * @type {String}\n     * @default 'Default'\n     * @values 'Default', 'Light', 'MediumLight', 'Medium', 'MediumDark', 'Dark'\n     * @example\n     * <dt-emoji-picker :skinTone=\"'Default'\" />\n     */\n    skinTone: {\n      type: String,\n      default: 'Default',\n    },\n\n    /**\n     * Tooltip shown when skin selector button is hovered.\n     * @type {String}\n     * @required\n     * @example\n     * <dt-emoji-picker :skin-selector-button-tooltip-label=\"'Change default skin tone'\" />\n     */\n    skinSelectorButtonTooltipLabel: {\n      type: String,\n      required: true,\n    },\n\n    /**\n     * Sets the search query that filters emojis.\n     * @type {String}\n     * @example\n     * <dt-emoji-picker search-query=\"smile\" />\n     */\n    searchQuery: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * Shows the search input\n     * @type {Boolean}\n     * @example\n     * <dt-emoji-picker :show-search=\"false\" />\n     */\n    showSearch: {\n      type: Boolean,\n      default: true,\n    },\n  },\n\n  data () {\n    return {\n      internalSearchQuery: this.searchQuery,\n      highlightedEmoji: null,\n      selectedTabset: {},\n      scrollIntoTab: 0,\n    };\n  },\n\n  computed: {\n    showRecentlyUsedTab () {\n      return this.recentlyUsedEmojis?.length > 0;\n    },\n  },\n\n  watch: {\n    searchQuery (value) {\n      this.internalSearchQuery = value;\n    },\n  },\n\n  methods: {\n    scrollToSelectedTabset (tabId) {\n      this.internalSearchQuery = '';\n      this.selectedTabset = { ...this.selectedTabset, tabId };\n    },\n\n    updateScrollIntoTab (value) {\n      this.scrollIntoTab = value;\n    },\n\n    updateHighlightedEmoji (emoji) {\n      this.highlightedEmoji = emoji;\n    },\n  },\n};\n</script>\n"],"names":["EmojiTabset","EmojiSearch","EmojiSelector","EmojiDescription","EmojiSkinSelector"],"mappings":";;;;;;;;AAuEA,MAAA,YAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,aAAAA,aAAA;AAAA,IACA,aAAAC,aAAA;AAAA,IACA,eAAAC,eAAA;AAAA,IACA,kBAAAC,kBAAA;AAAA,IACA,mBAAAC,oBAAA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,oBAAA;AAAA,MACA,MAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,wBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,oBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,gCAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,qBAAA,KAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA,CAAA;AAAA,MACA,eAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,sBAAA;;AACA,eAAA,UAAA,uBAAA,mBAAA,UAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,YAAA,OAAA;AACA,WAAA,sBAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,SAAA;AAAA,IACA,uBAAA,OAAA;AACA,WAAA,sBAAA;AACA,WAAA,iBAAA,EAAA,GAAA,KAAA,gBAAA,MAAA;AAAA,IACA;AAAA,IAEA,oBAAA,OAAA;AACA,WAAA,gBAAA;AAAA,IACA;AAAA,IAEA,uBAAA,OAAA;AACA,WAAA,mBAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}