{"version":3,"file":"search.mjs","sources":["../../../../../../../packages/components/search/src/search.tsx"],"sourcesContent":["import { type ExtractPropTypes, defineComponent, ref } from 'vue'\n\n// Utils\nimport {\n  createNamespace,\n  extend,\n  makeObjectProp,\n  makeStringProp,\n  pick,\n  preventDefault,\n  truthProp,\n} from '@xzx-design/utils'\nimport { useExpose, useId } from '@xzx-design/hooks'\nimport { Search } from '@xzx-design/icons-vue'\nimport { Field, fieldSharedProps } from '../../field'\nimport type { IconsComponent } from '@xzx-design/components'\n\n// Types\nimport type { SearchShape } from './types'\nimport type { FieldInstance } from '../../field'\n\nconst [name, bem, t] = createNamespace('search')\n\nexport const searchProps = extend({}, fieldSharedProps, {\n  label: String,\n  shape: makeStringProp<SearchShape>('square'),\n  leftIcon: makeObjectProp<IconsComponent>(Search),\n  clearable: truthProp,\n  actionText: String,\n  background: String,\n  showAction: Boolean,\n  loading: Boolean,\n})\n\nexport type SearchProps = ExtractPropTypes<typeof searchProps>\n\nexport default defineComponent({\n  name,\n\n  props: searchProps,\n\n  emits: [\n    'blur',\n    'focus',\n    'clear',\n    'search',\n    'cancel',\n    'clickInput',\n    'clickLeftIcon',\n    'clickRightIcon',\n    'update:modelValue',\n  ],\n\n  setup(props, { emit, slots, attrs }) {\n    const id = useId()\n    const fieldRef = ref<FieldInstance>()\n\n    const onCancel = () => {\n      if (!slots.action) {\n        emit('update:modelValue', '')\n        emit('cancel')\n      }\n    }\n\n    const onKeypress = (event: KeyboardEvent) => {\n      const ENTER_CODE = 13\n      if (event.keyCode === ENTER_CODE) {\n        preventDefault(event)\n        emit('search', props.modelValue)\n      }\n    }\n\n    const getInputId = () => props.id || `${id}-input`\n\n    const renderLabel = () => {\n      if (slots.label || props.label) {\n        return (\n          <label\n            class={bem('label')}\n            for={getInputId()}\n            data-allow-mismatch=\"attribute\"\n          >\n            {slots.label ? slots.label() : props.label}\n          </label>\n        )\n      }\n    }\n\n    const renderAction = () => {\n      if (props.showAction) {\n        const text = props.actionText || t('cancel')\n        return (\n          <div\n            class={bem('action')}\n            role=\"button\"\n            tabindex={0}\n            onClick={onCancel}\n          >\n            {slots.action ? slots.action() : text}\n          </div>\n        )\n      }\n    }\n\n    const blur = () => fieldRef.value?.blur()\n    const focus = () => fieldRef.value?.focus()\n    const onBlur = (event: Event) => emit('blur', event)\n    const onFocus = (event: Event) => emit('focus', event)\n    const onClear = (event: MouseEvent) => emit('clear', event)\n    const onClickInput = (event: MouseEvent) => emit('clickInput', event)\n    const onClickLeftIcon = (event: MouseEvent) => emit('clickLeftIcon', event)\n    const onClickRightIcon = (event: MouseEvent) =>\n      emit('clickRightIcon', event)\n\n    const fieldPropNames = Object.keys(fieldSharedProps) as Array<\n      keyof typeof fieldSharedProps\n    >\n\n    const renderField = () => {\n      const fieldAttrs = extend({}, attrs, pick(props, fieldPropNames), {\n        id: getInputId(),\n      })\n\n      const onInput = (value: string) => emit('update:modelValue', value)\n\n      return (\n        <Field\n          v-slots={pick(slots, ['left-icon', 'right-icon'])}\n          ref={fieldRef}\n          type=\"search\"\n          class={bem('field', { 'with-message': fieldAttrs.errorMessage })}\n          border={false}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onClear={onClear}\n          onKeypress={onKeypress}\n          onClickInput={onClickInput}\n          onClickLeftIcon={onClickLeftIcon}\n          onClickRightIcon={onClickRightIcon}\n          onUpdate:modelValue={onInput}\n          {...fieldAttrs}\n        />\n      )\n    }\n\n    useExpose({ focus, blur })\n\n    return () => (\n      <div\n        class={bem({ 'show-action': props.showAction })}\n        style={{ background: props.background }}\n      >\n        {slots.left?.()}\n        <div class={bem('content', props.shape)}>\n          {renderLabel()}\n          {renderField()}\n        </div>\n        {renderAction()}\n      </div>\n    )\n  },\n})\n"],"names":["name","bem","t","createNamespace","searchProps","extend","fieldSharedProps","label","String","shape","makeStringProp","leftIcon","makeObjectProp","Search","clearable","truthProp","actionText","background","showAction","Boolean","loading","defineComponent","props","emits","setup","emit","slots","attrs","id","useId","fieldRef","ref","onCancel","action","onKeypress","event","ENTER_CODE","keyCode","preventDefault","modelValue","getInputId","renderLabel","_createVNode","renderAction","text","blur","value","focus","onBlur","onFocus","onClear","onClickInput","onClickLeftIcon","onClickRightIcon","fieldPropNames","Object","keys","renderField","fieldAttrs","pick","onInput","Field","_mergeProps","errorMessage","useExpose","left"],"mappings":"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"}