An icon is a graphic symbol that represents an object (ie a file) or a function. They can be used to give the user feedback.
<%= pb_rails("icon", props: { icon: "question-circle", fixed_width: true, flip: "horizontal", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "question-circle", fixed_width: true, flip: "vertical", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "question-circle", fixed_width: true, flip: "both", size: "2x" }) %>
Spin
Pulse
A spinner icon can show a user that something is loading or saving.
Icon Pull can be used to indicate that the user can perform a pull action.
Large
Small
XSmall
1x
2x
3x
4x
5x
6x
7x
8x
9x
10x
<p><%= pb_rails("icon", props: { icon: "user", size: "lg" }) %> <span>Large</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "sm" }) %> <span>Small</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "xs" }) %> <span>XSmall</span></p> <br/><br/> <p><%= pb_rails("icon", props: { icon: "user", size: "1x" }) %> <span>1x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "2x" }) %> <span>2x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "3x" }) %> <span>3x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "4x" }) %> <span>4x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "5x" }) %> <span>5x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "6x" }) %> <span>6x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "7x" }) %> <span>7x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "8x" }) %> <span>8x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "9x" }) %> <span>9x</span></p> <p><%= pb_rails("icon", props: { icon: "user", size: "10x" }) %> <span>10x</span></p>
When using custom icons it is important to introduce a "clean" SVG. In order to ensure these custom icons perform as intended within your kit(s), ensure these things have been modified from the original SVG markup:
Attributes must be React compatible e.g. xmlns:xlink should be xmlnsXlink and so on. There should be no hyphenated attributes and no semi-colons!.
Fill colors with regards to g or path nodes, e.g. fill="black", should be replaced with currentColor ala fill="currentColor". Your mileage may vary depending on the complexity of your SVG.
Pay attention to your custom icon's dimensions and viewBox attribute. It is best to use a viewBox="0 0 512 512" starting point when designing instead of trying to retrofit the viewbox afterwards!
You must source your own SVG into component/view you are working on. This can easily be done in programmatic and maintainable ways.
Sending the absolute path to the icon prop results in an <SVG> tag within the working view.
<%# SVG fill color inherited from css color property %> <div class="icon-wrapper"> <% svg_url = "https://upload.wikimedia.org/wikipedia/commons/3/3b/Wrench_font_awesome.svg" %> <p><%= pb_rails("icon", props: { icon: svg_url } ) %></p> <p><%= pb_rails("icon", props: { rotation: 90, icon: svg_url, size: "2x" } ) %></p> <p><%= pb_rails("icon", props: { spin: true, icon: svg_url, size: "3x" } ) %></p> <p><%= pb_rails("icon", props: { size: "5x", icon: svg_url } ) %></p> <p><%= pb_rails("icon", props: { flip: "horizontal", size: "5x", icon: svg_url } ) %></p> </div>
Pass any text, status, data, product, or category Playbook color token to the color prop to change any icon's color.
<%= pb_rails("flex", props: { margin_bottom: "sm" }) do %> <%= pb_rails("icon", props: { icon: "user", fixed_width: true, color: "primary", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "recycle", fixed_width: true, color: "data_4", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "roofing", fixed_width: true, color: "product_5_background", size: "2x" }) %> <% end %> <%= pb_rails("flex", props: {}) do %> <%= pb_rails("icon", props: { icon: "user", fixed_width: true, color: "light", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "recycle", fixed_width: true, color: "lighter", size: "2x" }) %> <%= pb_rails("icon", props: { icon: "roofing", fixed_width: true, color: "link", size: "2x" }) %> <% end %>
Be careful of use cases where there should be a clickable area around the icon. Icon Circle Button may need to be used instead.
| Props | Type | Values |
|---|---|---|
align_content |
enum | responsive
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
align_items |
enum | responsive
|
start
end
center
|
border_radius |
enum
|
none
xs
sm
md
lg
xl
rounded
|
cursor |
enum
|
auto
default
none
contextMenu
help
pointer
progress
wait
cell
|
dark |
boolean
|
true
false
|
flex |
enum | responsive
|
auto
initial
0
1
2
3
4
5
6
7
8
9
10
11
12
none
|
flex_direction |
enum | responsive
|
row
column
rowReverse
columnReverse
|
flex_wrap |
enum | responsive
|
wrap
nowrap
wrapReverse
|
justify_content |
enum | responsive
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
line_height |
enum
|
loosest
looser
loose
normal
tight
tighter
tightest
|
margin_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin |
array
|
none
xxs
xs
sm
md
lg
xl
|
width |
string
|
|
min_width |
string
|
|
max_width |
string
|
|
gap |
string | responsive
|
|
column_gap |
string | responsive
|
|
row_gap |
string | responsive
|
|
number_spacing |
enum
|
tabular
|
order |
enum | responsive
|
none
first
1
2
3
4
5
6
7
8
9
10
11
12
|
overflow_x |
enum
|
scroll
visible
hidden
auto
|
overflow_y |
enum
|
scroll
visible
hidden
auto
|
overflow |
enum
|
scroll
visible
hidden
auto
|
padding_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding |
array
|
none
xxs
xs
sm
md
lg
xl
|
position |
enum
|
relative
absolute
fixed
sticky
static
|
shadow |
enum
|
none
deep
deeper
deepest
|
text_align |
enum | responsive
|
start
end
left
right
center
justify
justifyAll
matchParent
|
truncate |
enum
|
none
1
2
3
4
5
|
vertical_align |
enum | responsive
|
baseline
super
top
middle
bottom
sub
text-top
text-bottom
|
z_index |
enum | responsive
|
1
2
3
4
5
6
7
8
9
10
max
|
top |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
inset |
boolean
|
true
false
|
right |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
bottom |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
left |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
height |
string
|
|
max_height |
string
|
|
min_height |
string
|
|
hover |
object
|
|
group_hover |
boolean
|
true
false
|
| Props | Type | Values | Default |
|---|---|---|---|
border |
string
|
false
|
|
color |
string
|
||
custom_icon |
genericobject
|
||
fixed_width |
boolean
|
true
false
|
true
|
flip |
enum
|
horizontal
vertical
both
none
|
|
icon |
string | reactsvgelement
|
||
inverse |
boolean
|
true
false
|
false
|
list_item |
boolean
|
true
false
|
false
|
pull |
enum
|
left
right
none
|
|
pulse |
boolean
|
true
false
|
false
|
rotation |
enum
|
90
180
270
|
|
size |
enum
|
lg
xs
sm
1x
2x
3x
4x
5x
6x
7x
8x
9x
10x
|
|
font_style |
enum
|
far
fas
fab
fak
|
far
|
spin |
boolean
|
true
false
|
false
|
tab_index |
number
|
||
tabindex |
string
|