diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2c0e19c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9e25297 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto +readme.md merge=union diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d0bfac9..9cc2c92 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1 +1,5 @@ - + +Link to project: https://example.com/my-awesome-project + + +This project does awesome things with awesome things. diff --git a/README.md b/README.md index 2eec1ab..753096a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Awesome Mithril [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) -[](https://mithril.js.org) +[Mithril logo](https://mithril.js.org) -> A curated list of Mithril awesome +> A curated list of Mithril libraries, utilities, and other awesome Mithril is a modern client-side JavaScript framework for building Single Page Applications. @@ -11,16 +11,13 @@ Mithril is a modern client-side JavaScript framework for building Single Page Ap - [Official Resources](#official-resources) - [Community](#community) - [Learn](#learn) - - [Tutorials](#tutorials) -- [Examples](#examples) - - [Apps](#apps) - - [Snippets](#snippets) - - [Starter kits](#starter-kits) +- [Apps](#apps) +- [Snippets](#snippets) +- [Starter Kits](#starter-kits) - [Testing](#testing) -- [Libraries, Components & Plugins](#libraries-components--plugins) +- [Libraries, Components, and Plugins](#libraries-components-and-plugins) - [Tools](#tools) -- [pre 1.0 Release](#pre-10-release) -- [Mithril in the Wild](#mithril-in-the-wild) +- [Pre-1.0 Resources](#pre-10-Resources) - [License](#license) ### Official Resources @@ -37,59 +34,57 @@ Mithril is a modern client-side JavaScript framework for building Single Page Ap ### Community -- [Gitter Chat Room](https://gitter.im/mithriljs/mithril.js) -- Use `#mithriljs` on Twitter and other social media. +- [Gitter Chat Room](https://gitter.im/MithrilJS/mithril.js) +- Use `#MithrilJS` on Twitter and other social media. ### Learn -#### Tutorials - - [Isomorphic web application with Mithril](https://isomorphic-mithril.mvlabs.it/en/) - How to write isomorphic web applications, i.e. server-side rendering and client-side code with one codebase. - [Example Mithril Components](https://mithril-examples.firebaseapp.com/) - Concise examples with both ES5 and ES6 versions. -### Examples - -#### Apps +### Apps - [Isomorphic web application with Mithril](https://github.com/mvlabs/isomorphic-mithril) - Server-side rendering example using [mithril-node-render](https://github.com/MithrilJS/mithril-node-render). -- [Mithril tutorial app](https://github.com/spacejack/mithril-tutorial-ts) - The tutorial app from mithril.js.org adapted to Typescript. +- [Mithril tutorial app](https://github.com/spacejack/mithril-tutorial-ts) - The tutorial app from Mithril's website, adapted to Typescript. - [Freddy](https://github.com/spacejack/freddy) - Mobile Reddit Reader. - [Flems](https://github.com/porsager/flems) - Web playground & sandbox as an embeddable module. - [mithril-slides](https://github.com/wulab/mithril-slides) - Keynote-inspired presentation app. - [WaveShader](https://github.com/spacejack/waveshader) - Audio wave sketchpad. - [Flash Games Catalog](https://gitlab.com/beelzy/fg-catalog) - Catalog and launcher for flash games. - [Tutanota](https://github.com/tutao/tutanota) - Secure emails for everybody. +- [Lichess's mobile app](https://lichess.org/mobile) - Mobile version for Lichess using Mithril inside Cordova. -#### Snippets +### Snippets -- [Basic drag and drop example](https://codepen.io/grilchgristle/pen/rmaZag) -- [Somewhat opinionated typeahead](https://flems.io/#0=N4IgtglgJlA2CmIBcA2ArAOgBwBYA0IAZhAgM7IDaoAdgIZiJIgAqAngA7y0AWXUGAK3IEAxgHtqAF3hTkIAPQAqZStVr1GjQB1qAAkU79utpx59DBvYt0BBZswBKAZSQW3krZPGwEIyRAldAB4bACdQ2lYkXVD4AEcAVwhYqAA+aMleXVpwyN0Ad3gAch9dACN4XVIuUJFuCGoAc3liWGlQhsb3Twk62ibKoIAxBOo-AOpo2MTk+DTowlHxwMkxXXgAD3gRBOldFazq32kofbKBbY8rTxvryV1dMFp2EbHPYaX-CWixdi+6WDpXSLMb-YFiUKPZ7sTq6TKVbzHCa6BqrYwcLi8WhQAC0sWxrHBoSeV30N1W50uNkkkkhQSctM6Pz+E1ogOi2RpHTKu0qdAYRKqNTqnTwuig8EItASbVIcLWWhA-Pgiu6knYsFoIng3DEsAldIZHSazP+bKBDXYu2BEHg+t0Gq1Or1Brhm1JBg8kieGwc8FIMskcqCAEkpKbWeyoRsIGAEmBdNR4xVIWJCLoAG4QUgQMoIGL+wOkMUSqVF+VwrIyfyxG1teApXSwbMeiy6ACqThsAHEAKKuKy6W5kr1gAAUJkxfDFwDVnkRlwm0TArDCEVYeDnqzG3H6jXg0SOlxD0jArxEm7u5KeLyWy+eAGExGANZsAPKUvxh1ZOWOvj8XH456XiO5JiJ+kjUrSCwkO0b7UMw9SkFB3K8iBnrko62q6vqDYZO6YZWpIAAKmrYS6DbMO66Hkp4Pp+gGsqHrq+QAHJiAAshC8CIf0iHZqxyYNmqAC+ACUbiDkMvZ2O2Di9i4kmgZIgBEBLoYakJI-SSLAhLVDkdT+tk1CnLEkgJKE1ByrECAZtpZyAUGVQQicuhjiItDVDiDTVFZED+BmdqsGJ5RRFuACMGDrBsWr3CSdRbgATFFFSND5BT+dwQoGdwVEbK2XqeAAzFF4hSLQ6X6bUuXUc5oSuWy7C7hU-geT4rBKRhqnGBEgWhNUBaMU5CQ5k0jxiCNlQQroCTsPIUBiPkeg5KEi26AA1vArCkGqakcbQm3ZEKSKBGUhIiM2IjrbC02SBwsLVg28hmRZ1C7boD4IDk2XVcZpnwGAYiBeCOxymdcL3WN-oiJ1mhw-DGjyDoADcY4gss1BjvkDQLfkYpgGJs56LoZWacCmqSE+PiLoEAC8nK0nKtOpEOxMPLQXKkBgN7noYDz8wA-Az-UYAuGPc88Y4c4zEu3mMEls-z0TSyLYv-DofOk-cVV1Ax5b02OOs1flYoq6QIXM7oRP8yi6ZjgAhEbeWSCFL2WboFAALoa4rWsOVSXK6PTZsYOBjkoboAA+ke6EUypFHzDx+7Ai0Ng+nnwE4wpZfTTvuhgqwADKp6E6fVGOCuJyTEhk2ysB67KQfkxzVMnZjZtiRgrTtGOYeXEHLPWzbttufbfd+BQ4+QVynuu-A5nu1KsDVFXDxu3oU+TxBKGewXYjF4UpcZxXGA4++hBjinh9l5n2chSzOLhVX4lVxgpAuWOUtimUFuD6vmbfVoAANTZE3WgW9w4zz3gfNOx8xLfxAbAJuZQIEB1pLvIuJcb4Vx9sPEeUtEFB1pvTK+sDqhZxynPBeehH7-wgHbMohDiEkKwRnCh1UqGvV0E-N6isHj0LcsAtkp8TLn0vqw8hd9gjlEQSIiUGw3wX1IUfSRlDOHu1oXw-BQjYByLEcom+7C6j3xkcIs+CilESNvmogs1DuG4OHgIghoCgimNgOomhPC8FOJ0boFmjC2QePsbwvB69dAAAZn6V0VmEuuDcgxv0uvAMc4TTacwlr6Qsjdo7ZB8PErmCAmiZAVg8ESDwHHozBB5MYdojHcDHD5LSNSxQZmoGICUIUh78Ksk07Ub9s7OybkUBOitWntPgBgBaYAMCJAbKwLOxwIRjiKJaXYRRO55gsjg4mIkKmfGREePw8SxxjIlGKQ5-wxSNP6NqTpVdTkTJDr0XcAxDZ2hptQEp-NqnalgHUhpPSbnwBaW0jpfNdkhOBPswILy4DwAANJbQACKLUxtc5pmZQXAvWHc0Z31YhDSZj9XWWSgwAs0kC-pOVnYgvGRgDuDiHikGxl4LKY4Jn5HqMYq2-8PIDRwOEgceCHgTPYLEQKUgkWSmlG0bZwqUSApqf044cwwzyIANTqv-vwu26K+kXNVaIjYRD6YEqLBgQpjRikKopUqg1UA1WbCbpErRDwyj4nWoy75GddBFSwEK4VorxXVilWWWVXzvGKv1e8vwhr5E4hxNq-BeqJn2sdca5huhH4hRTcqy4canWmtJQUmQVqso4mCfK91XBPWQptnyyo4UioBu8bqqNqaY0nHTX4rN4VcXyqZZ245DyxRmtlBQXNaajWeyue2iNw8IVVo9V6pOPrEoAHYW3Dx+bU7O5LenYoefOxdugIWaxrvcScZhsRNweQPHlvsL3CyJQ8+lnMvV+xTU3Lp-Mp3yOiI-ECw8875WiMM5+Xqwk-oeFmeA+RohjmAGbcS97xxFALhiHE16oAjPlfjZZqzJAUDupwWm0h8qe1wwOmcSabZQGzLQPMcxoj2xDmrCYFrS2ZCAwOh0ZFnS4VCMrdJWEBOuhyUUOpRQeMDrsrABIB4bUHqpdVGltH+YSEI8uDALLuAoWWXJhT0m3IZl-g+3jNtJ2doLRm3t6nLPtpU3UQZ9MMz2dPfA9zEhNqsFxpMXQsKECItYCipaGAyg4zHEmHws7bXalpWC11-MT14PnTbfD6Gx1Bio3h4l3B8n7spSByQaTGadxvJ-LLVyoAbDM2hjAWWcvUfMxZpOmpSCkGiFZlVDqjUmpRDV3QQsij2qKLoMD0n3MPAkIDSaj0hNuTM8AJTRXrO9fkU3aAxqRIyd470S661DxDtJeFyL0XYAJexVVlbNS0vCpS81rLFAnnb0DhJ+O3sksPDEnd77-9j3gr5tjEyi0MBXqxKcem4PzDUHEljHGi18ZiWRj7EAO2aD0EYCABkHMJlCBAKICQ0hZBMD9lxCUSD6ZE08P0WMbJOsew1l6ZbypoiKhsDkKAdlQiepAKey85IWeY7ZyAAAQjKWAhBVpdD5ztpnnghcMBF+nBgsBFT8-l5IRXinFRIs6GIdXcu3rM8TMLocIBexxkNwLk3rPzdDBTqMA01vNfa5F92EgtBdBcR6cJWXNuFem6V+bgAEnMfcuoZca+N4Hu3ioQwVA2C7mPWug867F-0ej4gxAeH967tPIubCwDKBzVaHXk+C4L+bh89QdwkE1BX23ZvFTdl+LwUIjfY-N5ACGRoCR+i0E76nuPIB4ViDZIPvPKe3fm4AJoHSHzPxUAB1Z8Jfc-R8ryPoBgYLIqin1v7vDJx8b6N4f4PipmDPGSIvqvipiKZ8n5vpvF+QB+lOA-kyT+z8v-TwAKTtF0mIFIG4ENyZxnSZ0BlgwZwoHz2gGiFSUeHnloGiGW38B0nT2ImNG1A610FFw6DOWMF4EN2f0D3gO4XxmQNQLhH8gQBFycA8lCClG1BIJ-zIKgGiESkoK0moPQLoPN3gl0Fb1wj0GIgkCgFYID1T3IKKm4JQKthoIwJFzD2oFCCiF0DEPqgiH8n2HTC9yzg6FAXhXrz91PVIOkI4N0HwCQJ4IUL4PT2YDEEJGPzUMkLgMsLQDkN4NoPTxDHCHgD6hzCYzcOnwG2iBQC8LsJ8ML3qhbDFEQn3zMLYIsOiHXUiLQOiND3rzlBD1oGBl7FYCMi4KIMSLKWSOW3IKwHSMUP4MVH2igGoH9DlDTF0GMLGm7HgAhH3HiOINl3MIqMsIAE5qj7DldqwIBOAJRWDwCbcdh-CpAbBqA6dYBohztZiLJYgpAuJYNViJcgMLlFjljlYlinhKc-5JByc7RRYNjqxDjTiwETjQEjdB1jhtjbRlwgZbR71ZwLjxldE5jNjfjYMm5LjdEoDbQuZiATIpY3jKhLZaBYTT5IdiFxpYMkSQpnjUTbR9o5YRAPjgTLZEMwisSJloAxQ7dwSJkGAtIC4fCPMdARI0c8AMcGA5BBBhAQAypidJA5A-ZRcxBbMh5YN4M3IkNOYUNLYq56sygBTJstE0MIBjM2M9Q25ZYpZ71aAMBlQo4Y5NTqTNT7DO4BAxAGhlkxR1lPN5TlluAipjNJM1swNdB1UHgxxQTnt0kATqxPYhtvc-j3SZZPSpBd5tSck3S2MbigzuZkDaSMDxtY42lGiLTdtHgJwMRsMaMkt2Nvhn1RYVSPlkzpsdw9xFMnkiyBgCy+MnQcIDRhMZZRNqyGwKyeY7wczmyxgmzaBMlCVayRZ6Ji1-4X5FYFYz0xgn0bB2B2Bv0mdhSEMltNcwk0MABiaEOUvBccfkjYDM+VLM-zUE+lR45eCswMyQMDY8u4tkVc4VZ5Ys6IPcg4g8is+siiBbe0nKWwA80gJrUpS0tcscDcrc4VHc28v47mT4-0I8iMk82OY82Ey8vBa8gYYCinPNPwWEjs3EpCq4yknE4CJNPs7s2ONAOC4eJ8wTMDOpX06Ar8+klPSuSQCFEc6ZWbKQMcBaHYBgKQcLdpDcWwCcsSAnTk58GEBAUIOQEvCoWAJklkrHUWDrASrk6sOQawZbGUjYHEHMAALyZHKAhANBxFUtPR9i4uNSHnYDEBzH+CmDtA5ggEChR2JieFCDSn83CWyF2DEHsoeB9BxGxigEyGiAFXCXYA2E8odGxHoxNG4SCpCr5nI0kCw2bEaH821CkGElhyMoMudOMoUMcucpxFWHYGiDQGisMt4Qw04CwwhwULMosqXALAplssqBHPKvgEqr4AVSIhaxqv8jqpshsrsr5no1IEdHULzDECulCt8v8pJjZBEDHHCnCXCQAFIs1dAsBgrkc+ZcqGgArgq3LVhQrCAid1KIANLFNwp1qYriY4qEqIAkrogUr2hQqZTQgayIlnqtR1pGhVondohFz4AAbAb7Lmqss5RTLzKerszGN355NpBJroBpqFrlrQqCrogkalrQqNLvIjU0bgajKssuqIbLL6r+r4BQr2BwrtKFrgqPqrpvqJoTI-rBjmaWb4a-LuAHrZr5rFqVqK1LrNriYEBCAoKcAabz0U4FtOV-IybYqIg-JiaS86afqTIIkMBEpSBQq5j34FszLUQGw8ayqssULXIVLPr6bfrdBFybAsAbBRchghhSq0cZ0QBmxqB1pyAkAqAlRMc5BIBMgOhJKCALJJKmBuAaR2BOt5B5BRh2AvrcywB5A-buAA6AABSKSKFAROzKAO9kgSkjLHfHEST2ESIAA) -- [Simple carousel](https://github.com/spacejack/m-carousel) -- [Filter using CSS](https://flems.io/#0=N4IgzgpgNhDGAuEAmIBcIB0ArMIA0IAZgJYy6oDaoAdgIYC2EamAFvPVPiLAPbWL9mIAL54aDJumy4CvfhEHo5YeAAI6jMKoC8qgOQAZWgFcATtFUBRWqfgtaqgFLGoxJz1NI+qgCq0A7tQAng4A4hAeAObEtNTUqgBi5kgQpsSwANYOAIJxxFmqANIKQRDw8A4AsjbE1BCq2QBGpgy+PG7hURCxdFZI-rUOAGq0MGkOAOq11MSEyaoAQhAAbr4QYGAOAEqxKfXZngqJtPDE9LQsqgDKxptxDgCSaVrVpssOV7EO1qZ1KrX1BbmaheeIGMrpGLuSDleoATVoYHoANUr0iCnqlR49nojCQRQUSFGqi2xkaR0csTKiESyVS6Q+xKGZQcAHkZhVVEZlnwoZYkEE7EUar1CsQAF7ioKqIbEHhQHKuSANahYaAMtqNGJaQonel1VHEcbxV5BBUgvQYMAAB1c8AAFHp9ABKAA61HdMDUAEdjKlpbo9Hp3apQ6p3fQMPQeMZ+PavLBjIx+BhGjwBXhVMAQ6plsQIP5UKp7c6dAA+VQUHOh+iO2rW4zwPSZ7PxMOh95QP1F33+vDVsO86gN+BF+raCu90wB1QQDAVUzo+AYTt++c8Aw8fypADCiIgJYHwmd-bbNcdKjNEGbqin0oAZPfVAADAehjB31SuVDUHgOiinPAMCqAAVLorogAAJMAd7CBBAC6patu27ZIMQNoKkERa-nUb6qHBZ4vieA61noaHLB+frTs2eEaOsUa0Na9rxBOeHnnorg3shKHtoBMDYeum7bqYe6QIehHtqI6huhJqgye28mqPB7rHiIYggHRzAYLAGxcHIAjwEIwjwQQrjUBk5BUCAZicOgbDwNaYCoAA9M5sbWhkkTaTw9DOcidhpJwBDwEE1qSCAOAiPBwhAA) -- [Get a string representation of a Vnode using fragments](https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4AbhgBOAAjCSMAcxwNpAXmkATWtQCuy4vmqSYGRgBFtekQDF5SkQAoAlAB00WfMbQaYkh3MV9CmksBwByQgBGMOCImCgoWjCnVzQAB387fXxISThiAGFCaA0nNg4QTBw8QzgBGnpGZh42AF0qKAg0AGsEFE5qniwIYkJJaEoQHUlyHhJiNLhEAHplnXTuhUNaLGXh0fGoAAFI-FOAVj2Rseh8fkniAE807hB71lbWIA) -- [Granular redraw with streams](https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4A9ACoAOmhkAVQhDgACAOQB5AEZwYAJwBue1crpYADvRHKYADzMxqxFcUIxlGYsV0qAJvGq6EJowPsrBULQA7vjyrsr6PrRYyrpMfqmhmgCeygAG+hAwkbnKkdBQKTAAtKlo6cpotLpYGFBQOWUuELJoALIQLoFQqioZuhiRJlnUsDFoCm4JSZV1eiFhObm16SVlbcr07ZU1aXqlrmjKLjAy+q0Arm5wXjDYyvdmPh7w+MoKSqVyg1aMQroEAObgs7giKaVqVHzjSJwOZbU66ErbPQqbrEWhXOKJZKNPzKPxwAJBdbZPI6WCOJq5CgyEGuXRlHRkmBgDD3KBOK7464mJIWNAiEYpWgg4F+OYyLQ6Ax6ACCnm8AB45AA+ZTAGRSYh3KCPRDKADKL2wWu1zNkThg9LxugA-GbnoE0OC7YaCkUABT6EkwM0ANWDAEow8GfS9VrpAw8Q38o8pw7Q-DJWAa0BIxDIhM8Dto9IZdMoALzKMD3NCOCD0f3ADxeOBm4DG03xJPm3TUVisCN6mTKZRiMTKADCqW+7i59lWDGUHteyUibmoGEu9zg920lOCgoOl1SWFoxpHIrQRc7birt971HwLTMgcruv0EcvqWI910l31S5R2PAJXkYZQmyJCh3HVNs9SxXRoLpBxnQHIdAOA4Dx2UAARCBQnXZQoVBDBl0dFCmgOcs4EIWg+QItwEKPXRpVBYMXQNYhDUNQtQUdSsriyexaDAMinUoitJLUD1unBVROO4rjiBdMkknwABHR5dCyc1yIZBNkP0r97UUw0zSJBSlOwgAlaomMOHJ6GXK1kg+L5GDgSzfSTZ8MFffR32HEylMNLB8AQ-1HWgiLP2M0ziEHS9R3YJLj1Pc8YH9dDUtHbCAFVrz3ClAkPMAWOSFdsBy7sTRgfA0n9LxHiHZRUpSoDRz9SJA0jILMNHH8-0uIMMzqltvHwLqetG4zMOzID5vmmRJGkS4JD+OIIgwHxZIAIQwctTDFKxCC3HwVBE0TKoqoqDxgMRa13fcSpuNblBaTAoRwJczverd7nhJi8QJNxaBLZVDtFSwGDmZR1oAdTcPwZgOxZCkmf06MYXQh1+pj-W6cUcerWt63oZxTq4t7hTBpUyxFcxodBPYKm6fRaAAazqkc8wLcnQS2navQEwDfXRiDm1g9szBY8FUjgOA0KCxTBv-d7MfBstoIw-rsIWMSKPLHd1mByA6hBlZ6mIA7iOsWBvqp-qDf0s1VHwOFdCqLGjFjRTbzNGXaDl+A4F9pT8cD4OFey4KVZgX81awf03Y91RteeLJYDNXIyh8FwzQAEmASP5ZUdaAEYAAZK9YABSXJEtjhKw7FgMY-iw1VcuJO3cF2Sqk0CJqA5tPqswnuzDT5QS5DrLlA1ZRy+UFSpBAAAZWhttk-Ad9X5QzVXnDLAAQlXiM7SdzC9bia3dFt8iHeY9ELZnhWwgO5RcVoMfgJ792Dq9vcbGqhZqXziiFBKllG6GkWjmSQyhegYG6O4MwZgGbHSXLzOs-MUFoKrDrKaMdMJd3Vm7Pyk8L79R7oQcuU9V69ByCqVBZ9KHj39H3L02tX6K3PtVbhc9tRViXgAMmEaQihP8e6aCAXiNAo8OqXx1pfYCxAhLJlUNIzw9B5HKMwvQGYEBh7ulvsQVhl92q6NaiAWyzwDpcRAD-UBmEnHKFAbAno2EAAStAoChG4c5WcyDSLXRkP4qsYVrpZTgROc0EAsB8lnBw8EgIXBzmsiqAAYsoCItAzAyBrHWYgDZLiCw3rkueOt+H8KHAAamUJXfA1cACsoCICiX9NU+ei8iHAVSJpeAxAVRoDiR4YpGTxg4HYZvHwZSzBuLtpyJRY4JxHxJvsMYExzhMGydMkIqUwobO6m4rMOYClk0uLY3QxAKmXn4ZXUBfTHjPCGSMop9BxlcCmdtWZxklrXhMVEjxE5eh0SXMKchMgwpnlrNcxI1B7gO3dhmLI0FyHGTYBwEAmAcB4HwNQBWlAaD0EYMwHg+ByF9WrMSqoPIsDQCyO6LccAqhKjaQAbhOT0fASSB5Dw5kFP5-9Pbe3LDrXO+dlAACZK4wCwByoCrgIDghIGacusr5Wjk0E0dIZoADEABOQ1i8zA2GXD4-C8rBUe0peKwgZpK61w1coRVyriCquro6y8cJh5y1BT4KodAIi6D1QAZknJXS1Mg2AAF0qBQG6BzBAKBOA4p4HSwY0BCV-nIDwEgxAzBtnHLWMwHNwR4qSGIdNhAhgAAFy74HrQANkrQMat0B8D8EJao+weBO3sBTdwEA10s26BzSAPNBbEBFrQCWstpgW0ZqgHWht+Bm3XTEMOqg3bB19ujawIAA) -- [Modal component example](https://github.com/spacejack/mithril-modal) -- [Mithril and A-Frame](https://flems.io/#0=N4IgtglgJlA2CmIBcBWAjAOhQZgDQgGMB7AOwGciFlDLYBDABzPihHwDMIEzkBtUEnTCIkIDAAsALmFhsaJSfAXUQAX1wChIsQCse+YgqWTqhspIAEAJQCCAEQCSAVQDKFgLwXMABgA6JM0s7JysLMI8LACZvGP9AiwAhAHknADkAYQBRCMisf38ESwAjOlhYAE0I20dXfIDScwsXAiV4COB-MIA3CHgAdyQLAAoASg8APgswIYByOgBaMhaSeBncC2ASggBrAHMAJyIAVxIoQZniWCJ9wYBiNDRIyOxsGfVO8Om5+boyZkkyGsPuEprMIGBdmsNtBzkUiAAPAAq8HhkiO+1W6zI+wI5ykkiYSAA9ESIBhwbt0RhiGAiWBymAwEV9gwMDoGJDVCNcMDPmCIVDgDCLDMyNsAJ7I1HozEWbG4kX4wkkghQEgYOjsfZaclEInYABs3nm4Lou3g812pQQ+3F8zhXHgLPoilJEKJzAI4ngsEkbI5b25vLCXwpguFMwOx1OUrRGKh8rxkgJZGJRNV6s12uEuqJCwYdAgRn2brN8DIRPYV2u-s5I15QZIIK+CwIWm1gpm1e280MkkOsEBg37R3g6xmfV+UF7pH7lCHFhHY4sDCIZAgkggpEGvhA3i8GAA7CgLH41I2QSSW-NjBvxYK28Jtec6ARN114MP9qOoV2iEQez7AcFyXcdJzIacgPnGYv1HdZV3XTdtxFfdUN-KA6EkBYsy0eYoHgdg6COX1e3bOgYMXb94C5Hkmz5b44XhQUEI3LcSHOeY0FPLALHmV51j6aBJHEc4fChb0IF2KRRIwbwoXwhhhPObwMEiFAoUOLCkPYlCLAAFhPOT1kua5zluPT0nSbA7AATgTcQ6CgIgBko0caN5a8yAYb143WYBExFW5GNjGUoRY7TBgAA33AASTZrXKVReJQSL1m1KAICOVNrHsZwXGMyhTMCgAxUqyvsxznNg6iL3o1txVgIt8P2Zi11Y5CZi4lTj14-iLHSzLspmFT1PWCSpMkGTRosEybhK4r0gNFA7AqpyXKXdy6JDWZ83oFZBQCmZbijE4oBC3yVzaiLdP3eY9I0ogtLYjibNQ08oUEqAlJFFAjIscbpJ+v7ZrMsryqxBy1uqzbmx2+ZFFRQUulKUdzgAWQ3cR9i4CwADILBseZiuzeAAEIoRB+awbCq7nosXdOIwbAol4yJdyxNsEB3EBMBPXmDxQXcYbqxYJQOnEzLFSUUTjVYuQ+esSFUOowAwMBo0kIYnIII5hAUDA4SgcV1maVpFbiBpLHMOh9kkREIjsTD4AwEhnNGOp2BON82IsasGFGDYPniSxPEdxQXbdxWwhJFcbboOFGoICw4S9tp1e0oPLYseEIiGIZLHmOUsNtxExgAUgsYIrDGIlhirixa8iMZC7QD4SjKSpPGqPKLAAakSFIMmyAAqYYuMLnPR-hKOpgwDEoG1Pp3bojEAEdR3MGwSFNbTia0IY-cV5WSH8NeN8kLed7YvfhAP-8GEVuRmAQb2GmoJ4kG8NQNBAQRhGoakfw5B9mMCoVQABdfAjUSDbB4Egfgv8tDUEgMJbGsh8DolkKIJUqYSQnAYHsakRBaQoKxlwAAApgTABo6SYzQWyfQIBJDigYNoJY2NFLf00P-UQOF-4YP2FgkAOC0z4MITSPMWotDkJUgADgwGgIkGVzCSJJvMMAvxFD7AYXIZhrDqDsIgJwiBqggA) +- [Basic drag and drop example.](https://codepen.io/grilchgristle/pen/rmaZag) +- [Somewhat opinionated typeahead.](https://flems.io/#0=N4IgtglgJlA2CmIBcA2ArAOgBwBYA0IAZhAgM7IDaoAdgIZiJIgAqAngA7y0AWXUGAK3IEAxgHtqAF3hTkIAPQAqZStVr1GjQB1qAAkU79utpx59DBvYt0BBZswBKAZSQW3krZPGwEIyRAldAB4bACdQ2lYkXVD4AEcAVwhYqAA+aMleXVpwyN0Ad3gAch9dACN4XVIuUJFuCGoAc3liWGlQhsb3Twk62ibKoIAxBOo-AOpo2MTk+DTowlHxwMkxXXgAD3gRBOldFazq32kofbKBbY8rTxvryV1dMFp2EbHPYaX-CWixdi+6WDpXSLMb-YFiUKPZ7sTq6TKVbzHCa6BqrYwcLi8WhQAC0sWxrHBoSeV30N1W50uNkkkkhQSctM6Pz+E1ogOi2RpHTKu0qdAYRKqNTqnTwuig8EItASbVIcLWWhA-Pgiu6knYsFoIng3DEsAldIZHSazP+bKBDXYu2BEHg+t0Gq1Or1Brhm1JBg8kieGwc8FIMskcqCAEkpKbWeyoRsIGAEmBdNR4xVIWJCLoAG4QUgQMoIGL+wOkMUSqVF+VwrIyfyxG1teApXSwbMeiy6ACqThsAHEAKKuKy6W5kr1gAAUJkxfDFwDVnkRlwm0TArDCEVYeDnqzG3H6jXg0SOlxD0jArxEm7u5KeLyWy+eAGExGANZsAPKUvxh1ZOWOvj8XH456XiO5JiJ+kjUrSCwkO0b7UMw9SkFB3K8iBnrko62q6vqDYZO6YZWpIAAKmrYS6DbMO66Hkp4Pp+gGsqHrq+QAHJiAAshC8CIf0iHZqxyYNmqAC+ACUbiDkMvZ2O2Di9i4kmgZIgBEBLoYakJI-SSLAhLVDkdT+tk1CnLEkgJKE1ByrECAZtpZyAUGVQQicuhjiItDVDiDTVFZED+BmdqsGJ5RRFuACMGDrBsWr3CSdRbgATFFFSND5BT+dwQoGdwVEbK2XqeAAzFF4hSLQ6X6bUuXUc5oSuWy7C7hU-geT4rBKRhqnGBEgWhNUBaMU5CQ5k0jxiCNlQQroCTsPIUBiPkeg5KEi26AA1vArCkGqakcbQm3ZEKSKBGUhIiM2IjrbC02SBwsLVg28hmRZ1C7boD4IDk2XVcZpnwGAYiBeCOxymdcL3WN-oiJ1mhw-DGjyDoADcY4gss1BjvkDQLfkYpgGJs56LoZWacCmqSE+PiLoEAC8nK0nKtOpEOxMPLQXKkBgN7noYDz8wA-Az-UYAuGPc88Y4c4zEu3mMEls-z0TSyLYv-DofOk-cVV1Ax5b02OOs1flYoq6QIXM7oRP8yi6ZjgAhEbeWSCFL2WboFAALoa4rWsOVSXK6PTZsYOBjkoboAA+ke6EUypFHzDx+7Ai0Ng+nnwE4wpZfTTvuhgqwADKp6E6fVGOCuJyTEhk2ysB67KQfkxzVMnZjZtiRgrTtGOYeXEHLPWzbttufbfd+BQ4+QVynuu-A5nu1KsDVFXDxu3oU+TxBKGewXYjF4UpcZxXGA4++hBjinh9l5n2chSzOLhVX4lVxgpAuWOUtimUFuD6vmbfVoAANTZE3WgW9w4zz3gfNOx8xLfxAbAJuZQIEB1pLvIuJcb4Vx9sPEeUtEFB1pvTK+sDqhZxynPBeehH7-wgHbMohDiEkKwRnCh1UqGvV0E-N6isHj0LcsAtkp8TLn0vqw8hd9gjlEQSIiUGw3wX1IUfSRlDOHu1oXw-BQjYByLEcom+7C6j3xkcIs+CilESNvmogs1DuG4OHgIghoCgimNgOomhPC8FOJ0boFmjC2QePsbwvB69dAAAZn6V0VmEuuDcgxv0uvAMc4TTacwlr6Qsjdo7ZB8PErmCAmiZAVg8ESDwHHozBB5MYdojHcDHD5LSNSxQZmoGICUIUh78Ksk07Ub9s7OybkUBOitWntPgBgBaYAMCJAbKwLOxwIRjiKJaXYRRO55gsjg4mIkKmfGREePw8SxxjIlGKQ5-wxSNP6NqTpVdTkTJDr0XcAxDZ2hptQEp-NqnalgHUhpPSbnwBaW0jpfNdkhOBPswILy4DwAANJbQACKLUxtc5pmZQXAvWHc0Z31YhDSZj9XWWSgwAs0kC-pOVnYgvGRgDuDiHikGxl4LKY4Jn5HqMYq2-8PIDRwOEgceCHgTPYLEQKUgkWSmlG0bZwqUSApqf044cwwzyIANTqv-vwu26K+kXNVaIjYRD6YEqLBgQpjRikKopUqg1UA1WbCbpErRDwyj4nWoy75GddBFSwEK4VorxXVilWWWVXzvGKv1e8vwhr5E4hxNq-BeqJn2sdca5huhH4hRTcqy4canWmtJQUmQVqso4mCfK91XBPWQptnyyo4UioBu8bqqNqaY0nHTX4rN4VcXyqZZ245DyxRmtlBQXNaajWeyue2iNw8IVVo9V6pOPrEoAHYW3Dx+bU7O5LenYoefOxdugIWaxrvcScZhsRNweQPHlvsL3CyJQ8+lnMvV+xTU3Lp-Mp3yOiI-ECw8875WiMM5+Xqwk-oeFmeA+RohjmAGbcS97xxFALhiHE16oAjPlfjZZqzJAUDupwWm0h8qe1wwOmcSabZQGzLQPMcxoj2xDmrCYFrS2ZCAwOh0ZFnS4VCMrdJWEBOuhyUUOpRQeMDrsrABIB4bUHqpdVGltH+YSEI8uDALLuAoWWXJhT0m3IZl-g+3jNtJ2doLRm3t6nLPtpU3UQZ9MMz2dPfA9zEhNqsFxpMXQsKECItYCipaGAyg4zHEmHws7bXalpWC11-MT14PnTbfD6Gx1Bio3h4l3B8n7spSByQaTGadxvJ-LLVyoAbDM2hjAWWcvUfMxZpOmpSCkGiFZlVDqjUmpRDV3QQsij2qKLoMD0n3MPAkIDSaj0hNuTM8AJTRXrO9fkU3aAxqRIyd470S661DxDtJeFyL0XYAJexVVlbNS0vCpS81rLFAnnb0DhJ+O3sksPDEnd77-9j3gr5tjEyi0MBXqxKcem4PzDUHEljHGi18ZiWRj7EAO2aD0EYCABkHMJlCBAKICQ0hZBMD9lxCUSD6ZE08P0WMbJOsew1l6ZbypoiKhsDkKAdlQiepAKey85IWeY7ZyAAAQjKWAhBVpdD5ztpnnghcMBF+nBgsBFT8-l5IRXinFRIs6GIdXcu3rM8TMLocIBexxkNwLk3rPzdDBTqMA01vNfa5F92EgtBdBcR6cJWXNuFem6V+bgAEnMfcuoZca+N4Hu3ioQwVA2C7mPWug867F-0ej4gxAeH967tPIubCwDKBzVaHXk+C4L+bh89QdwkE1BX23ZvFTdl+LwUIjfY-N5ACGRoCR+i0E76nuPIB4ViDZIPvPKe3fm4AJoHSHzPxUAB1Z8Jfc-R8ryPoBgYLIqin1v7vDJx8b6N4f4PipmDPGSIvqvipiKZ8n5vpvF+QB+lOA-kyT+z8v-TwAKTtF0mIFIG4ENyZxnSZ0BlgwZwoHz2gGiFSUeHnloGiGW38B0nT2ImNG1A610FFw6DOWMF4EN2f0D3gO4XxmQNQLhH8gQBFycA8lCClG1BIJ-zIKgGiESkoK0moPQLoPN3gl0Fb1wj0GIgkCgFYID1T3IKKm4JQKthoIwJFzD2oFCCiF0DEPqgiH8n2HTC9yzg6FAXhXrz91PVIOkI4N0HwCQJ4IUL4PT2YDEEJGPzUMkLgMsLQDkN4NoPTxDHCHgD6hzCYzcOnwG2iBQC8LsJ8ML3qhbDFEQn3zMLYIsOiHXUiLQOiND3rzlBD1oGBl7FYCMi4KIMSLKWSOW3IKwHSMUP4MVH2igGoH9DlDTF0GMLGm7HgAhH3HiOINl3MIqMsIAE5qj7DldqwIBOAJRWDwCbcdh-CpAbBqA6dYBohztZiLJYgpAuJYNViJcgMLlFjljlYlinhKc-5JByc7RRYNjqxDjTiwETjQEjdB1jhtjbRlwgZbR71ZwLjxldE5jNjfjYMm5LjdEoDbQuZiATIpY3jKhLZaBYTT5IdiFxpYMkSQpnjUTbR9o5YRAPjgTLZEMwisSJloAxQ7dwSJkGAtIC4fCPMdARI0c8AMcGA5BBBhAQAypidJA5A-ZRcxBbMh5YN4M3IkNOYUNLYq56sygBTJstE0MIBjM2M9Q25ZYpZ71aAMBlQo4Y5NTqTNT7DO4BAxAGhlkxR1lPN5TlluAipjNJM1swNdB1UHgxxQTnt0kATqxPYhtvc-j3SZZPSpBd5tSck3S2MbigzuZkDaSMDxtY42lGiLTdtHgJwMRsMaMkt2Nvhn1RYVSPlkzpsdw9xFMnkiyBgCy+MnQcIDRhMZZRNqyGwKyeY7wczmyxgmzaBMlCVayRZ6Ji1-4X5FYFYz0xgn0bB2B2Bv0mdhSEMltNcwk0MABiaEOUvBccfkjYDM+VLM-zUE+lR45eCswMyQMDY8u4tkVc4VZ5Ys6IPcg4g8is+siiBbe0nKWwA80gJrUpS0tcscDcrc4VHc28v47mT4-0I8iMk82OY82Ey8vBa8gYYCinPNPwWEjs3EpCq4yknE4CJNPs7s2ONAOC4eJ8wTMDOpX06Ar8+klPSuSQCFEc6ZWbKQMcBaHYBgKQcLdpDcWwCcsSAnTk58GEBAUIOQEvCoWAJklkrHUWDrASrk6sOQawZbGUjYHEHMAALyZHKAhANBxFUtPR9i4uNSHnYDEBzH+CmDtA5ggEChR2JieFCDSn83CWyF2DEHsoeB9BxGxigEyGiAFXCXYA2E8odGxHoxNG4SCpCr5nI0kCw2bEaH821CkGElhyMoMudOMoUMcucpxFWHYGiDQGisMt4Qw04CwwhwULMosqXALAplssqBHPKvgEqr4AVSIhaxqv8jqpshsrsr5no1IEdHULzDECulCt8v8pJjZBEDHHCnCXCQAFIs1dAsBgrkc+ZcqGgArgq3LVhQrCAid1KIANLFNwp1qYriY4qEqIAkrogUr2hQqZTQgayIlnqtR1pGhVondohFz4AAbAb7Lmqss5RTLzKerszGN355NpBJroBpqFrlrQqCrogkalrQqNLvIjU0bgajKssuqIbLL6r+r4BQr2BwrtKFrgqPqrpvqJoTI-rBjmaWb4a-LuAHrZr5rFqVqK1LrNriYEBCAoKcAabz0U4FtOV-IybYqIg-JiaS86afqTIIkMBEpSBQq5j34FszLUQGw8ayqssULXIVLPr6bfrdBFybAsAbBRchghhSq0cZ0QBmxqB1pyAkAqAlRMc5BIBMgOhJKCALJJKmBuAaR2BOt5B5BRh2AvrcywB5A-buAA6AABSKSKFAROzKAO9kgSkjLHfHEST2ESIAA) +- [Simple carousel.](https://github.com/spacejack/m-carousel) +- [Filter using CSS.](https://flems.io/#0=N4IgzgpgNhDGAuEAmIBcIB0ArMIA0IAZgJYy6oDaoAdgIYC2EamAFvPVPiLAPbWL9mIAL54aDJumy4CvfhEHo5YeAAI6jMKoC8qgOQAZWgFcATtFUBRWqfgtaqgFLGoxJz1NI+qgCq0A7tQAng4A4hAeAObEtNTUqgBi5kgQpsSwANYOAIJxxFmqANIKQRDw8A4AsjbE1BCq2QBGpgy+PG7hURCxdFZI-rUOAGq0MGkOAOq11MSEyaoAQhAAbr4QYGAOAEqxKfXZngqJtPDE9LQsqgDKxptxDgCSaVrVpssOV7EO1qZ1KrX1BbmaheeIGMrpGLuSDleoATVoYHoANUr0iCnqlR49nojCQRQUSFGqi2xkaR0csTKiESyVS6Q+xKGZQcAHkZhVVEZlnwoZYkEE7EUar1CsQAF7ioKqIbEHhQHKuSANahYaAMtqNGJaQonel1VHEcbxV5BBUgvQYMAAB1c8AAFHp9ABKAA61HdMDUAEdjKlpbo9Hp3apQ6p3fQMPQeMZ+PavLBjIx+BhGjwBXhVMAQ6plsQIP5UKp7c6dAA+VQUHOh+iO2rW4zwPSZ7PxMOh95QP1F33+vDVsO86gN+BF+raCu90wB1QQDAVUzo+AYTt++c8Aw8fypADCiIgJYHwmd-bbNcdKjNEGbqin0oAZPfVAADAehjB31SuVDUHgOiinPAMCqAAVLorogAAJMAd7CBBAC6patu27ZIMQNoKkERa-nUb6qHBZ4vieA61noaHLB+frTs2eEaOsUa0Na9rxBOeHnnorg3shKHtoBMDYeum7bqYe6QIehHtqI6huhJqgye28mqPB7rHiIYggHRzAYLAGxcHIAjwEIwjwQQrjUBk5BUCAZicOgbDwNaYCoAA9M5sbWhkkTaTw9DOcidhpJwBDwEE1qSCAOAiPBwhAA) +- [Get a string representation of a Vnode using fragments.](https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4AbhgBOAAjCSMAcxwNpAXmkATWtQCuy4vmqSYGRgBFtekQDF5SkQAoAlAB00WfMbQaYkh3MV9CmksBwByQgBGMOCImCgoWjCnVzQAB387fXxISThiAGFCaA0nNg4QTBw8QzgBGnpGZh42AF0qKAg0AGsEFE5qniwIYkJJaEoQHUlyHhJiNLhEAHplnXTuhUNaLGXh0fGoAAFI-FOAVj2Rseh8fkniAE807hB71lbWIA) +- [Granular redraw with streams.](https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4A9ACoAOmhkAVQhDgACAOQB5AEZwYAJwBue1crpYADvRHKYADzMxqxFcUIxlGYsV0qAJvGq6EJowPsrBULQA7vjyrsr6PrRYyrpMfqmhmgCeygAG+hAwkbnKkdBQKTAAtKlo6cpotLpYGFBQOWUuELJoALIQLoFQqioZuhiRJlnUsDFoCm4JSZV1eiFhObm16SVlbcr07ZU1aXqlrmjKLjAy+q0Arm5wXjDYyvdmPh7w+MoKSqVyg1aMQroEAObgs7giKaVqVHzjSJwOZbU66ErbPQqbrEWhXOKJZKNPzKPxwAJBdbZPI6WCOJq5CgyEGuXRlHRkmBgDD3KBOK7464mJIWNAiEYpWgg4F+OYyLQ6Ax6ACCnm8AB45AA+ZTAGRSYh3KCPRDKADKL2wWu1zNkThg9LxugA-GbnoE0OC7YaCkUABT6EkwM0ANWDAEow8GfS9VrpAw8Q38o8pw7Q-DJWAa0BIxDIhM8Dto9IZdMoALzKMD3NCOCD0f3ADxeOBm4DG03xJPm3TUVisCN6mTKZRiMTKADCqW+7i59lWDGUHteyUibmoGEu9zg920lOCgoOl1SWFoxpHIrQRc7birt971HwLTMgcruv0EcvqWI910l31S5R2PAJXkYZQmyJCh3HVNs9SxXRoLpBxnQHIdAOA4Dx2UAARCBQnXZQoVBDBl0dFCmgOcs4EIWg+QItwEKPXRpVBYMXQNYhDUNQtQUdSsriyexaDAMinUoitJLUD1unBVROO4rjiBdMkknwABHR5dCyc1yIZBNkP0r97UUw0zSJBSlOwgAlaomMOHJ6GXK1kg+L5GDgSzfSTZ8MFffR32HEylMNLB8AQ-1HWgiLP2M0ziEHS9R3YJLj1Pc8YH9dDUtHbCAFVrz3ClAkPMAWOSFdsBy7sTRgfA0n9LxHiHZRUpSoDRz9SJA0jILMNHH8-0uIMMzqltvHwLqetG4zMOzID5vmmRJGkS4JD+OIIgwHxZIAIQwctTDFKxCC3HwVBE0TKoqoqDxgMRa13fcSpuNblBaTAoRwJczverd7nhJi8QJNxaBLZVDtFSwGDmZR1oAdTcPwZgOxZCkmf06MYXQh1+pj-W6cUcerWt63oZxTq4t7hTBpUyxFcxodBPYKm6fRaAAazqkc8wLcnQS2navQEwDfXRiDm1g9szBY8FUjgOA0KCxTBv-d7MfBstoIw-rsIWMSKPLHd1mByA6hBlZ6mIA7iOsWBvqp-qDf0s1VHwOFdCqLGjFjRTbzNGXaDl+A4F9pT8cD4OFey4KVZgX81awf03Y91RteeLJYDNXIyh8FwzQAEmASP5ZUdaAEYAAZK9YABSXJEtjhKw7FgMY-iw1VcuJO3cF2Sqk0CJqA5tPqswnuzDT5QS5DrLlA1ZRy+UFSpBAAAZWhttk-Ad9X5QzVXnDLAAQlXiM7SdzC9bia3dFt8iHeY9ELZnhWwgO5RcVoMfgJ792Dq9vcbGqhZqXziiFBKllG6GkWjmSQyhegYG6O4MwZgGbHSXLzOs-MUFoKrDrKaMdMJd3Vm7Pyk8L79R7oQcuU9V69ByCqVBZ9KHj39H3L02tX6K3PtVbhc9tRViXgAMmEaQihP8e6aCAXiNAo8OqXx1pfYCxAhLJlUNIzw9B5HKMwvQGYEBh7ulvsQVhl92q6NaiAWyzwDpcRAD-UBmEnHKFAbAno2EAAStAoChG4c5WcyDSLXRkP4qsYVrpZTgROc0EAsB8lnBw8EgIXBzmsiqAAYsoCItAzAyBrHWYgDZLiCw3rkueOt+H8KHAAamUJXfA1cACsoCICiX9NU+ei8iHAVSJpeAxAVRoDiR4YpGTxg4HYZvHwZSzBuLtpyJRY4JxHxJvsMYExzhMGydMkIqUwobO6m4rMOYClk0uLY3QxAKmXn4ZXUBfTHjPCGSMop9BxlcCmdtWZxklrXhMVEjxE5eh0SXMKchMgwpnlrNcxI1B7gO3dhmLI0FyHGTYBwEAmAcB4HwNQBWlAaD0EYMwHg+ByF9WrMSqoPIsDQCyO6LccAqhKjaQAbhOT0fASSB5Dw5kFP5-9Pbe3LDrXO+dlAACZK4wCwByoCrgIDghIGacusr5Wjk0E0dIZoADEABOQ1i8zA2GXD4-C8rBUe0peKwgZpK61w1coRVyriCquro6y8cJh5y1BT4KodAIi6D1QAZknJXS1Mg2AAF0qBQG6BzBAKBOA4p4HSwY0BCV-nIDwEgxAzBtnHLWMwHNwR4qSGIdNhAhgAAFy74HrQANkrQMat0B8D8EJao+weBO3sBTdwEA10s26BzSAPNBbEBFrQCWstpgW0ZqgHWht+Bm3XTEMOqg3bB19ujawIAA) +- [Modal component example.](https://github.com/spacejack/mithril-modal) +- [Mithril and A-Frame.](https://flems.io/#0=N4IgtglgJlA2CmIBcBWAjAOhQZgDQgGMB7AOwGciFlDLYBDABzPihHwDMIEzkBtUEnTCIkIDAAsALmFhsaJSfAXUQAX1wChIsQCse+YgqWTqhspIAEAJQCCAEQCSAVQDKFgLwXMABgA6JM0s7JysLMI8LACZvGP9AiwAhAHknADkAYQBRCMisf38ESwAjOlhYAE0I20dXfIDScwsXAiV4COB-MIA3CHgAdyQLAAoASg8APgswIYByOgBaMhaSeBncC2ASggBrAHMAJyIAVxIoQZniWCJ9wYBiNDRIyOxsGfVO8Om5+boyZkkyGsPuEprMIGBdmsNtBzkUiAAPAAq8HhkiO+1W6zI+wI5ykkiYSAA9ESIBhwbt0RhiGAiWBymAwEV9gwMDoGJDVCNcMDPmCIVDgDCLDMyNsAJ7I1HozEWbG4kX4wkkghQEgYOjsfZaclEInYABs3nm4Lou3g812pQQ+3F8zhXHgLPoilJEKJzAI4ngsEkbI5b25vLCXwpguFMwOx1OUrRGKh8rxkgJZGJRNV6s12uEuqJCwYdAgRn2brN8DIRPYV2u-s5I15QZIIK+CwIWm1gpm1e280MkkOsEBg37R3g6xmfV+UF7pH7lCHFhHY4sDCIZAgkggpEGvhA3i8GAA7CgLH41I2QSSW-NjBvxYK28Jtec6ARN114MP9qOoV2iEQez7AcFyXcdJzIacgPnGYv1HdZV3XTdtxFfdUN-KA6EkBYsy0eYoHgdg6COX1e3bOgYMXb94C5Hkmz5b44XhQUEI3LcSHOeY0FPLALHmV51j6aBJHEc4fChb0IF2KRRIwbwoXwhhhPObwMEiFAoUOLCkPYlCLAAFhPOT1kua5zluPT0nSbA7AATgTcQ6CgIgBko0caN5a8yAYb143WYBExFW5GNjGUoRY7TBgAA33AASTZrXKVReJQSL1m1KAICOVNrHsZwXGMyhTMCgAxUqyvsxznNg6iL3o1txVgIt8P2Zi11Y5CZi4lTj14-iLHSzLspmFT1PWCSpMkGTRosEybhK4r0gNFA7AqpyXKXdy6JDWZ83oFZBQCmZbijE4oBC3yVzaiLdP3eY9I0ogtLYjibNQ08oUEqAlJFFAjIscbpJ+v7ZrMsryqxBy1uqzbmx2+ZFFRQUulKUdzgAWQ3cR9i4CwADILBseZiuzeAAEIoRB+awbCq7nosXdOIwbAol4yJdyxNsEB3EBMBPXmDxQXcYbqxYJQOnEzLFSUUTjVYuQ+esSFUOowAwMBo0kIYnIII5hAUDA4SgcV1maVpFbiBpLHMOh9kkREIjsTD4AwEhnNGOp2BON82IsasGFGDYPniSxPEdxQXbdxWwhJFcbboOFGoICw4S9tp1e0oPLYseEIiGIZLHmOUsNtxExgAUgsYIrDGIlhirixa8iMZC7QD4SjKSpPGqPKLAAakSFIMmyAAqYYuMLnPR-hKOpgwDEoG1Pp3bojEAEdR3MGwSFNbTia0IY-cV5WSH8NeN8kLed7YvfhAP-8GEVuRmAQb2GmoJ4kG8NQNBAQRhGoakfw5B9mMCoVQABdfAjUSDbB4Egfgv8tDUEgMJbGsh8DolkKIJUqYSQnAYHsakRBaQoKxlwAAApgTABo6SYzQWyfQIBJDigYNoJY2NFLf00P-UQOF-4YP2FgkAOC0z4MITSPMWotDkJUgADgwGgIkGVzCSJJvMMAvxFD7AYXIZhrDqDsIgJwiBqggA) -#### Starter kits +### Starter Kits -- [Mithril/SASS/Webpack2](https://github.com/CreaturesInUnitards/mithril-sass-webpack-starter) -- [Mithril/Typescript/SASS/PostCSS/Webpack2](https://github.com/spacejack/mithril-webpack-ts) -- [Mithril/Typescript/PostCSS/Browserify/HMR/Budō](https://github.com/spacejack/mithril-browserify-ts-budo) -- [Game development with Mithril/THREE.js/Typescript](https://github.com/spacejack/three-mithril-ts) -- [Mithril Starter Project with Rollup, Babel, LiveReload, Jest and ESLint](https://github.com/ArthurClemens/mithril-starter-rollup) -- [mithril-starter-kit](https://github.com/dhinesh03/mithril-starter-kit) - A boilerplate Mithril application using Webpack 4, ES6, Sass/SCSS, Js and scss hot reload and eslint +- [mithril-sass-webpack-starter](https://github.com/CreaturesInUnitards/mithril-sass-webpack-starter) - Starter project set up with Mithril, Sass, and Webpack 2 +- [Mithril / Webpack / Typescript / Sass Example](https://github.com/spacejack/mithril-webpack-ts) - Starter project set up with Mithril, Typescript 2, and Webpack 2 with options for Sass, PostCSS, or both. +- [Mithril / Typescript / Browserify / HMR / Budō](https://github.com/spacejack/mithril-browserify-ts-budo) - Starter project set up with Mithril, Typescript, PostCSS, Browserify with hot module replacement, and Budō. +- [THREE / Mithril / Typescript starter project](https://github.com/spacejack/three-mithril-ts) - Starter project for game development, set up with Mithril, three.js, and Typescript. +- [mithril-starter-rollup](https://github.com/ArthurClemens/mithril-starter-rollup) - Starter project set up with Mithril, Rollup, Babel, LiveReload, Jest, and ESLint, with Tachyon support built-in. +- [Mithril Starter Kit](https://github.com/dhinesh03/mithril-starter-kit) - A boilerplate project set up with Mithril, Babel, Webpack 4 with hot reload support, Sass/SCSS, and ESLint. ### Testing -Mithril does not require specialized tools for testing, however the following have been developed as side projects to the main framework or by the community. +Mithril does not require specialized tools for testing with most frameworks, but the following have been developed as side projects to the main framework and/or by the community. -- [Ospec](https://github.com/MithrilJS/mithril.js/tree/rewrite/ospec) - Mithril's own fast test runner. -- [Mithril Query](https://github.com/MithrilJS/mithril-query) - Query Mithril virtual dom for testing purposes. +- [ospec](https://github.com/MithrilJS/mithril.js/tree/next/ospec) - Mithril's own fast test runner. +- [Mithril Query](https://github.com/MithrilJS/mithril-query) - Query Mithril's virtual dom for testing purposes. +- [mithril-jest](https://github.com/ArthurClemens/mithril-jest) - Integrates Mithril with Jest, particularly its built-in snapshot functionality. -### Libraries, Components & Plugins +### Libraries, Components, and Plugins -- [Polythene](https://github.com/ArthurClemens/Polythene) - Material Design for Mithril and React. +- [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. - [mopt](https://github.com/MithrilJS/mopt) - Optimize `m()` calls to javascript objects. - [mithril-range](https://www.npmjs.com/package/mithril-range) - Customizable range component. - [mithril-select](https://www.npmjs.com/package/mithril-select) - Customizable select component. @@ -105,18 +100,13 @@ Mithril does not require specialized tools for testing, however the following ha ### Tools -- [Mithril Template Converter](https://arthurclemens.github.io/mithril-template-converter/) - Convert HTML to `m()` hyperscript. +- [Mithril Template Converter](https://arthurclemens.github.io/mithril-template-converter/) - Convert HTML to calls to `m()`. - [Mithril Emmet VSCode Extension](https://marketplace.visualstudio.com/items?itemName=FallenMax.mithril-emmet) - Add Emmet (zen-coding) support for Mithril inside of VSCode. -### pre 1.0 Release - -- [Leo's Blog](http://lhorie.github.io/mithril-blog/) - Leo, the main Mithril author, writes about virtual dom and tips and tricks. -- [Github Wiki](https://github.com/MithrilJS/mithril.js/wiki) - Wiki content is mostly about the 0.2 version, some material may be more up to date with the current API. - -### Mithril in the Wild +### Pre-1.0 Resources -- [flems.io](https://flems.io) - Web Playground & Sandbox with easily shareable urls and other neat features. -- [lichobile](https://lichess.org/mobile) - Mobile version for lichess.org using Mithril inside Cordova. +- [Leo's Blog](http://lhorie.github.io/mithril-blog/) - Leo, the original author of Mithril, wrote about the virtual DOM and various tips and tricks surrounding it. +- [Mithril's wiki](https://github.com/MithrilJS/mithril.js/wiki) - Mostly about utilities written in the days of v0.1 and v0.2, but some material may be more up to date with the current API. ### License diff --git a/code-of-conduct.md b/code-of-conduct.md new file mode 100644 index 0000000..60eec86 --- /dev/null +++ b/code-of-conduct.md @@ -0,0 +1,72 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or +advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at `<%= email %>`. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/contributing.md b/contributing.md index 06125ec..62181f5 100644 --- a/contributing.md +++ b/contributing.md @@ -1,19 +1,147 @@ -# Contribution Guidelines +# Contributing -Any contributions should be Mithril-related, but they might not fit into the existing categories. If you feel that a category is missing or that the structure of the links would be better served with some changes, please mention it when adding links or open a separate issue. +Thank you for your suggestions! We do have some relatively strict rules to keep the list itself awesome, so please keep that in mind when you contribute your suggestion. -### When adding to this list +## Before you contribute your suggestion -- Search previous suggestions before making a new one, as yours may be a duplicate. -- Make an individual pull request for each suggestion. -- Use the following format: `- [List Name](link)` and add a relevant description to the link itself, adhering to the enforced format for _Awesome lists_: +Please note that this project is released with a +[Contributor Code of Conduct](code-of-conduct.md). By participating in this +project you agree to abide by its terms. - - Each link description starts with an uppercase character and ends with a period. - - Example: `[AVA](…) - JavaScript test runner.` - - Drop all the "A" / "An" prefixes in the descriptions. - - Consistent and correct naming. For example, Node.js, not NodeJS or node.js. +Any contributions should be Mithril-related, but they might not fit into the existing categories. If you feel that a category is missing or that the structure of the links would be better served with some changes, please mention it in your pull request when adding links or open a separate issue. -- Link additions should be added to the bottom of the relevant category. -- New categories or improvements to the existing categorization are welcome. -- Check your spelling and grammar, and extra whitespace. -- The pull request and commit should have a useful title. +Be sure to [check existing pull requests](https://github.com/orbitbot/awesome-mithril/pulls) before filing a new one with your suggestion. Yours could be a duplicate, and reviewing duplicates just wastes everyone's times, including yours. However, if you do find a duplicate and you feel it could be done better, do feel free to contribute your suggestions to it there. (If that duplicate is abandoned when changes were requested to it, *then* you can feel free to file a new pull request for it.) + +## When you contribute your suggestion + +Contributing your suggestion is usually as easy as [editing `README.md`](https://help.github.com/en/articles/editing-files-in-another-users-repository) and [filing a pull request](https://help.github.com/articles/using-pull-requests/). For more complicated changes, it might be easier for you to [fork the repository first](https://help.github.com/en/articles/fork-a-repo) and then [editing what you need to in your local fork](https://help.github.com/en/articles/editing-files-in-your-repository). + +Make one suggestion per pull request. If you have multiple suggestions, file a new pull request for each suggestion. It's easier to search for duplicates that way, and it's easier to say yes to one suggestion, no to another. + +And finally, when you do go to file a pull request, please make sure to include a useful title with it, so we know at a glance what the suggestion is all about. + +## Link format + +Use the following link format. If it doesn't follow this format, it'll likely be rejected. + +> ```md +> - [Link name](URL) - Short description. +> ``` + +As an exception, the "Snippets" section follows the following format, where the link name is itself the snippet description, with the period *inside* the hyperlink: + +> ```md +> - [Short description.](URL) +> ``` + +References to things, *especially* in link names, should use the name and capitalization the item uses to describe itself. For instance: + +- The framework this is about is "Mithril", not "Mithril.js" or "MithrilJS". [There may be existing vestiges of this inconsistency in the official docs, but that's being corrected.](https://github.com/MithrilJS/mithril.js/pull/2316) + - As an exception, Mithril's unofficial hashtag is `#MithrilJS`. You'll see variations like `#mithril` and `#mithriljs`, but this list prefers `#MithrilJS`. +- [Mithril's internal test runner](https://github.com/MithrilJS/mithril.js/tree/next/ospec) is "ospec", not "Ospec", "ospec.js". +- [Arthur Clemens' Material Design library](https://github.com/ArthurClemens/polythene) is "Polythene", not "mithril-polythene", "polythene", or "PolytheneJS". +- [The popular V8-based server-side JavaScript runtime](https://nodejs.org/) is "Node.js", not "Node", "NodeJS", or "node". +- [The popular package manager bundled with Node](https://npmjs.com/) is "npm", not "NPM", "Npm", or "npmjs". + +> Prefer: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` +> +> Avoid: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material design for mithril.js and react. +> ``` +> +> Avoid: +> ```md +> - [Polythene.js](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` + +If it's a snippet, it goes in "Snippets". If you find yourself trying to type something like `- [CodePen snippet by @me](https://codepen.io/user/pen/...) - Cool dropdown.`, it belongs in "Snippets" and should be instead written as `- [Cool dropdown.](https://codepen.io/user/pen/...)` + +Each link description and snippet description should start with an uppercase letter and end with a period, and it should use proper capitalization and grammar. If you aren't sure how to write it, you can still file a pull request anyways and just tell us where you're not certain, so we can help you correct it. + +As an exception, if the first word references a trademark and they prefer a lowercase first letter (like eBay or npm), prefer that over this. + +> Prefer: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` +> +> Avoid: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - A Material Design library for Mithril and React +> ``` + +Link additions should be added to the bottom of the relevant category. This makes merging suggestions a lot easier on our part. + +> Prefer: +> ```diff +> ### Libraries, Components & Plugins +> +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> +- [mopt](https://github.com/MithrilJS/mopt) - Optimize `m()` calls to javascript objects. +> ``` +> +> Avoid: +> ```diff +> ### Libraries, Components & Plugins +> +> +- [mopt](https://github.com/MithrilJS/mopt) - Optimize `m()` calls to javascript objects. +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` + +Link additions should be self-contained, complete, and accurate. This ensures people know at a glance what it is. + +> Prefer: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` +> +> Avoid: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril. +> ``` +> +> Avoid: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design. +> ``` +> +> (Context: Polythene supports both Mithril and React natively.) + +Leave out extra whitespace. It doesn't really add anything, and it'll just create unnecessary diffs in the future. + +> Prefer: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` +> +> Avoid: +> ```md +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` +> +> Avoid: +> ```md +> ### Some section +> +> +> - [Polythene](https://github.com/ArthurClemens/polythene) - Material Design for Mithril and React. +> ``` + +## Other suggestions + +We do encourage suggestions beyond just adding links to new projects. Suggestions to add new categories or improve the existing categorization are certainly welcome, and suggestions to improve existing links are also encouraged. + +If you feel an existing link could be improved, feel free to contribute that - it works the same way it would if you were creating a new link. + +If you feel a category is missing or that the way categories or links are structured could be otherwise improved, please file an issue first or reference it in the relevant pull request (if it pertains to that link) so we can discuss it. If you file a pull request in light of one of these discussions, please be sure to: + +1. Keep the format for sections consistent with existing ones. +2. Update the table of contents appropriately, so it continues to direct people to the right places. + +## Updating your pull request + +It's often difficult to keep your suggestion up to the standards above, even after you filed your pull request. We may request certain changes to your pull request for various reasons, including meeting these standards. You don't need to create a whole new pull request for this - you can just edit the existing one and it'll make our lives a lot easier. If you're not sure how to do that, [this guide can help you on various ways to update your pull request](https://github.com/RichardLitt/knowledge/blob/master/github/amending-a-commit-guide.md) so we can merge it with the changes included.