1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Composables
- import { useToggleScope } from "./toggleScope.mjs"; // Utilities
- import { computed, inject, onScopeDispose, provide, reactive, readonly, shallowRef, toRaw, watchEffect } from 'vue';
- import { getCurrentInstance } from "../util/index.mjs"; // Types
- const StackSymbol = Symbol.for('vuetify:stack');
- const globalStack = reactive([]);
- export function useStack(isActive, zIndex, disableGlobalStack) {
- const vm = getCurrentInstance('useStack');
- const createStackEntry = !disableGlobalStack;
- const parent = inject(StackSymbol, undefined);
- const stack = reactive({
- activeChildren: new Set()
- });
- provide(StackSymbol, stack);
- const _zIndex = shallowRef(+zIndex.value);
- useToggleScope(isActive, () => {
- const lastZIndex = globalStack.at(-1)?.[1];
- _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
- if (createStackEntry) {
- globalStack.push([vm.uid, _zIndex.value]);
- }
- parent?.activeChildren.add(vm.uid);
- onScopeDispose(() => {
- if (createStackEntry) {
- const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid);
- globalStack.splice(idx, 1);
- }
- parent?.activeChildren.delete(vm.uid);
- });
- });
- const globalTop = shallowRef(true);
- if (createStackEntry) {
- watchEffect(() => {
- const _isTop = globalStack.at(-1)?.[0] === vm.uid;
- setTimeout(() => globalTop.value = _isTop);
- });
- }
- const localTop = computed(() => !stack.activeChildren.size);
- return {
- globalTop: readonly(globalTop),
- localTop,
- stackStyles: computed(() => ({
- zIndex: _zIndex.value
- }))
- };
- }
- //# sourceMappingURL=stack.mjs.map
|