From 46265ec88469aad54da578a60f9726e1d97c6992 Mon Sep 17 00:00:00 2001 From: Sam Nolan Date: Tue, 1 Mar 2022 10:59:48 +1100 Subject: [PATCH] Add documentation and improve components --- README.md | 34 +- package.json | 5 + packages/components/.gitignore | 1 + packages/components/README.md | 72 +- packages/components/package.json | 7 +- packages/components/public/favicon.ico | Bin 3870 -> 12878 bytes packages/components/public/index.html | 28 +- packages/components/public/logo16.png | Bin 0 -> 327 bytes packages/components/public/logo192.png | Bin 5347 -> 7626 bytes packages/components/public/logo32.png | Bin 0 -> 697 bytes packages/components/public/logo42.png | Bin 0 -> 1043 bytes packages/components/public/logo512.png | Bin 9664 -> 31702 bytes packages/components/public/squiggle.svg | 676 ++++++++++++++++++ packages/components/src/App.css | 38 - packages/components/src/App.js | 25 - packages/components/src/App.test.js | 8 - .../src/{stories => }/SquiggleChart.js.map | 0 .../src/{stories => }/SquiggleChart.tsx | 0 packages/components/src/index.css | 13 - packages/components/src/index.js | 17 - packages/components/src/index.ts | 1 + packages/components/src/lib.ts | 1 - packages/components/src/logo.svg | 1 - packages/components/src/reportWebVitals.js | 13 - packages/components/src/setupTests.js | 5 - .../src/{stories => }/spec-distributions.json | 0 .../src/{stories => }/spec-pertentiles.json | 0 .../src/stories/Introduction.stories.mdx | 14 +- .../src/stories/SquiggleChart.stories.js | 18 - .../src/stories/SquiggleChart.stories.mdx | 81 +++ .../src/stories/SquiggleChart.stories.tsx | 15 - .../src/stories/assets/code-brackets.svg | 1 - .../components/src/stories/assets/colors.svg | 1 - .../src/stories/assets/comments.svg | 1 - .../src/stories/assets/direction.svg | 1 - .../components/src/stories/assets/flow.svg | 1 - .../components/src/stories/assets/plugin.svg | 1 - .../components/src/stories/assets/repo.svg | 1 - .../src/stories/assets/stackalt.svg | 1 - packages/components/src/stories/button.css | 30 - packages/components/src/stories/header.css | 26 - packages/components/src/stories/page.css | 69 -- shell.nix | 5 + 43 files changed, 808 insertions(+), 403 deletions(-) create mode 100644 packages/components/public/logo16.png create mode 100644 packages/components/public/logo32.png create mode 100644 packages/components/public/logo42.png create mode 100644 packages/components/public/squiggle.svg delete mode 100644 packages/components/src/App.css delete mode 100644 packages/components/src/App.js delete mode 100644 packages/components/src/App.test.js rename packages/components/src/{stories => }/SquiggleChart.js.map (100%) rename packages/components/src/{stories => }/SquiggleChart.tsx (100%) delete mode 100644 packages/components/src/index.css delete mode 100644 packages/components/src/index.js create mode 100644 packages/components/src/index.ts delete mode 100644 packages/components/src/lib.ts delete mode 100644 packages/components/src/logo.svg delete mode 100644 packages/components/src/reportWebVitals.js delete mode 100644 packages/components/src/setupTests.js rename packages/components/src/{stories => }/spec-distributions.json (100%) rename packages/components/src/{stories => }/spec-pertentiles.json (100%) delete mode 100644 packages/components/src/stories/SquiggleChart.stories.js create mode 100644 packages/components/src/stories/SquiggleChart.stories.mdx delete mode 100644 packages/components/src/stories/SquiggleChart.stories.tsx delete mode 100644 packages/components/src/stories/assets/code-brackets.svg delete mode 100644 packages/components/src/stories/assets/colors.svg delete mode 100644 packages/components/src/stories/assets/comments.svg delete mode 100644 packages/components/src/stories/assets/direction.svg delete mode 100644 packages/components/src/stories/assets/flow.svg delete mode 100644 packages/components/src/stories/assets/plugin.svg delete mode 100644 packages/components/src/stories/assets/repo.svg delete mode 100644 packages/components/src/stories/assets/stackalt.svg delete mode 100644 packages/components/src/stories/button.css delete mode 100644 packages/components/src/stories/header.css delete mode 100644 packages/components/src/stories/page.css create mode 100644 shell.nix diff --git a/README.md b/README.md index acf0032b..cf21345c 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,31 @@ This is an experiment DSL/language for making probabilistic estimates. -## DistPlus -We have a custom library called DistPlus to handle distributions with additional metadata. This helps handle mixed distributions (continuous + discrete), a cache for a cdf, possible unit types (specific times are supported), and limited domains. +This monorepo has several packages that can be used for various purposes. All +the packages can be found in `packages`. -## Running packages in the monorepo -This application uses `lerna` to manage dependencies between packages. To install -dependencies of all packages, run: +`@squiggle/lang` in `packages/squiggle-lang` contains the core language, particularly +an interface to parse squiggle expressions and return descriptions of distributions +or results. + +`@squiggle/components` in `packages/components` contains React components that +can be passed squiggle strings as props, and return a presentation of the result +of the calculation. + +`@squiggle/playground` in `packages/playground` contains a website for a playground +for squiggle. This website is hosted at `playground.squiggle-language.com` + +`@squiggle/website` in `packages/website` The main descriptive website for squiggle, +it is hosted at `squiggle-language.com`. + +The playground depends on the components library which then depends on the language. +This means that if you wish to work on the components library, you will need +to package the language, and for the playground to work, you will need to package +the components library and the playground. + +Scripts are available for you in the root directory to do important activities, +such as: + +`yarn build:lang`. Builds and packages the language +`yarn storybook:components`. Hosts the component storybook -``` -lerna bootstrap -``` diff --git a/package.json b/package.json index 5c28af6b..3d6df4b0 100644 --- a/package.json +++ b/package.json @@ -4,5 +4,10 @@ "lerna": "^4.0.0" }, "name": "squiggle", + "scripts": { + "build:lang": "cd packages/squiggle-lang && yarn && yarn build && yarn package", + "storybook:components": "cd packages/components && yarn && yarn storybook" + "build:components": "cd packages/components && yarn && yarn package" + }, "workspaces": ["packages/*"] } diff --git a/packages/components/.gitignore b/packages/components/.gitignore index 15209f23..b0a9c29b 100644 --- a/packages/components/.gitignore +++ b/packages/components/.gitignore @@ -22,3 +22,4 @@ npm-debug.log* yarn-debug.log* yarn-error.log* storybook-static +dist diff --git a/packages/components/README.md b/packages/components/README.md index 58beeacc..57c87588 100644 --- a/packages/components/README.md +++ b/packages/components/README.md @@ -1,70 +1,6 @@ -# Getting Started with Create React App +# Squiggle Components -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +This package contains all the components for squiggle. These can be used either +as a library or hosted as a [storybook](https://storybook.js.org/). -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in your browser. - -The page will reload when you make changes.\ -You may also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can't go back!** - -If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. - -You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) - -### Analyzing the Bundle Size - -This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) - -### Making a Progressive Web App - -This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) - -### Advanced Configuration - -This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) - -### Deployment - -This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) - -### `npm run build` fails to minify - -This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) +To run the storybook diff --git a/packages/components/package.json b/packages/components/package.json index d5382ffd..1f8cd58c 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -25,12 +25,9 @@ "webpack-cli": "^4.9.2" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject", "storybook": "cross-env REACT_APP_FAST_REFRESH=false && start-storybook -p 6006 -s public", - "build-storybook": "build-storybook -s public" + "build-storybook": "build-storybook -s public", + "package": "tsc" }, "eslintConfig": { "extends": [ diff --git a/packages/components/public/favicon.ico b/packages/components/public/favicon.ico index a11777cc471a4344702741ab1c8a588998b1311a..bf4a38a232d49c74647bcfc2ad667c69d9293c4e 100644 GIT binary patch literal 12878 zcmeHNTWl0n82-=BY28*t4y>td$viGX_Ps_<=(79fj#EWC+rs1EWdVu2jkg<)6_`g$zU5 zQne2TgEokqR4&{*+zU+yO}|dkUZ9vfJ-8GgD%T8&(bR19jkJ3sHc0^%nge;f=`grf4iLJ(#lks>) zx4c)rg8hyPE4*h)l;4o%J=76M8>Dmw>?d}?dm(dCQ&FL#)A5D8Usgp(B-+0Oo1Z}V zr`!ILB}-;kS64fmnwof@mvXPhfEY*CV_8R~E@{T>7ZnxR1A#y$x}WO4$)q$ZC$Mjf zW4JE0=8RFP>>1krF1rv%au|^ zk+w@`Vi?#y|ANW&lF|aUXEii5+{YMVcBjgFQdcBA^`25`pL7Lwr)poy&CSIdsCI27 z_oq9}_;XuwTTL&SeguYN5MKZOR2_M}-ootcYEth3v?#;YZ0nH@NT*<%f64a6 z{Q2`8KA&$H@akFTdf>>;4bDM%pL_`RS7TMi=Tu<4dEgvx`ZL3MDp35s<$2ii1m08Y z@iuBkJt;pwe?iQ)?)9C@PMUmEbyKx7P#GwxsHnIXd}pA3oQpI~XQr5W;5EVbh?(ip z=*3{*&S5~+8Hhq^7&1nou?U5(VuSXF8V>cTBM}RvN*(P+;qH(+UZ|=QlByzGRedR~ zu%Ch-P>qndpW^j=BDgi^RfrJ`1`Gxa1`Gxa1`Gxa1`Gxa25uDtj#@`W_S)=?jz-7R zmaUezrRSv6)K5QA56*`B=sfgUq|d`Aa5k1cr^N^8LM-nb_0s2bh~7ZmPQ)Le0rK8} z@yP6FF5fSEpya=YVyO^%wY~RnZsoJ@x@xFNFPo{WOaBFb&fCNQV)B68}NSv~l7k zMc_=?0e@XqU0t1veYI%@toa^_>x;{r9nN#+=gq3<1y;t%7zZ_d3HocKk0HO8x@oh9 zbCAl?^qsPJ@#4jE*^isDLh1rhx2?{VwJ~cL{?iF3-gf9xjDXKM^aNg$7F@?3_^#bkSd;1c7WSaMSnL+; z!&Pzr;dO8UoE}5GAMtv6lkQH}NxXb$Xvo~v)s^4g-oA9pmMsO0mG3<$pEj5AzM*AH zmE}QkK>V&@Wxw}fdJpm4;IkUqolrMrlrgomwD?+ETNfnw;ZxS1WJ6|kI^558Z+e_R#T@h#1Cu+Ez|&o#Sg_GiF)QNuY%FM!J+?o%!>ET`#H za=YCXe!qXxv#T_HOto0}m-}-qt(KE`27CjIM}T)Ty{3I?m$DB&-@@6$8kft3FJo?6 zFnQK_?#b-TJZb7OoxnPMQR9@a_kYj5oRgCiz!}9-pi8?hZomknytR3ij%OVo;4G(K zTcg9o^O=Zcmfdb&H)qbASvSDGt}cC#_?9V+$}3X8w1M{Hyg9}vpXJ$Xw&t5W&y!*g zv6Nq^hi{X`J#F}6xA~`{=Wckf9fg# literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/packages/components/public/index.html b/packages/components/public/index.html index aa069f27..7e688cd4 100644 --- a/packages/components/public/index.html +++ b/packages/components/public/index.html @@ -7,37 +7,13 @@ - - - - React App + Squiggle Components
- diff --git a/packages/components/public/logo16.png b/packages/components/public/logo16.png new file mode 100644 index 0000000000000000000000000000000000000000..d35a4ae32d88333c472fdf856b935e8e938d1f6c GIT binary patch literal 327 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 H_Obs56BQ#$ literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs<#MF9So`SCySIl! z27nHLL*xLI&^T>vrBdloa3Yt)8!ApB7^b|0($DUeG zz4lnhAJA)$dMOne5CTbI1!-}MMuY2*H15pk?#%4W`}Uv_6PnoF+S0>3mw|WY{k+fn zzTfv9h>3}biHWI~nVA_KFaQB)=aDJSBjhv_pG~B;*SA0PeD8@|ms`5jb<;GhY&QGz z;^JahZ|=E@_J7oW&DQLX-7D@=bQmr34XX%LZ*Ol?sZ{#FG|h$m{e8QhZ2g=Z_3r8J zcbrSk=Wds~Ck^=<*I6b@1mHMM7zDwZX_}KA9UYHc*R9q%z}fsbPHs6Jmp)ZN|v;Nak3d~R;;OpkgG zlVQDUO_nFh-zr^MNY-fNfGS&P?4sD_I+e3R#>U2s(b3V+w(ZXG@o{HhU_h*_tUO;X zb&HCY$(GkDS1aGEX4QoWNJ>byFo+0wObUm2_Rk6`6bjMo>}(lma9uas*x0D0(`mo8 zwN)z?i_Zwxe2=EzPj}i~_K)5rZxkH}0fRgt4}cAHHi)>-*W?k%8luJ2)KtUj>T1IC zyeO4Q`T2bQ@afB1YE(?!p0X;5$`5|lA3d3(fsJGz9Su+@6ee1Yk^pLce%>z>3VVZt zgN{-v&8da_yQ1R8ts8Ck9^YFyeEslkCDc*R2oTtCat#S25)=56WR0RH6pO{CrlzLT zxi7v#j?qR&MvUmy=F_NqP=Nw@Jhkxn zsep)nEF1zH8fYhA9q||cq#6)HD8M=0W&k9n5@Qd=!)(wTB>kj+IZT9CqGXgN!bRg3 zLL?>{Argg#KoO!a(Ww$qMR2sv5`l#v#K5XwH6|t|CMG5(CMM?p#h<8-e00?w6>k6l N002ovPDHLkV1lrK`4|8I literal 0 HcmV?d00001 diff --git a/packages/components/public/logo512.png b/packages/components/public/logo512.png index a4e47a6545bc15971f8f63fba70e4013df88a664..fc2160b41b6a210a8ce66432b13e83928e251b8d 100644 GIT binary patch literal 31702 zcmeEt_g7QT7wt`Gp+`hOIw-w&kdAbaCek}f3rO!Jp~Hu!0!l9;A|g!<9TGr_h%_Z2 zy@)|NBE95YziYjJ;;lC;i@*=8JNL|)GyCklC)LDAhnj+!0ssJNJzY&R0DywOLID^l z`1LpJ`x*E}?x$-V2!1620BJkqx8=YU5*XlSUY=VL^mtFzxD zQQrXf!W|`M0N@1lG}X<+iniv%bL^&~IZk#vcROclje z^LK-B50h_kWNn)~|1gcq*Zdq7e`_|?)!pCww8+CvX`sYaF*#lNX|hy_?)94%xAk8W zKjwx!15(h8e{IhHEZG0bdb@#s%UIUE(8W;{dNx^O`JkC%{_woB9jf{N$N$q2n9Z@; zg~G?5a{*yrzkcXXHfk!jPm*jvapaQgK?xuQt37BdJG(Yl$0TK37%I5s^NAj89h{}2oIF~w;46IvdwrAChhjNqk_EgOk%ff^0Zn>)=q8m6QxP znW!}QGg7Pw0JSn+C_x9&Pzmg`_{-*I%{nb#g>k`cl7&^XC;(a=> z$#3qc{c?i#vw9`1de1?J8^Y(i&8$d*yg=nvs&+;6Q{A5^bkmeS>y&>{J~PynDvndF z+T5(t?DuQ z;B+;h^+EweXwH6b4aEPfzuKsu z8Q?&6AiTUb0{inypP4n0r~^~MTnQ*NL!w5vTcGtOS&UxtU!QS72l~sE%89E9mbHfp z)Ql=h{CQs3dhe^@n49V{fN=8yGfZN{aJ*|1n4 z7RCE76i|4I#GWtMnGV@;3oJ3pgXK=-(YwIE>!$nY`snRyaA4}uDx3)(Q#J;R$KXUJ zhH{2@R83;ZZQ_03MsKimFE2fNJQ2?10jO*hp>`h}v+zI_h;_?S0uc+gs;o5090y9f zA4>4bya^t)!F2C3wFd<&yS!^Jd(EnYAZl(Ij-?*=U7%_ozZR)P-@(n#&nw=!b4Ion zaOzZTzG0!?YJ*^MA-zC|ISmC*0Y0Wkfu4&RghpnqgRTCMsJ%LRr zILs0r&~xn=<2zzwW1mN<5Ih%;RT+u9Q4(%$D$rW=qz%S9{q(Nuup?0z(L3rgpAqYS zB~lUpyQ(xZBP)xL=BaQgme$#K>nPLbINI^~mq#aEv_J!wVrAB*JKxd03(Rlj-^~{m zs)*huVn*iN#-q1q->@UBh01l#@VK~G`=G1UV_yc0x!?mqdJ3_ylH)3Mc#u~uEut2Y zn$ds@u|+J3CCJ-}e7gs%oj+iInUP5jjLZ7}T_3;Yi@7}VH8M6PcqrKKFrWX;!#f0X zNkY}(*i?m^TRqK`krc@6+1&P`-C<*pRmz5)H%8DJ(U4}kj+fpx@0 zF!!uRqkJz9cgO4FwR`n4&MWSGoCJ%v0XnCr6TOxA_d4&zUYr@+Rlm)zrUn^%GKqC) z?L2wg^&B=$LLQf>ag&t7?e)zqZ& z_iOe|4UjEEzk1>T+k3=IO9;`AvYADV?szR0>8p+6_6gBkeICTNjKCTR*C&52 z&BC0C10~vW6IcmekLwc+!lz#1b)SEcqRnP%=-VjG%?vQ|I37hsMUF%61;^Vfsa+n@ zf|WTY`s%i|7b&XGkn)7mpch@v3y(6F85T4}TGH~pE`K=rmUEVKJ=Z0ESgeWdDWi(F zEcf4MtM{_(&vTv%#*kp!>Sj4;lCw+j5FlNG232e})N3|m4@P*K6SmXQ`{=d}BUo~p z-o$pt@f+qC94#e!&LMUM6=p=NLBog_dt5~J* zN^1V)2Pw9TB=LmaFuGOAQ%KCUkc{ZQ% z(Zji6WIFfReR8p<9-f}+{Pc0F^18g)dm&-BTC-a*0!<86T;&pSev8<`Fec+NRN)|Z zn$3Nb#}ioIhAN|%x(}+PdAFOBHba!D$Z?S;GOf==ft3csme$v=QEtLbPqAGiVlAA2 zGSeqkAFDuTDr8DMs%0ZdrkG&p1M3~-`u4WZlnq8KZHut;Ykr_IR}{$6=b@({Nl6*} zBCFuP-H1Sz_mFugY7dOUPk=0W)#`_TOWd z(GunM`IPf4!{LknN^s{=`RRjh9|qR~_;U?#P1B8YU2|!2Msp`^yQf;i)Ej}b=Ok26 z;=vW44i?q)FJYAtbp^*vAIbuqe6-c5iD*fU;>Q8J+=$ir)2G+&^V2_uaZLbrwTF7Z z6SJNJCHYLE0e?~uES0+sWOgcnqhmyi*Cr55OIb1hl~1Y1p2kQOx{QlYBd?3MpXw5W zdkBO&>l?o(ypr4URZ3!P{*Q_bX`lV%sRsO?=-wXt_AOgJ zY|rW2fXY#$9Omk=*ZWI9WjS<4OqPOaMSMh7CKC5=8j|AT@cfdJD<{r) zWE!Az&xsWP{{h5xW0|7HA%+f})4}_bRAq`J8%9oChk1-Y?TDj>IR!Tt zOL4z1igAjT{UI6l0w3wktfoU$k%jFAiz`Oa=oly|X>S4BWv)fvC?&)eMS#0#hPBb}6CCjCe=}$DqK;Qa}DCegiP|t55)c;7n zHQQYO8&_+qYVjmdY(1U*dn^N*3xTsaxu#mkHs~;-k{5l;gIe;$Jj=73SIPl#`gR|B|?Gn&MSHa_51||Ph|O<88g9}7ufF{b zXtZLL=%=zpAc5RmB7DgN2`8|p3{+r$g*j>-ibFVOuym=KRrMF8>gUtmZvDn37|5Y9@Y>gJ2&%jRnZQ?eNGrK$G!zByFG+ng;81&d1zk5|Mq zZ)MW$I5DI3P*C&NBqgd>n4^g4hvWc|u8?`Z3C9i@6HR!6mLUS9$+>7CaNse(kJ1Bt zH2x)6nSFc6;m?3p$LG$cS$DbVkCkYz-Be$%guf@;Mo7dpPW+zGLSm2u`t9Ox2e5w*ahdbkT2ioqNs z27*dD>`j43$*c0K+uPgM6E$Kf$;MyzfG_Xr-`>_n`d{D5Zh}j>vDUoDJK5GOe7N7c zip!VC_C3`b2}ZvQ8zv_&Hpu>*LL7xRuA7K)y_r%i`(tH&k5pJ%+mB?on@l|J%j8qY z0Uz{jEmK~6ci%n5#|t(Hf;P;5+J=Q}?7!2+{2u?J)k&?y*S5B{Rquaz`xg)CfAsnn zfs}7m#sjZ%_ySw!kT1+is3M(5{aKk@%g{-C2^PuUO^$Sr{u|lU>tG@CyWaaIqm|LX zVRCBb1c4Ws6dsf3dNQf0)~!QxH%yMb??H!5)urQC7J_5k{3mk2L=V~pUAo4l$*M+& zq8zScSqfjcHWloOn-M_x$im{b+MefmB>p?J0QZriR6`@9k{cQqo(2X6fs*<3C3r3v z6hzFo(#IqJhHcnae~B3st4NUiZ*cj0(QP&J`Vp=9nzJ9CG5C-ZTRm#Eit`VH6*oy( zyRXe*XUC*u08$DH$S{L0fEtRt!o144#`Os@;J;FWSNN9-Y68J6cA~rAY#2Y{>fR3agn}S;$W|=ak?|MIP-gibX_3fIS18xM8B;&%&SL;Ydl#I9-!E(tvm+ z3UU5b$X1_7x|4H5vy^(5e*FC3VtM4Gy~LG={kzCOf7u6RA}~D0b!I zwJ`u-tq>SCn&dzb$%P3sAnx&IgQu8HDd15XnIVB3IOrG%*{dn2K%E`eF9VSi|L>MOiddhiujeMLQHu@$8pvqbqrL{uzgv}$ zglqx8fWMQ^n#i5Z>om!|@%?#7c!qZ9?d;E#r%@%8u<@i%;C$HnR`*3~59=ufR90GZ zC!+#dS(B2JCGJRg^)JfA$aKmn*C{>F?nF^ry?UZ8<+46NlkP;7aRz*!`Gq*Rn6d!u zHuN#LQ{Rv#?3oN?%AcBcnVzmC{#uS{A=%O#?kxoe2gei`o?1Woi(=i|&t&?Ggmd*X z&Gcbh@KnvEaQ3Lh&_Aaa?cmPgv!4onIlg{l@mNGKTC7Q5L$i<-goTHzZFT1eiy33Z z9`a-jE-Qp7KfSnh$=`vIbbHYtMl;@rP-(A<`Um@2t`znj+GGXdN#w#b8wYZV?p=hw zLhBr1;>rC>3TDw^LwB{*q1$Q{q}N+A$o51%>;}wbAk%j&2~re^af?$^p?t8oUGQOs zILmh^p!sx^c#q?kX4YM2+cwUe8u8VWOAl z#e(4V%d(ktlk;k)vhuRBnsZWXV%-%QnicteKg!a@qE&*WOH`Ddv9U4Z>({S$w&q$7 zjP0h1Cv0e$UAfKl2mD#BS$NOgMPOGAVrrO1tp2v%y@#QXs=ho8sGULbC?5*ViYGPF68V)q zRcA&eYCb9<%#5xA4R70Qs1?iY%3g-$S`Vwz8%#GyXMOib5N0JBzf5 z8u*X6Itfy+STJYwNV5=d*xJUwBSCF&q3;Zb);>NLhC#k;Mg2dk|6Hm!7YU?6R`qI0s1n1dzdG1wJRR;qHn!+#n{!W~s%Dcy^Vd58lbW0SL}7RJ zPb<21F&RSyb-@2_`PhgF|KEHoVcD>gy=4p= z8{60T3X*jdS88DVl24<2jPF&BV~XZ2GAFK{WpVDOFz*R3g1V{N$7!EsgJX?A1~|auKUDFXUDNPQ}pP=^mkg3X~N zY#EYElEgX?n?u)V<;~5UarL7+o(#DycC{k*IstA-yxs+t`JmFo-ep>S0m2KAz+N05 z=lZX2C_+LcTExxEPf$u${P|IFTQ|X>5F%*HD$3r|zVCA(Gc;KLXaD#)Sh{62O*9!Z zm-=mD>I!qVc6WV`q6z1Ta9Xcg)t5PUTxx?eB>e0d8?C6G>VEpz+?*9&a=Z(cCq~Sl z-1?tW?MojI2Mwl)u&6o&%^2!_4~}d8KG`?HXs(d z@NZQ{i;351msXK#FbpXfCf-N&DjF<2Ro{Nwm7BCY)4eT9s%`?;2s0ZB;nLI;AXz+4 zT$R@oSSx94Y)l3V%1L!qNyJ)DBIRtWKq3xa2&CXj*1<9IP!jpLR$0LQrYy#J?2ykM z?h3srR*|-7IeZo!139jlL56%gcpO?z9@)sT*gxfbO?ba0H>bk?kTA!KYJFUGV|8$u zix)yE-yXWVL$;R<7T@dY@U6pWRbrseIGpqhfjo3EjO4z(3>QX;oa$$FECEWSLz=z5uHIq;Jyi?XS%&3{?I_yv_)}Cur z%cRelwHhvT6Z+8*eA!0K9RfSg1?fu4U7tSBxZT)$Ro|+QyN)|Yo12?UNAU;Bt#+dM zqxjW67gLL5%B1MUMN?r0)pdEJ-4f-8p?8;e0Dll$nvkPZ)Y&Rae)1Nbn$%QSX7{rhQ;*`Adj>0sI8QE-D?vW z6%ldP4IaL6W?t=vU`W!7fmEDsXy~ysph~pVvMS%>?{=_>C4VCHGYExkCi7uBh{xMy zKzC=_{+k`-0@t{yM@L$4pl9{ViwD@1tfk&R=T%SLOQS6qDG~`fuzgbiDUe`-v#~-T zvSB=laMf4ntEsxpE=Dz0?}^F>D;%8T%uKATbIbB0)>FZ%D{YUX9`7~lrA;h98&Q3J zyq!V~Cu+F95Laa-IJS6ilJIAApSP}u8!NGeNygiTc|RKIR%;-4Qb^Qr29X|8U;i|g z6ZSe?LK{KtO7#w%De*c4N`8Z9i7L)~o!0VsgKDeh#sESn1 ziTxwY^##_SB>iyp_ER!xL*Mzb$aWG2m>O23JDKK2biTc6*8>jzOgQQKYDbDei*%o@vOa!=1RDgAkR}-ME+MJB}8EDJl8DJZi?-`{=L|5 zdz)}Re=Di{?BiT(Js0Bd4(V6k4h{f<42K8I-c;wBLdbeQ(z0g)T? zqrcn~In}?;jX=I*JE*zVh_A zg?iH%bUAJbhLt#CGk#e4VeRcdnYo7|=&r{pR_H}&V;M&0Vq zOWAC@ZnG(jwPvdRM+6BLDM!kl;cR`QMYBH_v9PfPQzSw^;>3Hf>>tP6rOlJ$uDLnG z>o_hu;1DMwwXk7Q+}*%1aI#E7g%>6UD_HLNIpP0)a{O$8z=QnA-28K$YZRVJ zDZMQjT+=+s1c@i!aGTA~&!0cXL$*R$-CwNAyNsB0zrme>V)ECz%}lS_0g#aVr~>xm zBFiA7{}g1&VirNk@5TLUa|1Xr2x>H7DGjJF6E!xAhVuL+)#D9htM%1}*nncJ0INF3 z`@yoghU*TULWD$H6j~Q5IoNym8lQLyg6Zvn%Jiu(ksw1_KKOi$;EOM{Hk**z;7>M` zuIXr88*b(?ATbrZD^5OL0zO`5?`c-ls|s_$;;#=SF@>KWhR~;JC1`MgpOc|vW^CSX~jf}TihypDq35fedCbO@fXwft4jHR(KS^KFf z5`0WR+0#-#`m2AD1ed0v{ttl!KZwVpYww~$79n4>!b)fbu>Ry-pnMj6N@QWQZA%oA|B+5 zClg0;r8}KEb%ljs)(R;tg8OO8 zW_SrKQG*NNQ?+}p^C~AEY(6AkFfROWHTM454J_*&F0E8b35KFCX6tj}%qY6iKt7)& z42~@lAKPXoC7tmqivdr;$;-oL{U@Ri6iJR=Qm^KztpbjUb1XV9O) zdt+|zg#>?uf-wOJ*Yu#!P>h7UJU^K9jeHDgiM43{Tzw6JT%cjmCQ>}#u**s?H;>qx z2n@=v>$sT#{mKbOFeW=Ljr^cP160Jz%~5%96N08XKcwdE_EoO_w}@EeZwG>bZ?02` zHtD>F4h))~gdlzQ8c#60OJv!E!%`bALq0CUl{!-CYY1{#=7KW&)yB~q1*`IRe|R@_ zS_y}cb9vvUi`{H9l4sqaNz{luKRfG^RZ#fc3jLqx6bQD?+s(MEO!QHhY~hXn>FT}B zD#NBkQS@reV|>zEKDLNsN6$jSJP%}*X@F}>i`_HFq-Uk9^ZRz?v&41*<41&hhD(s3 zReI?d+C-VNlizH67YCzNV1u$*QBmOwT0eS0!Bwy_0mp2nPhM7K!oLL?9HLbUzXss2 zBI#hEd}je*O!(fttU`3~CiY0$ zyS6EkPK_D6WSHDm5Hb17z(>e-Lk^WC=XZ^EWxZ(CK;*c+LFsU)X~t(iaI2qXukm_s zO6|_-YiiDE5HK$?yT;fG96qSbIf~{09SfD_EhhXI*q=XtR=gSJ*0qI$wh*=3bg3MW zy;-xNU-}~a03<~eQUvvma-+)~dZKEz#7tEH`AFo!I>wS;$oWnfFuoOUO0~>?RBo!~ z5EZq&S!++{M?(r_KqfVt^oU-_aDRy!`PgmO;>X1g%H20zyI@O^=v?Aj^q5U3q85oe z=%@gCHf_z?IP!q8CJ;rki}yz@_!niG@Du;faMRI3w)=)`t1gPm#)`>24vF4gTzW)2 zO`E#@%yQMhzTA}r|8=1&)w$)#bjHq&V$A!84+RW5wfhv9wz?l}X>fE=?ut4l1V~)dZ)i|aaK(tQXK@g(_C4<xq~bxl`T31@%y`F24; z0o*53qvY8bt!2{LO>@4p#ysjPRBUXI5dRAOOF!HeMPywcK8lucJkjAJrv<*zKpAiI z++76{uWol28r`sE`|$@zD|F`QS6&6ei3!POZ{Orlq)QChAl{+dbInw94S8pA?L{A( zz}FAqWgAcc={eP(@kx`Ivl)ZOeb`Rx!=q8d{6T1T0fvpG^(GUmNTo zkZY>XCi>!w{ieN|jqSy)%58lr8X7P$xm62wZ}BvS281dnRzRXb*bUlMt`se{YvX(VUrN8NU*z&oLn%NSL}V)= z(dv)gjE6AlUCtl5TJ);TrV_w`V$isq2rpHR_{*y{y`HY;=5 z^`^UFodME<#;!Wc73q5EFI_($c-*3h3ag#v`1L@{av}FemgIsO!_?UOm4PvBe_NP8$i5bB zwt>bm7m%O^LWC++rY9yQIu=M?p}UDuO)O%$`q6hvM+r97=3e*p)e+R!Wnh^kds*jW zW?~dq|GJOS`OvvgJLQgNgRqW=Oz3DE6+uW zo)xW*lwSGNv0?F!c25ec&k8jLoJVB|O!UHd*tB6Ln_|e1;Q6N}{0U)7Gy~P<9(n@D z`U12&^X+o2BU-OyKqpaC_A!fV3@r+-p{8%$I<$)(IMSsD#;K0gX zWun2%vvrr{In5Dese7yI;hl?{#Qdu=9Vz$2U@i}QJ_^;AW9bH7G?DSx#U`$?LJIp% z5Accb72|hkSRBx`+souyix%(SDl939QDst#9E_ z{GrV)xA}gtaP{Ee4s@hBD)?+x_g1X<9madv?K5g^@7-dhC7JrES$m&GhSi?Cst&cl zV%_C+u)Nnm)pM80)qy+?u-VL4e1}eE9r&&2w*=rxrhoq1)k^}EDtrm@Bu*iQ1PIaP zv2;+7dLg06Cv^!US?@xBK9+j&vStz8IaJr0>Z}VyjM>i-l9La{t$0XRoz0V+Yvbpz zFkvcE_d6sDUlmJBVMVLQ{UH;Rler*&c$Nw0o}ZYAi;abRM5D_qE47+Fe%xYaWxY57 z?SQh{I`?gE94)=7-H-r~DKon*v`eK#E>+m!!{d1gK$r? z1KG=w?c5@%$VlQ<`SiPcPu1D`c!n$@AI~l+kFcwbhFol~fMIlVa&pq)r~mKM>VEw1 zAe&d;JPQqZ$7g3L5k6C{S;`@Ywu@)D!H5^R7Rls*k5)9uxLntuf^ms|$R*w~wsB%Q zo>(O;TnDHVq5ASD_H-AzwD_%nX1o#U$0$ioCyD=@S$pG|2E@M`8b`G|)g0fUydF2S zeZcb2gRAq_0?1q$g_kfsl*}grEwaimsIBM=2}w!r$MbDB*jZQ<_dq@YdAS0X?L$$a zT2K_4F#`$5Quqob=tbuIDNpk%=ZOg2kt@R>M4rZJz0Pq3oC>xK#$l=(#GNYeu;H1| z>5tiv?$HRm>%t`|vx4CYf2J#}nI)&@D6c;j6OvAjZ3~@q5ZF*r8hM-@m78}rr^5L;nMt&L#F}5 zLbfUx++I{mlfZy^fOmJ}5sn-3M#-2$VM~KdSo#nDq;l1jPy6sCH;85s==Fd+QA`ezi-$Qb2iDzN+SpI-19aFK6(mgCns!)ynl~E(7K7E zH1lC;#74DTN#u?KZ%QGccra$M{OjOU=N+0O*uGhrE|rrZt(!7j+@AF8Ny()TCPSaG zyLi)Trohslx_vx@sV6W~bn3uCblNd2a=G=xz+)Fy2r5=9kWN?$GtLj8xjqMy?I8o1 zY?h!S4imYAjb#DFR1Yt&_XAlR14Oh+PUq+6g?AJck>3wGXdT;vs^@LKEM`+@64XE5 zNC6GlgEr?`K!?uIMwC3RN7goPR|?y612kGTP+BD?df^FQt*tteYQli{CpGMl20LyO z!jV=-s!@^J<1~T%Q4HnF>J@tT@4&r#TRV&o4XOSc6))_&fq$* z!G7O_pF8XBbjCG9;r+asm`+}lHXG6ABKrVS<_g5nh5qg12LvZ_|gO%U51psm{%G{!KFma2||VMqbDN(d-v zU_=s5QdZ@cTeq*y{HYHb)O*ACs8G_ViZ{0*LV;rBYO6+(S~*MVPGkiViGN?7Gw#Y! zoKVI`UrtFi3_4Tj_!Hk^O7fW|Z}5j=$AQ_2z)@v)kOz8QTe}^?PyY<`PK8P{Q`@%& zXxVi|-CXvYjwr#?r}f2yy{-;e8utcNulBb-jH-ND%%x5O=j1lwUqlP~M$}>Bpo89P zlJE-^8$Jk(KPu_g;mJ94sw{@?%0kqNT@T`enHBz)6VZ{jh8IIk-I2~Bz?i(i8>A!o zqn5q#ES0%@%L5a|s)g71c{dSkQ_%j3*7-6mQr^9`(~O^9l$x5FE$nd8a`ku6jKBR9 z4K=lMP>?wYykZS`K}N?wED=PW0icbn5A>w*LRpAktiAd=MB=9j+viAtXDMV7O$7^m zxoEoiCQB$U^Fh=oE2%ii(#U&vLGuYx^w8IL>rDwgo~%7u9f?W-lp}@hzAUVcpRX=v zlO=!*>4ly#!NvP)f${@3sO=p*@(SPX81cJu5%fXLcXoC*a>Bq~uW8)lI|bM9*Fw3p z-rio{wSZRNK9@#D_Qi-dp(-)YcV3eM!I_iwZ=1#Qu+o{Xsyj|pZa+d|zK5429*fzth{x(tImtnP zn&wqsw+_D#6hfLheUaz0t$Zb6D>a~>X<=rDSz1mGba5Km3-}{+u{CWgTGM<-HNmxxiO!jl4iXmY^9&pQTHH%y<`7ei$+uqj5hlTiR{@K6XLxbu4CGgrj>#cAgK zUSkt&*G_*>sR5#PE%2yiO2;t&hYugV>+G}#lRG(dXYQskZ?@5GI`#YaueY_g_uAXr z&)3%0p0f@7Kpt*9*ey?H*T?)B68do{N(lMH3(S~<-n?UQ*^%$iSMSiW-aaxrF!Pyx z0y`?wx=0$b1fUpMN*ZT)QMnH;r)GC`SbF^YZptwi)iAO;-n)-o3HXTZg-|WEhutJq zFAjX}MY{BW_3O!>7nmaAJ$2XNco0hy{{9Wpku404<7@yofM$g$=ot6%UFh(%v9(>C zYxZ3X1e@WjBR3>{q^f(bd&eCwRkRKwC%WcoFnPIf3f9uRQB>aB>V3B(?@Hy3~ZjXyi*P;VU`B zb|@(sS$)(msZwW-*mIDO@S&(OEvyJ>H_CPGflrCDFL>KLbhL5 zDZn@rBZ{Gx1%NQ)g=I*tXt^I<@*eMk#$(eewf3K`mbM^uruv`5$>6GFlI5O?yBrQ` z!iFCy1_iVZS1&Iwm(>#~jw2`bMp?G?zsE`P|&!-~V6NZdTu_KWHUcG1ET=8#^Wz zmfoK~Z|9gjHZ~p|0THrm-Db%NXw7V29V@>(KHnZ%O$Kkp$1{CeH!S|t zlZm24%IZ@w^AJ;JqXby{IC&+g(N0^)ift+?MWP8aa8Gh{fSEsq+-F4Y=Qc0KL=GQE zhkARz^E>_X$k)ZC=j&QP4^w=xVki_<_|>g2IVmXuL^(3@l9CgXKYsk)nQb0D|H-FX zjXC}5`#yDv9mM(6+aQa(Q|Q}uI+|mq%0R4c;8Wm81vzu{v>II~U7|JbS(ZlKdXr9- zr`%=-Mco;&2sm^UyY}YZ%ymxUG^3BM6yNeVT1@f&hnclXT;k$`+!?*oX{PCxj*m`F zA@4}aZiF5EaNnjB>k!`vUkHukY>||em9-bly#t!1LFL<$RVB)5YX(i(Xf^y?zj6%R zX&{r#{1K;;qkB6dTSVHwPa~ zrPNn1C8ddnn6NZ+)m@P|=om97fw#2={hs(+YumgKww%c5u)ev;@(&NW`}+FcM<8kj zA4-OJc)&m=Q3G}@RrBF(y5A=HY#siq{i)`HYrg_oH9%L|4{w|**r0U8T;4$vEK-UA z&$}BN8~@=0T0iJlFKSde##Hu}q8qjuepTID+aN&9-S$|zMoE}8D^;=6?~8%2k^>eW zFemPn_m`YI66Kz1(WEItWzWLp1_WoFw-U0TbuK~q$6vW(gGNijf87M{K5VrHtPO#3 z*;Ton=+v5gCL?hysEai9xs1Ou6Hu0x{`o?`k_rHMKr4CHtKCMcE${>t1XG;|0Jr8D zXpP?hFK@Z!znFgxirXwkj*gDfAde6PC&oaXsy5r;8rXf-6n03oMQ{IGy(=a`JvEBl zy+Dj1(KIC|ZM@TGX4Kjpf=F`~i7I}I%8JR*g+j*b~H1^cAyfG3f&H z<>ViD2hV}7=xwl(r~rZek0_N=Q~eugTrBR6i9Sh_KBBf3ZHDLsMRODV@J~#EoTZ}! zplwPSPy~&%-|Fn!!OJvo@8iT&P+ew81v|in&GRb`a;^pZzYb)~=B@#Cu)cbyWA~k4 z7XwOEG|&}UYQPlV!zt`=_u5fO|5g2~A>{A3m-ZfanYiq_(LAH=%~ScEs-&sC)2T1~ zZ?-KP#(I;Mo$CQ9V1F)J8=Qp>0Z=(+vXopab(=|G%k!=+5y%4ts6qTeJ|}EQBPBqZ z`KwOFxMI19$IwB?(~*&pS^Q|}u|(nCW0rSd>8Pl$7rUdZe97ZFd~A)VL^G(v)dWb; zmg)pHY8FpFXKN^&bSzfC6m`x6Qk>efw_m$K*Ys-$<4Y$2mOKAClu^#K;&l{J8Y_iR zR9%GXi-^u2s}Lwa(LR>s|8S#Y>W3RjYUvCJ!kpM_db$qZLu`ZhZDv7ZbgAxb8xSW; zGNhq3xvxR60`wHE-m;4J)K`A?a8icQLTp4k1?7@NBvjMXVlo@BNG45FNJn@={#)Y`gcZ3ZA#Gnyaz7<}S+v2+t5og@8?@`raw_PwA$2szvq@}@HYb6m2T zY-^pHn``|5@PZ63^5qQ|<~RRY5H_DYEhQ-6k)8UL0g#iL5`6BRNP=iU3*-BI!sf4c zzXtUo&8V}c;;KsR9#|6arj`P_^XQ_KebncBSiO?!S9(4L_1y4+FZhX0B<4J3U|oj( ziE`bTQ&EaP^!1zIt#4hm!&xQ(=j{8lnU5Uwv;o*zL59*&h9yOPyd^P;kF9*deP`jqR z>i|WylM~|>6oo_ce)$_od}Z7Eb8_L^bBUTRIv06ro$c<3*wz$Md#6@2S;S;PM{mL z)h<(%?Zuy(_!12_#?fr0@mI44LR()GQ10jqRWMW%c%u- z$Y(eS`x@YTu)~WvdVFl%e#v?s{-Q?OGbq~aE723OSh55IIS_IkE88z9soi(O-d>_oR%%G+&e?vP_p`sbw)x6qqD# z@46QKP!)QV9Mc2qW|i3U-0scde44lTh!!6lvr|8(ko%ZO7KO2BQ^*yO`2>(#Pptx-_|>7+nQP3 zhT4_>w=6;eycZfNQC4J4TCN9s9Hb<8zbABep%c7coBd^tGvUN)crIUonJ6PtQH`33 zu@-&)IYw*-Lb!W*Pz$JqfF~Wk=kw>!^%gag7?y#3XA~!FFS_(O!nE{_ zRH$3#*&q63WnV{N1mvOsKFfjHQrn5&bVg4c+8lnOKU)bCf`YXO$ze4}ki)A5! zUN(u`C`i9%(&L_~J%tCY?%`vV;LN~)PIh;97vg4qOW#XF?G^=g?M8whR3nZ~%QWZ9 z+EJ2oSWsA)eE3Q#9|PD<{BHcyzHed*a4LQUl5J{nzEz%Qf&ENGPi~Xnn|FY1bs@;lUOy~X2OqX*iQi5j03k^@IXNr+GR z|NGOQcPS+$m8?8!o4(qjEWKy4A97Co^TQfQ=yjowEI|r+jT6@4C;o7MS9Arc6WuVf zW$@uU?PJqb+8*a; zhMa#MI$bDTxQTlA+0gn`p8#pghu7l97_Qjb*4E0%4ZQ2uPOQbxj`{{Ij&Of0 zwLKlaRJnW9)+cFD{DI0pW8=@U?oA+EzBQtAftj7Xj_5F=vjj+$c)e64HKKq>_qSei z)}hxrmA(gFO;cJ&t_e9-gOzN*{G=7Epo*WyG?%OQ;J(=IKbl@ zDQ9!EYyq05GLDny5mh@I$Qs{m{n&E>af9N+`@d%y0VdW1^XY-TKd-Qnl)%|NV!QKv z7rOrpYPjn}Nz^ESpIl8XElgsfqN4r&N^D8a*RcwWktK{GK8m9U9sK_Vn9@^+msqy= zuWI{)W$}GO!`Rhjn3E?=Ed;FNiZ=)L<=&xtYc0~iJ^$dWcYKd|TB0!b&%CHF5#MJE zQg4ng^!Mmk&m-AAJ5^zw%*S63{19fxs;jO?;@wzYRdi@+yx8uyPfz!>D2@+RxM^v~ zq&E)Fz~Edl>^((?@ZS4YuzT)6uLW6Bz(?WdO2ny3??j#KeQ-RVnd&F}H6}<;uLb^} z_P+Y9>F@o2G)Ngpmx>6AgtU}}iU+M%P9glptLy3L+rofJuzd(M&-)1`HTI zdcfHBIbPrIpYh&L{@}%RcFuG6x$j3kZ8B*gHrxA~ z*VEBqzhtb1apJ9&)UqJ)I1M$v7qfWk4cpt2$5pFGGcE{g2kgrm!qaw|iu*-ApZ~lF6KSwdD3w0Xd8%EO%@=9u2L#A-0D^C- z0vJ3Vwv$%4KE07nt>)i8=e)DeDty;Xk9uf5Z2O98!zE|8|JX^v~<`* zNox$43>#bbe*aEUmXnk72Bm-QX^DP%VenG+EYS352-CMgVOvZvZ~Jwl>d0N z|KK8Ksc*pkZEJ|QUmsBIv+n3y;ak1ypJ(P)DK)MgK0rHKw-U433K_o~<3d=yHi?_w z`0P1dKYVUMFiCqg&oQR-d93edU>|JbUb{8!Xl8Ih-TV6s8c7l_*4xOIG&MRvv+Tb< z1HJHCZxZEqqA&y#!x-f}F#?Og5 ztc68YuAwa~TiJYI?z_^eK3Z2ktuRK0lLAyU zG{Qm6Dec!nI4QN`1fgiMy@KIT5z zUPF$d_jjU4zJ@=3fT2dnLpCs!8Su&%qar69a{+(4~oAZ+Jwq+#Mz8L?P`* zH9uO&(^QRWYAuEfZ{%<_q-#(;OI+n*N{%2ql6W|=(h|9|w7)j$Qe0AkJ30!^6l2jz zjoA;;@KDOV)EJ(czsD*$`QeEaH)`$yMT-^ZeL7Q-qLY)7^X{-aYi~hZhCt%>W>lK? zn5nqBb;diSLqmBe)Jl#1H+>D|C={&D0_Q*bo*-WA-C%OzP!ZX6~+NnFNcfJA>WpiSx9KE2^MbM7sr3<=)29E`o;wQJ z$V}O}kQtQfkQ>5z#>^ooC}QA&E$hgluiNlzuzKZ z&Ox?W60ez~$|r0tjn3vT3wa(Y*HLC!wl2*cRlwGqyl4y{NcJIWVCFGlL~Mz1NYF)w zEDs@z5Z(3~_j@_~fZ618dlwV06(aNHo-r{msP0_aGt*p5nIw`&PcVibwA(e~keM^EKm(KsC#<yj1+LTxBnQlzdDQ>R_Mq2Q!54ZSS8=snEq6a#|LNK?wHTy$yQT;un zsmfT2`W9tcJ)Qdg4)mK&*tO!FJF%-D+(zgq87jnN!^5PeG-;6X>L>Zao@wz;14oTf<1NVa;`om1lk* zg#=Dh4=8eydfY1Qm!_P*;u^>UpGPfUa#b}IU!Xto16{DNe(FLumsPt#lT#sQ~( zS9jph|ZeJ8>hB>#ad4V77RI(B`47#BiN)`AYFLrdhr(b z_XuRHz|kkRlR{9=#krl5$uFze`#5U8ae@0;XquX!9c*+Bpc-ohOuyYj zoAE!a9E776f7e+h=`7eefL19kL9QeZdaeM!sE%O;-6w!H0qZW>hu`f7Q8?S6h#5re zo51!Xzn+Zh#cF*j`ByMTCdeWYhjW-%yF)DzwSe;V-~wp~L_src6si8EMq$d1(s|7X*#y~XghA!T0onQM5%M{v-_Qvz zcrL;FjhYpya%Qt&t3G>UzhLb^Q#m;GQi73F+-e*tP~`T)PzU7be$jRefkeuOwi)$k z^)32FRGTKW%a#Wf1OnQ+u$gkaHmN`tvi5=lUhV@fges%bycY;_>MO(n5%?uaO{MrT zyFh7#C3Y`DgYF6s-+eA_@HllLwH%pyaqSfWoj1y8_OOvNBX>Cz-_@R#E=Lt-VN`jT zr1p13V+KpMBvy=uK}Pq-YHp>I6V42M)Got>R;x!~RR^$MjiZM!{Ms~e1DfrWlqP7O z5j^<0nmk;{@Pn@SU_()OSvaN3O5&cOU%P7H7?J#&NPh9+#TQw1bxVFeK1py9UA}bb zl9rI5VAI|e*v=KssZ^9T*N0wyWv`hjlhS7t=b}G{dU#7L z#%^azOs5668lgCAH4AO@+bM*cF+1%IJ5JxKFl=?8=I}9*#TzR!DTI8Q7hX2=SDCU! ze-e-eE(BQZ3bkLFbN!uEzn)6l96Ry+k>4o*VPwfIfogR0c?R|(fh9q%fIzCSuMTno zNJ=Jki<9c@R&Nkct3WSWCaCJW;33$Fy-{%V*-}#(KzowhZw_0M<>LMpKY<_7?Mfxd z3`!`~l#%^&E|pEf;>!I9`k_ogEMI8f5KpAZqhxA|S<6p}Hws^V+xp8ikXm40QPc@a z`V6_#a*;Pas4&?(P!8!;c7;KD(Ec@_eoY}~!;d-2H8##IF^RW&FM+uGC3F+i<}n^^ z!v&J&?bD!JI|LWs`OfXn&b3Fzz_9az9|mAZ-8|^hxJw~93UOdDGA_f{H}~hQAwb7K zMq5xp=Ty5O`>3raR)aCZ=u2$7ES&3u;%_T_ z!7Vhqv)Eg-A42|)4`u==hh!m!X~PHw2b-qF8a3PL)wGRfQ@6ZpeF_o-+pnagQ+uve zHkkv9(ci~8sMA@qAQ%it#aJ+T$`QK+E9_a_l}zW!a^CzwF;a@C zG@}~d78wY3&Xe?Bz=Yy%d&DBIj!~(Erp>TZoCm4XljXq?8K)R%#d)oAxU!mC3^8O+ z{^S15&{r0D&LVgJW|h>e5P5@*XD%}1!Q=BHEE*pE&kL@FGi%_>SD-bpYR>zr%ilLL|$b$;Mh~edkDc9+_ z35t8)dj5y!o_5W8BY{Xd!7I7?CX;A`LEXnna$EG?Yu{RGY#>!XW(^X>FVh~RIK1Z1 zy+-?;vVfYIOw#_k?!cw{xYohQHq_q6rL8bxGXET;k(J&bZ8w*LGXgYv>^f>LOyS!hs!Aaweiphd`kM5d=U zpv@+yAexPRk!BAT=Oo?Z@Qf;3wb&O=O%xWD+MHc#1q>vS;!=r;n2 zABc^Pj!q6OAnpP<1%g&}0d&uQ|FlE@G7e3E9~?zR3wVV!P2xkexFBIl*>iJq7aaPE zK%0TeDZ_-9);!^JRkTpZ)k_s?LzW9=B|0NjebTzCb@-9O=O{{R;^RB5YU^Q%aI;xn zv-`FydIXOZM`6>oRQg$sD(6Voa~28RaRRGs6R7ZU}nm8{)YE$34l}? z%2s7NMUrVD@GRcK7&nyCe}UP5O03w0fb~tBPT_3IKlgBnl`yU%7I{ z>-p7mPB67^4=na(imVoTF+d76G@pP#6mwJ4L#@@n7=>&7Z=EZ2nys(sJS(x^iVU}d@`ra;Ty{r zG71^nK&A?kFXmJzK0)HZeIE@Xqm%_7Ot z$%hl))o3}e4xu*7)3WC*ut+|Af2YDL8HGKh8Z$s_vp=HgJAxFxoUJ@+k%Xkg|D&l> zF?i6c34`9+Z(!U~ng>|5UwC_O^?;{WrkP41afSg_L;`ZSF5B8VJ3E^>uRzh7uHBT} zjoI!nxC6)s!*|0(;*M~|HutbgnHVXpg39u$dt|Bbg8R!rqen`dwqyq)K>Ijpz7u#} zR2AL`4qN)-6Ua^t8IM9#UVq{sQ#AJZQDlB%aOFFyGaY>MmVFTfB3LW6!-bpr_(MVY zHaPmf|5|);om6x8WNx60diCm6drLUU7et?4D^P_xZ~rZQT9~H=YdM;5uiWrccGi`I z9J2jWRTY6bmuFCcynlc2uteG?zR99M4mSP7QtAd5r<{WNz2K_HO;?JKW3R3}{1NVd zQNXc(Np3SBfI@apRkVrksyX9cAx&+Zp>MS&ruF&6MfW}ZP+c5DXig>vqL#d+YFh0M zp4z>Q@tf|3=XNvtY1NNITJ1}XaFXZ-eYNXfdue*_u7QE-0H_m4OpJ_4Aa5m^lY=7! z$X=ZN{N8=|@S$3kjS0}EN`Xs#*(1pjdqweX8?YMb3rcOrX))^m;^#2W{wgC%cM!Sh!I?X+rpJ2>10w)bmj)~+*6 zc>q>}kww*9&=Ee_JD&Uu96@=@cB0p_Fl?chQtp*&>5s+=M9z0sn^YJR2QU~d;9P71 zwPiTsutQ{X?;`$s^$?F|x{xmjMVo4GZx43guwm)gaxc}>Wpn^meSoH!y4Mc2kc_^C zZJa8iM!YM#Wa65I9-utS6L(Ju{PE*?lYAH(`V?EGOXemkEe7?x0%02=g+3br?KrmCKeHEiZ@ppt z>DUJEx{C*6;~xQVQ#K(Ec7Yv?)Ix|7^;XK2T?7!VCBi%(T%-p7zNux{(PCy`Na9eq zA>-^&Cumh1gY4|)2x2-rq3EniQ+McyIgX_H%l@rV>Ah-8vFY3!YI41K*|-rNueVbV z12n~^`tRJX?-CcA`DoQzTkFzj&23AzgH-)>H4?KGxjVJFoR7sc!0?(J8KEoe<_pZc zVg|7jaeVOoI)Wly)eXt2HkzK8pHeByZtxx1&<(`sAV6AYB)H!If8HNc_xRlY;!zK0 z2EB4bUw^+gD9_t(cw{0rL6@RvLtZuE(a*oR*nG5<%NZv7o~^ayjfoUDQ58=C!wpO_ zvp4_s$Ct8f)g#Vpq{I%+@F~6r8}}03K0LbS;j|dC>!>lG?+oXOEF2sc!16K7n$0#k z7L9`$Id|=-a>_+xS;jjrxuIKZ$U~F0%E$PvozcwIhJ znz0zTPd?xI;JpIEP;&SM1Zp2730A|Kz31*U(p9g4dnsfAbec#7J!&L$v-kFCws*Zw zKtKUFe^YnYpX~Fp&T~kHugTAt+}_tZ79}(iT zHhfUX+<2T*!F*%W-T#7*ai9cID)&!8!lWLkc0K<#_z6)O*CPL%ajtn;M2!(}mePs-8)47lHn236Gy%SoqZFzm}ml^!KQR063oz z^6`EwXoPD`rDh7Uv$ONEvr7RWcf7p(!WW?CBlRfqMgaGJc&*=_g3sy_XqY>;%x2vS z@Z=lgQz01MyP-8Uym3L=$@i<<=2x^=J6FMAWKBJmq2)mq_AbvfrmWv+!Q!mH%?84f zXlRm%uGKy`RJN$?=QA>Awk{^`@_X5<)zDew(`-Ft*$R5cqPcV`W8s@Tgs9A9>#sDc z6DHiYeU>x4jq9yGb;pL%I|%Hs)nYmYmZ#`-MU+Y2pyRy&#T1S@~-2!NuPdgOuv^O*?fiK_+EE(ZqLZ^@@3SJ+_sr* zYL<@u2qPpvkuvQ_Q^QC)9W7{|NAU6KcMlXfZMr^~6D*9m|!JtEG8681pXppWVAPXzlf@%p0z+g$>Pz1svK%IOyMp8X2B z{bGffP{{4mAWQ*|-wg&{nZ)}==@@)7@CnDo-uVFO<9YK7r0bbAfKY6EunYVS=AVta z**Q5&fU)&I1^!nEB?c9r`Fnl~U1tdBL;-2$D3#1!Bw+N_w6w6a>j3w32g`BDT;*3wc}yPVYlY> z;2Bk{&nY`y2t+{Z-#Y?`oFLLxUP0krs@Su#=YtCUZbz9yE7k7~y%W^ty$uWfU|Nbb z-Ef!4`npB=3NH>o-q4){F(t3TmEk-rN1Bpy!cthv&gPA=&AjVgBhAgfI>WL{vg{(& z`u4}-zmXy^eCmBh%(fW=RlC)598mT4na{p$!-}N++COW=dAX}i5BMH9x%x+Tl?)h7 zP)1@|d5T?JTq=j%5L)0y-}@-R4>XwqRU=8_I!3e~!!!x!PsIX28RTg)8FB@Kow|** z^mOskt1#BZFD;c5NOPb}P(YhA_owJVGcdjc;?Rje+@iotYjQO`PYylZ60YW{lsmVz zRRspDkLDFiVc2>@uJi5)b9ucX^PJ*g`|20bqO#yAm7v>#sQE5Di~y*zy55ipoI1AK zR05ZCNKjT$=>k3;u(V5s7#xFeEo-eM#tJ{NrTDeud1@QUGS)YtJe#yd(dyMuJ$0`& zR4r_Z#;Aa{<$+NB+`ZPuTrOVQ!{C7}LQq1Z9!L$bNcoS<9F$b@=jbN1t-?87oONv zlKih9I9ua7@}{*Pl#eFzQm)sMK;nH(owHA`rh~BkN1#Xx08kUep|y)L@7zAUkRa#O zDwEkeqRNxmyZF~US6t`p!tT-ivf)$U|1_CbIBQ^ZbNZd3K0b2ao?Z1x6$2Nt1h9(o z3JE2?qX~lKtN2`01{t0V?i;;6g0K$NK#&yn`qxD;O#+)NxWO)fpK9mtpQlauO&aQg z5_>x`k#A9vW?z?ToN9c04$r9Bd@0#boxN)I=Y76IFztirm}J))J)4?&5O{?my@Q}OOZ0E7i)C;{#7d) zkbXYVOxkRunJonW0(O^95Ywdt$O6=Uh1WFEToTmPm;c~Lz)JFgy#J72ywDlm-8H1; z0B01?^U+MjToQAX6?XIvO4<6868nn5xx;M609&$BSN-&SRgJorGR1>n{Xw)756m~t z&cVU9#IJDc+pYH_Z;fQ3eoA_JzcI-A6nF`>?MBmh8;6|{E{bWp(b4yVow7s+?^mF> zgPE|Ae>+)cL|x{h+9R4)I$#o_`!zm3Zt_tgq>XnMWLX*ToMM0h%3~diDy*)SGylvD zqoix$XQ}=v$Trm_&Vi?_?$1to2J#&FGSI&QJ3Y^z+VKt(?#xwio!ak#@6*vlFFFnE z(9JkUo+3xXt(&O1B7xR_I9oa!!``|aDmUr> za4sC^oG#;NDyVcC+PH~l9b1$GIL?*?PB&9>0KGp+s_dg%Zi=6QLXQ6%+O{N(Osbw0 zY{_7Jy)MiEX%u_?ai~>G4z2E5G3`|$1bHmjDJ3m^R{M;d*^g-1y1mI1%;oIT?l z#dfX9*t8ZFHkt?U-bU|}EGfDzS~UxaFOhQ>x@*4$OjG!kSD8!++ z*k>k*!u8O49i7_otus|#nVM}FxR0%0W|9rv%;m;+1pOQa@$I05mr~xFO|e4t?{O{I zew!ao>`P*A`i$lzlLDIRLJHGwz26P44MPpCVLYdkC+o$N_?E^n%i{dhgV5Gh;qb~C z@-+3jVTVjjnV;(Hh6@DH7&D+c!L5#_8fO>%)pmvEidK4I^0Mwi|r5L%9f1_ zi<4^#d(=Z=&C-`1EDVszD-d*%M95!NV&J?A#U^t1RyXfmlD)=l-cJ$BxqcFgtnoZq z!LD)WNJd15V$P8>RopRE>U>0WzHV&b4?S+Qr9)s3gGtvT5DGn{7BnSwc%u*ZXLY=b z7&=wij_tt-Jl;NQ0L?FznucbwU0Wkg`m=;GKp4La*}uEUp_>-un$>z8TgguQLx41} zv1x0&c;F!A#HL1>%Lvd_TmikUPZyIbA%tv7^2QE{l%N;cvulFh?8#D-L#pD~vTed&t!ux<+ETrvqNi+&F{6P6Iz)%sy(H)0&4|jm z$n_b+4+Hca&%O+OyD;o|I63JIno*xs8?Zn+1De+6-N^Z_t}Yx9Jct0y4mJiB>L%D} zQ!}zDudB^HX|l{3^?s2(=zM7V($JM5`x8fx`Ac%rftft3E5?@_LuMdm$w4L8Q}iCP zb)T}>jMJH2`HUkxdpn*b1-W@!?Qqp|ukk<4YqAFUbP1_f95eWHEnI(xm#3p6_Aj=i z7c^Vtyz+X*_wjK)+V}KtVOmob$>aS4wL*(f0ntUp>-*<|PfJ1?LP1~`^(8*I^00-f z=9)v{^bth;bweB!yYk<}v%#UdutIkK&{k^$R2D}GrX+T6`|qdtrF9Qqt!| zqY!QF$Ge=yHIRVdFqFovsozAf4j{30BbvFzt|`Tmy7I>t)}p1)%Ho9mpB~h2G?34$&C}wMcA4zV9?v_luJtZU z2C0gz8z1Y``m1lq?TD)>%lXE6Fn`omJG@aYHN3XDPh3S1-G0`7BKbQXsvG#GtLa|a zBQKryLv=pt(ai0t50Q938W5dDvm>TUb6f47>K%P^>lznd|yj8?(yI;&$yDAgWRwal0yv3K*68vecyukdAo%QKr_ zn;TW-v2PhfFfu|gWz!lYGbT+hVXBnSCT6y!sO@s_L5SH;b4G%->e&B{LxFYyj@~50 z#jHGEeQbP|7*dhXvh1<7vEzR2E**PLf{~cGxYgAwe>pB1$I&WH?s{R3tcPM@_k{0F z{^1E9V*r-Mc>YB6rB>X?1i*D*G`w_GBhn>+Ob6M-=BCWl&ZXY|`ymSCuh)La$7sy# zYuBtzco9{|664;jYm;Gl5$G;yENMhqNTf#fO!C`wju}Z+@S9QF>(TsF6($rpu*TwN zWAUDpVP!BYhh~;LiRpE>wg9>*#PBFn*THT^-6RIFM&*2Jn`9=ny`#B7ZhGE1zC1$9 zZ#jmDyl}=W{sx2(3VMc*&`rnF^cY}b6go5jOhlq6bHR>!B`-Y<7#5J*oKdq^C@-lp zsWv*A9^s$&6+>Go7lXx*BOU}^)wa1pGMQf4-_GyE(1dmm;u`IgPceLU)IEdw?QZ5A zxY#t~4+)Wf{B)7`+^0{^UIc8Q{?wUKV2vdNfAs(%3?lS^Mbhb1uXfZ#GX=2^d?VK~ zB|T9jQ5M)IHc)z&<-@PTO{{}2*EcjA9s>Ti2rxe+xD6O)&x^WYW|Yyh!MY58G-TML zX5&|ID}`vA*M&Ysn<92w%FpSCX|+Uq>BHhT*l9Is3NGa4YatUmSMaC2Go+Zu6Bl2l zgm2Prsi*}`#{}1)sVp_RJe5mtWAEpmV^Gs2ALJ-3za@X-ZNZ$6hQ?V!TGLxxN_wvViK7olVPOG@@sM--j*5L4XP7AFlZT zmW9eT70R%Udt-sX#ZUVA+=`q9q&*i`rd?2 z1e$V@iEqh&hOixi5`7OIRtKtC(Tv)AUh$9Z7rWzj&xbJ4pI<%M6}t9E>|)^DkP=fX z=*4fo#s$3x;ZghQgnJ;t%d**;x&|s}I%qwVwt8K23V>&$sKU4x%%y-rnpXj1$XWtP zemCX_HU(RD9>SE!G}zT+gnZ+(X4-8_Pc3xQMs5g})H~v~Fg0rOyOW(-y_@f@c}^zY zxh){`M#1sIV2F0)h^Ne;eco9*uB`DYmubRI+j#Rz!@dQ2RIK=Mfp|p=sa%L^6Z}oP zJusmBM)b?6*mzYsTY$^+fDoeapoj=fd>)XYT>}L2@7<<5ImNIx)xZJXTCDjR!i4|; zpmy0$;~w*Q9jXu9hI9`a$hVId{qo3Ruab6}Z)FVTJFE%(k#}TY2v8m%bxY5Y29!if z3Y!6f9k6zolK2=_;Njn{fB6%uW7}w;nODOVi))~7!#=(*x`bEhF*u5mTpABjY$H!! zl%k0{mA;6tv4dNeQin0mzg(pg-LVakpo4>y4xcLX3T|K+w0WVFYhdnfVBubFHyoMnUO+X8%~uA@Vv#jzcnSU(ru zsBv5AE_LVMI&qHS9m(KfO-a8N@ya83R^RG=@H-E)1$2kTbRzXQ^47y13^WSX+31d5 zCUIUUk7x<)LygMb3jKDQ{??s4%@|Su6WvCqqO?aS1KSxS6X)?&2mvGx7$VGtq`BWP z9juS<{@vQzvhh&hcj4jY)(0SntWN54_VCb=2;MmQ+XvgLnBlogtJeLbSK$+NgPlX? zbTn00E(Q+X=XRMwpWB(CZ(%-3so1#PqOWA;*%(@^b(z(EX)NEJ(bD`Tg|@L){Y*_U zL9b^280+Nnm0=)d__7L3Si@!kO&RO4A9npKiMLZAtX(&69=q*18nJPnF+aJ{EB_jO z2-c&sCnhF~Rx=5n<>%^jt7P*$#GGAp2R^yN1}CnTRr0q|my42Vu|!q?fg+u2k%2xw zKIO(`?4bpLJ-oZAhydELbM$S`xU~C$N5cNY6BYByQ7HKQ0v08}-bD#GWQ^iN3&4xi z>P)W=Jc$0|*Zj=uIj3=aF4jYM3pR`MR?%t{?(wzrt2bOjiFF=G;aIyLjYYuTVC!=) zu-ebq;?eD)La?&vFO7=#GR_>$a0o-8=gv%a&`f8;DcO+@Y_hk0CL^1c5Q+6qJ(AgO z;ZMt-@UKg!IURg!+5lq9$jGQ)?0P(^fdT$KFbDtIZOV~zzRK1y z0pzF^fS<<=Alqcw+*=6oK(sZlqUltjkuKK#FjcImg+O?P3*wZumf-3!vB&7di>Y=K<4K81{?OD8SGp_XWME%Oq z1w!?$bPA9}lKhY#Y%1q4J+y(0G?H?9T#%RQ-#1-2;64Mf=&U(ewpSmS-LC_S7m#rw zEg9bryPW|uFYi1_6S#NXucxJ@0f;jU>*DR50)%L(Vjs*a>??rhKpg|VWjR8@wYcI# z#vE4x?009P+SHe84N;f2Q=c~<4%`oaPKRO+gB+;72_BlVz;T-S0~E#aAi}~qN9x=b z?>PU?#*L1HJgPI|+L8u~^>a`#!!BAu96aQF3RzpMC4DN zpoGz&&=t3cd>)?FK(CBs{B;d4Io(NTSHnWHo3G7g7&D}0)@9f)e8*%9PhQ-C|G-0L z0Vw~^%9MntyLsb=(be=v-_5TBTA7JM@Sg$~yif{U%Go(N<{Y#Ma#KygXiUo?M=KTKH61QH9EAX&0uqX zC{1tqX75PmWb>W6^(|R%e^zY$s84|tv1i}1ShAsyG;HP+~q0eaMmA$+t1|3DU zQtD4obJC3{rdc!0HIrTkI?64s?5;Of9^trLqi3%lEvE7`v{pWMpE=17c2JLIVP_wD z&!l{%Gy@UR!=IgZ=MN#^-v^Gq|IhlwZ_n~D$6pJH4LMC&iUhd zxx8!6*&JEnEhh7b`FO;m{#^HdMUS?+1TT;4Chl2zI&0P%iLXp3T`umaJRu@}Lda0l x+ps)_2!uhn(wYB#{-G7#|5(bm8B?T&5K{{dchH7@`F literal 9664 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/packages/components/public/squiggle.svg b/packages/components/public/squiggle.svg new file mode 100644 index 00000000..77a1ee2e --- /dev/null +++ b/packages/components/public/squiggle.svg @@ -0,0 +1,676 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/components/src/App.css b/packages/components/src/App.css deleted file mode 100644 index 74b5e053..00000000 --- a/packages/components/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/packages/components/src/App.js b/packages/components/src/App.js deleted file mode 100644 index 37845757..00000000 --- a/packages/components/src/App.js +++ /dev/null @@ -1,25 +0,0 @@ -import logo from './logo.svg'; -import './App.css'; - -function App() { - return ( - - ); -} - -export default App; diff --git a/packages/components/src/App.test.js b/packages/components/src/App.test.js deleted file mode 100644 index 1f03afee..00000000 --- a/packages/components/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/packages/components/src/stories/SquiggleChart.js.map b/packages/components/src/SquiggleChart.js.map similarity index 100% rename from packages/components/src/stories/SquiggleChart.js.map rename to packages/components/src/SquiggleChart.js.map diff --git a/packages/components/src/stories/SquiggleChart.tsx b/packages/components/src/SquiggleChart.tsx similarity index 100% rename from packages/components/src/stories/SquiggleChart.tsx rename to packages/components/src/SquiggleChart.tsx diff --git a/packages/components/src/index.css b/packages/components/src/index.css deleted file mode 100644 index ec2585e8..00000000 --- a/packages/components/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/packages/components/src/index.js b/packages/components/src/index.js deleted file mode 100644 index ef2edf8e..00000000 --- a/packages/components/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -ReactDOM.render( - - - , - document.getElementById('root') -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts new file mode 100644 index 00000000..5c7c48df --- /dev/null +++ b/packages/components/src/index.ts @@ -0,0 +1 @@ +export { SquiggleChart } from './SquiggleChart'; diff --git a/packages/components/src/lib.ts b/packages/components/src/lib.ts deleted file mode 100644 index 732d2691..00000000 --- a/packages/components/src/lib.ts +++ /dev/null @@ -1 +0,0 @@ -export { SquiggleChart } from './stories/SquiggleChart' diff --git a/packages/components/src/logo.svg b/packages/components/src/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/packages/components/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/components/src/reportWebVitals.js b/packages/components/src/reportWebVitals.js deleted file mode 100644 index 5253d3ad..00000000 --- a/packages/components/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/packages/components/src/setupTests.js b/packages/components/src/setupTests.js deleted file mode 100644 index 8f2609b7..00000000 --- a/packages/components/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/packages/components/src/stories/spec-distributions.json b/packages/components/src/spec-distributions.json similarity index 100% rename from packages/components/src/stories/spec-distributions.json rename to packages/components/src/spec-distributions.json diff --git a/packages/components/src/stories/spec-pertentiles.json b/packages/components/src/spec-pertentiles.json similarity index 100% rename from packages/components/src/stories/spec-pertentiles.json rename to packages/components/src/spec-pertentiles.json diff --git a/packages/components/src/stories/Introduction.stories.mdx b/packages/components/src/stories/Introduction.stories.mdx index 97382041..b4bca349 100644 --- a/packages/components/src/stories/Introduction.stories.mdx +++ b/packages/components/src/stories/Introduction.stories.mdx @@ -1,13 +1,9 @@ import { Meta } from '@storybook/addon-docs'; -import Code from './assets/code-brackets.svg'; -import Colors from './assets/colors.svg'; -import Comments from './assets/comments.svg'; -import Direction from './assets/direction.svg'; -import Flow from './assets/flow.svg'; -import Plugin from './assets/plugin.svg'; -import Repo from './assets/repo.svg'; -import StackAlt from './assets/stackalt.svg'; -Hello +This is the component library for Squiggle. All of these components are react +components, and can be used in any application that you see fit. + +Currently, the only component that is provided is the SquiggleChart component. +This component allows you to render the result of a squiggle expression. diff --git a/packages/components/src/stories/SquiggleChart.stories.js b/packages/components/src/stories/SquiggleChart.stories.js deleted file mode 100644 index dc04a76c..00000000 --- a/packages/components/src/stories/SquiggleChart.stories.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -exports.__esModule = true; -exports.Default = void 0; -var React = require("react"); -var SquiggleChart_1 = require("./SquiggleChart"); -exports["default"] = { - title: 'Example/SquiggleChart', - component: SquiggleChart_1.SquiggleChart -}; -var Template = function (_a) { - var squiggleString = _a.squiggleString; - return React.createElement(SquiggleChart_1.SquiggleChart, { squiggleString: squiggleString }); -}; -exports.Default = Template.bind({}); -exports.Default.args = { - squiggleString: "normal(5, 2)" -}; -//# sourceMappingURL=SquiggleChart.stories.js.map \ No newline at end of file diff --git a/packages/components/src/stories/SquiggleChart.stories.mdx b/packages/components/src/stories/SquiggleChart.stories.mdx new file mode 100644 index 00000000..b2245b1d --- /dev/null +++ b/packages/components/src/stories/SquiggleChart.stories.mdx @@ -0,0 +1,81 @@ +import { SquiggleChart } from '../SquiggleChart' +import { Canvas, Meta, Story } from '@storybook/addon-docs'; + + + +export const Template = ({squiggleString}) => + +# Squiggle Chart + +Squiggle chart evaluates squiggle expressions, and then returns a graph representing +the result of a squiggle expression. + +A squiggle expression can have three different types of returns. A distribution, +a constant, and a function. + +A distribution means that the result forms a probability distribution. This +could be continuous, discrete or mixed. + +## Distributions + +An example of a normal distribution is: + + + {Template.bind({})} + + + + +An example of a Discrete distribution is: + + + {Template.bind({})} + + + +An example of a Mixed distribution is: + + + {Template.bind({})} + + + +## Constants +A constant is a simple number as a result. This has special formatting rules +to allow large and small numbers being printed cleanly. + + + {Template.bind({})} + + + +## Functions +Finally, a function can be returned, and this shows how the distribution changes +over the axis between x = 0 and 10. + + + + {Template.bind({})} + + + diff --git a/packages/components/src/stories/SquiggleChart.stories.tsx b/packages/components/src/stories/SquiggleChart.stories.tsx deleted file mode 100644 index 32ccdc49..00000000 --- a/packages/components/src/stories/SquiggleChart.stories.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react' -import { SquiggleChart } from './SquiggleChart' - -// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export -export default { - title: 'Example/SquiggleChart', - component: SquiggleChart -} - -const Template = ({squiggleString}) => - -export const Default = Template.bind({}) -Default.args = { - squiggleString: "normal(5, 2)" -}; diff --git a/packages/components/src/stories/assets/code-brackets.svg b/packages/components/src/stories/assets/code-brackets.svg deleted file mode 100644 index 73de9477..00000000 --- a/packages/components/src/stories/assets/code-brackets.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/code-brackets \ No newline at end of file diff --git a/packages/components/src/stories/assets/colors.svg b/packages/components/src/stories/assets/colors.svg deleted file mode 100644 index 17d58d51..00000000 --- a/packages/components/src/stories/assets/colors.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/colors \ No newline at end of file diff --git a/packages/components/src/stories/assets/comments.svg b/packages/components/src/stories/assets/comments.svg deleted file mode 100644 index 6493a139..00000000 --- a/packages/components/src/stories/assets/comments.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/comments \ No newline at end of file diff --git a/packages/components/src/stories/assets/direction.svg b/packages/components/src/stories/assets/direction.svg deleted file mode 100644 index 65676ac2..00000000 --- a/packages/components/src/stories/assets/direction.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/direction \ No newline at end of file diff --git a/packages/components/src/stories/assets/flow.svg b/packages/components/src/stories/assets/flow.svg deleted file mode 100644 index 8ac27db4..00000000 --- a/packages/components/src/stories/assets/flow.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/flow \ No newline at end of file diff --git a/packages/components/src/stories/assets/plugin.svg b/packages/components/src/stories/assets/plugin.svg deleted file mode 100644 index 29e5c690..00000000 --- a/packages/components/src/stories/assets/plugin.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/plugin \ No newline at end of file diff --git a/packages/components/src/stories/assets/repo.svg b/packages/components/src/stories/assets/repo.svg deleted file mode 100644 index f386ee90..00000000 --- a/packages/components/src/stories/assets/repo.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/repo \ No newline at end of file diff --git a/packages/components/src/stories/assets/stackalt.svg b/packages/components/src/stories/assets/stackalt.svg deleted file mode 100644 index 9b7ad274..00000000 --- a/packages/components/src/stories/assets/stackalt.svg +++ /dev/null @@ -1 +0,0 @@ -illustration/stackalt \ No newline at end of file diff --git a/packages/components/src/stories/button.css b/packages/components/src/stories/button.css deleted file mode 100644 index dc91dc76..00000000 --- a/packages/components/src/stories/button.css +++ /dev/null @@ -1,30 +0,0 @@ -.storybook-button { - font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-weight: 700; - border: 0; - border-radius: 3em; - cursor: pointer; - display: inline-block; - line-height: 1; -} -.storybook-button--primary { - color: white; - background-color: #1ea7fd; -} -.storybook-button--secondary { - color: #333; - background-color: transparent; - box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset; -} -.storybook-button--small { - font-size: 12px; - padding: 10px 16px; -} -.storybook-button--medium { - font-size: 14px; - padding: 11px 20px; -} -.storybook-button--large { - font-size: 16px; - padding: 12px 24px; -} diff --git a/packages/components/src/stories/header.css b/packages/components/src/stories/header.css deleted file mode 100644 index acadc9ec..00000000 --- a/packages/components/src/stories/header.css +++ /dev/null @@ -1,26 +0,0 @@ -.wrapper { - font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); - padding: 15px 20px; - display: flex; - align-items: center; - justify-content: space-between; -} - -svg { - display: inline-block; - vertical-align: top; -} - -h1 { - font-weight: 900; - font-size: 20px; - line-height: 1; - margin: 6px 0 6px 10px; - display: inline-block; - vertical-align: top; -} - -button + button { - margin-left: 10px; -} diff --git a/packages/components/src/stories/page.css b/packages/components/src/stories/page.css deleted file mode 100644 index fbc32aea..00000000 --- a/packages/components/src/stories/page.css +++ /dev/null @@ -1,69 +0,0 @@ -section { - font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 24px; - padding: 48px 20px; - margin: 0 auto; - max-width: 600px; - color: #333; -} - -section h2 { - font-weight: 900; - font-size: 32px; - line-height: 1; - margin: 0 0 4px; - display: inline-block; - vertical-align: top; -} - -section p { - margin: 1em 0; -} - -section a { - text-decoration: none; - color: #1ea7fd; -} - -section ul { - padding-left: 30px; - margin: 1em 0; -} - -section li { - margin-bottom: 8px; -} - -section .tip { - display: inline-block; - border-radius: 1em; - font-size: 11px; - line-height: 12px; - font-weight: 700; - background: #e7fdd8; - color: #66bf3c; - padding: 4px 12px; - margin-right: 10px; - vertical-align: top; -} - -section .tip-wrapper { - font-size: 13px; - line-height: 20px; - margin-top: 40px; - margin-bottom: 40px; -} - -section .tip-wrapper svg { - display: inline-block; - height: 12px; - width: 12px; - margin-right: 4px; - vertical-align: top; - margin-top: 3px; -} - -section .tip-wrapper svg path { - fill: #1ea7fd; -} diff --git a/shell.nix b/shell.nix new file mode 100644 index 00000000..a60b8a9b --- /dev/null +++ b/shell.nix @@ -0,0 +1,5 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + name = "squiggle-root"; + buildInputs = with pkgs; [ nodePackages.yarn ]; +}