From f71ee05124aac01e12e4132db94970b57d92b511 Mon Sep 17 00:00:00 2001 From: jbadan Date: Tue, 12 May 2020 12:44:26 -0700 Subject: [PATCH 01/14] custom header + footer --- .storybook/custom/Community.js | 31 ++++++ .storybook/custom/Footer.js | 26 +++++ .storybook/custom/Header.js | 32 ++++++ .storybook/custom/Import.js | 1 - .storybook/custom/custom.css | 148 ++++++++++++++++++++++++++ .storybook/custom/fundamentals.js | 15 +-- .storybook/preview.js | 18 +++- .storybook/static/assets/github.png | Bin 0 -> 3219 bytes .storybook/static/assets/linkedin.png | Bin 0 -> 18338 bytes .storybook/static/assets/sap.png | Bin 0 -> 18117 bytes .storybook/static/assets/slack.png | Bin 0 -> 5788 bytes .storybook/static/assets/twitter.png | Bin 0 -> 2676 bytes 12 files changed, 262 insertions(+), 9 deletions(-) create mode 100644 .storybook/custom/Community.js create mode 100644 .storybook/custom/Footer.js create mode 100644 .storybook/custom/Header.js create mode 100644 .storybook/static/assets/github.png create mode 100644 .storybook/static/assets/linkedin.png create mode 100644 .storybook/static/assets/sap.png create mode 100644 .storybook/static/assets/slack.png create mode 100644 .storybook/static/assets/twitter.png diff --git a/.storybook/custom/Community.js b/.storybook/custom/Community.js new file mode 100644 index 000000000..e20277cc4 --- /dev/null +++ b/.storybook/custom/Community.js @@ -0,0 +1,31 @@ +import React from 'react'; + +const Community = () => { + return ( +
+
+

Libraries

+ +
+
+

Community

+ +
+
+ ) +} + +Community.displayName = 'Community'; + +export default Community; diff --git a/.storybook/custom/Footer.js b/.storybook/custom/Footer.js new file mode 100644 index 000000000..ba08185b4 --- /dev/null +++ b/.storybook/custom/Footer.js @@ -0,0 +1,26 @@ +import React from 'react'; + +const Footer = () => { + return ( + + ) +} + +Footer.displayName = 'Footer'; + +export default Footer; diff --git a/.storybook/custom/Header.js b/.storybook/custom/Header.js new file mode 100644 index 000000000..2293f0fc8 --- /dev/null +++ b/.storybook/custom/Header.js @@ -0,0 +1,32 @@ +import './custom.css'; +import packageJson from '../../package.json'; +import React from 'react'; + +const Header = () => { + return ( +
+
+ Fundamental React +
+
+ + + GitHub + + + + + {`v${packageJson.version}`} + +
+
) +} + +Header.displayName = 'Header'; + +export default Header; diff --git a/.storybook/custom/Import.js b/.storybook/custom/Import.js index 1b2104dd8..8b47b6c33 100644 --- a/.storybook/custom/Import.js +++ b/.storybook/custom/Import.js @@ -1,4 +1,3 @@ -import './custom.css'; import { DocsContext } from '@storybook/addon-docs/blocks'; import { googlecode } from 'react-syntax-highlighter/dist/esm/styles/hljs'; import SyntaxHighlighter from 'react-syntax-highlighter'; diff --git a/.storybook/custom/custom.css b/.storybook/custom/custom.css index 831e28eee..978312e03 100644 --- a/.storybook/custom/custom.css +++ b/.storybook/custom/custom.css @@ -1,3 +1,18 @@ +body { + font-family: '72', 'Open Sans', sans-serif; +} + +/* override storybook max width */ +.sbdocs.sbdocs-content { + max-width: 2000px; + padding-left: 20px; +} + +/* override storybook section titles for color contrast */ +.simplebar-content .sidebar-subheading { + color: #0e7290; +} + .fr-version { font-size: 13px; font-weight: bold; @@ -29,3 +44,136 @@ text-align: center; height: 120px; } + +.fr-header { + box-sizing: border-box; + height: 40px; + position: fixed; + top: 0; + left: 0; + width: 100%; + color: #404040; + background-color: #f3f4f5; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 2px solid #d7dbde; + z-index: 10; +} + +.fr-header span { + margin-left: 20px; +} + +.fr-header__anchor { + padding: 10px; + color: #404040; + text-decoration: none; +} + +.fr-header__anchor + .fr-header__anchor { + margin-top: 5px; +} + +svg { + width: 1.5rem; + height: 1.5rem; +} + +.fr-footer { + padding: 16px 0; + font-size: 14px; + line-height: 1.33; + display: grid; + grid-template-columns: auto auto; + align-items: center; + border-top: 2px solid #d7dbde; + color: #404040; +} + +.fr-footer__logo { + margin-right: 16px; + min-width: 120px; + display: flex; + align-items: center; +} + +.fr-footer__slogan { + white-space: nowrap; + margin-right: 5px; + font-weight: bold; +} + +.fr-footer__copyright { + margin-left: 24px; + width: 100%; +} + +.fr-footer--left, +.fr-header--left { + display: flex; + align-items: center; + justify-self: start; + justify-content: space-between; +} + +.fr-footer--right, +.fr-header--right { + justify-self: end; + display: flex; + justify-content: space-between; +} + +.fr-footer--right a { + margin-left: 24px; + text-decoration: none; + color: #404040; +} + +.fr-footer--right a:hover { + color: #0e7290; +} + +.fr-community { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + border-top: 2px solid #d7dbde; + color: #404040; + font-size: 14px; +} + +.fr-community ul { + list-style-type: none; + padding-left: 0; +} + +.fr-community li { + margin: 0 0 10px 0; +} + +.fr-community h4 { + font-weight: normal; + font-size: 16px; +} + +.fr-community a { + color: #0e7290; + text-decoration: none; +} + +.fr-community img { + height: 18px; + vertical-align: middle; + margin-right: 10px; +} + +.fr-community a:hover { + color: #404040; +} + +.fr-community section { + width: 50%; + margin: 10px; +} diff --git a/.storybook/custom/fundamentals.js b/.storybook/custom/fundamentals.js index 849c8b703..bb4f0d0db 100644 --- a/.storybook/custom/fundamentals.js +++ b/.storybook/custom/fundamentals.js @@ -1,10 +1,12 @@ import { create } from '@storybook/theming'; import packageJson from '../../package.json'; +// TO DO: run axe for color contrast + export default create({ base: 'light', - colorPrimary: '#1085A7', // Fundamental logo blue - colorSecondary: '#1085A7', + colorPrimary: '#0e7290', // Fundamental logo blue + colorSecondary: '#0e7290', // UI appBg: '#EAEAEA', appContentBg: '#F3F4F5', @@ -13,13 +15,12 @@ export default create({ fontCode: 'monospace', // Text colors textColor: '#404040', - textInverseColor: '#1085A7', + textInverseColor: '#0e7290', // Toolbar default and active colors - barTextColor: 'white', - barSelectedColor: '#61DAFB', - barBg: '#354A5F', + barTextColor: '#404040', + barSelectedColor: '#0c637d', + barBg: '#dbdbdb', brandTitle: `Fundamental React v${packageJson.version}`, brandUrl: 'https://github.com/sap/fundamental-react', - // TO DO: replace with fundamental-react logo brandImage: './logo_text.png' }); diff --git a/.storybook/preview.js b/.storybook/preview.js index 9f93c2f7e..f8f177134 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -5,8 +5,11 @@ import React from 'react'; // import { withA11y } from '@storybook/addon-a11y'; import { withCssResources } from '@storybook/addon-cssresources'; import { withI18n } from 'storybook-addon-i18n'; -import { addDecorator, addParameters } from '@storybook/react'; +import Community from './custom/Community'; +import Footer from './custom/Footer'; +import Header from './custom/Header'; import Import from './custom/Import'; +import { addDecorator, addParameters } from '@storybook/react'; import { DocsContainer, Title, @@ -17,6 +20,16 @@ import { Stories, } from '@storybook/addon-docs/blocks'; + +// TO DO: investigate adding toc +// header +// add support link (github issues) +// version +// add github link + +//footer +// links + // Order of folders to display const headers = [ 'Introduction', @@ -73,6 +86,7 @@ addParameters({ page: () => { return ( <> +
<Subtitle /> <Import /> @@ -80,6 +94,8 @@ addParameters({ <Primary /> <Stories /> <Props /> + <Community /> + <Footer /> </> ) }, diff --git a/.storybook/static/assets/github.png b/.storybook/static/assets/github.png new file mode 100644 index 0000000000000000000000000000000000000000..05f43129e85a5858e23a77aa2918fcf1d2d75817 GIT binary patch literal 3219 zcmZ8jc{r5q7aq%4hDmnW*BTR2#**zb#ta5y>@6yyLH2AzikWIGC9+1*SVJWvdnIcN z*?mPSS?WVgvXmC_d%o|zuDQB?=epkW-shbA+~+*cJAX_HnPiPb$Rc1c7}D0p${D<w z|2_gdz&{YpQ-Z;`r^xoMco4d|xe*8iEEa2NX$icAg$3jR_|xp{>~J_7C~>N`wzixW zz~o>+AQFin1C#*<w10d4GZKje%>q@B0N%^X3o31GZ2<+4fu=wND=RCgnwXdf0X!ZL zO4ioaP&?EDFqi`6fd>W}0h7alG{I<40vLEm4cZyP|F->SoR9<lydR(p43q#DnhpTO zggl1;g<x|)fEM5!5Sk0}ka61o+y^9~5O|;om|zWXOwRX$x<DQ}DMy5(2>?h!ArJwV z2G)R<2O%&rne5=;0MVcgIYTKF3iSCn*Tqo-954~$gLa_9>E-MIfQ^j}$b%}t&<>o@ z5T8?mz@H+3|9@5J20#*81JZ=XfksFlgnvqbq*40ZC-4*h8tF`Of$?d%1T$_l4^Ga0 zT>T|#PrvhWOY&gu=%(7K&fhXIJhj`R-_IeXE-Yn!6Np{rIx>UqN%&#(_Zat?4cWFG z#6{cFar~v~Qy(;S4L=*`d{OyFdVoc8*fo^e^yqOz{o9nkT7__z`n5%-eJpSO%q~1T zuWH&pVZuA&c`_ryjLPo1UsqN9U9RP5(HpPs^HwV;c|nESS4(bT^!7wClP;EdxHpD| ziHR$w1^91AtXtdIT~F?S3xCy54|($R+9!>j3li}ME?1O4e7&Z;-^uyKJ&W)}*F$bO ze!kDJyWds5B2?Gx8{eB{eAkh3?)Wgi@7RN&d~!kW(19OSFqlAytrgal%GKS$b6njC z#yhkacKc*cBilFV*XFJXp4+lYOIVnXcX&YT34O7&9`R?ss)`p0?jE^$Qqscyc|^au z7WFOF{65Nv=KS$Pjk7C{JfAe$qnaAqShj-(hA&<+hh8+|rmnNKQLL=D4*N3ZLgM)A z*lZ=;^IgByo<_!>>dhcIURJpn8%^RG7_@&H79NYo*68d}e)Y9q8{Yb`g+Y#4m-w`~ zZAL~UUE=d{N20RhVD`*=LDdIs4_z|Xn>@~cTeeLxf3$rh=DPFmIZ<Lqxo?PQM^3LR z)6>%8gIP|qp{Pwc5nnCI8|G2EufaGzu)Au=k;h!$vC8!p@|f`v^b2--($O2ef5&|Z z+Fs5#>_d&jlu31|QBRqb?7aW-%M9(6Y5O^rUGQtc&A>Q(T1~}w5g)=G3g2e%z+d4B zlA$8xQ@#muPi`D|bB{_-WoM;iVZ&CUgC<FhKGzB-#v6kpD3Ue7lg2Mjf0!z*sru>W z7Blr~koD-q>(fGOAE(CqDwl<2jQn+xNSeRDrtA(rSeNys+fPw4Zj?xQ7^dQiGfqWD zFPHIH1r@RpahA}nS8O;^&n#y7c!j7UfB0k+ua!L$KKxP4C&L?&=5W5MN*3vWb8ibD z-I41Tk%M<n3$VGyC9dZ;Jg$BoZE{*yA<*1!r)7UR>!6-@kfOu$q@qwPa#2gG(SJF! zyf0V#NFCLQbz$sa(M{8}xM3?n83fheUheXz*4thM^xr>sIutsKtDGd|-xzB;rcrTl zOl~5oRL~JdD7u-Fqg!9CCwKekJp(@a)rLTK!*{LwS-K<FNi|tt1u-n%#|D?i1>_7a zkMsIC_^W!G)lJ cDgtFPLBiHI9zSqV{D{>J^3#V_jC6Pq&6$&F4RrwHzUr!TX~u zD^FmWV5!}suS3q;tc|`_MAhYekj3ELV^QP$_@YuKx~{S%gN`ScDZ+&URY%VfU-V#8 z>J*9Flt;0t#@Li-38WQcL{LJ3E|#Q8oM%L?qHf*Xl*pcH{YkD+pmAI4_qM9_?>%I+ zP2=)t=T6>2<|k(Lt?$Ywc8Ov#N{Ba^Hum^bzUc(gjpBK&?EThGX=yf5MI}Pyd2W1v z#-gf5Q3$#6T2iK|O;k!I6{Vk&82}4w;e$8SSXA{kpqh=v+x3YxI95w`5P#S??mI>j zf#psalZ%$Eg6~6|!sOadBBHS^2=}Gl7*w;+`_E2c{3v_uKF<t$EaHR95RcA0wj*BM zX^2~gN~5d)kUt};L%l*rP*doPFf0yndG-XNpc9@V@qqqI!jmRcLk?5wK_#CPnn9r$ zIhYu}nggT=5pv3hjj#)OAJEeS31^f0oWuA<G>wqb*DKzsh@p(QrR9s2xsD<fJK*W4 zFUQ{`Y^ulFW3}xo-U)hsLBq3#3+Vg9I^+?DX7v#|op5PQDzX$sRnVap(w$JY*uZ9{ zK3s#9&3$KI_Wcs4T8Sr`u{^!V@;RfoWpe?jbt#RcWdn^{#h$jrw*(w<!-F}#z?Y5b z=1YA`JHF&BVeuMA%(Y<op<-qDg_&ho;cRrm<5QPDnx%$VRIO{qiL~=eNG6}NWZiXI z<4R;_o53#(I5#R-IPAeISr%tX#GZi-71qTRKNmkdTZluQes@lFe}#(yZxvyvGaNON zCq+=sxyyIrl^l6SEv-&A;E9fsHYQXEZmwe`^n1H2-5o7uJ$C1Y{q9iJN^R{kr-YrN zn~>UftP4KZyDE!1xjhimj<RkQt2g+eY2|d~Wc|0DBl-?Z<Y9&y@wj<8Qn0*dA&<{I zFun5o12OgintemS#dS+*t537#vcdUj_FX0}OT`uHd;gJ^WiOb@9~AaZ-V-y>{pIeV z_~2}#aQ;q7lVeY_Jlc3So-fMN3nZDeh0w1AnYM+)N#A~mm)kZP&TgN(HkL?OQA#j@ z@wYx$WxtH{HMC5lBrmdTRtfqAmG|m5O%&4GEvJ_<i#E^hQ;<Uz#tRRxU`FCib2C|7 z0)#!j)D>(f8khE)D}ehM<{vZu;dJ3aVc%7asI!&@_X<qyoX7H}seBV}R<CWs6m9j= zD4m_pb0P;4r1{#)-wq12ZU{MSAna!6J)>l7tMG;IqeRyV3Ai3F_R6lv>Ij5zPVw7N zJyF+e2D+UQ8(A$J`8?g%lpbH|Zz0sqD2$xX>(ga**%j)g2pAjWPMkrS%oq=eE_vwY zB*o#cP*SneyK7GfDpVmN+Fn-9PMybGSh{G4?cg?EE)bzJ$}6+@7kUQ-&D{I<NHMe@ zjnbUiDu-}|mgc@P5zXnj1~GbDUn9)N$FjC<@E)A_wUX@DJEl}5J9QSPC4ZIpYcu)W z1+?UjYSK2VN}b?auJBw6)qygW6wJe38AwEG$W#w#TJ5|N{ZR1mQA#CO*AYZK{M%gf zAbCBoRgC%<e-L^qsn|U`TBX)8cKpSfIAd|c@A_i9V?ihFt5B8RB72(1v$V!gGm&y$ zdY&0R`9#?zr$Me%n(D_dFKd=h$P9h|Ywd1HQ%u6t8I^pQhW2Osr^g@C>&24Yy*f?{ z;PN`^YgLG}-AXE2H1p5A-vpKIyPBLLwa~Oll3EaJSr(pNvc0nBiK<w_Y5x%79IZ%c zdvSU~ah1C$|E9CFXy4v435VAgb!*3Z<dYdyy90vG_|kU!DHCfpN{4OU*l;&Is!@(p z+_K{-RTJ2#RVhJ#TQ_)4@f)WFXC4;~_E^!nIbi6`SM)3bj>f$C=$)+K4X^n)DN)^R z-`b_s+L4>zm%lJjCR2&o=pVcqq7l^kEOJytB<a-Zs<|(k9Wg#;POCB<bi81KPQQ<7 p4$NAv4PKlv*nRVNJly+xLS1|Na8QCc2K@Dc+2To7HI`oV{{fl>K-B;M literal 0 HcmV?d00001 diff --git a/.storybook/static/assets/linkedin.png b/.storybook/static/assets/linkedin.png new file mode 100644 index 0000000000000000000000000000000000000000..8444049d23d6ec98eff8096efaf7f6acf79acea2 GIT binary patch literal 18338 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 BlN|s6 literal 0 HcmV?d00001 diff --git a/.storybook/static/assets/sap.png b/.storybook/static/assets/sap.png new file mode 100644 index 0000000000000000000000000000000000000000..50bc9829095d0b8af9ac123cf142518dbc384117 GIT binary patch literal 18117 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 Vc|l>H!zlxhK2KLamvv4FO#oGxO^g5l literal 0 HcmV?d00001 diff --git a/.storybook/static/assets/slack.png b/.storybook/static/assets/slack.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8e9408e47b622c3b7e8975ea2a84b99647f39f GIT binary patch literal 5788 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 ap8p5+EUaMtFZbsF0000<MNUMnLSTYc2;W@* literal 0 HcmV?d00001 diff --git a/.storybook/static/assets/twitter.png b/.storybook/static/assets/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ee3cf6bbd871a7cfdf95e5f680f8ce92747b83 GIT binary patch literal 2676 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 RLInTUFb4t=UvB50{6BA)IGF$d literal 0 HcmV?d00001 From 072ef3cca54e4173aab2228ea42f1bab7dc2eaa0 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 13:01:28 -0700 Subject: [PATCH 02/14] match colors to spec --- .storybook/custom/DocsPage.js | 39 +++++++++++++++++++++++++ .storybook/custom/custom.css | 9 +++--- .storybook/custom/fundamentals.js | 4 +-- .storybook/preview.js | 33 +++------------------- package-lock.json | 47 +++++++++++-------------------- package.json | 3 +- 6 files changed, 69 insertions(+), 66 deletions(-) create mode 100644 .storybook/custom/DocsPage.js diff --git a/.storybook/custom/DocsPage.js b/.storybook/custom/DocsPage.js new file mode 100644 index 000000000..6c5c396c5 --- /dev/null +++ b/.storybook/custom/DocsPage.js @@ -0,0 +1,39 @@ +import Community from './Community'; +import Footer from './Footer'; +import Header from './Header'; +import Import from './Import'; +import tocbot from 'tocbot'; +import React, { useEffect } from 'react'; +import { + Title, + Subtitle, + Description, + Primary, + Props, + Stories, + } from '@storybook/addon-docs/blocks'; + +const DocsPage = () => { + // useEffect(() => { + // tocbot.init(Contents.tocOptions); + // }, []); + + return ( + <> + <Header /> + <Title /> + <Subtitle /> + <Import /> + <Description /> + <Primary /> + <Stories /> + <Props /> + <Community /> + <Footer /> + </> + ) +} + +DocsPage.displayName = 'DocsPage'; + +export default DocsPage; diff --git a/.storybook/custom/custom.css b/.storybook/custom/custom.css index 978312e03..9dcaac7bd 100644 --- a/.storybook/custom/custom.css +++ b/.storybook/custom/custom.css @@ -10,7 +10,7 @@ body { /* override storybook section titles for color contrast */ .simplebar-content .sidebar-subheading { - color: #0e7290; + color: #404040; } .fr-version { @@ -53,7 +53,7 @@ body { left: 0; width: 100%; color: #404040; - background-color: #f3f4f5; + background-color: #fff; display: flex; justify-content: space-between; align-items: center; @@ -130,7 +130,8 @@ svg { color: #404040; } -.fr-footer--right a:hover { +.fr-footer--right a:hover, +.fr-header__anchor:hover { color: #0e7290; } @@ -150,7 +151,7 @@ svg { } .fr-community li { - margin: 0 0 10px 0; + margin: 0 0 20px 0; } .fr-community h4 { diff --git a/.storybook/custom/fundamentals.js b/.storybook/custom/fundamentals.js index bb4f0d0db..3c33f1fac 100644 --- a/.storybook/custom/fundamentals.js +++ b/.storybook/custom/fundamentals.js @@ -8,8 +8,8 @@ export default create({ colorPrimary: '#0e7290', // Fundamental logo blue colorSecondary: '#0e7290', // UI - appBg: '#EAEAEA', - appContentBg: '#F3F4F5', + appBg: '#fff', + appContentBg: '#fff', // Typography fontBase: '"72", "Open Sans", sans-serif', fontCode: 'monospace', diff --git a/.storybook/preview.js b/.storybook/preview.js index f8f177134..e5b892f61 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -5,20 +5,10 @@ import React from 'react'; // import { withA11y } from '@storybook/addon-a11y'; import { withCssResources } from '@storybook/addon-cssresources'; import { withI18n } from 'storybook-addon-i18n'; -import Community from './custom/Community'; -import Footer from './custom/Footer'; -import Header from './custom/Header'; -import Import from './custom/Import'; +import { DocsContainer } from '@storybook/addon-docs/blocks'; +import DocsPage from './custom/DocsPage'; import { addDecorator, addParameters } from '@storybook/react'; -import { - DocsContainer, - Title, - Subtitle, - Description, - Primary, - Props, - Stories, - } from '@storybook/addon-docs/blocks'; + // TO DO: investigate adding toc @@ -83,22 +73,7 @@ addParameters({ ], docs: { container: DocsContainer, - page: () => { - return ( - <> - <Header /> - <Title /> - <Subtitle /> - <Import /> - <Description /> - <Primary /> - <Stories /> - <Props /> - <Community /> - <Footer /> - </> - ) - }, + page: DocsPage }, i18n: { provider: ({ children }) => <>{children}</>, diff --git a/package-lock.json b/package-lock.json index a92ade66c..347bab96f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10932,8 +10932,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -10957,15 +10956,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10982,22 +10979,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -11128,8 +11122,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -11143,7 +11136,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -11160,7 +11152,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11169,15 +11160,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -11198,7 +11187,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -11297,8 +11285,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -11312,7 +11299,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -11408,8 +11394,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -11451,7 +11436,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -11473,7 +11457,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -11522,15 +11505,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "optional": true + "dev": true } } }, @@ -23060,6 +23041,12 @@ "repeat-string": "^1.6.1" } }, + "tocbot": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.11.1.tgz", + "integrity": "sha512-JU2l8p2fvbg1Eo+zcWEo/XeVWlAbwyuF/p4mGf5FLRdj5jRSCyj/BJfHC6AIZo8PjA4O5VPidWaVFAbqIdyfHw==", + "dev": true + }, "toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", diff --git a/package.json b/package.json index 759129f63..f495a6312 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,8 @@ "storybook-addon-i18n": "^5.1.13", "stylelint": "^13.3.3", "stylelint-config-prettier": "^8.0.0", - "stylelint-prettier": "^1.1.2" + "stylelint-prettier": "^1.1.2", + "tocbot": "^4.11.1" }, "peerDependencies": { "react": "^16.8.0", From bd348018f4f565f9a1e0d237641019dc8b5b18f9 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 13:37:20 -0700 Subject: [PATCH 03/14] move components into folder --- .../custom/{ => components}/Community.js | 0 .../custom/{ => components}/DocsPage.js | 7 +- .storybook/custom/{ => components}/Footer.js | 0 .storybook/custom/{ => components}/Header.js | 3 +- .storybook/custom/{ => components}/Import.js | 0 .storybook/custom/custom.css | 180 -------- .storybook/custom/custom.scss | 189 ++++++++ .storybook/custom/register.js | 13 - .storybook/main.js | 11 +- .storybook/preview.js | 13 +- package-lock.json | 407 +++++++++++++++++- package.json | 6 +- 12 files changed, 612 insertions(+), 217 deletions(-) rename .storybook/custom/{ => components}/Community.js (100%) rename .storybook/custom/{ => components}/DocsPage.js (79%) rename .storybook/custom/{ => components}/Footer.js (100%) rename .storybook/custom/{ => components}/Header.js (96%) rename .storybook/custom/{ => components}/Import.js (100%) delete mode 100644 .storybook/custom/custom.css create mode 100644 .storybook/custom/custom.scss delete mode 100644 .storybook/custom/register.js diff --git a/.storybook/custom/Community.js b/.storybook/custom/components/Community.js similarity index 100% rename from .storybook/custom/Community.js rename to .storybook/custom/components/Community.js diff --git a/.storybook/custom/DocsPage.js b/.storybook/custom/components/DocsPage.js similarity index 79% rename from .storybook/custom/DocsPage.js rename to .storybook/custom/components/DocsPage.js index 6c5c396c5..2728c6fcb 100644 --- a/.storybook/custom/DocsPage.js +++ b/.storybook/custom/components/DocsPage.js @@ -1,9 +1,9 @@ +import '../custom.scss'; import Community from './Community'; import Footer from './Footer'; import Header from './Header'; import Import from './Import'; -import tocbot from 'tocbot'; -import React, { useEffect } from 'react'; +import React from 'react'; import { Title, Subtitle, @@ -14,9 +14,6 @@ import { } from '@storybook/addon-docs/blocks'; const DocsPage = () => { - // useEffect(() => { - // tocbot.init(Contents.tocOptions); - // }, []); return ( <> diff --git a/.storybook/custom/Footer.js b/.storybook/custom/components/Footer.js similarity index 100% rename from .storybook/custom/Footer.js rename to .storybook/custom/components/Footer.js diff --git a/.storybook/custom/Header.js b/.storybook/custom/components/Header.js similarity index 96% rename from .storybook/custom/Header.js rename to .storybook/custom/components/Header.js index 2293f0fc8..c80a3dcbc 100644 --- a/.storybook/custom/Header.js +++ b/.storybook/custom/components/Header.js @@ -1,5 +1,4 @@ -import './custom.css'; -import packageJson from '../../package.json'; +import packageJson from '../../../package.json'; import React from 'react'; const Header = () => { diff --git a/.storybook/custom/Import.js b/.storybook/custom/components/Import.js similarity index 100% rename from .storybook/custom/Import.js rename to .storybook/custom/components/Import.js diff --git a/.storybook/custom/custom.css b/.storybook/custom/custom.css deleted file mode 100644 index 9dcaac7bd..000000000 --- a/.storybook/custom/custom.css +++ /dev/null @@ -1,180 +0,0 @@ -body { - font-family: '72', 'Open Sans', sans-serif; -} - -/* override storybook max width */ -.sbdocs.sbdocs-content { - max-width: 2000px; - padding-left: 20px; -} - -/* override storybook section titles for color contrast */ -.simplebar-content .sidebar-subheading { - color: #404040; -} - -.fr-version { - font-size: 13px; - font-weight: bold; - line-height: 40px; -} -.fr-container { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: row; - flex-direction: row; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: distribute; - justify-content: space-around; - width: 100%; - padding: 10px 10px; -} - -.break { - flex-basis: 100%; - height: 0; - border-bottom: 10px solid transparent; -} - -.demo-icon-wrapper { - padding: 10px; - float: left; - width: 16%; - text-align: center; - height: 120px; -} - -.fr-header { - box-sizing: border-box; - height: 40px; - position: fixed; - top: 0; - left: 0; - width: 100%; - color: #404040; - background-color: #fff; - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 2px solid #d7dbde; - z-index: 10; -} - -.fr-header span { - margin-left: 20px; -} - -.fr-header__anchor { - padding: 10px; - color: #404040; - text-decoration: none; -} - -.fr-header__anchor + .fr-header__anchor { - margin-top: 5px; -} - -svg { - width: 1.5rem; - height: 1.5rem; -} - -.fr-footer { - padding: 16px 0; - font-size: 14px; - line-height: 1.33; - display: grid; - grid-template-columns: auto auto; - align-items: center; - border-top: 2px solid #d7dbde; - color: #404040; -} - -.fr-footer__logo { - margin-right: 16px; - min-width: 120px; - display: flex; - align-items: center; -} - -.fr-footer__slogan { - white-space: nowrap; - margin-right: 5px; - font-weight: bold; -} - -.fr-footer__copyright { - margin-left: 24px; - width: 100%; -} - -.fr-footer--left, -.fr-header--left { - display: flex; - align-items: center; - justify-self: start; - justify-content: space-between; -} - -.fr-footer--right, -.fr-header--right { - justify-self: end; - display: flex; - justify-content: space-between; -} - -.fr-footer--right a { - margin-left: 24px; - text-decoration: none; - color: #404040; -} - -.fr-footer--right a:hover, -.fr-header__anchor:hover { - color: #0e7290; -} - -.fr-community { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - border-top: 2px solid #d7dbde; - color: #404040; - font-size: 14px; -} - -.fr-community ul { - list-style-type: none; - padding-left: 0; -} - -.fr-community li { - margin: 0 0 20px 0; -} - -.fr-community h4 { - font-weight: normal; - font-size: 16px; -} - -.fr-community a { - color: #0e7290; - text-decoration: none; -} - -.fr-community img { - height: 18px; - vertical-align: middle; - margin-right: 10px; -} - -.fr-community a:hover { - color: #404040; -} - -.fr-community section { - width: 50%; - margin: 10px; -} diff --git a/.storybook/custom/custom.scss b/.storybook/custom/custom.scss new file mode 100644 index 000000000..32fa5e6c6 --- /dev/null +++ b/.storybook/custom/custom.scss @@ -0,0 +1,189 @@ +body { + font-family: '72', 'Open Sans', sans-serif; +} + +/* override storybook max width */ +.sbdocs.sbdocs-content { + max-width: 2000px; + padding-left: 20px; +} + +/* override storybook section titles for color contrast */ +.simplebar-content .sidebar-subheading { + color: #404040; +} + +/* header */ +.fr-header { + box-sizing: border-box; + height: 40px; + position: fixed; + top: 0; + left: 0; + width: 100%; + color: #404040; + background-color: #fff; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 2px solid #d7dbde; + z-index: 10; + + &--left { + display: flex; + align-items: center; + justify-self: start; + justify-content: space-between; + } + + &--right { + justify-self: end; + display: flex; + justify-content: space-between; + } + + span { + margin-left: 20px; + } + + a { + padding: 10px; + color: #404040; + text-decoration: none; + } + + a + a { + margin-top: 5px; + } + + svg { + width: 1.5rem; + height: 1.5rem; + } +} + +/* footer */ +.fr-footer { + padding: 16px 0; + font-size: 14px; + line-height: 1.33; + display: grid; + grid-template-columns: auto auto; + align-items: center; + border-top: 2px solid #d7dbde; + color: #404040; + + &__logo { + margin-right: 16px; + min-width: 120px; + display: flex; + align-items: center; + } + + &__slogan { + white-space: nowrap; + margin-right: 5px; + font-weight: bold; + } + + &__copyright { + margin-left: 24px; + width: 100%; + } + + &--left { + display: flex; + align-items: center; + justify-self: start; + justify-content: space-between; + } + + &--right { + justify-self: end; + display: flex; + justify-content: space-between; + + a { + margin-left: 24px; + text-decoration: none; + color: #404040; + + &:hover { + color: #0e7290; + } + } + } +} + +/* community social links */ +.fr-community { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + border-top: 2px solid #d7dbde; + color: #404040; + font-size: 14px; + + section { + width: 50%; + margin: 10px; + } + + ul { + list-style-type: none; + padding-left: 0; + } + + li { + margin: 0 0 20px 0; + } + + h4 { + font-weight: normal; + font-size: 16px; + } + + a { + color: #0e7290; + text-decoration: none; + + &:hover { + color: #404040; + } + } + + img { + height: 18px; + vertical-align: middle; + margin-right: 10px; + } +} + +/* story example layout containers */ +.fr-container { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: distribute; + justify-content: space-around; + width: 100%; + padding: 10px 10px; +} + +.break { + flex-basis: 100%; + height: 0; + border-bottom: 10px solid transparent; +} + +.demo-icon-wrapper { + padding: 10px; + float: left; + width: 16%; + text-align: center; + height: 120px; +} diff --git a/.storybook/custom/register.js b/.storybook/custom/register.js deleted file mode 100644 index 8fcb8b948..000000000 --- a/.storybook/custom/register.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable react/display-name */ -import './custom.css'; -import packageJson from '../../package.json'; -import React from 'react'; -import { addons, types } from '@storybook/addons'; - -// TO DO: replace with addons-toolbar when storybook 6.0.0 released -// https://www.npmjs.com/package/@storybook/addon-toolbars -addons.add('fundamental-react/title', { - title: 'Version', - type: types.TOOL, - render: () => <span className='fr-version'>{`v${packageJson.version}`}</span> -}); diff --git a/.storybook/main.js b/.storybook/main.js index 07bda745c..65210833f 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { stories: ['../src/**/*.stories.(js|mdx)'], @@ -8,8 +10,7 @@ module.exports = { '@storybook/addon-storysource/register', '@storybook/addon-viewport/register', '@storybook/addon-docs', - 'storybook-addon-i18n/register', - './.storybook/custom/register.js' + 'storybook-addon-i18n/register' ], webpackFinal: async(config) => { @@ -19,6 +20,12 @@ module.exports = { enforce: 'pre' }); + config.module.rules.push({ + test: /\.scss$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + include: path.resolve(__dirname, '../'), + }); + return config; } }; diff --git a/.storybook/preview.js b/.storybook/preview.js index e5b892f61..f92bc0e33 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -6,20 +6,9 @@ import React from 'react'; import { withCssResources } from '@storybook/addon-cssresources'; import { withI18n } from 'storybook-addon-i18n'; import { DocsContainer } from '@storybook/addon-docs/blocks'; -import DocsPage from './custom/DocsPage'; +import DocsPage from './custom/components/DocsPage'; import { addDecorator, addParameters } from '@storybook/react'; - - -// TO DO: investigate adding toc -// header -// add support link (github issues) -// version -// add github link - -//footer -// links - // Order of folders to display const headers = [ 'Introduction', diff --git a/package-lock.json b/package-lock.json index 347bab96f..0b49be999 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4703,6 +4703,12 @@ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -4864,6 +4870,12 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", @@ -5277,6 +5289,12 @@ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -6264,6 +6282,15 @@ } } }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -11515,6 +11542,18 @@ } } }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -11607,6 +11646,15 @@ } } }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -12364,6 +12412,17 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, + "globule": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.12", + "minimatch": "~3.0.2" + } + }, "glur": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/glur/-/glur-1.1.2.tgz", @@ -13061,6 +13120,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -16010,8 +16075,7 @@ "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true + "dev": true }, "nanoid": { "version": "2.1.11", @@ -16117,6 +16181,34 @@ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", "dev": true }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -16198,6 +16290,114 @@ } } }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -16548,6 +16748,16 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -20182,6 +20392,149 @@ "walker": "~1.0.5" } }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + } + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -20208,6 +20561,27 @@ "ajv-keywords": "^3.4.1" } }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -21368,6 +21742,15 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -22558,6 +22941,17 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, "tar-fs": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", @@ -23161,6 +23555,15 @@ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", diff --git a/package.json b/package.json index f495a6312..b7de6096f 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "lint:fix": "npm run lint:code:fix && npm run lint:style:fix", "lint:code": "eslint . --ext .js,.jsx", "lint:code:fix": "npm run lint:code -- --fix", - "lint:style": "stylelint \".storybook/custom/*.css\"", + "lint:style": "stylelint \".storybook/custom/*.scss\"", "lint:style:fix": "npm run lint:style -- --fix", "lint:pre-commit": "printf \"running pre-commit lint...\" && npm run lint && printf \"done!\n\"", "release:create": "create-release", @@ -92,6 +92,7 @@ "core-js": "^3.1.4", "coveralls": "^3.0.2", "cross-env": "^7.0.2", + "css-loader": "^3.5.3", "enzyme": "^3.7.0", "enzyme-adapter-react-16": "^1.7.0", "eslint": "^6.8.0", @@ -109,6 +110,7 @@ "github-assistant": "^0.3.1-rc.0", "jest": "24.9.0", "jest-puppeteer": "^4.4.0", + "node-sass": "^4.14.1", "pre-commit": "^1.2.2", "prettier": "^1.19.1", "puppeteer": "^3.0.0", @@ -118,10 +120,12 @@ "react-syntax-highlighter": "^12.2.1", "react-test-renderer": "^16.6.3", "regenerator-runtime": "^0.13.2", + "sass-loader": "^8.0.2", "size-limit": "^4.0.1", "standard-version": "^7.1.0", "start-server-and-test": "^1.10.6", "storybook-addon-i18n": "^5.1.13", + "style-loader": "^1.2.1", "stylelint": "^13.3.3", "stylelint-config-prettier": "^8.0.0", "stylelint-prettier": "^1.1.2", From 99a8d94aa04485f7b637522b5994f4ce5d58a709 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 13:45:37 -0700 Subject: [PATCH 04/14] add header and footer to docs --- package-lock.json | 6 ------ package.json | 3 +-- scripts/copy-assets.js | 17 +++++++++++++++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b49be999..ffe56bab7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23435,12 +23435,6 @@ "repeat-string": "^1.6.1" } }, - "tocbot": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.11.1.tgz", - "integrity": "sha512-JU2l8p2fvbg1Eo+zcWEo/XeVWlAbwyuF/p4mGf5FLRdj5jRSCyj/BJfHC6AIZo8PjA4O5VPidWaVFAbqIdyfHw==", - "dev": true - }, "toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", diff --git a/package.json b/package.json index b7de6096f..93c61bb90 100644 --- a/package.json +++ b/package.json @@ -128,8 +128,7 @@ "style-loader": "^1.2.1", "stylelint": "^13.3.3", "stylelint-config-prettier": "^8.0.0", - "stylelint-prettier": "^1.1.2", - "tocbot": "^4.11.1" + "stylelint-prettier": "^1.1.2" }, "peerDependencies": { "react": "^16.8.0", diff --git a/scripts/copy-assets.js b/scripts/copy-assets.js index af861ff26..25084ad60 100644 --- a/scripts/copy-assets.js +++ b/scripts/copy-assets.js @@ -28,18 +28,31 @@ if (!fs.existsSync('src/Docs')) { fs.mkdirSync('src/Docs'); } -// copy readme file and prepend necessary <Meta /> tag for storybook +// copy readme file and prepend necessary <Meta />, <Header />, <Community /> and <Footer /> fs.copyFile('README.md', introductionPath, (err) => { if (err) throw err; const data = fs.readFileSync(introductionPath).toString().split('\n'); - data.splice(0, 0, 'import { Meta } from \'@storybook/addon-docs/blocks\';\n\n <Meta title=\'Introduction/Overview\' />\n' ); + data.splice(0, 0, ` +import Community from \'../../.storybook/custom/components/Community\'; +import Header from \'../../.storybook/custom/components/Header\'; +import Footer from \'../../.storybook/custom/components/Footer\'; +import { Meta } from \'@storybook/addon-docs/blocks\'; +<Header />\n +<Meta title=\'Introduction/Overview\' />\n` ); const text = data.join('\n'); fs.writeFile(introductionPath, text, function(writeErr) { if (writeErr) return writeErr; }); + fs.appendFile(introductionPath, ` +<Community /> +<Footer /> +`, function(isError) { + if (isError) throw isError; + }); + }); if (!fs.existsSync('.storybook/static')) { From c2f3b3a779d0435639db803e8ce0e394e5efb541 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 13:55:32 -0700 Subject: [PATCH 05/14] scss --- storybook-testing/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storybook-testing/jest.config.js b/storybook-testing/jest.config.js index 1c9f97e5c..2ff259f1d 100644 --- a/storybook-testing/jest.config.js +++ b/storybook-testing/jest.config.js @@ -5,7 +5,7 @@ module.exports = { 'preset': 'jest-puppeteer', 'setupFilesAfterEnv': ['../config/jest/setup.js'], 'moduleNameMapper': { - '^.+\\.(css)$': 'babel-jest' + '^.+\\.(scss)$': 'babel-jest' }, 'transformIgnorePatterns': [ 'node_modules/?!(react-syntax-highlighter)' From 76ef51732c9ff29fa0709699edb0937ede94c80d Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 13:59:10 -0700 Subject: [PATCH 06/14] header on overview page --- scripts/copy-assets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/copy-assets.js b/scripts/copy-assets.js index 25084ad60..6a43d92bb 100644 --- a/scripts/copy-assets.js +++ b/scripts/copy-assets.js @@ -37,9 +37,9 @@ fs.copyFile('README.md', introductionPath, (err) => { import Community from \'../../.storybook/custom/components/Community\'; import Header from \'../../.storybook/custom/components/Header\'; import Footer from \'../../.storybook/custom/components/Footer\'; -import { Meta } from \'@storybook/addon-docs/blocks\'; -<Header />\n -<Meta title=\'Introduction/Overview\' />\n` ); +import { Meta } from \'@storybook/addon-docs/blocks\';\n +<Meta title=\'Introduction/Overview\' />\n +<Header />\n` ); const text = data.join('\n'); fs.writeFile(introductionPath, text, function(writeErr) { From 628298f4e3865e7657a95d3ce6d487a6e3f0e111 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 14:10:35 -0700 Subject: [PATCH 07/14] we need css too --- storybook-testing/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storybook-testing/jest.config.js b/storybook-testing/jest.config.js index 2ff259f1d..01b3af2b8 100644 --- a/storybook-testing/jest.config.js +++ b/storybook-testing/jest.config.js @@ -5,7 +5,7 @@ module.exports = { 'preset': 'jest-puppeteer', 'setupFilesAfterEnv': ['../config/jest/setup.js'], 'moduleNameMapper': { - '^.+\\.(scss)$': 'babel-jest' + '^.+\\.(s)css$': 'babel-jest' }, 'transformIgnorePatterns': [ 'node_modules/?!(react-syntax-highlighter)' From eecd44a13066042ecd599c9fae4231c11c8f76f0 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 14:46:33 -0700 Subject: [PATCH 08/14] toc bot --- .storybook/custom/components/DocsPage.js | 34 +++++++-- .storybook/custom/components/Toc.js | 15 ++++ .storybook/custom/custom.scss | 22 ++++++ .storybook/custom/toc.scss | 97 ++++++++++++++++++++++++ package-lock.json | 6 ++ package.json | 3 +- storybook-testing/jest.config.js | 2 +- 7 files changed, 170 insertions(+), 9 deletions(-) create mode 100644 .storybook/custom/components/Toc.js create mode 100644 .storybook/custom/toc.scss diff --git a/.storybook/custom/components/DocsPage.js b/.storybook/custom/components/DocsPage.js index 2728c6fcb..3edbccc70 100644 --- a/.storybook/custom/components/DocsPage.js +++ b/.storybook/custom/components/DocsPage.js @@ -3,7 +3,9 @@ import Community from './Community'; import Footer from './Footer'; import Header from './Header'; import Import from './Import'; -import React from 'react'; +import Toc from './Toc'; +import tocbot from 'tocbot'; +import React, { useEffect, useState } from 'react'; import { Title, Subtitle, @@ -15,16 +17,34 @@ import { const DocsPage = () => { + useEffect(() => { + tocbot.init( + { + tocSelector: '.js-toc', + contentSelector: '.sbdocs-wrapper', + headingSelector: 'h2.sbdocs-h2, h3.sbdocs-h3, h4.sbdocs-h4', + orderedList: true, + scrollContainer: '.sbdocs-wrapper', + collapseDepth: 3 + } + ); + document.querySelectorAll('.toc-link').forEach( x => x.setAttribute('target','_self')); + }, []); + return ( <> <Header /> <Title /> - <Subtitle /> - <Import /> - <Description /> - <Primary /> - <Stories /> - <Props /> + <Toc /> + <div className='fr-docs-container'> + <Subtitle /> + <Import /> + <Description /> + <Primary /> + <Stories /> + <h2 className='sbdocs-h2' id='properties'>Properties</h2> + <Props /> + </div> <Community /> <Footer /> </> diff --git a/.storybook/custom/components/Toc.js b/.storybook/custom/components/Toc.js new file mode 100644 index 000000000..e7b2e2ee3 --- /dev/null +++ b/.storybook/custom/components/Toc.js @@ -0,0 +1,15 @@ +import '../toc.scss'; +import React from 'react'; + +const Toc = () => { + return ( + <> + <h2 className='toc-heading'>Contents</h2> + <nav className='js-toc toc' /> + </> + ) +} + +Toc.displayName = 'Toc'; + +export default Toc; diff --git a/.storybook/custom/custom.scss b/.storybook/custom/custom.scss index 32fa5e6c6..4918ef9b4 100644 --- a/.storybook/custom/custom.scss +++ b/.storybook/custom/custom.scss @@ -8,6 +8,28 @@ body { padding-left: 20px; } +/* Limit the content to not overlap toc */ +.fr-docs-container { + max-width: 80%; +} +/* match the storybook heading styles non-autogenerated headings */ +.toc-heading, +.sbdocs-h2 { + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-overflow-scrolling: touch; + margin: 20px 0 8px; + padding: 0; + cursor: text; + position: relative; + color: #404040; + font-size: 24px; + padding-bottom: 4px; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} + /* override storybook section titles for color contrast */ .simplebar-content .sidebar-subheading { color: #404040; diff --git a/.storybook/custom/toc.scss b/.storybook/custom/toc.scss new file mode 100644 index 000000000..a9290b865 --- /dev/null +++ b/.storybook/custom/toc.scss @@ -0,0 +1,97 @@ +@import '~tocbot/src/scss/tocbot-core'; +@import '~tocbot/src/scss/tocbot-default-theme'; + +// table of contents (tocbot) overrides +.toc { + box-sizing: border-box; + background-color: white; + + > .toc-list { + padding-left: 0; + } +} + +.toc-link { + margin: 2px 0; + padding-left: 15px; + text-indent: -15px; + + &:before { + width: 0; + } +} + +a.toc-link { + color: #0a6ed1; + + &:hover, + &:focus { + color: #085caf; + } +} + +.is-active-link { + font-weight: 400; +} + +@media (min-width: 1024px) { + .toc { + width: 225px; + position: fixed; + top: 0; + right: 0; + padding: 25px + 50px 25px 25px; + height: 100%; + font-size: 14px; + + > .toc-list { + padding-left: 14px; + &:last-child { + margin-bottom: 0; + } + } + } + + .toc-link { + display: inline-block; + margin: 4px 0; + text-decoration: none; + transition: all 0.125s ease-in; + + &:before { + width: 4px; + } + } + + a.toc-link { + color: #32363a; + + &:hover, + &:focus { + color: #32363a; + } + } + + .is-active-link { + font-weight: 700; + + &:before { + background-color: #0e7290; + } + } + + #toc-separator { + display: none; + } + + .toc-heading { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + } +} diff --git a/package-lock.json b/package-lock.json index ffe56bab7..0b49be999 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23435,6 +23435,12 @@ "repeat-string": "^1.6.1" } }, + "tocbot": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.11.1.tgz", + "integrity": "sha512-JU2l8p2fvbg1Eo+zcWEo/XeVWlAbwyuF/p4mGf5FLRdj5jRSCyj/BJfHC6AIZo8PjA4O5VPidWaVFAbqIdyfHw==", + "dev": true + }, "toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", diff --git a/package.json b/package.json index 93c61bb90..b7de6096f 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,8 @@ "style-loader": "^1.2.1", "stylelint": "^13.3.3", "stylelint-config-prettier": "^8.0.0", - "stylelint-prettier": "^1.1.2" + "stylelint-prettier": "^1.1.2", + "tocbot": "^4.11.1" }, "peerDependencies": { "react": "^16.8.0", diff --git a/storybook-testing/jest.config.js b/storybook-testing/jest.config.js index 01b3af2b8..2a2c3c678 100644 --- a/storybook-testing/jest.config.js +++ b/storybook-testing/jest.config.js @@ -5,7 +5,7 @@ module.exports = { 'preset': 'jest-puppeteer', 'setupFilesAfterEnv': ['../config/jest/setup.js'], 'moduleNameMapper': { - '^.+\\.(s)css$': 'babel-jest' + '^.+\\.(scss|css)$': 'babel-jest' }, 'transformIgnorePatterns': [ 'node_modules/?!(react-syntax-highlighter)' From ebcf475663e6ac63d885018e5e3ad76c0371157e Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 14:52:07 -0700 Subject: [PATCH 09/14] remove usestate --- .storybook/custom/components/DocsPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.storybook/custom/components/DocsPage.js b/.storybook/custom/components/DocsPage.js index 3edbccc70..b69821fc2 100644 --- a/.storybook/custom/components/DocsPage.js +++ b/.storybook/custom/components/DocsPage.js @@ -5,7 +5,7 @@ import Header from './Header'; import Import from './Import'; import Toc from './Toc'; import tocbot from 'tocbot'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect } from 'react'; import { Title, Subtitle, From 788814e2ec2c774366190725519abea0e053817f Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 15:17:24 -0700 Subject: [PATCH 10/14] move containers inside --- .storybook/custom/components/DocsPage.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.storybook/custom/components/DocsPage.js b/.storybook/custom/components/DocsPage.js index b69821fc2..4b0740551 100644 --- a/.storybook/custom/components/DocsPage.js +++ b/.storybook/custom/components/DocsPage.js @@ -25,7 +25,8 @@ const DocsPage = () => { headingSelector: 'h2.sbdocs-h2, h3.sbdocs-h3, h4.sbdocs-h4', orderedList: true, scrollContainer: '.sbdocs-wrapper', - collapseDepth: 3 + collapseDepth: 3, + hasInnerContainers: true } ); document.querySelectorAll('.toc-link').forEach( x => x.setAttribute('target','_self')); @@ -44,9 +45,9 @@ const DocsPage = () => { <Stories /> <h2 className='sbdocs-h2' id='properties'>Properties</h2> <Props /> + <Community /> + <Footer /> </div> - <Community /> - <Footer /> </> ) } From 46b03aa21cdbfcdf1089cf52a78c49672996c041 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 16:06:22 -0700 Subject: [PATCH 11/14] remove padding + fix link --- .storybook/custom/components/Header.js | 2 +- .storybook/custom/custom.scss | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.storybook/custom/components/Header.js b/.storybook/custom/components/Header.js index c80a3dcbc..b296e97ad 100644 --- a/.storybook/custom/components/Header.js +++ b/.storybook/custom/components/Header.js @@ -18,7 +18,7 @@ const Header = () => { </a> <a className='fr-header__anchor' - href={`https://github.com/SAP/fundamental-react/tree/${packageJson.version}`} + href={`https://github.com/SAP/fundamental-react/tree/v${packageJson.version}`} target='_blank'> {`v${packageJson.version}`} </a> diff --git a/.storybook/custom/custom.scss b/.storybook/custom/custom.scss index 4918ef9b4..6f2ebadd6 100644 --- a/.storybook/custom/custom.scss +++ b/.storybook/custom/custom.scss @@ -5,7 +5,6 @@ body { /* override storybook max width */ .sbdocs.sbdocs-content { max-width: 2000px; - padding-left: 20px; } /* Limit the content to not overlap toc */ From dd6a5680ae2baa3c2b9016577684dd0fbc12d157 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Tue, 12 May 2020 16:14:09 -0700 Subject: [PATCH 12/14] add target blank to community links --- .storybook/custom/components/Community.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.storybook/custom/components/Community.js b/.storybook/custom/components/Community.js index e20277cc4..32b3913ce 100644 --- a/.storybook/custom/components/Community.js +++ b/.storybook/custom/components/Community.js @@ -6,20 +6,20 @@ const Community = () => { <section> <h4>Libraries</h4> <ul> - <li><a href='https://sap.github.io/fundamental-styles/'>Fundamental Library <strong>Styles</strong></a></li> - <li><a href='https://sap.github.io/fundamental-ngx/'>Fundamental Library for <strong>Angular</strong></a></li> - <li><a href='https://sap.github.io/fundamental-react/'>Fundamental Library for <strong>React</strong></a></li> - <li><a href='https://sap.github.io/fundamental-vue/'>Fundamental Library for <strong>Vue</strong></a></li> + <li><a href='https://sap.github.io/fundamental-styles/' target='_blank'>Fundamental Library <strong>Styles</strong></a></li> + <li><a href='https://sap.github.io/fundamental-ngx/' target='_blank'>Fundamental Library for <strong>Angular</strong></a></li> + <li><a href='https://sap.github.io/fundamental-react/' target='_blank'>Fundamental Library for <strong>React</strong></a></li> + <li><a href='https://sap.github.io/fundamental-vue/' target='_blank'>Fundamental Library for <strong>Vue</strong></a></li> </ul> </section> <section> <h4>Community</h4> <ul> - <li><a href='https://github.com/sap/fundamental-styles'><img src='./assets/github.png' alt='github logo'/>github.com/sap/fundamental-styles</a></li> - <li><a href='https://twitter.com/fundamental_lib'><img src='./assets/twitter.png' alt='twitter logo'/>twitter.com/fundamental_lib</a></li> - <li><a href='https://join.slack.com/t/ui-fundamentals/shared_invite/enQtNTIzOTU0Mzc2NTc5LWQzZWI5MWFhYjE5OTc4YzliN2JhOTc1ZjQxZTg1YjZiMWZiYzRkNjMwYzgyMmFkYmNhZDVjMWE5MDIzOWEzMmM'> + <li><a href='https://github.com/sap/fundamental-styles' target='_blank'><img src='./assets/github.png' alt='github logo'/>github.com/sap/fundamental-styles</a></li> + <li><a href='https://twitter.com/fundamental_lib' target='_blank'><img src='./assets/twitter.png' alt='twitter logo'/>twitter.com/fundamental_lib</a></li> + <li><a href='https://join.slack.com/t/ui-fundamentals/shared_invite/enQtNTIzOTU0Mzc2NTc5LWQzZWI5MWFhYjE5OTc4YzliN2JhOTc1ZjQxZTg1YjZiMWZiYzRkNjMwYzgyMmFkYmNhZDVjMWE5MDIzOWEzMmM' target='_blank'> <img src='./assets/slack.png' alt='slack logo'/>ui-fundamentals-slack.com</a></li> - <li><a href='https://www.linkedin.com/company/sap-graph/'><img src='./assets/linkedin.png' alt='linkedin logo'/>linkedin.com/company/sap-graph/</a></li> + <li><a href='https://www.linkedin.com/company/sap-graph/' target='_blank'><img src='./assets/linkedin.png' alt='linkedin logo'/>linkedin.com/company/sap-graph/</a></li> </ul> </section> </div> From 611da049009b3cdeee2e37350c8a753144d63656 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Wed, 13 May 2020 10:53:10 -0700 Subject: [PATCH 13/14] toc highlight --- .storybook/custom/components/DocsPage.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.storybook/custom/components/DocsPage.js b/.storybook/custom/components/DocsPage.js index 4b0740551..28c875975 100644 --- a/.storybook/custom/components/DocsPage.js +++ b/.storybook/custom/components/DocsPage.js @@ -24,7 +24,6 @@ const DocsPage = () => { contentSelector: '.sbdocs-wrapper', headingSelector: 'h2.sbdocs-h2, h3.sbdocs-h3, h4.sbdocs-h4', orderedList: true, - scrollContainer: '.sbdocs-wrapper', collapseDepth: 3, hasInnerContainers: true } From 977584187830a5b4afa096e0deb6b2cf85d72930 Mon Sep 17 00:00:00 2001 From: jbadan <jenna.badanowski@gmail.com> Date: Wed, 13 May 2020 14:47:12 -0700 Subject: [PATCH 14/14] absolute --- .storybook/custom/custom.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.storybook/custom/custom.scss b/.storybook/custom/custom.scss index 6f2ebadd6..34b7c60b3 100644 --- a/.storybook/custom/custom.scss +++ b/.storybook/custom/custom.scss @@ -38,7 +38,7 @@ body { .fr-header { box-sizing: border-box; height: 40px; - position: fixed; + position: absolute; top: 0; left: 0; width: 100%;