diff --git a/resources/css/components/stacks.css b/resources/css/components/stacks.css index c76fbd68d42..ce7700ddaeb 100644 --- a/resources/css/components/stacks.css +++ b/resources/css/components/stacks.css @@ -23,11 +23,8 @@ } .stack-container { @apply absolute inset-0; - transition: left 200ms ease-out; - - [dir='rtl'] & { - transition: right 200ms ease-out; - } + transition: transform 200ms ease-out; + -webkit-backface-visibility: hidden; } .stack-overlay { @@ -42,17 +39,6 @@ @apply relative h-[calc(100svh-1rem)]; } - .stack-overlay-fade-enter-active, - .stack-overlay-fade-leave-active { - transition: opacity 200ms ease-out; - will-change: opacity; - } - - .stack-overlay-fade-enter-from, - .stack-overlay-fade-leave-to { - opacity: 0; - } - .stack-slide-enter-active, .stack-slide-leave-active { transition: transform 200ms ease-out, opacity 200ms ease-out; @@ -81,10 +67,14 @@ @media all and (max-width: 980px) { .stacks-on-stacks .stack-container { left: 0 !important; + right: 0 !important; + width: 100% !important; + transform: translateX(0) !important; [dir='rtl'] & { - left: unset !important; + left: 0 !important; right: 0 !important; + transform: translateX(0) !important; } } } diff --git a/resources/js/components/blueprints/Fields.vue b/resources/js/components/blueprints/Fields.vue index 9166a02ef77..8764dfc2870 100644 --- a/resources/js/components/blueprints/Fields.vue +++ b/resources/js/components/blueprints/Fields.vue @@ -34,26 +34,25 @@ + - - - - + -
+
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);
+
+ - -
- -