functional React.js components.
// npm
npm install furl-components furl-styles
// yarn
yarn add furl-components furl-styles
Visit the website for more information.
Functional react.js components.
Home Page: https://furl.netlify.com/
License: MIT License
functional React.js components.
// npm
npm install furl-components furl-styles
// yarn
yarn add furl-components furl-styles
Visit the website for more information.
There are a lot of props in many components (e.g. Search
) that are relevant but not really important for the components themselves. It is a good idea to omit them, so that the component's footprints are smaller and these props are handled via ...rest
.
Check that all event handlers are called only if they are of type function
.
Table
s can cause the Grid
and Column
elements to grow larger than their expected size under the right circumstances, causing horizontal overflow.
Using calc
in a Column
's size will cause a problematic className that does not work properly.
keys
usageHyperlink
components need to use colors that synergize with the background and foreground colors of an Alert
whenever placed inside one.
Customization option for Steps
components to display in a vertical fashion.
pa11y
to test accessibility<figure>
conditionally<form>
and <legend>
[disabled]
and [readonly]
defaultValue
prop<TextInput>
<EmailInput>
<NumberInput>
- with +,- buttons<PasswordInput>
- with view button<UrlInput>
<Textarea>
- <TextInput multiline>
<Select>
<MultiSelect>
- <Select multiple>
<Combobox>
- use <datalist>
and <input>
with list
attribute<TelephoneInput>
<CreditCardInput>
- spacing and icons<CurrencyInput>
<TimeInput>
- custom, multi-part version<ColorInput>
- preview field<FileInput>
- drag and drop box<DateInput>
- custom, multi-part version<RatingInput>
- use a number input internally<Slider>
- use native element, allow one, two or more values if possible<input>
elements, add a prop to allow wrapping or following with a <label>
<DatetimeInput>
- custom, multi-part version<TagInput>
If a Column
component is placed inside a Content
component and its size is absolute (i.e. px
), there are use-cases where the width of the Column
can exceed the parent and cause horizontal overflow.
Change the code from:
flex: 0 0 var(--col-md-size);
to:
flex: 0 0 auto;
This will make columns use the max-width
specified alongside them to properly size the column. If the absolute width is greater than the parent, it will shrink accordingly.
ButtonGroup
componentModalCenter
and Modal
)*Center
and *
)As a quality-of-life change, it's worthwhile updating the Button
component to automatically be of type='link'
when it is provided with a href
prop.
This will reduce the code required to create link buttons and make the component easier to use.
<Progress>
component<meter>
element for proper semantics<meter>
support is ok but the CSS is all over the place, not implementing this anytime soon.<button>
inside <button>
- <MenuItem>
and <Button>
with <Dropdown>
<div>
inside <p>
- <Tooltip>
and <Popover>
Currently the Collapse
component is optimized to work with raw textual content. Its styles should be evaluated so that pretty much anything can be placed inside it and not look out of alignment.
One solution is to replace its default styling to use a <p>
element where raw content is right now, so that it will always use a paragraph if the passes content is a string
and also use a paragraph for the title
in the <summary>
element.
.js
files / Use ESLint<React.Fragment>
with <>
Figure out a way to entirely hide the SidebarTab
if there is no Sidebar
in the children of a Layout
.
X
icon<Text>
<Paragraph>
...rest
to all existing components props
style
props to all componentsprops
for React and add custom checking for each one if/as necessaryprops
for most components with text (fontFamily
, fontSize
, fontWeight
)props
for most components with color and background color (foreColor
, backColor
)props
for most components for padding and margins, if possibleThere's currently an issue with the styles applied via the *
selector, which messes up color and background on hover/focus effects and on SVGs.
Add a style for Button
component in Header
to fit perfectly within the height
of its parent, either via CSS or via the components themselves.
font-*
classes need to be tested again. Also the evaluation system of the --font-family
variable generated by props might not work exactly as expected.
Search
renders children
.
However, this can cause a few problems, as the developer has to handle state changes by rendering or hiding the Search
contents, probably via the onChange
event.
It should be refactored to have an internal state, so that Search
handles focusing/unfocusing by showing/hiding its results.
On a side note, it might be a good idea to add a clear button or something similar to the component, so that it is more of a unique component and not just another Input
.
Provide custom components that are more powerful than regular components and make up the main API of the library:
Components that produce mappings of data (Array/Object) to a view (set of components):
Additional features that can be added to certain components:
Easier ways to write components that require a lot of code and micromanagement:
Prebuilt components for common use-cases:
It seems like some components that filter their children
might end up getting item.type
equal to undefined
.
I have seen this happen when a component that applies a filter contains children separated by a space on the same line.
Replace all instances of item.type.name === ComponentX.name
with a more robust check which checks item.type && item.type.name && item.type.name === ComponentX.name
instead. This will safeguard against this particular problem and possibly others in the future.
There is a minor issue with the alignment of <Icon>
inside <Button>
. This could be improved, but requires some trial and error.
Dropdown
icons are not properly aligned vertically inside the dropdown text and might also need some more spacing between the text and themselves.
isOpen
with ButtonGroup
keys
usageConsider the following component tree:
<Grid>
<Row>
<Column size={3}>
<Button>
<Icon name='github' height={18} width={18}/>
</Button>
</Column>
</Row>
</Grid>
In the above example the Icon
component will shrink proportionately to the screen size, as the Column
is resized and its max-width
, set in _Reset.scss, updates automatically.
This is a very annoying bug and it requires a fix and re-evaluation of the related CSS ruleset.
<Footer>
component<Divider>
component - vertical and horizontal (use <hr>
for horizontal)<Calendar>
component for data presenation and/or inputposition: sticky
requires at least one position (top
, bottom
, left
or right
) to work properly.
.layout-header
seems to only get one of these set up in the smallest screen size and then it does not really do anything for the other screen sizes (possibly an artifact of refactoring the LayoutStyle). This should be addressed as soon as possible, as it breaks the component's functionality.
Input
of type
number
seems to not display the left button (decrement) at all times (possibly a label-related bug).
id
right from the props might not be absolutely necessary for all components, probably only keep it in components that actually need to make use of it and have custom logic for it.className
and classNames
usage needs to be made more consistent.style
dynamically from custom properties such as fontWeight
or backgroundColor
.When a MenuItem
is inside a Dropdown
it does not inherit the highlighting styles properly when selected
.
Select
- use value
or defaultValue
instead of selected
value
and defaultValue
currencySign
prop on DOM elementFileInput
componentRatingInput
component has value
without onChange
, use defaultValue
insteadRatingInput
Breadcrumb
(BreadcrumbItem
) should parse its own href
property to simplify use.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.