playbook_ui 12.30.1.pre.alpha.play846responsivespacingglobalpropsneedsdefault924 → 12.31.0.pre.alpha.customiconsfa928
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/_playbook.scss +2 -0
- data/app/pb_kits/playbook/custom-icons.js +355 -0
- data/app/pb_kits/playbook/index.js +2 -1
- data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -0
- data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -1
- data/app/pb_kits/playbook/pb_badge/badge.rb +1 -1
- data/app/pb_kits/playbook/pb_badge/badge.test.js +13 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.html.erb +12 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.jsx +25 -0
- data/app/pb_kits/playbook/pb_badge/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_badge/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_button/docs/_button_hover.jsx +40 -0
- data/app/pb_kits/playbook/pb_button/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_button/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_card/_card.scss +0 -3
- data/app/pb_kits/playbook/pb_card/_card.tsx +6 -5
- data/app/pb_kits/playbook/pb_card/card.html.erb +3 -1
- data/app/pb_kits/playbook/pb_card/card.rb +96 -0
- data/app/pb_kits/playbook/pb_card/card_body.rb +1 -93
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +0 -11
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +3 -1
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.tsx +3 -1
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +3 -1
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_dialog/_dialog.scss +0 -12
- data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_body.tsx +2 -2
- data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_footer.tsx +4 -1
- data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_header.tsx +2 -1
- data/app/pb_kits/playbook/pb_icon/_icon.tsx +9 -3
- data/app/pb_kits/playbook/pb_icon/icon.rb +8 -2
- data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +33 -45
- data/app/pb_kits/playbook/pb_message/docs/_message_hover.jsx +41 -0
- data/app/pb_kits/playbook/pb_message/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_message/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +4 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +8 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +76 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.jsx +88 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +5 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +3 -0
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +7 -0
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +12 -7
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +14 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +30 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.md +3 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.html.erb +1 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.jsx +13 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.html.erb +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +6 -3
- data/app/pb_kits/playbook/pb_section_separator/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -2
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
- data/app/pb_kits/playbook/pb_title/_title.scss +18 -0
- data/app/pb_kits/playbook/pb_title/_title.tsx +20 -2
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.html.erb +1 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.jsx +16 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.md +1 -0
- data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_title/title.rb +21 -4
- data/app/pb_kits/playbook/pb_title/title.test.js +42 -29
- data/app/pb_kits/playbook/tokens/_scale.scss +9 -0
- data/app/pb_kits/playbook/tokens/exports/_scale.scss +13 -0
- data/app/pb_kits/playbook/utilities/_border_radius.scss +31 -0
- data/app/pb_kits/playbook/utilities/_colors.scss +3 -0
- data/app/pb_kits/playbook/utilities/_hover.scss +47 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +22 -2
- data/dist/playbook-rails.js +7 -7
- data/lib/playbook/version.rb +2 -2
- metadata +22 -2
@@ -28,6 +28,7 @@ type MultiLevelSelectProps = {
|
|
28
28
|
returnAllSelected?: boolean
|
29
29
|
treeData?: { [key: string]: string }[]
|
30
30
|
onSelect?: (prop: { [key: string]: any }) => void
|
31
|
+
selectedIds?: string[]
|
31
32
|
} & GlobalProps
|
32
33
|
|
33
34
|
const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
@@ -41,6 +42,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
41
42
|
returnAllSelected = false,
|
42
43
|
treeData,
|
43
44
|
onSelect = () => {},
|
45
|
+
selectedIds
|
44
46
|
} = props
|
45
47
|
|
46
48
|
const ariaProps = buildAriaProps(aria)
|
@@ -64,14 +66,14 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
64
66
|
//state for return for default
|
65
67
|
const [defaultReturn, setDefaultReturn] = useState([])
|
66
68
|
// Get expanded items from treeData.
|
67
|
-
const initialExpandedItems = getExpandedItems(treeData);
|
69
|
+
const initialExpandedItems = getExpandedItems(treeData, selectedIds);
|
68
70
|
// Initialize state with expanded items.
|
69
71
|
const [expanded, setExpanded] = useState(initialExpandedItems);
|
70
72
|
|
71
73
|
|
72
74
|
useEffect(() => {
|
73
|
-
setFormattedData(addCheckedAndParentProperty(treeData))
|
74
|
-
}, [treeData])
|
75
|
+
setFormattedData(addCheckedAndParentProperty(treeData, selectedIds))
|
76
|
+
}, [treeData, selectedIds])
|
75
77
|
|
76
78
|
useEffect(() => {
|
77
79
|
if (returnAllSelected) {
|
@@ -160,6 +162,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
160
162
|
//function to map over data and add parent_id + depth property to each item
|
161
163
|
const addCheckedAndParentProperty = (
|
162
164
|
treeData: { [key: string]: any }[],
|
165
|
+
selectedIds: string[],
|
163
166
|
parent_id: string = null,
|
164
167
|
depth: number = 0,
|
165
168
|
) => {
|
@@ -169,6 +172,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
169
172
|
return treeData.map((item: { [key: string]: any } | any) => {
|
170
173
|
const newItem = {
|
171
174
|
...item,
|
175
|
+
checked: selectedIds && selectedIds.length && selectedIds.includes(item.id),
|
172
176
|
parent_id,
|
173
177
|
depth,
|
174
178
|
}
|
@@ -179,6 +183,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
179
183
|
: item.children
|
180
184
|
newItem.children = addCheckedAndParentProperty(
|
181
185
|
children,
|
186
|
+
selectedIds,
|
182
187
|
newItem.id,
|
183
188
|
depth + 1
|
184
189
|
)
|
data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
<% treeData = [{
|
2
|
+
label: "Power Home Remodeling",
|
3
|
+
value: "Power Home Remodeling",
|
4
|
+
id: "100",
|
5
|
+
expanded: true,
|
6
|
+
children: [
|
7
|
+
{
|
8
|
+
label: "People",
|
9
|
+
value: "People",
|
10
|
+
id: "101",
|
11
|
+
children: [
|
12
|
+
{
|
13
|
+
label: "Talent Acquisition",
|
14
|
+
value: "Talent Acquisition",
|
15
|
+
id: "102",
|
16
|
+
},
|
17
|
+
{
|
18
|
+
label: "Business Affairs",
|
19
|
+
value: "Business Affairs",
|
20
|
+
id: "103",
|
21
|
+
children: [
|
22
|
+
{
|
23
|
+
label: "Initiatives",
|
24
|
+
value: "Initiatives",
|
25
|
+
id: "104",
|
26
|
+
},
|
27
|
+
{
|
28
|
+
label: "Learning & Development",
|
29
|
+
value: "Learning & Development",
|
30
|
+
id: "105",
|
31
|
+
},
|
32
|
+
],
|
33
|
+
},
|
34
|
+
{
|
35
|
+
label: "People Experience",
|
36
|
+
value: "People Experience",
|
37
|
+
id: "106",
|
38
|
+
},
|
39
|
+
],
|
40
|
+
},
|
41
|
+
{
|
42
|
+
label: "Contact Center",
|
43
|
+
value: "Contact Center",
|
44
|
+
id: "107",
|
45
|
+
children: [
|
46
|
+
{
|
47
|
+
label: "Appointment Management",
|
48
|
+
value: "Appointment Management",
|
49
|
+
id: "108",
|
50
|
+
},
|
51
|
+
{
|
52
|
+
label: "Customer Service",
|
53
|
+
value: "Customer Service",
|
54
|
+
id: "109",
|
55
|
+
},
|
56
|
+
{
|
57
|
+
label: "Energy",
|
58
|
+
value: "Energy",
|
59
|
+
id: "110",
|
60
|
+
},
|
61
|
+
],
|
62
|
+
},
|
63
|
+
],
|
64
|
+
}] %>
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<%= pb_rails("multi_level_select", props: {
|
70
|
+
id: "multi-level-select-seelcted_ids",
|
71
|
+
name: "my_data_array_selected",
|
72
|
+
return_all_selected: true,
|
73
|
+
selected_ids:["110","102"],
|
74
|
+
tree_data: treeData,
|
75
|
+
}) %>
|
76
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import MultiLevelSelect from "../_multi_level_select";
|
3
|
+
|
4
|
+
const treeData = [
|
5
|
+
{
|
6
|
+
label: "Power Home Remodeling",
|
7
|
+
value: "Power Home Remodeling",
|
8
|
+
id: "powerhome1",
|
9
|
+
expanded: true,
|
10
|
+
children: [
|
11
|
+
{
|
12
|
+
label: "People",
|
13
|
+
value: "People",
|
14
|
+
id: "people1",
|
15
|
+
children: [
|
16
|
+
{
|
17
|
+
label: "Talent Acquisition",
|
18
|
+
value: "Talent Acquisition",
|
19
|
+
id: "talent1",
|
20
|
+
},
|
21
|
+
{
|
22
|
+
label: "Business Affairs",
|
23
|
+
value: "Business Affairs",
|
24
|
+
id: "business1",
|
25
|
+
children: [
|
26
|
+
{
|
27
|
+
label: "Initiatives",
|
28
|
+
value: "Initiatives",
|
29
|
+
id: "initiative1",
|
30
|
+
},
|
31
|
+
{
|
32
|
+
label: "Learning & Development",
|
33
|
+
value: "Learning & Development",
|
34
|
+
id: "development1",
|
35
|
+
},
|
36
|
+
],
|
37
|
+
},
|
38
|
+
{
|
39
|
+
label: "People Experience",
|
40
|
+
value: "People Experience",
|
41
|
+
id: "experience1",
|
42
|
+
},
|
43
|
+
],
|
44
|
+
},
|
45
|
+
{
|
46
|
+
label: "Contact Center",
|
47
|
+
value: "Contact Center",
|
48
|
+
id: "contact1",
|
49
|
+
children: [
|
50
|
+
{
|
51
|
+
label: "Appointment Management",
|
52
|
+
value: "Appointment Management",
|
53
|
+
id: "appointment1",
|
54
|
+
},
|
55
|
+
{
|
56
|
+
label: "Customer Service",
|
57
|
+
value: "Customer Service",
|
58
|
+
id: "customer1",
|
59
|
+
},
|
60
|
+
{
|
61
|
+
label: "Energy",
|
62
|
+
value: "Energy",
|
63
|
+
id: "energy1",
|
64
|
+
},
|
65
|
+
],
|
66
|
+
},
|
67
|
+
],
|
68
|
+
},
|
69
|
+
];
|
70
|
+
|
71
|
+
const MultiLevelSelectSelectedIds = (props) => {
|
72
|
+
return (
|
73
|
+
<div>
|
74
|
+
<MultiLevelSelect
|
75
|
+
id="multi-level-select-selected_ids"
|
76
|
+
onSelect={(selectedNodes) =>
|
77
|
+
console.log("Selected Items with Return All Selected Data", selectedNodes)
|
78
|
+
}
|
79
|
+
returnAllSelected
|
80
|
+
selectedIds={["energy1","talent1"]}
|
81
|
+
treeData={treeData}
|
82
|
+
{...props}
|
83
|
+
/>
|
84
|
+
</div>
|
85
|
+
);
|
86
|
+
};
|
87
|
+
|
88
|
+
export default MultiLevelSelectSelectedIds;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
`selected_ids` (Rails) / `selectedIds` (React) is an optional prop that accepts an array of ids that, if present, will mark the corresponding nodes on the treeData as checked on page load.
|
2
|
+
|
3
|
+
Items that include `checked:true` on the treeData itself will also be selected on page load, even without being passed to `selectedIds`.
|
4
|
+
|
5
|
+
When an item is marked as checked on page load by any means, the dropdown will expand to show the checked items for easier accessibility.
|
@@ -2,9 +2,11 @@ examples:
|
|
2
2
|
rails:
|
3
3
|
- multi_level_select_default: Default
|
4
4
|
- multi_level_select_return_all_selected: Return All Selected
|
5
|
+
- multi_level_select_selected_ids: Selected Ids
|
5
6
|
- multi_level_select_with_form: With Form
|
6
7
|
|
7
8
|
react:
|
8
9
|
- multi_level_select_default: Default
|
9
10
|
- multi_level_select_return_all_selected: Return All Selected
|
11
|
+
- multi_level_select_selected_ids: Selected Ids
|
10
12
|
|
@@ -1,2 +1,3 @@
|
|
1
1
|
export { default as MultiLevelSelectDefault } from './_multi_level_select_default.jsx'
|
2
|
-
export { default as MultiLevelSelectReturnAllSelected } from './_multi_level_select_return_all_selected.jsx'
|
2
|
+
export { default as MultiLevelSelectReturnAllSelected } from './_multi_level_select_return_all_selected.jsx'
|
3
|
+
export { default as MultiLevelSelectSelectedIds } from "./_multi_level_select_selected_ids.jsx"
|
@@ -9,6 +9,8 @@ module Playbook
|
|
9
9
|
default: []
|
10
10
|
prop :return_all_selected, type: Playbook::Props::Boolean,
|
11
11
|
default: false
|
12
|
+
prop :selected_ids, type: Playbook::Props::Array,
|
13
|
+
default: []
|
12
14
|
prop :input_display, type: Playbook::Props::Enum,
|
13
15
|
values: %w[pills none],
|
14
16
|
default: "pills"
|
@@ -24,6 +26,7 @@ module Playbook
|
|
24
26
|
name: name,
|
25
27
|
treeData: tree_data,
|
26
28
|
returnAllSelected: return_all_selected,
|
29
|
+
selectedIds: selected_ids,
|
27
30
|
}
|
28
31
|
end
|
29
32
|
end
|
@@ -8,10 +8,12 @@ import Caption from '../pb_caption/_caption'
|
|
8
8
|
|
9
9
|
type SectionSeparatorProps = {
|
10
10
|
aria?: { [key: string]: string; },
|
11
|
+
children?: React.ReactChild[] | React.ReactChild,
|
11
12
|
className?: string,
|
12
13
|
dark?: boolean,
|
13
14
|
data?: { [key: string]: string; },
|
14
15
|
id?: string,
|
16
|
+
lineStyle?: "solid" | "dashed",
|
15
17
|
orientation?: "horizontal" | "vertical",
|
16
18
|
text?: string,
|
17
19
|
variant?: "card" | "background",
|
@@ -20,9 +22,11 @@ type SectionSeparatorProps = {
|
|
20
22
|
const SectionSeparator = (props: SectionSeparatorProps) => {
|
21
23
|
const {
|
22
24
|
aria = {},
|
25
|
+
children,
|
23
26
|
className,
|
24
27
|
data = {},
|
25
28
|
id,
|
29
|
+
lineStyle = 'solid',
|
26
30
|
orientation = 'horizontal',
|
27
31
|
text,
|
28
32
|
dark = false,
|
@@ -30,21 +34,22 @@ const SectionSeparator = (props: SectionSeparatorProps) => {
|
|
30
34
|
} = props
|
31
35
|
const ariaProps = buildAriaProps(aria)
|
32
36
|
const dataProps = buildDataProps(data)
|
33
|
-
const classes = classnames(buildCss('pb_section_separator_kit', variant, orientation), globalProps(props), className)
|
37
|
+
const classes = classnames(buildCss('pb_section_separator_kit', variant, orientation, lineStyle === "dashed" ? lineStyle : ""), globalProps(props), className)
|
34
38
|
|
35
39
|
return (
|
36
40
|
|
37
41
|
<div
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
+
{...ariaProps}
|
43
|
+
{...dataProps}
|
44
|
+
className={classes}
|
45
|
+
id={id}
|
42
46
|
>
|
43
47
|
{
|
48
|
+
children && children ||
|
44
49
|
text && (
|
45
50
|
<span>
|
46
|
-
|
47
|
-
|
51
|
+
<Caption text={text} dark={dark} />
|
52
|
+
</span>
|
48
53
|
)
|
49
54
|
}
|
50
55
|
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= pb_rails("section_separator", props: { line_style: "dashed" }) do %>
|
2
|
+
<%= pb_rails("card", props: {
|
3
|
+
border_radius: "rounded",
|
4
|
+
justify_content: "center",
|
5
|
+
padding: "none"
|
6
|
+
}) do %>
|
7
|
+
<%= pb_rails("caption", props: {
|
8
|
+
text: "TODAY",
|
9
|
+
size: "xs",
|
10
|
+
padding_left: "xs",
|
11
|
+
padding_right: "xs"
|
12
|
+
}) %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { SectionSeparator, Card, Caption } from '../../'
|
3
|
+
|
4
|
+
const children = (
|
5
|
+
<Card
|
6
|
+
borderRadius="rounded"
|
7
|
+
justifyContent="center"
|
8
|
+
padding="none"
|
9
|
+
>
|
10
|
+
<Caption
|
11
|
+
paddingLeft="xs"
|
12
|
+
paddingRight="xs"
|
13
|
+
size="xs"
|
14
|
+
text="TODAY"
|
15
|
+
/>
|
16
|
+
</Card>
|
17
|
+
)
|
18
|
+
|
19
|
+
const SectionSeparatorChildren = (props) => {
|
20
|
+
return (
|
21
|
+
<SectionSeparator
|
22
|
+
{...props}
|
23
|
+
lineStyle='dashed'
|
24
|
+
>
|
25
|
+
{children}
|
26
|
+
</SectionSeparator>
|
27
|
+
)
|
28
|
+
}
|
29
|
+
|
30
|
+
export default SectionSeparatorChildren
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= pb_rails("section_separator", props: { line_style: "dashed" }) %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= pb_rails("section_separator", props: { text: "
|
1
|
+
<%= pb_rails("section_separator", props: { text: "Text Separator" }) %>
|
@@ -1,12 +1,15 @@
|
|
1
1
|
examples:
|
2
2
|
|
3
3
|
rails:
|
4
|
-
- section_separator_text: Text Separator
|
5
4
|
- section_separator_line: Line Separator
|
5
|
+
- section_separator_dashed: Dashed Separator
|
6
|
+
- section_separator_text: Text Separator
|
6
7
|
- section_separator_vertical: Vertical
|
7
|
-
|
8
|
+
- section_separator_children: Children
|
8
9
|
|
9
10
|
react:
|
10
|
-
- section_separator_text: Text Separator
|
11
11
|
- section_separator_line: Line Separator
|
12
|
+
- section_separator_dashed: Dashed Separator
|
13
|
+
- section_separator_text: Text Separator
|
12
14
|
- section_separator_vertical: Vertical
|
15
|
+
- section_separator_children: Children
|
@@ -1,3 +1,5 @@
|
|
1
1
|
export { default as SectionSeparatorLine } from './_section_separator_line.jsx'
|
2
2
|
export { default as SectionSeparatorText } from './_section_separator_text.jsx'
|
3
3
|
export { default as SectionSeparatorVertical } from './_section_separator_vertical.jsx'
|
4
|
+
export { default as SectionSeparatorDashed } from './_section_separator_dashed.jsx'
|
5
|
+
export { default as SectionSeparatorChildren } from './_section_separator_children.jsx'
|
@@ -4,9 +4,11 @@
|
|
4
4
|
data: object.data,
|
5
5
|
class: object.classname) do %>
|
6
6
|
<% if object.orientation === 'horizontal' %>
|
7
|
-
<% if
|
7
|
+
<% if content %>
|
8
|
+
<%= content %>
|
9
|
+
<% elsif object.text %>
|
8
10
|
<span><%= pb_rails("caption", props: { text: object.text }) %></span>
|
9
|
-
<%end%>
|
11
|
+
<% end %>
|
10
12
|
<% end %>
|
11
13
|
<% if object.orientation === 'vertical' %>
|
12
14
|
<%= pb_rails("flex", props: { orientation: "column"}) do %>
|
@@ -12,9 +12,12 @@ module Playbook
|
|
12
12
|
default: "horizontal"
|
13
13
|
prop :dark, type: Playbook::Props::Boolean,
|
14
14
|
default: false
|
15
|
+
prop :line_style, type: Playbook::Props::Enum,
|
16
|
+
values: %w[dashed solid],
|
17
|
+
default: "solid"
|
15
18
|
|
16
19
|
def classname
|
17
|
-
generate_classname("pb_section_separator_kit", variant, orientation)
|
20
|
+
generate_classname("pb_section_separator_kit", variant, orientation, line_style == "dashed" ? "dashed" : nil)
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
@@ -1,5 +1,6 @@
|
|
1
1
|
@import "../tokens/titles";
|
2
2
|
@import "../tokens/colors";
|
3
|
+
@import "../tokens/screen_sizes";
|
3
4
|
@import './title_mixin';
|
4
5
|
|
5
6
|
[class^=pb_title_kit]{
|
@@ -33,4 +34,21 @@
|
|
33
34
|
&[class*=_thin] {
|
34
35
|
@include pb_title_thin;
|
35
36
|
}
|
37
|
+
|
38
|
+
@each $size, $size_value in $breakpoints_grid {
|
39
|
+
@each $title_size_value in [1, 2, 3, 4] {
|
40
|
+
$min_size: map-get($size_value, "min");
|
41
|
+
$max_size: map-get($size_value, "max");
|
42
|
+
&[class*=_#{$size}_#{$title_size_value}] {
|
43
|
+
@include break_on($min_size, $max_size) {
|
44
|
+
@if $title_size_value == 1 { @include pb_title_1; }
|
45
|
+
@else if $title_size_value == 2 { @include pb_title_2; }
|
46
|
+
@else if $title_size_value == 3 { @include pb_title_3; }
|
47
|
+
@else if $title_size_value == 4 { @include pb_title_4; }
|
48
|
+
@include title_colors;
|
49
|
+
@if $title_size_value != 4 { @include pb_title_bold; }
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
36
54
|
}
|
@@ -3,6 +3,9 @@ import classnames from 'classnames'
|
|
3
3
|
import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
4
4
|
import { deprecatedProps, GlobalProps, globalProps } from '../utilities/globalProps'
|
5
5
|
|
6
|
+
type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4"
|
7
|
+
type SizeResponsiveType = {[key: string]: SizeType}
|
8
|
+
|
6
9
|
type TitleProps = {
|
7
10
|
aria?: {[key: string]: string},
|
8
11
|
bold?: boolean,
|
@@ -11,7 +14,7 @@ type TitleProps = {
|
|
11
14
|
color?: "default" | "light" | "lighter" | "success" | "error" | "link",
|
12
15
|
data?: {[key: string]: string},
|
13
16
|
id?: string,
|
14
|
-
size?:
|
17
|
+
size?: SizeType | SizeResponsiveType,
|
15
18
|
tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span",
|
16
19
|
text?: string,
|
17
20
|
variant?: null | "link",
|
@@ -36,9 +39,24 @@ const Title = (props: TitleProps): React.ReactElement => {
|
|
36
39
|
const ariaProps: {[key: string]: string | number} = buildAriaProps(aria)
|
37
40
|
const dataProps: {[key: string]: string | number} = buildDataProps(data)
|
38
41
|
const getBold = bold ? '' : 'thin'
|
42
|
+
const isSizeNumberOrString = typeof size === "number" || typeof size === "string"
|
43
|
+
|
44
|
+
const buildResponsiveSizeCss = () => {
|
45
|
+
let css = ''
|
46
|
+
|
47
|
+
if (!isSizeNumberOrString) {
|
48
|
+
Object.entries(size).forEach((sizeObj) => {
|
49
|
+
css += `pb_title_kit_${sizeObj[0]}_${sizeObj[1]} `
|
50
|
+
})
|
51
|
+
}
|
52
|
+
|
53
|
+
return css.trim()
|
54
|
+
}
|
55
|
+
|
39
56
|
const classes = classnames(
|
40
|
-
buildCss('pb_title_kit', `size_${size}
|
57
|
+
buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
|
41
58
|
globalProps(props),
|
59
|
+
buildResponsiveSizeCss(),
|
42
60
|
className
|
43
61
|
)
|
44
62
|
const Tag: React.ReactElement | any = `${tag}`
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= pb_rails("title", props: { text: "Responsive Title", tag: "h1", size: {xs: 3, sm: 2, md: 1} }) %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import Title from '../_title'
|
3
|
+
|
4
|
+
const TitleResponsive = (props) => {
|
5
|
+
return (
|
6
|
+
<>
|
7
|
+
<Title
|
8
|
+
size={{xs: "3", sm: "2", md: "1"}}
|
9
|
+
text="Responsive Title"
|
10
|
+
{...props}
|
11
|
+
/>
|
12
|
+
</>
|
13
|
+
)
|
14
|
+
}
|
15
|
+
|
16
|
+
export default TitleResponsive
|
@@ -0,0 +1 @@
|
|
1
|
+
The `size` prop supports responsive sizes. To use them, pass an object to the size prop containing your size values relative to responsive break points (show code below). To test this here, resize your browser window to responsively change this Title's size.
|
@@ -3,8 +3,10 @@ examples:
|
|
3
3
|
- title_default: Default UI
|
4
4
|
- title_light_weight: Light Weight UI
|
5
5
|
- title_colors: Colors
|
6
|
+
- title_responsive: Responsive
|
6
7
|
|
7
8
|
react:
|
8
9
|
- title_default: Default UI
|
9
10
|
- title_light_weight: Light Weight UI
|
10
11
|
- title_colors: Colors
|
12
|
+
- title_responsive: Responsive
|
@@ -6,9 +6,7 @@ module Playbook
|
|
6
6
|
prop :color, type: Playbook::Props::Enum,
|
7
7
|
values: [nil, "default", "light", "lighter", "success", "error", "link"],
|
8
8
|
default: nil
|
9
|
-
prop :size,
|
10
|
-
values: [1, 2, 3, 4],
|
11
|
-
default: 3
|
9
|
+
prop :size, default: 3
|
12
10
|
prop :tag, type: Playbook::Props::Enum,
|
13
11
|
values: %w[h1 h2 h3 h4 h5 h6 p div span],
|
14
12
|
default: "h3"
|
@@ -20,12 +18,31 @@ module Playbook
|
|
20
18
|
prop :bold, type: Playbook::Props::Boolean, default: true
|
21
19
|
|
22
20
|
def classname
|
23
|
-
|
21
|
+
if is_size_responsive
|
22
|
+
generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
|
23
|
+
else
|
24
|
+
generate_classname("pb_title_kit", size, variant, color, is_bold)
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
28
|
def is_bold
|
27
29
|
bold ? nil : "thin"
|
28
30
|
end
|
31
|
+
|
32
|
+
def is_size_responsive
|
33
|
+
try(:size).is_a?(::Hash)
|
34
|
+
end
|
35
|
+
|
36
|
+
def generate_responsive_size_classname
|
37
|
+
css = ""
|
38
|
+
if is_size_responsive
|
39
|
+
size.each do |key, value|
|
40
|
+
css += " pb_title_kit_#{key}_#{value}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
css unless css.blank?
|
45
|
+
end
|
29
46
|
end
|
30
47
|
end
|
31
48
|
end
|