Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
642c67d
feat: add MethodPage and update stack handling in forms and queries
Noemie-Koelblen May 11, 2026
226c17a
fix: enhance layout and structure in MethodPage with responsive adjus…
Noemie-Koelblen May 11, 2026
52107a8
feat: add StickyMenuBar component for enhanced navigation with scroll…
Noemie-Koelblen May 11, 2026
58c88d4
feat: add TimelineLink component for smooth scrolling and enhanced na…
Noemie-Koelblen May 11, 2026
0d94952
feat: add CallToAction component and adjust padding in MethodPage layout
Noemie-Koelblen May 11, 2026
d8dd4f8
fix: adjust scroll offsets in StickyMenuBar and TimelineLink for impr…
Noemie-Koelblen May 11, 2026
f9ec84e
feat: add MultipleMarquee component for enhanced display of stacked i…
Noemie-Koelblen May 11, 2026
77f25b6
feat: integrate Swiper for enhanced carousel functionality in MethodP…
Noemie-Koelblen May 12, 2026
3aa41af
feat: add new method sections for development, IA infrastructure, pro…
Noemie-Koelblen May 12, 2026
c615fd0
feat: refactor MethodDevSection layout to use ResponsiveBox and enhan…
Noemie-Koelblen May 12, 2026
edc0ce8
feat: update breakpoints in MethodDevSection and SectionCard for resp…
Noemie-Koelblen May 12, 2026
8c7ed40
feat: remove unused breakpoint variable from MethodDevSection
Noemie-Koelblen May 12, 2026
82ccbd3
feat: refactor MethodIAInfraSection layout for improved structure and…
Noemie-Koelblen May 12, 2026
ae8ae8f
feat: enhance MethodWorkspaceSection with scroll-based image animatio…
Noemie-Koelblen May 12, 2026
197ff5a
feat: refactor StickyMenuBar to improve scroll handling and optimize …
Noemie-Koelblen May 12, 2026
7a26daa
feat: update spaceBetween in Swiper for improved layout consistency
Noemie-Koelblen May 12, 2026
d677cc5
feat: enhance MethodContractSection layout with responsive grid and v…
Noemie-Koelblen May 12, 2026
a576c6c
feat: improve text formatting and layout adjustments in various compo…
Noemie-Koelblen May 12, 2026
15c07fb
Merge pull request #79 from 0N0K0/017-process
Noemie-Koelblen May 12, 2026
2caf16b
feat: enhance layout consistency across multiple sections and improve…
Noemie-Koelblen May 12, 2026
f76e3b7
Merge pull request #80 from 0N0K0/017-process
Noemie-Koelblen May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-dropzone": "^15.0.0",
"react-router-dom": "^7.13.2"
"react-fast-marquee": "^1.6.5",
"react-router-dom": "^7.13.2",
"swiper": "^12.1.4"
},
"devDependencies": {
"@eslint/js": "^9.30.1",
Expand Down
11 changes: 10 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import NotFound from "./pages/404";
import useSettings from "./hooks/queries/useSettings";
import AboutPage from "./pages/public/AboutPage";
import Testimonies from "./pages/admin/TestimonyPage";
import MethodPage from "./pages/public/MethodPage";

function MaintenanceGuard() {
const location = useLocation();
Expand Down Expand Up @@ -90,7 +91,7 @@ export default function App() {
"::-webkit-scrollbar-corner": {
background: "transparent",
},
"ul:not(.MuiList-root, .MuiImageList-root)": {
"ul:not(.MuiList-root, .MuiImageList-root, .MuiTimeline-root)": {
margin: "0 0 0 2rem",
paddingLeft: "0",
li: {
Expand Down Expand Up @@ -155,6 +156,14 @@ export default function App() {
</PublicLayout>
}
/>
<Route
path="/method"
element={
<PublicLayout>
<MethodPage />
</PublicLayout>
}
/>
<Route
path="/legal-notice"
element={
Expand Down
Binary file added src/assets/images/setup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
93 changes: 93 additions & 0 deletions src/components/custom/CustomTimelineItem.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import TimelineItem from "@mui/lab/TimelineItem";
import TimelineSeparator from "@mui/lab/TimelineSeparator";
import TimelineConnector, {
type TimelineConnectorProps,
} from "@mui/lab/TimelineConnector";
import TimelineContent, {
type TimelineContentProps,
} from "@mui/lab/TimelineContent";
import TimelineDot, { type TimelineDotProps } from "@mui/lab/TimelineDot";
import TimelineOppositeContent, {
type TimelineOppositeContentProps,
} from "@mui/lab/TimelineOppositeContent";
import Icon from "@mdi/react";
import { useTheme } from "@mui/material";

export default function CustomTimelineItem({
content,
contentProps,
oppositeContent,
oppositeContentProps,
dotIcon,
dotProps,
connector = true,
connectorProps,
}: {
content: React.ReactNode;
contentProps?: TimelineContentProps;
oppositeContent?: React.ReactNode;
oppositeContentProps?: TimelineOppositeContentProps;
dotIcon?: string;
dotProps?: TimelineDotProps;
connector?: boolean;
connectorProps?: TimelineConnectorProps;
}) {
const theme = useTheme();
return (
<TimelineItem sx={{ minHeight: "42px" }}>
{oppositeContent && (
<TimelineOppositeContent
{...oppositeContentProps}
sx={{
color: "text.secondary",
...oppositeContentProps?.sx,
}}
>
{oppositeContent}
</TimelineOppositeContent>
)}
<TimelineSeparator>
<TimelineDot
color="primary"
variant="outlined"
{...dotProps}
sx={{
marginY: "0px",
borderWidth: "1px",
padding: dotIcon ? "7px" : "5px",
...dotProps?.sx,
}}
>
{dotIcon && (
<Icon
path={dotIcon}
size={0.8333}
style={{ color: theme.palette.primary.light }}
/>
)}
</TimelineDot>
{connector && (
<TimelineConnector
{...connectorProps}
sx={{
width: "1px",
minHeight: "24px",
backgroundColor: theme.palette.primary.main,
...connectorProps?.sx,
}}
/>
)}
</TimelineSeparator>
<TimelineContent
{...contentProps}
sx={{
paddingY: "0px",
marginTop: dotIcon ? "6px" : "-6px",
...contentProps?.sx,
}}
>
{content}
</TimelineContent>
</TimelineItem>
);
}
101 changes: 101 additions & 0 deletions src/components/custom/MultipleMarquee.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { Children } from "react";
import Marquee from "react-fast-marquee";
import { ResponsiveStack } from "./ResponsiveLayout";
import type { SxProps } from "@mui/system";

const MAX_ROWS = 10;

export default function MultipleMarquee({
rows = 2,
distribute = false,
direction = "horizontal",
gap = "24px",
sx,
children,
...props
}: {
rows?: number;
distribute?: boolean;
direction?: "vertical" | "horizontal";
gap?: string;
sx?: SxProps;
children: React.ReactNode[];
} & Omit<React.ComponentProps<typeof Marquee>, "children" | "direction">) {
const items = Children.toArray(children).filter(Boolean);

if (!rows || rows < 2 || rows > MAX_ROWS) {
throw new Error(
`MultipleMarquee: le nombre de lignes doit être compris entre 2 et ${MAX_ROWS}.`,
);
}

if (!distribute) {
// Mêmes items dans toutes les lignes
return (
<ResponsiveStack
rowGap={gap}
sx={{
gap,
flexDirection: direction === "vertical" ? "row" : "column",
...sx,
}}
>
{[...Array(rows)].map((_, rowIndex) => (
<Marquee
key={rowIndex}
direction={
rowIndex % 2 === 0
? direction === "horizontal"
? "left"
: "up"
: direction === "horizontal"
? "right"
: "down"
}
{...props}
>
{items}
</Marquee>
))}
</ResponsiveStack>
);
}

// Distribuer les items sur les lignes
const itemsPerRow = Math.ceil(items.length / rows);

return (
<ResponsiveStack
rowGap={gap}
sx={{
gap,
flexDirection: direction === "vertical" ? "row" : "column",
...sx,
}}
>
{[...Array(rows)].map((_, rowIndex) => {
const start = rowIndex * itemsPerRow;
const end = start + itemsPerRow;
const rowItems = items.slice(start, end);

return (
<Marquee
key={rowIndex}
direction={
rowIndex % 2 === 0
? direction === "horizontal"
? "left"
: "up"
: direction === "horizontal"
? "right"
: "down"
}
{...props}
>
{rowItems}
</Marquee>
);
})}
</ResponsiveStack>
);
}
Loading
Loading