+
diff --git a/resources/js/components/ui/Stack/Stack.vue b/resources/js/components/ui/Stack/Stack.vue
index c914c0f887a..3172762e683 100644
--- a/resources/js/components/ui/Stack/Stack.vue
+++ b/resources/js/components/ui/Stack/Stack.vue
@@ -45,6 +45,7 @@ const stack = ref(null);
const mounted = ref(false);
const visible = ref(false);
const isHovering = ref(false);
+const isStackEntering = ref(false);
const escBinding = ref(null);
const windowInnerWidth = ref(window.innerWidth);
@@ -91,6 +92,18 @@ const leftOffset = computed(() => {
const hasChild = computed(() => stacks.count() > depth.value);
const direction = computed(() => config.get('direction', 'ltr'));
+const containerStyle = computed(() => {
+ if (props.size === 'full') {
+ return direction.value === 'ltr' ? { left: 0, transform: 'translateZ(0)' } : { right: 0, transform: 'translateZ(0)' };
+ }
+ const x = leftOffset.value;
+ const width = `calc(100% - ${x}px)`;
+ if (direction.value === 'ltr') {
+ return { left: 0, width, transform: `translateX(${x}px) translateZ(0)` };
+ }
+ return { right: 0, width, transform: `translateX(-${x}px) translateZ(0)` };
+});
+
const clickedHitArea = () => {
if (!visible.value) return;
if (!runCloseCallback()) return;
@@ -111,6 +124,13 @@ const mouseOutHitArea = () => {
};
const windowResized = () => windowInnerWidth.value = window.innerWidth;
+const stackEnteringChanged = (entering) => {
+ isStackEntering.value = entering;
+
+ if (entering) {
+ isHovering.value = false;
+ }
+};
function open() {
if (!stack.value) stack.value = stacks.add(instance.proxy);
@@ -180,10 +200,13 @@ watch(
);
onMounted(() => {
+ events.$on('stacks.entering', stackEnteringChanged);
+
if (props.open) open();
});
onBeforeUnmount(() => {
+ events.$off('stacks.entering', stackEnteringChanged);
cleanup();
});
@@ -202,21 +225,19 @@ provide('closeStack', close);