31 lines
852 B
JavaScript
31 lines
852 B
JavaScript
|
// Composables
|
||
|
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
|
||
|
import { computed } from 'vue';
|
||
|
import { EventProp, getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
|
||
|
// Composables
|
||
|
export const makeFocusProps = propsFactory({
|
||
|
focused: Boolean,
|
||
|
'onUpdate:focused': EventProp()
|
||
|
}, 'focus');
|
||
|
export function useFocus(props) {
|
||
|
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
||
|
const isFocused = useProxiedModel(props, 'focused');
|
||
|
const focusClasses = computed(() => {
|
||
|
return {
|
||
|
[`${name}--focused`]: isFocused.value
|
||
|
};
|
||
|
});
|
||
|
function focus() {
|
||
|
isFocused.value = true;
|
||
|
}
|
||
|
function blur() {
|
||
|
isFocused.value = false;
|
||
|
}
|
||
|
return {
|
||
|
focusClasses,
|
||
|
isFocused,
|
||
|
focus,
|
||
|
blur
|
||
|
};
|
||
|
}
|
||
|
//# sourceMappingURL=focus.mjs.map
|