42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { mergeProps as _mergeProps, createVNode as _createVNode } from "vue";
|
|
// Components
|
|
import { VIcon } from "../VIcon/index.js"; // Composables
|
|
import { useLocale } from "../../composables/locale.js"; // Utilities
|
|
import { callEvent } from "../../util/index.js"; // Types
|
|
export function useInputIcon(props) {
|
|
const {
|
|
t
|
|
} = useLocale();
|
|
function InputIcon({
|
|
name,
|
|
color,
|
|
...attrs
|
|
}) {
|
|
const localeKey = {
|
|
prepend: 'prependAction',
|
|
prependInner: 'prependAction',
|
|
append: 'appendAction',
|
|
appendInner: 'appendAction',
|
|
clear: 'clear'
|
|
}[name];
|
|
const listener = props[`onClick:${name}`];
|
|
function onKeydown(e) {
|
|
if (e.key !== 'Enter' && e.key !== ' ') return;
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
callEvent(listener, new PointerEvent('click', e));
|
|
}
|
|
const label = listener && localeKey ? t(`$vuetify.input.${localeKey}`, props.label ?? '') : undefined;
|
|
return _createVNode(VIcon, _mergeProps({
|
|
"icon": props[`${name}Icon`],
|
|
"aria-label": label,
|
|
"onClick": listener,
|
|
"onKeydown": onKeydown,
|
|
"color": color
|
|
}, attrs), null);
|
|
}
|
|
return {
|
|
InputIcon
|
|
};
|
|
}
|
|
//# sourceMappingURL=InputIcon.js.map
|