diff --git a/client/constants/Pattern.ts b/client/constants/Pattern.ts
index 5a150d1..a8972de 100644
--- a/client/constants/Pattern.ts
+++ b/client/constants/Pattern.ts
@@ -1,4 +1,5 @@
enum Pattern {
+ Accordion = 'Accordion',
Avatar = 'Avatar',
AvatarList = 'Avatar list',
Badge = 'Badge',
diff --git a/client/pages/ExplorePage.tsx b/client/pages/ExplorePage.tsx
index 15b3f69..14ec37b 100644
--- a/client/pages/ExplorePage.tsx
+++ b/client/pages/ExplorePage.tsx
@@ -88,6 +88,7 @@ const ExplorePage = () => {
+
diff --git a/client/patterns/accordion/Cover.tsx b/client/patterns/accordion/Cover.tsx
new file mode 100644
index 0000000..0128446
--- /dev/null
+++ b/client/patterns/accordion/Cover.tsx
@@ -0,0 +1,71 @@
+import React from 'react';
+
+import Frame from '../../placeholders/Frame';
+import Line from '../../placeholders/Line';
+import Rectangle from '../../placeholders/Rectangle';
+import Triangle from '../../placeholders/Triangle';
+
+const Cover: React.FC<{}> = () => {
+ return (
+
+
+
+ );
+};
+
+export default Cover;
diff --git a/client/patterns/accordion/Details.tsx b/client/patterns/accordion/Details.tsx
new file mode 100644
index 0000000..09ac3b3
--- /dev/null
+++ b/client/patterns/accordion/Details.tsx
@@ -0,0 +1,176 @@
+import React, { useState } from 'react';
+
+import RelatedPatterns from '../../components/RelatedPatterns';
+import Pattern from '../../constants/Pattern';
+import DetailsLayout from '../../layouts/DetailsLayout';
+import Block from '../../placeholders/Block';
+import BrowserFrame from '../../placeholders/BrowserFrame';
+import Rectangle from '../../placeholders/Rectangle';
+import Triangle from '../../placeholders/Triangle';
+
+interface ItemProps {
+ index: number;
+ title: React.ReactNode;
+}
+
+const Details: React.FC<{}> = () => {
+ const [activeItem, setActiveItem] = useState(1);
+
+ const Item: React.FC
= ({ index, title, children }) => {
+ const isOpened = (index === activeItem);
+ const click = () => setActiveItem(isOpened ? -1 : index);
+ return (
+ <>
+
+ >
+ );
+ };
+
+ return (
+
+ }
+ >
+
+
+ }
+ >
+
+
+
+
+ )}
+ source={`
+
+
+
+
+
+
+
+
+ ...
+
+
+ ...
+
+
+
+
+`}
+ />
+
+
+
+
+ );
+};
+
+export default Details;
diff --git a/client/patterns/questions-and-answers/Details.tsx b/client/patterns/questions-and-answers/Details.tsx
index 26a524f..abf0a70 100644
--- a/client/patterns/questions-and-answers/Details.tsx
+++ b/client/patterns/questions-and-answers/Details.tsx
@@ -1,5 +1,7 @@
import React, { useState } from 'react';
+import RelatedPatterns from '../../components/RelatedPatterns';
+import Pattern from '../../constants/Pattern';
import DetailsLayout from '../../layouts/DetailsLayout';
import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
@@ -18,7 +20,7 @@ const Details: React.FC<{}> = () => {
const isOpened = (index === activeItem);
const click = () => setActiveItem(isOpened ? -1 : index);
return (
-
+ <>
= () => {
{title}
- {isOpened && children}
-
+
+ {children}
+
+ >
);
};
@@ -53,6 +62,15 @@ const Details: React.FC<{}> = () => {
}}
>
+
+
+
= () => {
index={0}
title={
}
>
-
+
= () => {
index={1}
title={
}
>
-
+
@@ -83,7 +101,7 @@ const Details: React.FC<{}> = () => {
index={2}
title={
}
>
-
+
@@ -112,6 +130,8 @@ const Details: React.FC<{}> = () => {
`}
/>
+
+
);
};
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 5adeb20..42c87b3 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -5,6 +5,7 @@
https://csslayout.io/patterns/split-screen
https://csslayout.io/patterns/sticky-footer
https://csslayout.io/patterns/sticky-header
+ https://csslayout.io/patterns/accordion
https://csslayout.io/patterns/avatar
https://csslayout.io/patterns/avatar-list
https://csslayout.io/patterns/badge