diff --git a/client/App.tsx b/client/App.tsx index bb5912c..0353de5 100644 --- a/client/App.tsx +++ b/client/App.tsx @@ -3,66 +3,20 @@ import { BrowserRouter as Router, Route, Switch as RouteSwitch } from 'react-rou import './index.css'; -import Pattern from './constants/Pattern'; -import Explore from './Explore'; -import Home from './Home'; -import DetailsLoader from './loaders/DetailsLoader'; +import ExplorePage from './pages/ExplorePage'; +import HomePage from './pages/HomePage'; +import PatternPage from './pages/PatternPage'; const App = () => { return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + } // tslint:disable-line + /> ); diff --git a/client/components/CoverCard.tsx b/client/components/CoverCard.tsx index aa3a81c..bacd873 100644 --- a/client/components/CoverCard.tsx +++ b/client/components/CoverCard.tsx @@ -12,7 +12,7 @@ interface CoverCardProps { const CoverCard: React.FC = ({ pattern }) => { return ( = ({ title, children }) => { ~ item.toLowerCase().split(' ').join('-'); diff --git a/client/Explore.tsx b/client/pages/ExplorePage.tsx similarity index 93% rename from client/Explore.tsx rename to client/pages/ExplorePage.tsx index 51a6ace..57bb5cf 100644 --- a/client/Explore.tsx +++ b/client/pages/ExplorePage.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import CoverCard from './components/CoverCard'; -import Heading from './components/Heading'; -import Pattern from './constants/Pattern'; -import useDocumentTitle from './hooks/useDocumentTitle'; -import Layout from './layouts/Layout'; +import CoverCard from '../components/CoverCard'; +import Heading from '../components/Heading'; +import Pattern from '../constants/Pattern'; +import useDocumentTitle from '../hooks/useDocumentTitle'; +import Layout from '../layouts/Layout'; -const Home = () => { +const ExplorePage = () => { useDocumentTitle('CSS Layout ∙ Explore'); return ( @@ -96,6 +96,7 @@ const Home = () => { + @@ -128,4 +129,4 @@ const Home = () => { ); }; -export default Home; +export default ExplorePage; diff --git a/client/Home.tsx b/client/pages/HomePage.tsx similarity index 97% rename from client/Home.tsx rename to client/pages/HomePage.tsx index f7abc74..3ffb173 100644 --- a/client/Home.tsx +++ b/client/pages/HomePage.tsx @@ -3,12 +3,12 @@ import { Link } from 'react-router-dom'; import './home.css'; -import CoverCard from './components/CoverCard'; -import Pattern from './constants/Pattern'; -import useDocumentTitle from './hooks/useDocumentTitle'; -import Layout from './layouts/Layout'; +import CoverCard from '../components/CoverCard'; +import Pattern from '../constants/Pattern'; +import useDocumentTitle from '../hooks/useDocumentTitle'; +import Layout from '../layouts/Layout'; -const Home = () => { +const HomePage = () => { useDocumentTitle('CSS Layout'); return ( @@ -169,7 +169,7 @@ const Home = () => { 50+ patterns { + @@ -240,4 +241,4 @@ const Home = () => { ); }; -export default Home; +export default HomePage; diff --git a/client/pages/PatternPage.tsx b/client/pages/PatternPage.tsx new file mode 100644 index 0000000..42d999f --- /dev/null +++ b/client/pages/PatternPage.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import Pattern from '../constants/Pattern'; +import DetailsLoader from '../loaders/DetailsLoader'; + +interface PatternPageProps { + pattern: string; +} + +const capitalizeFirstLetter = (s: string) => `${s.charAt(0).toUpperCase()}${s.slice(1)}`; + +const PatternPage: React.FC = ({ pattern }) => { + const name = pattern.split('-').map((s) => capitalizeFirstLetter(s)).join(''); + const patterns = Object.keys(Pattern); + + return ( + patterns.indexOf(name) === -1 + // TODO: Render 404 + ? 404 + : + ); +}; + +export default PatternPage; diff --git a/client/home.css b/client/pages/home.css similarity index 100% rename from client/home.css rename to client/pages/home.css diff --git a/client/patterns/floating-label/Cover.tsx b/client/patterns/floating-label/Cover.tsx new file mode 100644 index 0000000..4fbb19d --- /dev/null +++ b/client/patterns/floating-label/Cover.tsx @@ -0,0 +1,46 @@ +import React from 'react'; + +import Frame from '../../placeholders/Frame'; +import Rectangle from '../../placeholders/Rectangle'; + +const Cover: React.FC<{}> = () => { + return ( + + + + + + + + ); +}; + +export default Cover; diff --git a/client/patterns/floating-label/Details.tsx b/client/patterns/floating-label/Details.tsx new file mode 100644 index 0000000..683f53d --- /dev/null +++ b/client/patterns/floating-label/Details.tsx @@ -0,0 +1,99 @@ +import React from 'react'; + +import './floating-label.css'; + +import DetailsLayout from '../../layouts/DetailsLayout'; +import BrowserFrame from '../../placeholders/BrowserFrame'; + +const Details: React.FC<{}> = () => { + return ( + + + + Type something in the input to see how the label is shown up. + + + + + + Placeholder + + + + )} + source={` + + + + + + + + Placeholder + +`} + /> + + + ); +}; + +export default Details; diff --git a/client/patterns/floating-label/floating-label.css b/client/patterns/floating-label/floating-label.css new file mode 100644 index 0000000..c07ed08 --- /dev/null +++ b/client/patterns/floating-label/floating-label.css @@ -0,0 +1,9 @@ +.floating-container label { + opacity: 0; +} + +.floating-container input:not(:placeholder-shown) + label { + background: #FFF; + transform: translate(0, -50%); + opacity: 1; +} diff --git a/client/patterns/input-add-on/Cover.tsx b/client/patterns/input-addon/Cover.tsx similarity index 100% rename from client/patterns/input-add-on/Cover.tsx rename to client/patterns/input-addon/Cover.tsx diff --git a/client/patterns/input-add-on/Details.tsx b/client/patterns/input-addon/Details.tsx similarity index 100% rename from client/patterns/input-add-on/Details.tsx rename to client/patterns/input-addon/Details.tsx diff --git a/public/sitemap.xml b/public/sitemap.xml index 225bf0d..39daf10 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,42 +1,43 @@ - https://csslayout.io/holy-grail - https://csslayout.io/sidebar - https://csslayout.io/split-screen - https://csslayout.io/sticky-footer - https://csslayout.io/sticky-header - https://csslayout.io/badge - https://csslayout.io/breadcrumb - https://csslayout.io/button-with-icon - https://csslayout.io/card - https://csslayout.io/centering - https://csslayout.io/docked-at-corner - https://csslayout.io/dot-navigation - https://csslayout.io/drop-area - https://csslayout.io/feature-list - https://csslayout.io/fixed-at-corner - https://csslayout.io/input-addon - https://csslayout.io/media-object - https://csslayout.io/menu - https://csslayout.io/modal - https://csslayout.io/notification - https://csslayout.io/pagination - https://csslayout.io/previous-next-buttons - https://csslayout.io/pricing-table - https://csslayout.io/progress-bar - https://csslayout.io/property-list - https://csslayout.io/questions-and-answers - https://csslayout.io/radio-switch - https://csslayout.io/rating - https://csslayout.io/same-height-columns - https://csslayout.io/search-box - https://csslayout.io/separator - https://csslayout.io/simple-grid - https://csslayout.io/slider - https://csslayout.io/spin-button - https://csslayout.io/split-navigation - https://csslayout.io/stepper-input - https://csslayout.io/switch - https://csslayout.io/tab - https://csslayout.io/toggle-password-visibility - https://csslayout.io/wizard + https://csslayout.io/patterns + https://csslayout.io/patterns/holy-grail + https://csslayout.io/patterns/sidebar + https://csslayout.io/patterns/split-screen + https://csslayout.io/patterns/sticky-footer + https://csslayout.io/patterns/sticky-header + https://csslayout.io/patterns/badge + https://csslayout.io/patterns/breadcrumb + https://csslayout.io/patterns/button-with-icon + https://csslayout.io/patterns/card + https://csslayout.io/patterns/centering + https://csslayout.io/patterns/docked-at-corner + https://csslayout.io/patterns/dot-navigation + https://csslayout.io/patterns/drop-area + https://csslayout.io/patterns/feature-list + https://csslayout.io/patterns/fixed-at-corner + https://csslayout.io/patterns/input-addon + https://csslayout.io/patterns/media-object + https://csslayout.io/patterns/menu + https://csslayout.io/patterns/modal + https://csslayout.io/patterns/notification + https://csslayout.io/patterns/pagination + https://csslayout.io/patterns/previous-next-buttons + https://csslayout.io/patterns/pricing-table + https://csslayout.io/patterns/progress-bar + https://csslayout.io/patterns/property-list + https://csslayout.io/patterns/questions-and-answers + https://csslayout.io/patterns/radio-switch + https://csslayout.io/patterns/rating + https://csslayout.io/patterns/same-height-columns + https://csslayout.io/patterns/search-box + https://csslayout.io/patterns/separator + https://csslayout.io/patterns/simple-grid + https://csslayout.io/patterns/slider + https://csslayout.io/patterns/spin-button + https://csslayout.io/patterns/split-navigation + https://csslayout.io/patterns/stepper-input + https://csslayout.io/patterns/switch + https://csslayout.io/patterns/tab + https://csslayout.io/patterns/toggle-password-visibility + https://csslayout.io/patterns/wizard \ No newline at end of file