2021-09-04 20:24:32 -08:00
|
|
|
<template>
|
|
|
|
<component :is="tag">
|
2025-06-20 00:09:12 +07:00
|
|
|
<slot
|
|
|
|
name="activator"
|
|
|
|
v-bind="{ toggle, state }"
|
|
|
|
/>
|
|
|
|
<slot v-bind="{ state, toggle }" />
|
2021-09-04 20:24:32 -08:00
|
|
|
</component>
|
|
|
|
</template>
|
2022-05-25 10:14:24 -08:00
|
|
|
|
2021-09-04 20:24:32 -08:00
|
|
|
<script lang="ts">
|
2025-06-20 00:09:12 +07:00
|
|
|
export default defineNuxtComponent({
|
2021-09-04 20:24:32 -08:00
|
|
|
props: {
|
2025-06-20 00:09:12 +07:00
|
|
|
modelValue: {
|
2021-11-20 14:30:38 -09:00
|
|
|
type: Boolean,
|
|
|
|
default: false,
|
|
|
|
},
|
2021-09-04 20:24:32 -08:00
|
|
|
tag: {
|
|
|
|
type: String,
|
|
|
|
default: "div",
|
|
|
|
},
|
|
|
|
},
|
2025-06-20 00:09:12 +07:00
|
|
|
emits: ["update:modelValue"],
|
|
|
|
setup(props, context) {
|
2022-08-13 21:38:26 -08:00
|
|
|
const state = ref(false);
|
|
|
|
|
|
|
|
const toggle = () => {
|
|
|
|
state.value = !state.value;
|
|
|
|
};
|
2021-11-20 14:30:38 -09:00
|
|
|
|
|
|
|
watch(state, () => {
|
2025-06-20 00:09:12 +07:00
|
|
|
context.emit("update:modelValue", state.value);
|
2021-11-20 14:30:38 -09:00
|
|
|
});
|
|
|
|
|
2021-09-04 20:24:32 -08:00
|
|
|
return {
|
|
|
|
state,
|
|
|
|
toggle,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
});
|
|
|
|
</script>
|