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 ( + <> +
+
+
+ +
+
{title}
+
+
+ {children} +
+
+ + ); + }; + + 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