playbook_ui 4.11.0.pre.alpha.pre.2 → 4.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/playbook/pages_controller.rb +1 -1
- data/app/helpers/playbook/pb_doc_helper.rb +55 -7
- data/app/pb_kits/playbook/_playbook.scss +4 -1
- data/app/pb_kits/playbook/data/menu.yml +3 -0
- data/app/pb_kits/playbook/index.js +3 -0
- data/app/pb_kits/playbook/packs/examples.js +6 -0
- data/app/pb_kits/playbook/packs/site_styles/docs/_flex_examples.scss +8 -5
- data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -0
- data/app/pb_kits/playbook/pb_card/_card.html.erb +2 -1
- data/app/pb_kits/playbook/pb_card/_card.jsx +3 -0
- data/app/pb_kits/playbook/pb_card/_card.scss +2 -0
- data/app/pb_kits/playbook/pb_card/card.rb +8 -1
- data/app/pb_kits/playbook/pb_card/docs/_card_content.html.erb +1 -1
- data/app/pb_kits/playbook/pb_card/docs/_card_dark.html.erb +3 -0
- data/app/pb_kits/playbook/pb_card/docs/_card_dark.jsx +12 -0
- data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_filter/_filter.jsx +192 -56
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +2 -1
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +47 -5
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.jsx +52 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +40 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_only.jsx +48 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_single.jsx +51 -0
- data/app/pb_kits/playbook/pb_filter/docs/_sort_only.html.erb +18 -0
- data/app/pb_kits/playbook/pb_filter/docs/_sort_only.jsx +48 -0
- data/app/pb_kits/playbook/pb_filter/docs/example.yml +6 -0
- data/app/pb_kits/playbook/pb_filter/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_filter/filter.rb +12 -1
- data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +37 -26
- data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +13 -9
- data/app/pb_kits/playbook/pb_flex/docs/_flex_default.html.erb +19 -15
- data/app/pb_kits/playbook/pb_flex/docs/_flex_default.jsx +46 -45
- data/app/pb_kits/playbook/pb_flex/docs/_flex_horizontal.html.erb +54 -50
- data/app/pb_kits/playbook/pb_flex/docs/_flex_horizontal.jsx +172 -171
- data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.html.erb +19 -15
- data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.jsx +48 -47
- data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.html.erb +19 -15
- data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.jsx +51 -50
- data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.html.erb +27 -23
- data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.jsx +93 -92
- data/app/pb_kits/playbook/pb_flex/docs/_flex_vertical.html.erb +68 -64
- data/app/pb_kits/playbook/pb_flex/docs/_flex_vertical.jsx +192 -191
- data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.html.erb +31 -27
- data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.jsx +83 -82
- data/app/pb_kits/playbook/pb_kit/dateTime.js +23 -1
- data/app/pb_kits/playbook/pb_kit/pb_date_time.rb +17 -0
- data/app/pb_kits/playbook/pb_logistic/_logistic.html.erb +19 -0
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +96 -0
- data/app/pb_kits/playbook/pb_logistic/_logistic.scss +7 -0
- data/app/pb_kits/playbook/pb_logistic/docs/_logistic_dark.html.erb +27 -0
- data/app/pb_kits/playbook/pb_logistic/docs/_logistic_dark.jsx +39 -0
- data/app/pb_kits/playbook/pb_logistic/docs/_logistic_default.html.erb +24 -0
- data/app/pb_kits/playbook/pb_logistic/docs/_logistic_default.jsx +35 -0
- data/app/pb_kits/playbook/pb_logistic/docs/example.yml +11 -0
- data/app/pb_kits/playbook/pb_logistic/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_logistic/logistic.rb +31 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +8 -2
- data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +9 -1
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.html.erb +16 -0
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.jsx +134 -0
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +33 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_dark.html.erb +72 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_dark.jsx +81 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.html.erb +64 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.jsx +73 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/example.yml +11 -0
- data/app/pb_kits/playbook/pb_time_range_inline/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +72 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +2 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +30 -9
- data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_with_context.html.erb → _typeahead_with_context_dark.html.erb} +2 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_typeahead/index.js +6 -4
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +10 -2
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.html.erb +7 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.jsx +66 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +11 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.html.erb +9 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.jsx +48 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_dark.html.erb +1 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_dark.jsx +14 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_day_only.html.erb +1 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_day_only.jsx +14 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_default.html.erb +3 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_default.jsx +14 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/example.yml +15 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.rb +61 -0
- data/app/pb_kits/playbook/tokens/_colors.scss +2 -2
- data/app/views/layouts/playbook/_sidebar.html.erb +26 -10
- data/app/views/playbook/pages/kit_category_show.html.erb +14 -0
- data/app/views/playbook/pages/kit_show.html.erb +33 -0
- data/app/views/playbook/pages/kits.html.erb +12 -0
- data/lib/playbook/version.rb +1 -1
- metadata +52 -24
- data/app/views/playbook/pages/kit_category_show.html.slim +0 -10
- data/app/views/playbook/pages/kit_show.html.slim +0 -23
- data/app/views/playbook/pages/kits.html.slim +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5724cfc73bfc520ae0f5bbb89002649cc2c28eb1161692f1e3b45de3bc417abc
|
4
|
+
data.tar.gz: d93b64cd6811f91f8eff71df0acdbed3d32da9e756e78003ce4f578f6822d1d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 978b10162d35e872ca37c0c4572668c3286908fc03b0929a7604ea08a457eb268de8401213192aa96158e4463a1bab032fdaee3f7dbf786b831fcdc846670e7f
|
7
|
+
data.tar.gz: 61b4a2ee3e61c9f223fccb8623272fd74f5864b8facafb04672c50a4b8b9f17ba31c6db702852c2527e90f07129af62d95c0f34c4530059dff3c2b5d3bc1b859
|
@@ -23,7 +23,7 @@ module Playbook
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def get_kit_description(
|
26
|
+
def get_kit_description(_kit)
|
27
27
|
filename = "#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit}/docs/_description.md"
|
28
28
|
read_file(filename)
|
29
29
|
end
|
@@ -47,7 +47,7 @@ module Playbook
|
|
47
47
|
|
48
48
|
def pb_kits(type: "rails")
|
49
49
|
display_kits = []
|
50
|
-
kits = get_kits
|
50
|
+
kits = get_kits
|
51
51
|
kits.each do |kit|
|
52
52
|
if kit.is_a?(Hash)
|
53
53
|
nav_hash_array(kit).each do |sub_kit|
|
@@ -62,7 +62,7 @@ module Playbook
|
|
62
62
|
|
63
63
|
def get_kits
|
64
64
|
menu = YAML.load_file("#{Playbook::Engine.root}/app/pb_kits/playbook/data/menu.yml")
|
65
|
-
|
65
|
+
menu["kits"]
|
66
66
|
end
|
67
67
|
|
68
68
|
def pb_category_kits(category_kits: [], type: "rails")
|
@@ -74,7 +74,7 @@ module Playbook
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def render_pb_doc_kit(kit, type, code = true)
|
77
|
-
title = render_clickable_title(kit)
|
77
|
+
title = render_clickable_title(kit, type)
|
78
78
|
ui = raw("<div class='pb--docItem-ui'>
|
79
79
|
#{pb_kit(kit: kit, type: type, show_code: code)}</div>")
|
80
80
|
title + ui
|
@@ -98,6 +98,50 @@ module Playbook
|
|
98
98
|
link.first.last
|
99
99
|
end
|
100
100
|
|
101
|
+
def all_link(type)
|
102
|
+
type == "react" ? kits_path("", type: "react") : kits_path
|
103
|
+
end
|
104
|
+
|
105
|
+
def category_link(type, link)
|
106
|
+
if type == "react"
|
107
|
+
kit_category_show_path(nav_hash_category(link), type: "react")
|
108
|
+
else
|
109
|
+
kit_category_show_path(nav_hash_category(link), type: "rails")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def sub_category_link(type, link)
|
114
|
+
if type == "react"
|
115
|
+
kit_show_reacts_path(link)
|
116
|
+
else
|
117
|
+
kit_show_path(link)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def kit_link(type, link)
|
122
|
+
if type == "react"
|
123
|
+
kit_show_reacts_path(link)
|
124
|
+
else
|
125
|
+
kit_show_path(link)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def all_active(controller_name, action_name)
|
130
|
+
(controller_name == "pages" && action_name == "kits")
|
131
|
+
end
|
132
|
+
|
133
|
+
def category_active(category, link)
|
134
|
+
(!category.nil? && category == nav_hash_category(link))
|
135
|
+
end
|
136
|
+
|
137
|
+
def kit_active(kit, link)
|
138
|
+
(!kit.nil? && kit == link)
|
139
|
+
end
|
140
|
+
|
141
|
+
def sub_category_active(kit, link)
|
142
|
+
(!kit.nil? && @kit == link)
|
143
|
+
end
|
144
|
+
|
101
145
|
private
|
102
146
|
|
103
147
|
def get_kit_examples(kit, type)
|
@@ -118,14 +162,18 @@ module Playbook
|
|
118
162
|
"Playbook::Pb#{folder.camelize}::#{item.camelize}".safe_constantize
|
119
163
|
end
|
120
164
|
|
121
|
-
def render_clickable_title(kit)
|
165
|
+
def render_clickable_title(kit, type)
|
122
166
|
url = "#"
|
123
167
|
begin
|
124
|
-
url =
|
168
|
+
url = if type == "react"
|
169
|
+
kit_show_reacts_path(kit)
|
170
|
+
else
|
171
|
+
kit_show_path(kit)
|
172
|
+
end
|
125
173
|
rescue
|
126
174
|
puts "Kit Path Not Avaliable"
|
127
175
|
end
|
128
|
-
|
176
|
+
render inline: "<a href='#{url}'>#{pb_rails(:title, props: { text: pb_kit_title(kit), tag: 'h3', size: 2 })}</a>"
|
129
177
|
end
|
130
178
|
end
|
131
179
|
end
|
@@ -17,6 +17,7 @@
|
|
17
17
|
@import 'pb_date_stacked/date_stacked';
|
18
18
|
@import 'pb_date_year_stacked/date_year_stacked';
|
19
19
|
@import 'pb_distribution_bar/distribution_bar';
|
20
|
+
@import 'pb_filter/filter';
|
20
21
|
@import 'pb_fixed_confirmation_toast/fixed_confirmation_toast';
|
21
22
|
@import 'pb_form/form';
|
22
23
|
@import 'pb_form_pill/form_pill';
|
@@ -35,6 +36,7 @@
|
|
35
36
|
@import 'pb_line_graph/line_graph';
|
36
37
|
@import 'pb_list/list';
|
37
38
|
@import 'pb_loading_inline/loading_inline';
|
39
|
+
@import 'pb_logistic/logistic';
|
38
40
|
@import 'pb_message/message';
|
39
41
|
@import 'pb_multiple_users/multiple_users';
|
40
42
|
@import 'pb_multiple_users_stacked/multiple_users_stacked';
|
@@ -58,6 +60,7 @@
|
|
58
60
|
@import 'pb_text_input/text_input';
|
59
61
|
@import 'pb_textarea/textarea';
|
60
62
|
@import 'pb_time/time';
|
63
|
+
@import 'pb_time_range_inline/time_range_inline';
|
61
64
|
@import 'pb_timestamp/timestamp';
|
62
65
|
@import 'pb_title_count/title_count';
|
63
66
|
@import 'pb_title_detail/title_detail';
|
@@ -65,4 +68,4 @@
|
|
65
68
|
@import 'pb_typeahead/typeahead';
|
66
69
|
@import 'pb_user/user';
|
67
70
|
@import 'pb_user_badge/user_badge';
|
68
|
-
@import '
|
71
|
+
@import 'pb_weekday_stacked/weekday_stacked';
|
@@ -35,6 +35,7 @@ kits:
|
|
35
35
|
- layout
|
36
36
|
- list
|
37
37
|
- loading_inline
|
38
|
+
- logistic
|
38
39
|
- multiple_users
|
39
40
|
- multiple_users_stacked
|
40
41
|
- nav
|
@@ -70,7 +71,9 @@ kits:
|
|
70
71
|
- stat_value
|
71
72
|
- time
|
72
73
|
- timestamp
|
74
|
+
- time_range_inline
|
73
75
|
- title_count
|
74
76
|
- title_detail
|
77
|
+
- weekday_stacked
|
75
78
|
- user
|
76
79
|
- user_badge
|
@@ -37,6 +37,7 @@ export LineGraph from './pb_line_graph/_line_graph.jsx'
|
|
37
37
|
export List from './pb_list/_list.jsx'
|
38
38
|
export ListItem from './pb_list/_list_item.jsx'
|
39
39
|
export LoadingInline from './pb_loading_inline/_loading_inline.jsx'
|
40
|
+
export Logistic from './pb_logistic/_logistic.jsx'
|
40
41
|
export Message from './pb_message/_message.jsx'
|
41
42
|
export MultipleUsers from './pb_multiple_users/_multiple_users.jsx'
|
42
43
|
export MultipleUsersStacked from './pb_multiple_users_stacked/_multiple_users_stacked.jsx'
|
@@ -62,11 +63,13 @@ export Textarea from './pb_textarea/_textarea.jsx'
|
|
62
63
|
export TextInput from './pb_text_input/_text_input.jsx'
|
63
64
|
export Time from './pb_time/_time.jsx'
|
64
65
|
export TimeStamp from './pb_timestamp/_timestamp.jsx'
|
66
|
+
export TimeRangeInline from './pb_time_range_inline/_time_range_inline.jsx'
|
65
67
|
export Title from './pb_title/_title.jsx'
|
66
68
|
export TitleCount from './pb_title_count/_title_count.jsx'
|
67
69
|
export Toggle from './pb_toggle/_toggle.jsx'
|
68
70
|
export User from './pb_user/_user.jsx'
|
69
71
|
export UserBadge from './pb_user_badge/_user_badge.jsx'
|
72
|
+
export WeekdayStacked from './pb_weekday_stacked/_weekday_stacked.jsx'
|
70
73
|
|
71
74
|
// Dashboard Settings
|
72
75
|
export { commonSettings, dataColors } from './pb_dashboard/commonSettings'
|
@@ -49,6 +49,7 @@ import * as Legend from 'pb_legend/docs'
|
|
49
49
|
import * as LineGraph from 'pb_line_graph/docs'
|
50
50
|
import * as List from 'pb_list/docs'
|
51
51
|
import * as LoadingInline from 'pb_loading_inline/docs'
|
52
|
+
import * as Logistic from 'pb_logistic/docs'
|
52
53
|
import * as Message from 'pb_message/docs'
|
53
54
|
import * as MultipleUsers from 'pb_multiple_users/docs'
|
54
55
|
import * as MultipleUsersStacked from 'pb_multiple_users_stacked/docs'
|
@@ -73,12 +74,14 @@ import * as Textarea from 'pb_textarea/docs'
|
|
73
74
|
import * as TextInput from 'pb_text_input/docs'
|
74
75
|
import * as Time from 'pb_time/docs'
|
75
76
|
import * as Timestamp from 'pb_timestamp/docs'
|
77
|
+
import * as TimeRangeInline from 'pb_time_range_inline/docs'
|
76
78
|
import * as Title from 'pb_title/docs'
|
77
79
|
import * as TitleCount from 'pb_title_count/docs'
|
78
80
|
import * as TitleDetail from 'pb_title_detail/docs'
|
79
81
|
import * as Toggle from 'pb_toggle/docs'
|
80
82
|
import * as User from 'pb_user/docs'
|
81
83
|
import * as UserBadge from 'pb_user_badge/docs'
|
84
|
+
import * as WeekdayStacked from 'pb_weekday_stacked/docs'
|
82
85
|
|
83
86
|
WebpackerReact.setup({
|
84
87
|
...Avatar,
|
@@ -117,6 +120,7 @@ WebpackerReact.setup({
|
|
117
120
|
...LineGraph,
|
118
121
|
...List,
|
119
122
|
...LoadingInline,
|
123
|
+
...Logistic,
|
120
124
|
...Message,
|
121
125
|
...MultipleUsers,
|
122
126
|
...MultipleUsersStacked,
|
@@ -141,10 +145,12 @@ WebpackerReact.setup({
|
|
141
145
|
...TextInput,
|
142
146
|
...Time,
|
143
147
|
...Timestamp,
|
148
|
+
...TimeRangeInline,
|
144
149
|
...Title,
|
145
150
|
...TitleCount,
|
146
151
|
...TitleDetail,
|
147
152
|
...Toggle,
|
148
153
|
...User,
|
149
154
|
...UserBadge,
|
155
|
+
...WeekdayStacked,
|
150
156
|
})
|
@@ -1,12 +1,15 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
1
|
+
.flex-doc-example {
|
2
|
+
overflow: auto;
|
3
|
+
[class^=pb_flex_kit] {
|
4
|
+
background: #F3F7FB;
|
5
|
+
}
|
4
6
|
.flex-item, [class^=pb_flex_item_kit] {
|
5
7
|
background: #E4E8F0;
|
6
8
|
min-width: 30px;
|
7
9
|
min-height: 30px;
|
8
10
|
color: #242B42;
|
9
11
|
}
|
10
|
-
|
11
|
-
|
12
|
+
.tall {
|
13
|
+
min-height: 200px;
|
14
|
+
}
|
12
15
|
}
|
@@ -2,7 +2,8 @@
|
|
2
2
|
id: object.id,
|
3
3
|
data: object.data,
|
4
4
|
class: object.classname,
|
5
|
-
aria: object.aria
|
5
|
+
aria: object.aria,
|
6
|
+
dark: object.dark) do %>
|
6
7
|
<% if object.children %>
|
7
8
|
<%= pb_rails("card/card_body", props: { padding: object.padding, children: object.children }) %>
|
8
9
|
<% end %>
|
@@ -15,11 +15,13 @@ type CardPropTypes = {
|
|
15
15
|
padding?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl',
|
16
16
|
selected?: Boolean,
|
17
17
|
shadow?: 'none' | 'shallow' | 'default' | 'deep' | 'deeper' | 'deepest',
|
18
|
+
dark?: Boolean,
|
18
19
|
}
|
19
20
|
|
20
21
|
const Card = ({
|
21
22
|
children,
|
22
23
|
className,
|
24
|
+
dark = false,
|
23
25
|
highlight = {},
|
24
26
|
padding = 'md',
|
25
27
|
selected = false,
|
@@ -27,6 +29,7 @@ const Card = ({
|
|
27
29
|
}: CardPropTypes) => {
|
28
30
|
const bodyCSS = buildCss('pb_card_body_kit', padding)
|
29
31
|
const cardCss = buildCss('pb_card_kit', `shadow_${shadow}`, {
|
32
|
+
'dark': dark,
|
30
33
|
selected,
|
31
34
|
deselected: !selected,
|
32
35
|
[`highlight_${highlight.position}`]: highlight.position,
|
@@ -16,13 +16,16 @@ module Playbook
|
|
16
16
|
default: "none"
|
17
17
|
prop :highlight, type: Playbook::Props::Hash,
|
18
18
|
default: {}
|
19
|
+
prop :dark, type: Playbook::Props::Boolean,
|
20
|
+
default: false
|
19
21
|
|
20
22
|
def classname
|
21
23
|
generate_classname("pb_card_kit",
|
22
24
|
selected_class,
|
23
25
|
shadow_class,
|
24
26
|
highlight_position_class,
|
25
|
-
highlight_color_class
|
27
|
+
highlight_color_class,
|
28
|
+
dark_class)
|
26
29
|
end
|
27
30
|
|
28
31
|
private
|
@@ -42,6 +45,10 @@ module Playbook
|
|
42
45
|
def highlight_color_class
|
43
46
|
highlight[:color].present? ? "highlight_#{highlight[:color]}" : nil
|
44
47
|
end
|
48
|
+
|
49
|
+
def dark_class
|
50
|
+
dark ? "dark" : nil
|
51
|
+
end
|
45
52
|
end
|
46
53
|
end
|
47
54
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
examples:
|
2
2
|
rails:
|
3
3
|
- card_light: Default
|
4
|
+
- card_dark: Dark Cards
|
4
5
|
- card_highlight: Highlight Cards
|
5
6
|
- card_selected: Selected
|
6
7
|
- card_padding: Padding Size
|
@@ -9,6 +10,7 @@ examples:
|
|
9
10
|
- card_separator: Separator Card
|
10
11
|
react:
|
11
12
|
- card_light: Default
|
13
|
+
- card_dark: Dark Cards
|
12
14
|
- card_highlight: Highlight Cards
|
13
15
|
- card_selected: Selected
|
14
16
|
- card_padding: Padding Size
|
@@ -5,3 +5,4 @@ export { default as CardPadding } from './_card_padding.jsx'
|
|
5
5
|
export { default as CardShadow } from './_card_shadow.jsx'
|
6
6
|
export { default as CardContent } from './_card_content.jsx'
|
7
7
|
export { default as CardSeparator } from './_card_separator.jsx'
|
8
|
+
export { default as CardDark } from './_card_dark.jsx'
|
@@ -1,56 +1,196 @@
|
|
1
1
|
/* @flow */
|
2
2
|
|
3
|
-
import React from 'react'
|
4
|
-
import {
|
3
|
+
import React, { useState } from 'react'
|
4
|
+
import {
|
5
|
+
Button,
|
6
|
+
Caption,
|
7
|
+
Card,
|
8
|
+
CircleIconButton,
|
9
|
+
Flex,
|
10
|
+
Icon,
|
11
|
+
List,
|
12
|
+
ListItem,
|
13
|
+
PbReactPopover,
|
14
|
+
SectionSeparator,
|
15
|
+
Title,
|
16
|
+
TitleCount,
|
17
|
+
} from '../'
|
5
18
|
|
6
19
|
type FilterProps = {
|
20
|
+
background?: Boolean,
|
7
21
|
className?: String,
|
8
22
|
data?: String,
|
9
23
|
id?: String,
|
10
24
|
children?: React.Node,
|
11
25
|
filters?: Array<Hash>,
|
12
|
-
|
26
|
+
results?: Number,
|
27
|
+
sortMenu?: Array<Hash>,
|
28
|
+
template?: 'default' | 'filter_only' | 'sort_only' | 'single'
|
13
29
|
}
|
14
30
|
|
15
31
|
const Filter = ({
|
32
|
+
background = true,
|
16
33
|
className = 'pb_filter_kit',
|
17
34
|
data,
|
35
|
+
filters = [{}],
|
18
36
|
id,
|
19
37
|
children,
|
20
|
-
|
21
|
-
|
38
|
+
results,
|
39
|
+
sortMenu = null,
|
40
|
+
template = 'default',
|
22
41
|
}: FilterProps) => {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
42
|
+
const [showFilterOptions, setShowFilterOptions] = useState(false)
|
43
|
+
const [showSortOptions, setShowSortOptions] = useState(false)
|
44
|
+
const handleToggleFilters = () => {
|
45
|
+
setShowFilterOptions(!showFilterOptions)
|
46
|
+
}
|
47
|
+
const handleToggleSort = () => {
|
48
|
+
setShowSortOptions(!showSortOptions)
|
49
|
+
}
|
50
|
+
|
51
|
+
const filterButton = (
|
52
|
+
<CircleIconButton
|
53
|
+
icon="filter"
|
54
|
+
id="filter"
|
55
|
+
onClick={handleToggleFilters}
|
56
|
+
text="filter"
|
57
|
+
variant="secondary"
|
58
|
+
/>
|
59
|
+
)
|
60
|
+
|
61
|
+
const Filters = () => (
|
62
|
+
<If condition={template != 'sort_only' && filters != null}>
|
63
|
+
<PbReactPopover
|
64
|
+
closeOnClick="outside"
|
65
|
+
offset
|
66
|
+
placement="bottom"
|
67
|
+
reference={filterButton}
|
68
|
+
show={showFilterOptions}
|
69
|
+
>
|
70
|
+
<div className="pb-form">
|
71
|
+
{children}
|
72
|
+
</div>
|
73
|
+
|
74
|
+
</PbReactPopover>
|
75
|
+
<div className="maskContainer">
|
76
|
+
<div className="filters">
|
77
|
+
<div className="left_gradient" />
|
78
|
+
{ filters.map((item, index) => (
|
79
|
+
<div
|
80
|
+
className="filter"
|
81
|
+
key={index}
|
82
|
+
>
|
83
|
+
<Caption text={item.name} />
|
84
|
+
<Title
|
85
|
+
size={4}
|
86
|
+
tag="h4"
|
87
|
+
text={item.value}
|
88
|
+
/>
|
89
|
+
</div>
|
90
|
+
))}
|
91
|
+
<div className="right_gradient" />
|
92
|
+
</div>
|
93
|
+
</div>
|
94
|
+
</If>
|
95
|
+
)
|
96
|
+
|
97
|
+
const activeSort = () => {
|
98
|
+
return (
|
99
|
+
sortMenu.map((item) => (
|
100
|
+
item.active ? item.item : null
|
101
|
+
))
|
102
|
+
)
|
103
|
+
}
|
104
|
+
|
105
|
+
const activeDirection = () => {
|
106
|
+
let direction
|
107
|
+
sortMenu.map((item) => {
|
108
|
+
item.active ? direction = item.direction : null
|
109
|
+
})
|
110
|
+
const icon = direction == 'asc' ? 'sort-amount-up' : 'sort-amount-down'
|
111
|
+
return icon
|
112
|
+
}
|
113
|
+
|
114
|
+
const sortButton = (
|
115
|
+
<If condition={sortMenu != null}>
|
116
|
+
<Button
|
117
|
+
id="sort-button"
|
118
|
+
onClick={handleToggleSort}
|
119
|
+
variant="link"
|
120
|
+
>
|
121
|
+
{activeSort()}
|
122
|
+
<Icon
|
123
|
+
fixedWidth
|
124
|
+
icon={`${activeDirection()}`}
|
125
|
+
/>
|
126
|
+
</Button>
|
127
|
+
</If>
|
128
|
+
)
|
129
|
+
const Results = () => {
|
130
|
+
const resultsText = results > 1 ? 'Results' : 'Result'
|
131
|
+
return (
|
132
|
+
<If condition={results != undefined}>
|
133
|
+
<If condition={template != 'default'}>
|
134
|
+
<Caption
|
135
|
+
className="filter-results"
|
136
|
+
size="xs"
|
137
|
+
text={`${results} ${resultsText}`}
|
138
|
+
/>
|
139
|
+
<Else />
|
140
|
+
<TitleCount
|
141
|
+
align="center"
|
142
|
+
count={results}
|
143
|
+
title={`${resultsText}:`}
|
38
144
|
/>
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
145
|
+
</If>
|
146
|
+
</If>
|
147
|
+
)
|
148
|
+
}
|
149
|
+
const Sort = () => (
|
150
|
+
<If condition={template != 'filter_only'}>
|
151
|
+
<Flex
|
152
|
+
orientation="row"
|
153
|
+
vertical="center"
|
154
|
+
>
|
155
|
+
<If condition={template == 'default'}>
|
156
|
+
<Caption text="sort by:" />
|
157
|
+
</If>
|
158
|
+
<PbReactPopover
|
159
|
+
closeOnClick="outside"
|
160
|
+
offset
|
161
|
+
placement="bottom"
|
162
|
+
reference={sortButton}
|
163
|
+
show={showSortOptions}
|
164
|
+
>
|
165
|
+
<List>
|
166
|
+
{sortMenu ? sortMenu.map((item) => (
|
167
|
+
<ListItem key={item.item}>
|
168
|
+
<Button
|
169
|
+
link={item.link}
|
170
|
+
text={item.item}
|
171
|
+
variant="link"
|
48
172
|
/>
|
49
|
-
</
|
50
|
-
|
51
|
-
|
52
|
-
</
|
53
|
-
</
|
173
|
+
</ListItem>
|
174
|
+
)) : null}
|
175
|
+
|
176
|
+
</List>
|
177
|
+
</PbReactPopover>
|
178
|
+
</Flex>
|
179
|
+
</If>
|
180
|
+
)
|
181
|
+
const Core = () => (
|
182
|
+
<>
|
183
|
+
<Flex
|
184
|
+
orientation="row"
|
185
|
+
vertical="center"
|
186
|
+
>
|
187
|
+
<Filters />
|
188
|
+
<If condition={template != 'default'}>
|
189
|
+
<Results />
|
190
|
+
<Sort />
|
191
|
+
</If>
|
192
|
+
</Flex>
|
193
|
+
<If condition={template == 'default'}>
|
54
194
|
<SectionSeparator />
|
55
195
|
<Flex
|
56
196
|
className="filter-bottom"
|
@@ -58,29 +198,25 @@ const Filter = ({
|
|
58
198
|
spacing="between"
|
59
199
|
vertical="center"
|
60
200
|
>
|
61
|
-
<
|
62
|
-
|
63
|
-
count={25}
|
64
|
-
title="Results"
|
65
|
-
/>
|
66
|
-
<Flex
|
67
|
-
orientation="row"
|
68
|
-
vertical="center"
|
69
|
-
>
|
70
|
-
<Caption text="sort by:" />
|
71
|
-
<Button
|
72
|
-
id="sort-button"
|
73
|
-
text={`${sortMenu[0].item}`}
|
74
|
-
variant="link"
|
75
|
-
>
|
76
|
-
<Icon />
|
77
|
-
</Button>
|
78
|
-
</Flex>
|
201
|
+
<Results />
|
202
|
+
<Sort />
|
79
203
|
</Flex>
|
80
|
-
</
|
81
|
-
|
82
|
-
|
83
|
-
|
204
|
+
</If>
|
205
|
+
</>
|
206
|
+
)
|
207
|
+
return (
|
208
|
+
<div
|
209
|
+
className={className}
|
210
|
+
data={data}
|
211
|
+
id={id}
|
212
|
+
>
|
213
|
+
<If condition={background}>
|
214
|
+
<Card padding="none">
|
215
|
+
<Core />
|
216
|
+
</Card>
|
217
|
+
<Else />
|
218
|
+
<Core />
|
219
|
+
</If>
|
84
220
|
</div>
|
85
221
|
)
|
86
222
|
}
|