From 5ca778be7f7766f538bfe39b6275a582da290652 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 10:43:23 +0530 Subject: [PATCH 1/4] Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 in /generator-refArch (#789) Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1. --- updated-dependencies: - dependency-name: "@isaacs/brace-expansion" dependency-version: 5.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- generator-refArch/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/generator-refArch/package-lock.json b/generator-refArch/package-lock.json index 9f3b20b536..8c5922aeb7 100644 --- a/generator-refArch/package-lock.json +++ b/generator-refArch/package-lock.json @@ -431,9 +431,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" From 3261087da4e0ebb17f1410139005417d7c92817b Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Basseville Date: Thu, 5 Feb 2026 13:05:34 +0100 Subject: [PATCH 2/4] Add @julian-schambeck as code owner (#791) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 304fd797bc..a48ef22668 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ -* @navyakhurana @jmsrpp @cernus76 +* @navyakhurana @jmsrpp @cernus76 @julian-schambeck docs/ref-arch/ @SAP/architecture-center-admin From 901e4059e361800de91f1822ef4496e0a40e5bb6 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Basseville Date: Fri, 6 Feb 2026 13:23:01 +0100 Subject: [PATCH 3/4] New carousel with css (#792) --- .../TrustedTecPartnersSection.module.css | 40 ++++--- src/sections/TrustedTecPartnersSection.tsx | 104 +++++++----------- 2 files changed, 62 insertions(+), 82 deletions(-) diff --git a/src/sections/TrustedTecPartnersSection.module.css b/src/sections/TrustedTecPartnersSection.module.css index 59d1c9dc9f..b24461cec9 100644 --- a/src/sections/TrustedTecPartnersSection.module.css +++ b/src/sections/TrustedTecPartnersSection.module.css @@ -29,6 +29,7 @@ justify-content: center; padding: 0 30px; box-sizing: border-box; + flex-shrink: 0; } .logoImg { @@ -38,11 +39,11 @@ max-width: 200px; display: block; object-fit: contain; + transition: transform 0.3s ease; } .logoImg:hover { transform: scale(1.2); - transition: transform 0.3s ease; } .title { @@ -63,6 +64,23 @@ overflow: hidden; } +/* Smooth infinite scroll container */ +.carouselTrack { + display: flex; + width: max-content; + animation: scroll 30s linear infinite; + will-change: transform; +} + +@keyframes scroll { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-33.333%); /* Move by 1/3 since we have 3 sets */ + } +} + .carouselLogo::before, .carouselLogo::after { content: ""; @@ -91,19 +109,6 @@ background: linear-gradient(to left, var(--carousel-fade-bg), transparent); } -.carouselLogo :global(.slick-slide) { - width: auto !important; - min-width: 120px; - max-width: 300px; -} - -.carouselLogo :global(.slick-slide) > div { - width: 100% !important; - display: flex; - justify-content: center; - align-items: center; -} - .logoList { display: none; } :root[data-theme='dark'] .title, @@ -122,9 +127,8 @@ padding: 0 20px; } - .carouselLogo :global(.slick-slide) { - min-width: 100px; - max-width: 200px; + .logoWrapper { + padding: 0 20px; } .innerWrapper { @@ -195,4 +199,4 @@ width: auto; height: auto; } -} +} \ No newline at end of file diff --git a/src/sections/TrustedTecPartnersSection.tsx b/src/sections/TrustedTecPartnersSection.tsx index ce53c8dd62..756ae5a1b5 100644 --- a/src/sections/TrustedTecPartnersSection.tsx +++ b/src/sections/TrustedTecPartnersSection.tsx @@ -1,11 +1,9 @@ -import React, { JSX, useRef } from 'react'; +import React, { JSX, useRef, useEffect } from 'react'; import useBaseUrl from '@docusaurus/useBaseUrl'; import { useColorMode } from '@docusaurus/theme-common'; import { Title, Text } from '@ui5/webcomponents-react'; import '@ui5/webcomponents-icons/dist/AllIcons'; import styles from './TrustedTecPartnersSection.module.css'; -import ReactCarousel from '@site/src/components/ReactCarousel'; -import Slider from 'react-slick'; import { useHistory } from '@docusaurus/router'; import { useSidebarFilterStore } from '@site/src/store/sidebar-store'; @@ -55,12 +53,12 @@ export default function TrustedTecPartnersSection(): JSX.Element { const { colorMode } = useColorMode(); const getImg = (name: string) => useBaseUrl(`/img/landingPage/${name}`); const docsUrl = useBaseUrl('/docs'); - const sliderRef = useRef(null); + const trackRef = useRef(null); const history = useHistory(); const setPartners = useSidebarFilterStore((state) => state.setPartners); const setTechDomains = useSidebarFilterStore((state) => state.setTechDomains); - function renderLogo(item, idx) { + function renderLogo(item, idx, isDuplicate = false) { const imgSrc = getImg(colorMode === 'dark' && item.darkImg ? item.darkImg : item.lightImg); const handleClick = (e) => { e.preventDefault(); @@ -81,36 +79,12 @@ export default function TrustedTecPartnersSection(): JSX.Element { }; return ( -
+
{ - if (sliderRef.current) { - sliderRef.current.slickPause(); - const track = sliderRef.current.innerSlider?.list?.querySelector( - '.slick-track' - ) as HTMLElement | null; - if (track) { - const computed = window.getComputedStyle(track).transform; - track.style.transform = computed; - track.style.transition = 'none'; - } - } - }} - onMouseLeave={() => { - if (sliderRef.current) { - const track = sliderRef.current.innerSlider?.list?.querySelector( - '.slick-track' - ) as HTMLElement | null; - if (track) { - track.style.transition = ''; // reset - } - sliderRef.current.slickPlay(); // resume - } - }} > {item.name} @@ -118,6 +92,35 @@ export default function TrustedTecPartnersSection(): JSX.Element { ); } + // Smooth infinite scroll animation using CSS + useEffect(() => { + const track = trackRef.current; + if (!track) return; + + let animationId: number; + let isPaused = false; + + // Pause on hover + const handleMouseEnter = () => { + isPaused = true; + track.style.animationPlayState = 'paused'; + }; + + const handleMouseLeave = () => { + isPaused = false; + track.style.animationPlayState = 'running'; + }; + + track.addEventListener('mouseenter', handleMouseEnter); + track.addEventListener('mouseleave', handleMouseLeave); + + return () => { + track.removeEventListener('mouseenter', handleMouseEnter); + track.removeEventListener('mouseleave', handleMouseLeave); + if (animationId) cancelAnimationFrame(animationId); + }; + }, []); + return (
@@ -125,39 +128,12 @@ export default function TrustedTecPartnersSection(): JSX.Element { Empowering Innovation Together
- already handled by logoList - settings: 'unslick', // disables carousel - }, - ]} - /> +
+ {/* Render logos three times for seamless infinite scroll */} + {logos.map((logo, idx) => renderLogo(logo, idx, false))} + {logos.map((logo, idx) => renderLogo(logo, idx, true))} + {logos.map((logo, idx) => renderLogo(logo, idx + 100, true))} +
{/* Static vertical list (mobile) */} @@ -165,4 +141,4 @@ export default function TrustedTecPartnersSection(): JSX.Element {
); -} +} \ No newline at end of file From 74d38b1d1be0ea83cc80625ee45abe6af060888d Mon Sep 17 00:00:00 2001 From: Julian Schambeck Date: Fri, 6 Feb 2026 13:24:51 +0100 Subject: [PATCH 4/4] Release v2.2606.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 538209f5da..c16ff604c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sap-architecture-center", - "version": "v2.2605.1", + "version": "v2.2606.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sap-architecture-center", - "version": "v2.2605.1", + "version": "v2.2606.1", "dependencies": { "@docusaurus/core": "^3.9.2", "@docusaurus/plugin-content-docs": "^3.9.2", diff --git a/package.json b/package.json index b8dcfaa4f0..8d28261952 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sap-architecture-center", - "version": "v2.2605.1", + "version": "v2.2606.1", "private": true, "scripts": { "clean": "rm -rf build",