File tree Expand file tree Collapse file tree 6 files changed +107
-0
lines changed
Expand file tree Collapse file tree 6 files changed +107
-0
lines changed Original file line number Diff line number Diff line change 1+ import type { Meta , StoryObj } from "@storybook/react-vite" ;
2+
3+ import Header from "." ;
4+ import { Placeholder } from "../Placeholder" ;
5+ import ColorSchemeToggle from "../ColorSchemeToggle" ;
6+
7+ const meta = {
8+ title : "Organism/Header" ,
9+ component : Header ,
10+ argTypes : {
11+ logo : { type : "function" } ,
12+ elements : { type : "function" } ,
13+ } ,
14+ } satisfies Meta < typeof Header > ;
15+
16+ export default meta ;
17+ type Story = StoryObj < typeof meta > ;
18+
19+ export const Default : Story = {
20+ args : {
21+ logo : < Placeholder height = "100%" width = "100px" label = "Logo" /> ,
22+ elements : [
23+ < ColorSchemeToggle key = "color-scheme-toggle" /> ,
24+ < Placeholder
25+ key = "element-1"
26+ height = "100%"
27+ width = "100px"
28+ label = "Element"
29+ /> ,
30+ < Placeholder key = "navigation" height = "100%" label = "Navigation Link" /> ,
31+ ] ,
32+ } ,
33+ } ;
Original file line number Diff line number Diff line change 1+ @use " sass:map" ;
2+
3+ @use " ../sass/mixins" ;
4+ @use " ../sass/tokens" ;
5+
6+ .header {
7+ width : 100% ;
8+ height : tokens .$header-height ;
9+ padding : map .get (tokens .$spacing , base );
10+ box-sizing : border-box ;
11+
12+ border-bottom : 1px solid map .get (tokens .$grays , light );
13+ @include mixins .light-mode {
14+ background-color : map .get (tokens .$grays , faint );
15+ border-bottom : 1px solid map .get (tokens .$grays , less-faint );
16+ }
17+
18+ .header__container {
19+ align-items : center ;
20+ display : flex ;
21+ flex-direction : row ;
22+ gap : map .get (tokens .$spacing , base );
23+ justify-content : space-between ;
24+
25+ @include mixins .container ;
26+ }
27+
28+ .header__logo {
29+ height : 100% ;
30+ display : flex ;
31+ align-items : center ;
32+ flex-direction : row ;
33+ gap : map .get (tokens .$spacing , sm );
34+ }
35+
36+ .header__elements {
37+ align-items : center ;
38+ display : flex ;
39+ flex-direction : row ;
40+ gap : map .get (tokens .$spacing , base );
41+ }
42+ }
Original file line number Diff line number Diff line change 1+ import { type FC } from "react" ;
2+
3+ import "./index.scss" ;
4+ import React from "react" ;
5+
6+ export interface HeaderProps {
7+ logo ?: React . ReactNode ;
8+ elements ?: React . ReactNode [ ] ;
9+ }
10+
11+ const Header : FC < HeaderProps > = ( { logo, elements = [ ] } ) => {
12+ return (
13+ < header className = "header" role = "banner" >
14+ < div className = "header__container" >
15+ { ! ! logo && < div className = "header__logo" > { logo } </ div > }
16+
17+ { elements . length > 0 && (
18+ < div className = "header__elements" > { elements } </ div >
19+ ) }
20+ </ div >
21+ </ header >
22+ ) ;
23+ } ;
24+
25+ export default Header ;
Original file line number Diff line number Diff line change @@ -55,6 +55,8 @@ export {
5555 default as GitHubButton ,
5656} from "./GitHubButton" ;
5757
58+ export { type HeaderProps , default as Header } from "./Header" ;
59+
5860export {
5961 type LabeledInputProps ,
6062 type LabeledInputRenderProps ,
Original file line number Diff line number Diff line change 1212@mixin container {
1313 padding-inline : map .get (tokens .$spacing , base );
1414 margin-inline : auto ;
15+ box-sizing : border-box ;
1516 width : 100% ;
1617
1718 @media (width >= map .get (tokens .$breakpoints , small )) {
Original file line number Diff line number Diff line change 11@use " sass:map" ;
22
3+ $header-height : 3.5rem ;
4+
35$brand : (
46 red : #ec2c5b ,
57 yellow : #faa61a ,
@@ -18,6 +20,8 @@ $brand: (
1820);
1921
2022$grays : (
23+ faint : color-mix (in oklab , oklch (0.985 0.002 247.839 ) 95% , transparent ),
24+ less-faint : oklch (0.928 0.006 264.531 ),
2125 very-light : oklch (0.872 0.01 258.338 ),
2226 light : oklch (0.446 0.03 256.802 ),
2327 dark : oklch (0.21 0.034 264.665 ),
You can’t perform that action at this time.
0 commit comments