playbook_ui 13.31.0.pre.alpha.play1262iconstyles3172 → 13.31.0.pre.alpha.play1416movealiaslogic3232
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_button/_button.scss +3 -3
- data/app/pb_kits/playbook/pb_button/_button_mixins.scss +3 -2
- data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
- data/app/pb_kits/playbook/pb_dashboard/commonSettings.js +1 -1
- data/app/pb_kits/playbook/pb_dashboard/pbChartsDarkTheme.ts +1 -1
- data/app/pb_kits/playbook/pb_dashboard/pbChartsLightTheme.ts +1 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/docs/_date_year_stacked_default.jsx +4 -1
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +15 -1
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +14 -19
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.md +5 -3
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards.md +7 -3
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.md +3 -5
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list.md +3 -5
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -0
- data/app/pb_kits/playbook/pb_dropdown/index.js +33 -4
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +9 -0
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +1 -1
- data/app/pb_kits/playbook/pb_icon/_icon.scss +1 -211
- data/app/pb_kits/playbook/pb_icon/_icon.tsx +7 -99
- data/app/pb_kits/playbook/pb_icon/icon.rb +25 -25
- data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +2 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +8 -23
- data/app/pb_kits/playbook/tokens/_titles.scss +4 -4
- data/app/pb_kits/playbook/tokens/_typography.scss +10 -10
- data/dist/menu.yml +566 -472
- data/dist/playbook-rails.js +6 -6
- data/dist/reset.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 290a1034be7cf5e836f3da231ed2896d560d79080809f179a70a46d9c7ddef61
|
4
|
+
data.tar.gz: 35144f9c3c691719fc2374d63279d0fa43b3bc9cfcb8cf84c7d26b0416b351f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7701d8e4f59e871068bc64d7b85bd84a25c5dbedfa9a7cfcbcaa8959fe46e92615cdfaab63cf1c4061ca22bbb2f8265ceb075e5c008fa3e01e6b1185eeff38c
|
7
|
+
data.tar.gz: 15a088787644d2b6eeeef831561819e06d8027f2145541d6a256a1185a6dd1a12f832eae5da700189c6195411242499d4dff03d370be2ef64c53edb572d0c1b9
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
$pb_button_size: 40px;
|
11
11
|
$pb_button_v_padding: 7px;
|
12
|
-
$pb_button_h_padding:
|
12
|
+
$pb_button_h_padding: 28px;
|
13
13
|
$pb_button_hover_darken: 4%;
|
14
14
|
$pb_button_border_width: 0px;
|
15
15
|
|
@@ -27,13 +27,14 @@ $pb_button_border_width: 0px;
|
|
27
27
|
text-rendering: optimizeLegibility;
|
28
28
|
font-size: $font_small;
|
29
29
|
font-weight: $bold;
|
30
|
+
letter-spacing: $lspace_loose;
|
30
31
|
text-align: center;
|
31
32
|
text-decoration: none;
|
32
33
|
vertical-align: middle;
|
33
34
|
text-transform: none;
|
34
35
|
border-width: $pb_button_border_width;
|
35
36
|
border-style: solid;
|
36
|
-
border-radius: $
|
37
|
+
border-radius: $border_rad_heavy;
|
37
38
|
min-height: $pb_button_size;
|
38
39
|
line-height: 1.5;
|
39
40
|
padding: $pb_button_v_padding $pb_button_h_padding;
|
@@ -28,7 +28,7 @@ exports[`html structure is correct 1`] = `
|
|
28
28
|
style="vertical-align: middle; color: rgb(193, 205, 214);"
|
29
29
|
>
|
30
30
|
<i
|
31
|
-
class="pb_icon_kit far
|
31
|
+
class="pb_icon_kit far fa-fw fa-lg fa-chevron-down"
|
32
32
|
/>
|
33
33
|
<span
|
34
34
|
aria-label="chevron-down icon"
|
@@ -53,7 +53,7 @@ const adjustAxisStyle = (axis) => {
|
|
53
53
|
/* Change axis label styles */
|
54
54
|
axis.labels.style.fontFamily = typography.font_family_base
|
55
55
|
axis.labels.style.color = colors.charcoal
|
56
|
-
axis.labels.style.fontWeight = typography.
|
56
|
+
axis.labels.style.fontWeight = typography.regular
|
57
57
|
axis.labels.style.fontSize = typography.font_small
|
58
58
|
}
|
59
59
|
|
@@ -4,7 +4,10 @@ import { DateYearStacked } from '../../'
|
|
4
4
|
const DateYearStackedDefault = (props) => {
|
5
5
|
return (
|
6
6
|
<div>
|
7
|
-
<DateYearStacked
|
7
|
+
<DateYearStacked
|
8
|
+
date={new Date()}
|
9
|
+
{...props}
|
10
|
+
/>
|
8
11
|
<DateYearStacked
|
9
12
|
align="center"
|
10
13
|
date={new Date()}
|
@@ -51,7 +51,16 @@ export const DraggableContext = () => {
|
|
51
51
|
return useContext(DragContext);
|
52
52
|
};
|
53
53
|
|
54
|
-
export const DraggableProvider = ({
|
54
|
+
export const DraggableProvider = ({
|
55
|
+
children,
|
56
|
+
initialItems,
|
57
|
+
onReorder,
|
58
|
+
onDragStart,
|
59
|
+
onDragEnter,
|
60
|
+
onDragEnd,
|
61
|
+
onDrop,
|
62
|
+
onDragOver
|
63
|
+
}: DraggableProviderType) => {
|
55
64
|
const [state, dispatch] = useReducer(reducer, initialState);
|
56
65
|
|
57
66
|
useEffect(() => {
|
@@ -65,6 +74,7 @@ export const DraggableProvider = ({ children, initialItems, onReorder }: Draggab
|
|
65
74
|
const handleDragStart = (id: string, container: string) => {
|
66
75
|
dispatch({ type: 'SET_DRAG_DATA', payload: { id: id, initialGroup: container } });
|
67
76
|
dispatch({ type: 'SET_IS_DRAGGING', payload: id });
|
77
|
+
if (onDragStart) onDragStart(id, container);
|
68
78
|
};
|
69
79
|
|
70
80
|
const handleDragEnter = (id: string, container: string) => {
|
@@ -72,11 +82,13 @@ export const DraggableProvider = ({ children, initialItems, onReorder }: Draggab
|
|
72
82
|
dispatch({ type: 'REORDER_ITEMS', payload: { dragId: state.dragData.id, targetId: id } });
|
73
83
|
dispatch({ type: 'SET_DRAG_DATA', payload: { id: state.dragData.id, initialGroup: container } });
|
74
84
|
}
|
85
|
+
if (onDragEnter) onDragEnter(id, container);
|
75
86
|
};
|
76
87
|
|
77
88
|
const handleDragEnd = () => {
|
78
89
|
dispatch({ type: 'SET_IS_DRAGGING', payload: "" });
|
79
90
|
dispatch({ type: 'SET_ACTIVE_CONTAINER', payload: "" });
|
91
|
+
if (onDragEnd) onDragEnd();
|
80
92
|
};
|
81
93
|
|
82
94
|
const changeCategory = (itemId: string, container: string) => {
|
@@ -87,11 +99,13 @@ export const DraggableProvider = ({ children, initialItems, onReorder }: Draggab
|
|
87
99
|
dispatch({ type: 'SET_IS_DRAGGING', payload: "" });
|
88
100
|
dispatch({ type: 'SET_ACTIVE_CONTAINER', payload: "" });
|
89
101
|
changeCategory(state.dragData.id, container);
|
102
|
+
if (onDrop) onDrop(container);
|
90
103
|
};
|
91
104
|
|
92
105
|
const handleDragOver = (e: Event, container: string) => {
|
93
106
|
e.preventDefault();
|
94
107
|
dispatch({ type: 'SET_ACTIVE_CONTAINER', payload: container });
|
108
|
+
if (onDragOver) onDragOver(e, container);
|
95
109
|
};
|
96
110
|
|
97
111
|
const contextValue = useMemo(() => ({
|
@@ -23,4 +23,9 @@ export interface ItemType {
|
|
23
23
|
children: React.ReactNode;
|
24
24
|
initialItems: ItemType[];
|
25
25
|
onReorder: (items: ItemType[]) => void;
|
26
|
+
onDragStart?: (id: string, container: string) => void;
|
27
|
+
onDragEnter?: (id: string, container: string) => void;
|
28
|
+
onDragEnd?: () => void;
|
29
|
+
onDrop?: (container: string) => void;
|
30
|
+
onDragOver?: (e: Event, container: string) => void;
|
26
31
|
}
|
@@ -1,23 +1,19 @@
|
|
1
1
|
import React, { useState } from "react";
|
2
|
-
import {
|
2
|
+
import { Flex, Image, Draggable, DraggableProvider } from "../../";
|
3
3
|
|
4
4
|
// Initial items to be dragged
|
5
5
|
const data = [
|
6
6
|
{
|
7
|
-
id: "
|
8
|
-
|
7
|
+
id: "21",
|
8
|
+
url: "https://unsplash.it/500/400/?image=633",
|
9
9
|
},
|
10
10
|
{
|
11
|
-
id: "
|
12
|
-
|
11
|
+
id: "22",
|
12
|
+
url: "https://unsplash.it/500/400/?image=634",
|
13
13
|
},
|
14
14
|
{
|
15
|
-
id: "
|
16
|
-
|
17
|
-
},
|
18
|
-
{
|
19
|
-
id: "4",
|
20
|
-
text: "Task 4",
|
15
|
+
id: "23",
|
16
|
+
url: "https://unsplash.it/500/400/?image=637",
|
21
17
|
},
|
22
18
|
];
|
23
19
|
|
@@ -30,20 +26,19 @@ const DraggableDefault = (props) => {
|
|
30
26
|
onReorder={(items) => setInitialState(items)}
|
31
27
|
>
|
32
28
|
<Draggable.Container {...props}>
|
33
|
-
|
34
|
-
{initialState.map(({ id,
|
29
|
+
<Flex>
|
30
|
+
{initialState.map(({ id, url }) => (
|
35
31
|
<Draggable.Item dragId={id}
|
36
32
|
key={id}
|
37
33
|
>
|
38
|
-
<
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
{...props}
|
34
|
+
<Image alt={id}
|
35
|
+
margin="xs"
|
36
|
+
size="md"
|
37
|
+
url={url}
|
43
38
|
/>
|
44
39
|
</Draggable.Item>
|
45
40
|
))}
|
46
|
-
|
41
|
+
</Flex>
|
47
42
|
</Draggable.Container>
|
48
43
|
</DraggableProvider>
|
49
44
|
</>
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
The Draggable kit gives you a full subcomponent structure that allows it to be used with almost any kits.
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
`DraggableProvider` = This provider manages all settings that allows drag and drop to function and must be used as the outermost wrapper. It has 2 REQUIRED props: `initialItems` (initial data) and `onReorder` (function that returns mutated data as items are reordered via drag and drop). Devs must manage state as shown.
|
4
|
+
|
5
|
+
`Draggable.Container` = This specifies the container within which items can be dropped.
|
6
|
+
`Draggable.Item` = This specifies the items that can be dragged and dropped. `dragId` is a REQUIRED prop for Draggable.Item.
|
@@ -1,5 +1,9 @@
|
|
1
|
-
For a simplified version of the Draggable API for the Card kit,
|
1
|
+
For a simplified version of the Draggable API for the Card kit, you can do the following:
|
2
|
+
|
3
|
+
Use `DraggableProvider` and manage state as shown.
|
4
|
+
|
5
|
+
`Draggable.Container` creates the container within which the cards can be dragged and dropped.
|
6
|
+
|
7
|
+
The Card kit is optimized to work with the draggable kit. To enable drag, use the `draggableItem` and `dragId` props on the Card kit as shown. An additional optional boolean prop (set to true by default) of `dragHandle` is also available to show the drag handle icon.
|
2
8
|
|
3
|
-
In addition to the above `dragId` is a REQUIRED prop to be passedd to the Card kit when implementing dragging.
|
4
9
|
|
5
|
-
The dev must manage state as shown.
|
@@ -1,7 +1,5 @@
|
|
1
|
-
For a simplified version of the Draggable API for the List kit,
|
1
|
+
For a simplified version of the Draggable API for the List kit, you can do the following:
|
2
2
|
|
3
|
-
|
3
|
+
Use `DraggableProvider` and manage state as shown.
|
4
4
|
|
5
|
-
The
|
6
|
-
|
7
|
-
The dragHandle is added by default but this can be opted out of by setting `dragHandle` to false on the List kit.
|
5
|
+
The List kit is optimized to work with the draggable kit. To enable drag, use the `enableDrag` prop on List kit AND `dragId` prop on ListItem. An additional optional boolean prop (set to true by default) of `dragHandle` is also available on List kit to show the drag handle icon.
|
@@ -1,7 +1,5 @@
|
|
1
|
-
For a simplified version of the Draggable API for the SelectableList kit,
|
1
|
+
For a simplified version of the Draggable API for the SelectableList kit, you can do the following:
|
2
2
|
|
3
|
-
|
3
|
+
Use `DraggableProvider` and manage state as shown.
|
4
4
|
|
5
|
-
The
|
6
|
-
|
7
|
-
The dragHandle is added by default but this can be opted out of by setting `dragHandle` to false on the SelectableList kit.
|
5
|
+
The SelectableList kit is optimized to work with the draggable kit. To enable drag, use the `enableDrag` prop on SelectableList kit AND `dragId` prop on SelectableList.Item. An additional optional boolean prop (set to true by default) of `dragHandle` is also available on SelectableList kit to show the drag handle icon.
|
@@ -8,7 +8,9 @@
|
|
8
8
|
<%= pb_rails("caption", props: {text: object.label, margin_bottom:"xs"}) %>
|
9
9
|
<% end %>
|
10
10
|
<div class="dropdown_wrapper<%= error_class %>" style="position: relative">
|
11
|
-
<input type="hidden" name="<%= object.name %>" id="dropdown-selected-option" value=""/>
|
11
|
+
<input type="hidden" name="<%= object.name %>" id="dropdown-selected-option" value="" />
|
12
|
+
<input id="dropdown-form-validation" name="<%= object.name %>_form_validation" value="" style="display: none" <%= object.required ? "required" : ""%> />
|
13
|
+
|
12
14
|
<% if content.present? %>
|
13
15
|
<%= content.presence %>
|
14
16
|
<%= pb_rails("body", props: { status: "negative", text: object.error }) %>
|
@@ -8,6 +8,8 @@ module Playbook
|
|
8
8
|
prop :label, type: Playbook::Props::String
|
9
9
|
prop :name, type: Playbook::Props::String
|
10
10
|
prop :error, type: Playbook::Props::String
|
11
|
+
prop :required, type: Playbook::Props::Boolean,
|
12
|
+
default: false
|
11
13
|
|
12
14
|
def data
|
13
15
|
Hash(prop(:data)).merge(pb_dropdown: true)
|
@@ -8,16 +8,22 @@ const DOWN_ARROW_SELECTOR = "#dropdown_open_icon";
|
|
8
8
|
const UP_ARROW_SELECTOR = "#dropdown_close_icon";
|
9
9
|
const OPTION_SELECTOR = "[data-dropdown-option-label]";
|
10
10
|
const CUSTOM_DISPLAY_SELECTOR = "[data-dropdown-custom-trigger]";
|
11
|
+
const INPUT_FORM_VALIDATION = "#dropdown-form-validation";
|
11
12
|
|
12
13
|
export default class PbDropdown extends PbEnhancedElement {
|
13
14
|
static get selector() {
|
14
15
|
return DROPDOWN_SELECTOR;
|
15
16
|
}
|
16
17
|
|
18
|
+
get target() {
|
19
|
+
return this.element.parentNode.querySelector(CONTAINER_SELECTOR);
|
20
|
+
}
|
21
|
+
|
17
22
|
connect() {
|
18
23
|
this.keyboardHandler = new PbDropdownKeyboard(this);
|
19
24
|
this.bindEventListeners();
|
20
25
|
this.updateArrowDisplay(false);
|
26
|
+
this.handleFormValidation();
|
21
27
|
}
|
22
28
|
|
23
29
|
bindEventListeners() {
|
@@ -38,9 +44,13 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
38
44
|
handleOptionClick(event) {
|
39
45
|
const option = event.target.closest(OPTION_SELECTOR);
|
40
46
|
const hiddenInput = this.element.querySelector("#dropdown-selected-option");
|
47
|
+
const inputFormValidation = this.element.querySelector(INPUT_FORM_VALIDATION);
|
48
|
+
|
41
49
|
if (option) {
|
42
50
|
const value = option.dataset.dropdownOptionLabel;
|
43
51
|
hiddenInput.value = JSON.parse(value).id;
|
52
|
+
inputFormValidation.value = JSON.parse(value).id;
|
53
|
+
this.clearFormValidation(inputFormValidation);
|
44
54
|
this.onOptionSelected(value, option);
|
45
55
|
}
|
46
56
|
}
|
@@ -103,10 +113,6 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
103
113
|
selectedOption.classList.add("pb_dropdown_option_selected");
|
104
114
|
}
|
105
115
|
|
106
|
-
get target() {
|
107
|
-
return this.element.parentNode.querySelector(CONTAINER_SELECTOR);
|
108
|
-
}
|
109
|
-
|
110
116
|
showElement(elem) {
|
111
117
|
elem.classList.remove("close");
|
112
118
|
elem.classList.add("open");
|
@@ -150,4 +156,27 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
150
156
|
upArrow.style.display = isOpen ? "inline-block" : "none";
|
151
157
|
}
|
152
158
|
}
|
159
|
+
|
160
|
+
handleFormValidation() {
|
161
|
+
const inputFormValidation = this.element.querySelector(INPUT_FORM_VALIDATION);
|
162
|
+
|
163
|
+
inputFormValidation.addEventListener("invalid", function (event) {
|
164
|
+
if (inputFormValidation.hasAttribute("required") && inputFormValidation.value === "") {
|
165
|
+
event.preventDefault();
|
166
|
+
inputFormValidation.closest(".dropdown_wrapper").classList.add("error");
|
167
|
+
}
|
168
|
+
}, true);
|
169
|
+
}
|
170
|
+
|
171
|
+
clearFormValidation(input) {
|
172
|
+
if (input.checkValidity()) {
|
173
|
+
const dropdownWrapperElement = input.closest(".dropdown_wrapper");
|
174
|
+
dropdownWrapperElement.classList.remove("error");
|
175
|
+
|
176
|
+
const errorLabelElement = dropdownWrapperElement.querySelector(".pb_body_kit_negative");
|
177
|
+
if (errorLabelElement) {
|
178
|
+
errorLabelElement.remove();
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}
|
153
182
|
}
|
@@ -13,6 +13,14 @@
|
|
13
13
|
]
|
14
14
|
%>
|
15
15
|
|
16
|
+
<%
|
17
|
+
example_dropdown_options = [
|
18
|
+
{ label: 'United States', value: 'United States', id: 'us' },
|
19
|
+
{ label: 'Canada', value: 'Canada', id: 'ca' },
|
20
|
+
{ label: 'Pakistan', value: 'Pakistan', id: 'pk' },
|
21
|
+
]
|
22
|
+
%>
|
23
|
+
|
16
24
|
<%= pb_form_with(scope: :example, method: :get, url: "", validate: true) do |form| %>
|
17
25
|
<%= form.text_field :example_text_field, props: { label: true, required: true } %>
|
18
26
|
<%= form.phone_number_field :example_phone_number_field, props: { label: "Example phone field" } %>
|
@@ -22,6 +30,7 @@
|
|
22
30
|
<%= form.password_field :example_password_field, props: { label: true, required: true } %>
|
23
31
|
<%= form.url_field :example_url_field, props: { label: true, required: true } %>
|
24
32
|
<%= form.text_area :example_text_area, props: { label: true, required: true } %>
|
33
|
+
<%= form.dropdown_field :example_dropdown, props: { label: true, options: example_dropdown_options, required: true } %>
|
25
34
|
<%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true, blank_selection: "Select One...", required: true } %>
|
26
35
|
<%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true, blank_selection: "Select One...", required: true } %>
|
27
36
|
<%= form.check_box :example_checkbox, props: { text: "Example Checkbox", label: true, required: true } %>
|
@@ -1,3 +1,4 @@
|
|
1
|
+
// Rails custom icon styles
|
1
2
|
svg.pb_custom_icon {
|
2
3
|
width: 1em;
|
3
4
|
fill: currentColor;
|
@@ -9,214 +10,3 @@ svg.pb_custom_icon {
|
|
9
10
|
.pb_icon_kit_emoji {
|
10
11
|
font-family: monospace;
|
11
12
|
}
|
12
|
-
|
13
|
-
$rotate-list: (90, 180, 270);
|
14
|
-
$flip-list: (
|
15
|
-
"horizontal": (-1, 1),
|
16
|
-
"vertical": (1, -1),
|
17
|
-
"both": (-1, -1)
|
18
|
-
);
|
19
|
-
|
20
|
-
@keyframes pb_icon_spin {
|
21
|
-
0% {
|
22
|
-
-webkit-transform: rotate(0);
|
23
|
-
transform: rotate(0);
|
24
|
-
}
|
25
|
-
100% {
|
26
|
-
-webkit-transform: rotate(360deg);
|
27
|
-
transform: rotate(360deg);
|
28
|
-
}
|
29
|
-
};
|
30
|
-
|
31
|
-
svg {
|
32
|
-
&.pb_icon_kit,
|
33
|
-
&.pb_custom_icon{
|
34
|
-
@each $r in $rotate-list {
|
35
|
-
&.rotate_#{$r} {
|
36
|
-
transform: rotate(#{$r}deg);
|
37
|
-
}
|
38
|
-
}
|
39
|
-
@each $f, $v in $flip-list {
|
40
|
-
&.flip_#{$f} {
|
41
|
-
transform: scale($v);
|
42
|
-
}
|
43
|
-
}
|
44
|
-
&.svg-inline--fa {
|
45
|
-
height: 1em;
|
46
|
-
overflow: visible;
|
47
|
-
vertical-align: -.125em
|
48
|
-
}
|
49
|
-
&.svg_inverse {
|
50
|
-
color: #fff;
|
51
|
-
}
|
52
|
-
&.svg_border {
|
53
|
-
border-color: #eee;
|
54
|
-
border-radius: .1em;
|
55
|
-
border-style: solid;
|
56
|
-
border-width: .08em;
|
57
|
-
padding: .2em .25em .15em;
|
58
|
-
}
|
59
|
-
&.svg_fw {
|
60
|
-
text-align: center;
|
61
|
-
width: 1.25em
|
62
|
-
}
|
63
|
-
&.svg_li {
|
64
|
-
left: calc(2em * -1);
|
65
|
-
position: absolute;
|
66
|
-
text-align: center;
|
67
|
-
width: 2em;
|
68
|
-
line-height: inherit
|
69
|
-
}
|
70
|
-
&.pull_left {
|
71
|
-
float: left;
|
72
|
-
margin-right: .3em;
|
73
|
-
}
|
74
|
-
|
75
|
-
&.pull_right {
|
76
|
-
float: right;
|
77
|
-
margin-left: .3em;
|
78
|
-
}
|
79
|
-
&.pulse {
|
80
|
-
animation-name: pb_icon_spin;
|
81
|
-
animation-direction: normal;
|
82
|
-
animation-duration: 1s;
|
83
|
-
animation-iteration-count: infinite;
|
84
|
-
animation-timing-function: steps(8);
|
85
|
-
}
|
86
|
-
&.spin {
|
87
|
-
animation-name: pb_icon_spin;
|
88
|
-
animation-delay: 0s;
|
89
|
-
animation-direction: normal;
|
90
|
-
animation-duration: 2s;
|
91
|
-
animation-iteration-count: infinite;
|
92
|
-
animation-timing-function: linear;
|
93
|
-
}
|
94
|
-
|
95
|
-
&.svg_xs {
|
96
|
-
font-size: 0.75em
|
97
|
-
}
|
98
|
-
|
99
|
-
&.svg_sm {
|
100
|
-
font-size: 0.875em
|
101
|
-
}
|
102
|
-
|
103
|
-
&.svg_lg {
|
104
|
-
font-size: 1.25em
|
105
|
-
}
|
106
|
-
|
107
|
-
&.svg_1x {
|
108
|
-
font-size: 1em
|
109
|
-
}
|
110
|
-
|
111
|
-
&.svg_2x {
|
112
|
-
font-size: 2em
|
113
|
-
}
|
114
|
-
|
115
|
-
&.svg_3x {
|
116
|
-
font-size: 3em
|
117
|
-
}
|
118
|
-
|
119
|
-
&.svg_4x {
|
120
|
-
font-size: 4em
|
121
|
-
}
|
122
|
-
|
123
|
-
&.svg_5x {
|
124
|
-
font-size: 5em
|
125
|
-
}
|
126
|
-
|
127
|
-
&.svg_6x {
|
128
|
-
font-size: 6em
|
129
|
-
}
|
130
|
-
|
131
|
-
&.svg_7x {
|
132
|
-
font-size: 7em
|
133
|
-
}
|
134
|
-
|
135
|
-
&.svg_8x {
|
136
|
-
font-size: 8em
|
137
|
-
}
|
138
|
-
|
139
|
-
&.svg_9x {
|
140
|
-
font-size: 9em
|
141
|
-
}
|
142
|
-
|
143
|
-
&.svg_10x {
|
144
|
-
font-size: 10em
|
145
|
-
}
|
146
|
-
&.fa-xs {
|
147
|
-
font-size: .75em;
|
148
|
-
line-height: .0833333337em;
|
149
|
-
vertical-align: .125em
|
150
|
-
}
|
151
|
-
&.fa-sm {
|
152
|
-
font-size: .875em;
|
153
|
-
line-height: .0714285718em;
|
154
|
-
vertical-align: .0535714295em
|
155
|
-
}
|
156
|
-
&.fa-lg {
|
157
|
-
font-size: 1.25em;
|
158
|
-
line-height: .05em;
|
159
|
-
vertical-align: -.075em
|
160
|
-
}
|
161
|
-
&.fa-pull-left {
|
162
|
-
float: left;
|
163
|
-
margin-right: .3em;
|
164
|
-
}
|
165
|
-
|
166
|
-
&.fa-pull-right {
|
167
|
-
float: right;
|
168
|
-
margin-left: .3em;
|
169
|
-
}
|
170
|
-
&.fa-li {
|
171
|
-
left: calc(2em * -1);
|
172
|
-
position: absolute;
|
173
|
-
text-align: center;
|
174
|
-
width: 2em;
|
175
|
-
line-height: inherit
|
176
|
-
}
|
177
|
-
&.svg-inline--fa.fa-li {
|
178
|
-
width: 2em;
|
179
|
-
top: .25em
|
180
|
-
}
|
181
|
-
&.svg-inline--fa.fa-fw {
|
182
|
-
width: 1.25em;
|
183
|
-
}
|
184
|
-
&.fa-fw {
|
185
|
-
text-align: center;
|
186
|
-
width: 1.25em
|
187
|
-
}
|
188
|
-
&.fa-layers {
|
189
|
-
display: inline-block;
|
190
|
-
height: 1em;
|
191
|
-
position: relative;
|
192
|
-
text-align: center;
|
193
|
-
vertical-align: -.125em;
|
194
|
-
width: 1em
|
195
|
-
}
|
196
|
-
&.fa-2x {
|
197
|
-
font-size: 2em
|
198
|
-
}
|
199
|
-
&.fa-3x {
|
200
|
-
font-size: 3em
|
201
|
-
}
|
202
|
-
&.fa-flip {
|
203
|
-
animation-name: fa-flip;
|
204
|
-
animation-delay: 0s;
|
205
|
-
animation-direction: normal;
|
206
|
-
animation-duration: 1s;
|
207
|
-
animation-iteration-count: infinite;
|
208
|
-
animation-timing-function: ease-in-out;
|
209
|
-
}
|
210
|
-
&.fa-spin {
|
211
|
-
animation-name: fa-spin;
|
212
|
-
animation-delay: 0s;
|
213
|
-
animation-direction: normal;
|
214
|
-
animation-duration: 2s;
|
215
|
-
animation-iteration-count: infinite;
|
216
|
-
animation-timing-function: linear;
|
217
|
-
}
|
218
|
-
&.fa-pulse {
|
219
|
-
animation: fa-spin 1s infinite linear;
|
220
|
-
}
|
221
|
-
}
|
222
|
-
}
|