{"version":3,"file":"emoji_skin_selector.vue.cjs","sources":["../../../../components/emoji_picker/modules/emoji_skin_selector.vue"],"sourcesContent":["<template>\n  <div data-qa=\"skin-selector\">\n    <div\n      v-show=\"isOpen\"\n      class=\"d-emoji-picker__skin-list\"\n    >\n      <button\n        v-for=\"(skin, index) in skinList\"\n        :key=\"skin.name\"\n        :ref=\"`skinRef-${index}`\"\n        :class=\"{\n          'selected': skinSelected?.skinCode === skin.skinCode,\n        }\"\n        @click=\"selectSkin(skin)\"\n        @keydown=\"event => handleKeyDown(event, skin, index)\"\n      >\n        <img\n          class=\"d-icon d-icon--size-500\"\n          :alt=\"skin.name\"\n          :aria-label=\"skin.name\"\n          :title=\"skin.name\"\n          :src=\"`${cdnUrl + skin.unicode_output}.png`\"\n        >\n      </button>\n    </div>\n    <div\n      v-show=\"!isOpen\"\n      class=\"d-emoji-picker__skin-selected\"\n    >\n      <dt-tooltip placement=\"top-end\">\n        {{ skinSelectorButtonTooltipLabel }}\n        <template #anchor>\n          <button\n            ref=\"skinSelectorRef\"\n            :aria-label=\"skinSelectorButtonTooltipLabel\"\n            tabindex=\"-1\"\n            @click=\"toggleSkinList\"\n            @keydown=\"event => handleKeyDown(event)\"\n          >\n            <img\n              class=\"d-icon d-icon--size-500\"\n              :alt=\"skinSelected?.name\"\n              :aria-label=\"skinSelected?.name\"\n              :title=\"skinSelected?.name\"\n              :src=\"`${cdnUrl + skinSelected?.unicode_output}.png`\"\n            >\n          </button>\n        </template>\n      </dt-tooltip>\n    </div>\n  </div>\n</template>\n\n<script>\nimport DtTooltip from '@/components/tooltip/tooltip.vue';\nimport { CDN_URL, EMOJI_PICKER_SKIN_TONE_MODIFIERS } from '@/components/emoji_picker/emoji_picker_constants';\n\nexport default {\n  name: 'EmojiSkinSelector',\n\n  components: {\n    DtTooltip,\n  },\n\n  props: {\n    skinTone: {\n      type: String,\n      required: true,\n    },\n\n    isHovering: {\n      type: Boolean,\n      default: false,\n    },\n\n    skinSelectorButtonTooltipLabel: {\n      type: String,\n      required: true,\n    },\n  },\n\n  data () {\n    return {\n      isOpen: false,\n      skinSelected: null,\n      skinsRef: [],\n      cdnUrl: CDN_URL,\n    };\n  },\n\n  computed: {\n    skinPassedIn () {\n      return this.skinList.find(skin => skin.skinTone === this.skinTone);\n    },\n\n    skinList () {\n      return [\n        {\n          name: ':wave_tone1:',\n          unicode_output: '1f44b-1f3fb',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.LIGHT,\n          skinCode: '_tone1',\n        },\n        {\n          name: ':wave_tone2:',\n          unicode_output: '1f44b-1f3fc',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM_LIGHT,\n          skinCode: '_tone2',\n        },\n        {\n          name: ':wave_tone3:',\n          unicode_output: '1f44b-1f3fd',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM,\n          skinCode: '_tone3',\n        },\n        {\n          name: ':wave_tone4:',\n          unicode_output: '1f44b-1f3fe',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM_DARK,\n          skinCode: '_tone4',\n        },\n        {\n          name: ':wave_tone5:',\n          unicode_output: '1f44b-1f3ff',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.DARK,\n          skinCode: '_tone5',\n        },\n        {\n          name: ':wave:',\n          unicode_output: '1f44b',\n          skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.DEFAULT,\n          skinCode: '',\n        },\n      ];\n    },\n  },\n\n  watch: {\n    isHovering (newVal) {\n      if (newVal) {\n        this.isOpen = false;\n      }\n    },\n\n    skinTone (newVal, oldVal) {\n      if (newVal !== oldVal) {\n        this.skinSelected = this.skinPassedIn;\n      }\n    },\n  },\n\n  mounted () {\n    this.skinSelected = this.skinPassedIn;\n    this.$nextTick(() => {\n      this.setupSkinRefs();\n    });\n  },\n\n  methods: {\n    setupSkinRefs () {\n      this.skinList.forEach((skin, index) => {\n        const refKey = `skinRef-${index}`;\n        if (this.$refs[refKey]) {\n          this.$set(this.skinsRef, index, this.$refs[refKey][0]);\n        }\n      });\n    },\n\n    focusSkinSelector () {\n      if (this.$refs.skinSelectorRef) {\n        this.$refs.skinSelectorRef.focus();\n      }\n    },\n\n    selectSkin (skin) {\n      this.skinSelected = skin;\n      this.isOpen = false;\n      this.$emit('skin-tone', skin.skinTone);\n      this.$nextTick(() => {\n        this.focusSkinSelector();\n      });\n    },\n\n    handleKeyDown (event, skin, index) {\n      event.preventDefault();\n\n      if (event.key === 'ArrowLeft') {\n        if (index === 0) this.skinsRef[this.skinsRef.length - 1]?.focus();\n        this.skinsRef[index - 1]?.focus();\n      }\n\n      if (event.key === 'ArrowRight') {\n        if (this.skinsRef.length) this.skinsRef[0]?.focus();\n        this.skinsRef[index + 1]?.focus();\n      }\n\n      if (event.key === 'Enter') {\n        if (skin) { this.selectSkin(skin); } else {\n          this.toggleSkinList();\n        }\n      }\n\n      if (event.key === 'Tab') {\n        if (event.shiftKey) {\n          this.$emit('focus-last-emoji');\n        } else {\n          this.$emit('focus-tabset');\n        }\n      }\n    },\n\n    toggleSkinList () {\n      this.isOpen = !this.isOpen;\n      this.$nextTick(() => {\n        if (this.skinsRef[0]) {\n          this.skinsRef[0].focus();\n        }\n      });\n    },\n  },\n};\n</script>\n"],"names":["DtTooltip","CDN_URL","EMOJI_PICKER_SKIN_TONE_MODIFIERS"],"mappings":"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"}