| <template> | 
 |   <div class="search-global"> | 
 |     <b-form-group | 
 |       :label="$t('global.form.search')" | 
 |       :label-for="`searchInput-${_uid}`" | 
 |       label-class="invisible" | 
 |       class="mb-2" | 
 |     > | 
 |       <b-input-group size="md" class="align-items-center"> | 
 |         <b-input-group-prepend> | 
 |           <icon-search class="search-icon" /> | 
 |         </b-input-group-prepend> | 
 |         <b-form-input | 
 |           :id="`searchInput-${_uid}`" | 
 |           ref="searchInput" | 
 |           v-model="filter" | 
 |           class="search-input" | 
 |           type="text" | 
 |           :aria-label="$t('global.form.search')" | 
 |           :placeholder="placeholder" | 
 |           @input="onChangeInput" | 
 |         > | 
 |         </b-form-input> | 
 |         <b-button | 
 |           v-if="filter" | 
 |           variant="link" | 
 |           class="btn-icon-only input-action-btn" | 
 |           :title="$t('global.ariaLabel.clearSearch')" | 
 |           @click="onClearSearch" | 
 |         > | 
 |           <icon-close /> | 
 |           <span class="sr-only">{{ $t('global.ariaLabel.clearSearch') }}</span> | 
 |         </b-button> | 
 |       </b-input-group> | 
 |     </b-form-group> | 
 |   </div> | 
 | </template> | 
 |  | 
 | <script> | 
 | import IconSearch from '@carbon/icons-vue/es/search/16'; | 
 | import IconClose from '@carbon/icons-vue/es/close/20'; | 
 |  | 
 | export default { | 
 |   name: 'Search', | 
 |   components: { IconSearch, IconClose }, | 
 |   props: { | 
 |     placeholder: { | 
 |       type: String, | 
 |       default: function () { | 
 |         return this.$t('global.form.search'); | 
 |       }, | 
 |     }, | 
 |   }, | 
 |   data() { | 
 |     return { | 
 |       filter: null, | 
 |     }; | 
 |   }, | 
 |   methods: { | 
 |     onChangeInput() { | 
 |       this.$emit('change-search', this.filter); | 
 |     }, | 
 |     onClearSearch() { | 
 |       this.filter = ''; | 
 |       this.$emit('clear-search'); | 
 |       this.$refs.searchInput.focus(); | 
 |     }, | 
 |   }, | 
 | }; | 
 | </script> | 
 |  | 
 | <style lang="scss" scoped> | 
 | .search-input { | 
 |   padding-left: ($spacer * 2); | 
 | } | 
 | .search-icon { | 
 |   position: absolute; | 
 |   left: 10px; | 
 |   top: 12px; | 
 |   z-index: 4; | 
 |   stroke: gray('400'); | 
 | } | 
 | </style> |