Changes and improvements #2102
Closed
NetOpWibby wants to merge 3 commits from
newnew into master
pull from: newnew
merge into: LBRYCommunity:master
LBRYCommunity:master
LBRYCommunity:dependabot/npm_and_yarn/electron-22.3.21
LBRYCommunity:dependabot/npm_and_yarn/semver-5.7.2
LBRYCommunity:7681-remove-block-list-apis
LBRYCommunity:new-sync-demo-no-user
LBRYCommunity:commentserver-swap-test-2
LBRYCommunity:Comment-server-swap
LBRYCommunity:7683-upgrade-to-electron-20
LBRYCommunity:7668-improve-startup-performance-while-fetching-comment-moderation-info
LBRYCommunity:feat-exportWalletSync
LBRYCommunity:feat-walletExport
LBRYCommunity:new-sync-demo
LBRYCommunity:test-updates4b
LBRYCommunity:test-updates-4a
LBRYCommunity:update-test-3c
LBRYCommunity:update-test-3b
LBRYCommunity:update-test-3
LBRYCommunity:test7495b2
LBRYCommunity:test7495a2
LBRYCommunity:test7495b
LBRYCommunity:test7495
LBRYCommunity:test109
LBRYCommunity:test-sdk-109
LBRYCommunity:feat-restoreLocalNotifications
LBRYCommunity:test-gatekeeper
LBRYCommunity:test-107
LBRYCommunity:test-mac-notarize
LBRYCommunity:update-postcss-quagmire
LBRYCommunity:testpush
LBRYCommunity:commentApiDefault
LBRYCommunity:inspect-upgrades
LBRYCommunity:fix-unblockIsChannelClaim
LBRYCommunity:ody255
LBRYCommunity:robd-mac-2
LBRYCommunity:sso-demo
LBRYCommunity:robd-universal
LBRYCommunity:remove-swap
LBRYCommunity:cleaning.dec.21
LBRYCommunity:update-trending-param
LBRYCommunity:collection-ordering
LBRYCommunity:download-progress
LBRYCommunity:anton
LBRYCommunity:anthony-fix-video-ios
LBRYCommunity:saltdev
LBRYCommunity:bump-electron-to-11
LBRYCommunity:fix-noBlockSubmitOnImgError
LBRYCommunity:x.lint.extras
LBRYCommunity:x.final
LBRYCommunity:somehow-working
LBRYCommunity:reenable-ads
LBRYCommunity:issue/7152
LBRYCommunity:chat-markdown
LBRYCommunity:ip/muted.uris
LBRYCommunity:odysee-split
LBRYCommunity:feat-desktopRelated
LBRYCommunity:ip/memo
LBRYCommunity:bs
LBRYCommunity:ip/memoization
LBRYCommunity:bump-flow-version
LBRYCommunity:ip/shared.block.list
LBRYCommunity:keycloak-sso
LBRYCommunity:a-r-w-k-2
LBRYCommunity:auth-refactor-w-keycloak
LBRYCommunity:auth-refactor
LBRYCommunity:rb-ip/embed-replay
LBRYCommunity:issue/2120
LBRYCommunity:oidc
LBRYCommunity:fix-videojs-ios
LBRYCommunity:fiat-tip-improvements
LBRYCommunity:test-tom-1
LBRYCommunity:fix-videojs-issues
LBRYCommunity:fix-persistSupportOption
LBRYCommunity:ctrl-txt
LBRYCommunity:add-play-button-on-pause-ios
LBRYCommunity:mobile-ui-bugfix-for-preview-images
LBRYCommunity:fix-livestream-claim-type
LBRYCommunity:playback-controls-2
LBRYCommunity:copy-list
LBRYCommunity:feat-collection-background-publishing
LBRYCommunity:ip/repost.in.homepage
LBRYCommunity:wallet-iteration-2
LBRYCommunity:broken-ads-branch
LBRYCommunity:move-stripe-transactions-to-wallet-fix
LBRYCommunity:lint.autoformat
LBRYCommunity:jessop-stripe
LBRYCommunity:move-transactions
LBRYCommunity:stripe-move-transactions-to-wallet
LBRYCommunity:mater
LBRYCommunity:more-stripe-integration
LBRYCommunity:more-stripe-integration1
LBRYCommunity:desktop-redirect
LBRYCommunity:rss-test
LBRYCommunity:fixed-collectionEdit
LBRYCommunity:watchman-plugin-odysee-anthony
LBRYCommunity:grin
LBRYCommunity:watchman-plugin-odysee
LBRYCommunity:protocol
LBRYCommunity:salt_saved_list
LBRYCommunity:salt-saved_list
LBRYCommunity:watchman-plugin
LBRYCommunity:more-stripe-integration2
LBRYCommunity:salt-savedList
LBRYCommunity:salt/mobile-comments
LBRYCommunity:chromecast-test2
LBRYCommunity:odysee
LBRYCommunity:wpe-on-ody
LBRYCommunity:bring-back-subtitles-button
LBRYCommunity:merge-to-odysee
LBRYCommunity:bugfix-tip-error
LBRYCommunity:popup-fix
LBRYCommunity:favi-cherry
LBRYCommunity:searchDefaults
LBRYCommunity:pin-from-homepages-master
LBRYCommunity:ody-7-22-c
LBRYCommunity:ody-7-22-b
LBRYCommunity:ody-7-22
LBRYCommunity:ody-7-21
LBRYCommunity:cherry.pick.thumbs.fix
LBRYCommunity:ody-rb-7-20c
LBRYCommunity:test-chromecast
LBRYCommunity:ody-7-20-rb
LBRYCommunity:odysee-cnsearch
LBRYCommunity:ody-7-19-b
LBRYCommunity:anthony-odysee
LBRYCommunity:drewhancock-patch-2
LBRYCommunity:horizon-server
LBRYCommunity:feat-nicer-outages
LBRYCommunity:tech-debt/selectors-search
LBRYCommunity:fix-lbry-tv-thumbnails
LBRYCommunity:drewhancock-patch-1
LBRYCommunity:jbnrecsys
LBRYCommunity:feat/disableListEditPending
LBRYCommunity:testapi
LBRYCommunity:bump-lightouse-throttle
LBRYCommunity:popup
LBRYCommunity:replays-rebased-tom
LBRYCommunity:pre-reoll-ads-rebase
LBRYCommunity:julianchandra-patch-1
LBRYCommunity:feat/better-chat
LBRYCommunity:revert-livestream
LBRYCommunity:feat/code-splitting
LBRYCommunity:feat/go-live-forms
LBRYCommunity:UI/drop-down-menu-animation
LBRYCommunity:faster-builds
No reviewers
Labels
Clear labels
Work is part of a proposal
Beamer is waiting on you!
Discuss this issue at the next planning meeting, then remove this label
Welcome to Hacktoberfest
Long-term storage
No knowledge of the existing code required
Some knowledge of the existing code is recommended
Significant knowledge of the existing code is recommended
Intimate knowledge of the existing code is recommended
Solution unclear, needs research
Issue needs to be groomed before work can start
Priority level needs to be defined
Issue needs step-by-step instructions on how to reproduce in latest code
Needs technical design signoff before implementation can begin
Temporarily paused
Issue is blocking release, do ASAP
Work needs to be moved into sprint ASAP
Work should be done but can stay in the backlog for now
Work needs to be done within 2-3 sprints
general redesign not prioritize for anyone release
Requires work on lbry-sdk repo
Existing functionality is wrong or broken
A conversation. No specific changes requested
Existing (or partially existing) functionality needs to be changed
New functionality that does not exist yet
Minimal user-visible changes, but significant internal work
Either work that's not related to the code, or a small chore that does not fit into other categories
Solution needs additional user testing
Work that was not planned into the spirnt, took priority over planned work
accessibility
app-parity
area: creator
area: daemon
area: design
area: devops
area: discovery
area: docs
area: installer
area: internal
area: livestream
area: performance
area: proposal
Work is part of a proposal
area: reposts
area: rewards
area: search
area: security
area: subscriptions
area: sync
area: ux
area: viewer
area: wallet
BEAMER
Beamer is waiting on you!
channel
comments
community PR
consider soon
Discuss this issue at the next planning meeting, then remove this label
core team
css
dependencies
electron
Epic
feature request
first-timers-only
good first issue
hacktoberfest
Welcome to Hacktoberfest
help wanted
hub-dependent
icebox
Long-term storage
Invalid
level: 0
level: 1
No knowledge of the existing code required
level: 2
Some knowledge of the existing code is recommended
level: 3
Significant knowledge of the existing code is recommended
level: 4
Intimate knowledge of the existing code is recommended
merge when green
needs: exploration
Solution unclear, needs research
needs: grooming
Issue needs to be groomed before work can start
needs: priority
Priority level needs to be defined
needs: repro
Issue needs step-by-step instructions on how to reproduce in latest code
needs: tech design
Needs technical design signoff before implementation can begin
notifications
odysee
on hold
Temporarily paused
playlists
priority: blocker
Issue is blocking release, do ASAP
priority: high
Work needs to be moved into sprint ASAP
priority: low
Work should be done but can stay in the backlog for now
priority: medium
Work needs to be done within 2-3 sprints
protocol dependent
recsys
redesign
general redesign not prioritize for anyone release
regression
resilience
sdk dependent
Requires work on lbry-sdk repo
Tom's Wishlist
trending
type: bug
Existing functionality is wrong or broken
type: discussion
A conversation. No specific changes requested
type: improvement
Existing (or partially existing) functionality needs to be changed
type: new feature
New functionality that does not exist yet
type: refactor
Minimal user-visible changes, but significant internal work
type: task
Either work that's not related to the code, or a small chore that does not fit into other categories
type: testing
Solution needs additional user testing
unplanned
Work that was not planned into the spirnt, took priority over planned work
windows
No labels
accessibility
app-parity
area: creator
area: daemon
area: design
area: devops
area: discovery
area: docs
area: installer
area: internal
area: livestream
area: performance
area: proposal
area: reposts
area: rewards
area: search
area: security
area: subscriptions
area: sync
area: ux
area: viewer
area: wallet
BEAMER
channel
comments
community PR
consider soon
core team
css
dependencies
electron
Epic
feature request
first-timers-only
good first issue
hacktoberfest
help wanted
hub-dependent
icebox
Invalid
level: 0
level: 1
level: 2
level: 3
level: 4
merge when green
needs: exploration
needs: grooming
needs: priority
needs: repro
needs: tech design
notifications
odysee
on hold
playlists
priority: blocker
priority: high
priority: low
priority: medium
protocol dependent
recsys
redesign
regression
resilience
sdk dependent
Tom's Wishlist
trending
type: bug
type: discussion
type: improvement
type: new feature
type: refactor
type: task
type: testing
unplanned
windows
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
LBRYCommunity/lbry-desktop!2102
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "newnew"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PR Checklist
PR Type
What kind of change does this PR introduce?
Fixes
I borked https://github.com/lbryio/lbry-desktop/pull/2053 while attempting to have a sane rebase. This PR refactors the CSS and makes semantic changes in the rendered HTML.
Closes #1976.
What is the current behavior?
Nothing the average user would notice, aside from styling.
What is the new behavior?
New hotness. Sass is (more) organized and easier to manage. It still isn't perfect but it's close.
This is looking great in the app but there are a few changes I think we should make that will help future development.
Also posting images with some things I found while testing.
@ -77,14 +75,11 @@ class CreditAmount extends React.PureComponent<Props> {return (<spanAny reason for leaving these?
Keep these commented out. We are estimating the publish time based on block height.
These should use the same syntax
media__info-titleSame here.
toplevelitem__sub-item--modifier@ -163,90 +159,85 @@ class FilePage extends React.Component<Props> {return (<Page forContent>Whats the difference between
media__xxxandcard__xxxI see:
media__title/card__titlemedia__subtitle/card__subtitle`Can these be combined?
This modifier shoud also be something like
--largeinstead of--file-page.This needs to stay. Current sorting is broken
This shouldn't be inside of the button class. If we have to keep it, it should be a modifier on the
.btnclassAfter looking over this code more, I think we should move back to variables. I think it will be hard to keep consistency with this new pattern. (And add new theme options if we ever decided to do so).
There's also
card-media__which makes it even more confusing.Why the change the
margin-bottominstead ofmargin-top? IME always usingmargin-top/margin-leftmakes it a lot simpler to add new pieces of ui, because you don't rely on the markup before your new component to provide the spacing.It also requires removing the margin on
:last-childeverywhere.This should just use something like
$--large.@ -77,14 +75,11 @@ class CreditAmount extends React.PureComponent<Props> {return (<spanFor reference while I was fixing my branch.
This was an oversight on my part.
@ -163,90 +159,85 @@ class FilePage extends React.Component<Props> {return (<Page forContent>After seeing the changes in master, it became apparent that
--file-pagewasn't the best name.I separated
mediaandcardb/c it was quite confusing. I'll have to give them another pass.Another oversight.
I think we can keep this at 950 for now. Once lbryweb gets going we can finish the expandable menu stuff.
What does this do?
Copying from Bootstrap's docs:
It's consistent with how the rest of the app is styled. Also, the removal of the margin on
:last-childis only inside this block. I haven't seen anything to indicate visual issues.When scrolling on the homepage past the padding, the wunderbar doesn't have a border/divider that separates it from the content.
Comment out this line and scroll on a page in Settings to see what I mean.
👍 I'm fine moving to
margin-bottomWhy not make that the default behavior? It seems like it's just adding a class to give it the same look as before scrolling (with the border bottom). Why can't we always keep the z-index on the header?
It doesn't look good.
Doesn't make sense here. This is inside a
media__infoblock.In what case doesn't it look good? If we move the z-index down to this line https://github.com/lbryio/lbry-desktop/blob/newnew/src/renderer/scss/component/_page.scss#L25, we never get to a state where the border-bottom disappears
I can't seem to reply in the original thread but for https://github.com/lbryio/lbry-desktop/pull/2102#discussion-diff-232837723L43
The
element__element1__element2naming is not following BEM naminghttps://en.bem.info/methodology/quick-start/#nesting-1
When you're on the first view of the app, the border doesn't look good.
I realized that a while after I made the comment but wasn't able to find it.
Did another pass but I didn't make it all the way through. It's looking better but I think the complex style rules are causing inconsistency. I'm in favor of using a
.mediaclass to style files, but currently, that styling is intertwined across the app. It should be self-contained.The other large issue is with spacing on content/buttons across the app. That seems to be due to the nested styles/
:notuses applying margin-top or margin-bottom based on where it is in the markup. I think a much simpler solution would be to use one and always stick with that, that will make things more consistent.Also after debugging a bit on your branch I very strongly believe we should avoid the
&--xxxsyntax. There were times I searched for a class name and didn't see all of the results because some were hidden due to that shorthand.If we are changing the class name we should probably change the prop too. I do like
constrictmore.@ -223,0 +228,4 @@button="alt"showSnackBarOnSubscribeuri={`lbry://${categoryLink}`}/>Since
.nextand.previoushave the same styles, we can combine them. Probably something even more generic than.btn--arrow. Maybe they don't need a custom class at all? The only thing it does is addopacity: 0.3;when it's disabled. Should that be a generic styling on all buttons?The styling should also be removed from
_media.scssand into button (if we need it all)@ -75,7 +77,7 @@ class ChannelTile extends React.PureComponent<Props> {</React.Fragment>Maybe this should be
media--tile? I think it's really confusing to make this have the "tile" style with themedia/media--smallclass. Also if you have aFileTilewith no set size, it will now break, since thedisplay: flexproperty is only assigned tomedia--smalland ``mediainside of.search`.This also brings up another issue. The styling for
mediais in several files. Theflexproperty is set onmedia--smallhere and set formedia--largeinside of the search styles here.The
media--tile(or whatever it's called) should be a top level style that sets display flex and anything else that is common to tiles, and search shouldn't know about media styles.I think
media__actionsandcard__actionscan be combined. I see some of the modifier classes are the exact same, and some aren't being used.@ -77,14 +75,11 @@ class CreditAmount extends React.PureComponent<Props> {return (I think we should keep the
badgestyling. With these changes, it might be confusing if we want to use the badge style on something that isn't media, like the lbc amount in the rewards card on the wallet page). That card isn't related tomediaIt's ok if we have more than one "type" of class on a component.
Are we sure we want to switch to this? Currently, this will be the only reference to this icon in the entire LBRY ecosystem. I think we should wait until we are sure this is the icon we will use.
We shouldn't have classes like
.small(although it doesn't look it is doing anything).If we have
media--tile, maybe this could bemedia--card?This should be
search__results-title@ -77,6 +78,7 @@ class FileTile extends React.PureComponent<Props> {claim,metadata,isResolvingUri,isSearchResult,This
.smallclass isn't doing anything. Currently the placeholder is an exact representation of the actualFileTile, with all the same classes. That makes styling it very simple.Same comments as I had for
ChannelTile. This component should proabaly be combined with that one since they are basically the same, but that is out of scope for this PR. They should have the same style since they can be used interchangeably in the ui.These classes should reference that they are specifically tied to the
btnclass.This isn't doing anything.
This should be
header__navigation-itemAnd the other header classes should follow the same pattern.
@ -52,0 +50,4 @@<div className="card__content"><div className="card__actions"><Submit label="Invite" disabled={isPending} />I don't think I'm a fan of this. Before it was super simple to add a list (or single) button. It was one
card__actionsclass that had apadding-top. I think this could work, but it just takes more effort. A good example is on the wallet page. I see three buttons, with three different top/bottom spacingsThere should only be one modifier per class.
This button styling should be able to be removed. We can also remove the
cursor: defaultinmedia__messageWhy remove the animation from this file? If the animation is on the placeholder, I think it makes sense to keep it here.
This isn't the correct aspect ratio.
The media styles shouldn't change just because they are on the search page. They should be contained to the
_media.scssfile.I still see the border appear at a random time depending on my scrolling speed. I don't see any issues with keeping the border always.
It made sense to put all the animation in one file.
@ -75,7 +77,7 @@ class ChannelTile extends React.PureComponent<Props> {</React.Fragment>Agreed, it's a bit of a mess.
media-tilesounds like a good name. So we'll havecard,media, andmedia-tile.Ah I see. I missed that.
@ -75,7 +77,7 @@ class ChannelTile extends React.PureComponent<Props> {</React.Fragment>Maybe
media-card? Or if the base class ismediathe tile style would be a modifier somedia--tileThe docs say to avoid double element naming https://en.bem.info/methodology/quick-start/#nesting-1
The media on the search page are not displayed the same as everywhere else. My previous design kept the design uniform but that was unwanted.
Other places may not display the exact same data, but they still use the same underlying component.
The component should have the same style, regardless of where it is used in the app. Properties passed in such as
sizeordisplayDescriptionmay add additional info to it, or scale up/down, but the style should be the same.Yes, do not switch this yet.
Should I also remove it from here? I added it to spur conversation and hopefully get a definitive answer. I'll revert the change.
@ -52,0 +50,4 @@<div className="card__content"><div className="card__actions"><Submit label="Invite" disabled={isPending} />I just inspected the code and the buttons themselves don't have any spacing. The container they are in also don't have spacing unless they are inside another class. I could remove
.form-row--paddedfrom the address in Receive Credits (which has top/bottom spacing) to reduce the vertical spacing.Other than that, I don't see anything wrong with taking the top-down approach to making layouts (pushing down rather than up).
Added some more comments. Additionally we lost the
main--containedclass so all the pages with cards now extend full width. This looks pretty weird when you have a very large display.Also checkout the page when you go to
helpthensubmit a bug report, that style is messed up.@ -77,14 +75,11 @@ class CreditAmount extends React.PureComponent<Props> {return (I still think this should be called
badge. The rewards card has nothing to do with mediaIf we are removing this we should remove it from the
defaultPropson line 34With the new icons that were added we now have two ways of adding icons to buttons. We should consolidate this into one.
@ -52,0 +50,4 @@<div className="card__content"><div className="card__actions"><Submit label="Invite" disabled={isPending} />My comment was more aimed at the inconsistency of the button spacings. It seems like this still isn't fixed. The
Claim Rewardsbutton has a large amount of space above, and small amount of space below. TheGet New Addressbutton has a large amount of space on top and bottom. And theFull Historybutton has a small amount of space on top and bottom.This seems like it could cause issues. Why not just give the base level class the spacing instead of only adding it if it's inside of another class?
@ -0,0 +1,25 @@.channel-info {align-items: center;display: flex;justify-content: space-between;Before the channel info actions (subscribe/share) were moved below the title because on large 4k screens, they would be waaaay to the right, and easy to miss. I think we should keep them below the title.
This shouldn't be called
file-page. If the class is only removing color, maybe there should two classescredit-amount--no-colorandcredit-amount--large?We should use the longform
&.class--modifierThis should use
.notice--errorI think all margins should be based off
$spacing-vertical, instead of having a bunch of different margins in many different places@ -14,2 +9,2 @@opacity: 0.95;padding: 14px 20px 10px 20px;padding: var(--spacing-vertical-small) var(--spacing-vertical-large) var(--spacing-vertical-small)var(--spacing-vertical-medium); // 0.5rem 1.25rem 0.5rem 1rem;Should we have a global border-radius variable?
Forgot a couple things
hearticon is added/removed.:hoverstyle changesWhat is being consolidated?
I removed this b/c the linter was complaining. Thought I got everything.
Should
static defaultPropsstill be there? Just empty, or removed entirely?We should either always use a class and add the icons through css with
background-imagelike you do here, or stick with using props and explicitly render an icon like we are currently doing where we usereact-featherIf there aren't any default props, it can be removed entirely
I don't think everything having the same margin makes sense.
They don't need to have the same margins, but some factor of the base level marign. If we just had small, medium, and large margins, where small is 1/3 the base margin, medium is 1/2 and large is the base margin (these are just random numbers), it would greatly help with consistency.
If everything is on it's own, every component could have different margins if future changes aren't tracked carefully after this is merged.
This isn't being used anymore.
@ -0,0 +1,25 @@.channel-info {align-items: center;display: flex;justify-content: space-between;The Publish link in the URL bar is also to the right. Should that be removed too?
@ -52,0 +50,4 @@<div className="card__content"><div className="card__actions"><Submit label="Invite" disabled={isPending} />These buttons are also in different contexts.
Claim Rewardsis below a header. Everything below a header has the same spacing.Get New Addressis below a copyable input. That spacing ensures you don't click on something unintentionally.Full Historyis below a table and pertains to that table. Why would it have large spacing above it? The spacing below it is consistent with every single card.If you want all the buttons to have "consistent spacing", they should all be in the same contexts. But they're not. Because it doesn't make sense.
What happens when we want to use an icon that doesn't exist in
react-feather?'media--search-result': isSearchResultis not working forchannelTile. Not sure what needs to be done there.What is messed up about this style?You have to pass in that value when you use it
<ChannelTile ... isSearchResult />General inconsistency compared to the rest of the app. There is no margin above the textarea/submit button.
The only modifier class that's the same is
--between.Re-opened a comment about the naming /re
media/media-card/media-tile@ -75,7 +77,7 @@ class ChannelTile extends React.PureComponent<Props> {</React.Fragment>This still exists
@ -48,6 +48,7 @@ export default class Expandable extends PureComponent<Props, State> {</div><Buttonbutton="link"className="expandable__button"Does a regular
linknot work? If not this should be a button classbtn--expandable, but it should just use a regular link buttonAs re-opened above, this should be something like
media-cardThis should still use the
iconprop.icon={ICONS.PLAY}In the past, we have just chosen a different icon. This comment was more about still using the
Iconcomponent. I think it's ok if we use different icons there (it should be avoided, but fine if absolutely necessary), but we definitely shouldn't be adding icons in two different ways.Everything should go through the
Iconcomponent and we shouldn't be adding icons by using a class (.play). I have some ideas but maybe we should discuss over slack. We could check to see if we have a custom icon, if one isn't there, then fallback to react-feather.These should use the
iconprop@ -52,0 +50,4 @@<div className="card__content"><div className="card__actions"><Submit label="Invite" disabled={isPending} />I understand not having a large space on the
Full Historybutton. I think that is fine.For
Get New AddressandClaim Rewards, they are both directly above help text, but have two different spacings. Looks like one isp.helpand the other isdiv.help. Might just be a typo.The button under the textarea should have the same spacing as it would under a table (like transaction history) right? I think those are the same context.
Also the spacing seems really weird when there are cards with subtitles and without. The margin-bottom on the
card-headerclass is causing inconsistent spacing. The space between the textarea and the subtitle on the top card is ~36 pixes, and the spacing between the top link and the title on the bottom card is ~42 pixels.The icons I'm using here are not in the react-feathers repo.
The icon I'm using here is not in the react-feathers repo.
Pull request closed