* Add extension-landing generalized styles, install scratch link component
* Make EV3 page use generalized stuff
* Use OS_ENUM file instead of class variable
* use extension-landing/os-enum in os chooser
* Use extension-landing class in extension-landing.scss
* Use extension-landing styles and components on microbit page
* Add view-specific styles
* Move install scratch link l10n strings to src/l10n.json
* Start moving steps display to its own components
* Finish initial pass at Step, Steps components for extension landing pages
* Create ProjectCard component
* Use new components on InstallScratchLInk component
* Use new components on EV3 page
* allow className prop in Steps component
* Use new components on micro:bit landing page
* imageUrl -> imageSrc in ProjectCard
* Create ExtensionHeader component and use it on micro:bit and EV3 pages
* Fix a spacing issue in the InstallScratchLink component
* Add ExtensionRequirements component
* Use ExtensionRequirements component on landing pages
* Remove requirements l10n string for ev3 page
* Move project card styles out of things-to-try section
* Don't render the number row in a step if compact and number props are not set
* Add ExtensionSection component
* Use ExtensionSection on ev3 and microbit pages
* Move state configuration to ExtensionLanding class
* Move tip box, screenshot styles outside of specific section
* Add TipBox component and use it on the EV3 page
* Use hr element instead of section-separator div
* Remove refactor TODO comments :)
* Create Comment component, start styling it
* Restructure PreviewPresentation to better match mockup
* Add padding, border to comment bubble
* add padding to bottom row of comment
* Tweak alignment of avatar and comment content
* Add margin to lower project page container
* Use border-box box sizing for comment bubble
* Make user avatar a link
* Add initial implementation of comment tail
* Align username row properly, fix comment bubble width
* Use ::before pseudoelement for comment tail
* Remove unused props to Comment component
* Add CommentContainer to handle comment replies
* Use CommentContainer instead of Comment in PreviewPresentation
* Remove debug data from CommentContainer
* Fetch top level comments from the API
* Force comment container to stretch to bottom of view div
* Remove unused api import in CommentContainer
* Long words in comments should not overflow page
* Remove @ before username in comment title
* Fix word wrapping on Firefox
* Refactor CommentContainer into a class
* Properly export CommentContainer component
* Make replies column take up proper width
* Pass project ID to CommentContainer
* Fetch comment replies in CommentContainer
* Initial implementation for loading more comments
* Add "Load More" button to Presentation
* Initial implementation of collapsing threads longer than 3 replies
* Remove console log from preview.js redux
* Tweak last comment gradient color
* Only show three total replies in collapsed state
* Match scratchr2 behavior for thread collapsing
* Use width calc instead of margin and width 100%
* Fix styling for load more button
* Make comment border gray to match the wireframe
* Allow clicking through comment fade gradient
* Add comment compose component
* style comment compose box
* Style post, cancel buttons on comment compose component
* Add margin to create comment container
* Tweak styling for characters remaining text
* Tweak placeholder text
* Add more margin to comment avatar
* Add icons and styling to delete, report text
* Refactor px -> rem where possible in comment styles
* Change comment time color to dark gray
* Tweak margin and border radius
* Add reply icon to preview comments
* Clean up unused imports, console.log in compose-comment component
* Remove console statement in preview.jsx
* Add some clarifying comments to unfinished parts of comments
* Remove direct passing of comment api response to CommentContainer
* CommentContainer should not pass api response directly
* Rename CommentContainer to TopLevelComment
* First pass at getReplies for comments in redux
* Move reply fetching into redux actions instead of in TopLevelComment
* Refactor getReplies logic to behave better
* Remove components not directly related to reading comments
* Hide load more button if all comments are loaded
This uses the project info returned by the API
* Use same gradient as add to studio modal on comment thread