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.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/playbook/pages_controller.rb +1 -1
  3. data/app/helpers/playbook/pb_doc_helper.rb +55 -7
  4. data/app/pb_kits/playbook/_playbook.scss +4 -1
  5. data/app/pb_kits/playbook/data/menu.yml +3 -0
  6. data/app/pb_kits/playbook/index.js +3 -0
  7. data/app/pb_kits/playbook/packs/examples.js +6 -0
  8. data/app/pb_kits/playbook/packs/site_styles/docs/_flex_examples.scss +8 -5
  9. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -0
  10. data/app/pb_kits/playbook/pb_card/_card.html.erb +2 -1
  11. data/app/pb_kits/playbook/pb_card/_card.jsx +3 -0
  12. data/app/pb_kits/playbook/pb_card/_card.scss +2 -0
  13. data/app/pb_kits/playbook/pb_card/card.rb +8 -1
  14. data/app/pb_kits/playbook/pb_card/docs/_card_content.html.erb +1 -1
  15. data/app/pb_kits/playbook/pb_card/docs/_card_dark.html.erb +3 -0
  16. data/app/pb_kits/playbook/pb_card/docs/_card_dark.jsx +12 -0
  17. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  18. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  19. data/app/pb_kits/playbook/pb_filter/_filter.jsx +192 -56
  20. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +2 -1
  21. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +47 -5
  22. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +1 -1
  23. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.jsx +52 -0
  24. data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +40 -0
  25. data/app/pb_kits/playbook/pb_filter/docs/_filter_only.jsx +48 -0
  26. data/app/pb_kits/playbook/pb_filter/docs/_filter_single.jsx +51 -0
  27. data/app/pb_kits/playbook/pb_filter/docs/_sort_only.html.erb +18 -0
  28. data/app/pb_kits/playbook/pb_filter/docs/_sort_only.jsx +48 -0
  29. data/app/pb_kits/playbook/pb_filter/docs/example.yml +6 -0
  30. data/app/pb_kits/playbook/pb_filter/docs/index.js +4 -0
  31. data/app/pb_kits/playbook/pb_filter/filter.rb +12 -1
  32. data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +37 -26
  33. data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +13 -9
  34. data/app/pb_kits/playbook/pb_flex/docs/_flex_default.html.erb +19 -15
  35. data/app/pb_kits/playbook/pb_flex/docs/_flex_default.jsx +46 -45
  36. data/app/pb_kits/playbook/pb_flex/docs/_flex_horizontal.html.erb +54 -50
  37. data/app/pb_kits/playbook/pb_flex/docs/_flex_horizontal.jsx +172 -171
  38. data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.html.erb +19 -15
  39. data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.jsx +48 -47
  40. data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.html.erb +19 -15
  41. data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.jsx +51 -50
  42. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.html.erb +27 -23
  43. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.jsx +93 -92
  44. data/app/pb_kits/playbook/pb_flex/docs/_flex_vertical.html.erb +68 -64
  45. data/app/pb_kits/playbook/pb_flex/docs/_flex_vertical.jsx +192 -191
  46. data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.html.erb +31 -27
  47. data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.jsx +83 -82
  48. data/app/pb_kits/playbook/pb_kit/dateTime.js +23 -1
  49. data/app/pb_kits/playbook/pb_kit/pb_date_time.rb +17 -0
  50. data/app/pb_kits/playbook/pb_logistic/_logistic.html.erb +19 -0
  51. data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +96 -0
  52. data/app/pb_kits/playbook/pb_logistic/_logistic.scss +7 -0
  53. data/app/pb_kits/playbook/pb_logistic/docs/_logistic_dark.html.erb +27 -0
  54. data/app/pb_kits/playbook/pb_logistic/docs/_logistic_dark.jsx +39 -0
  55. data/app/pb_kits/playbook/pb_logistic/docs/_logistic_default.html.erb +24 -0
  56. data/app/pb_kits/playbook/pb_logistic/docs/_logistic_default.jsx +35 -0
  57. data/app/pb_kits/playbook/pb_logistic/docs/example.yml +11 -0
  58. data/app/pb_kits/playbook/pb_logistic/docs/index.js +2 -0
  59. data/app/pb_kits/playbook/pb_logistic/logistic.rb +31 -0
  60. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +8 -2
  61. data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +9 -1
  62. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.html.erb +16 -0
  63. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.jsx +134 -0
  64. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +33 -0
  65. data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_dark.html.erb +72 -0
  66. data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_dark.jsx +81 -0
  67. data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.html.erb +64 -0
  68. data/app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.jsx +73 -0
  69. data/app/pb_kits/playbook/pb_time_range_inline/docs/example.yml +11 -0
  70. data/app/pb_kits/playbook/pb_time_range_inline/docs/index.js +2 -0
  71. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +72 -0
  72. data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +2 -1
  73. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +30 -9
  74. data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_with_context.html.erb → _typeahead_with_context_dark.html.erb} +2 -1
  75. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -1
  76. data/app/pb_kits/playbook/pb_typeahead/index.js +6 -4
  77. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +10 -2
  78. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.html.erb +7 -0
  79. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.jsx +66 -0
  80. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +11 -0
  81. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.html.erb +9 -0
  82. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.jsx +48 -0
  83. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_dark.html.erb +1 -0
  84. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_dark.jsx +14 -0
  85. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_day_only.html.erb +1 -0
  86. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_day_only.jsx +14 -0
  87. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_default.html.erb +3 -0
  88. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_default.jsx +14 -0
  89. data/app/pb_kits/playbook/pb_weekday_stacked/docs/example.yml +15 -0
  90. data/app/pb_kits/playbook/pb_weekday_stacked/docs/index.js +4 -0
  91. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.rb +61 -0
  92. data/app/pb_kits/playbook/tokens/_colors.scss +2 -2
  93. data/app/views/layouts/playbook/_sidebar.html.erb +26 -10
  94. data/app/views/playbook/pages/kit_category_show.html.erb +14 -0
  95. data/app/views/playbook/pages/kit_show.html.erb +33 -0
  96. data/app/views/playbook/pages/kits.html.erb +12 -0
  97. data/lib/playbook/version.rb +1 -1
  98. metadata +52 -24
  99. data/app/views/playbook/pages/kit_category_show.html.slim +0 -10
  100. data/app/views/playbook/pages/kit_show.html.slim +0 -23
  101. 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: 7b6b9cf54a4629dc09514c2a7949f4eeb596b9b0f31578c1f2560abda3decc86
4
- data.tar.gz: 9a76e680af942ceefda7969f0f891e9df4e8e93cf05299ebc6681df0c4f9f4ac
3
+ metadata.gz: 5724cfc73bfc520ae0f5bbb89002649cc2c28eb1161692f1e3b45de3bc417abc
4
+ data.tar.gz: d93b64cd6811f91f8eff71df0acdbed3d32da9e756e78003ce4f578f6822d1d5
5
5
  SHA512:
6
- metadata.gz: f7b1f0963931ad0ec683bb2492cf25164e149814d2d3363f0c53709ed08fea768b4c29adf3c6460be1ccdadf253180849797a71e764e09ac86f6986e1d446293
7
- data.tar.gz: dbe31146f0908aa1be40b0d7f140d1a2adf647d607daf5def0cb36adf722592fe9c90a0353c60f241fd7fe2575142c50db02dabe5ffc6c1243c081dadd6a2cb7
6
+ metadata.gz: 978b10162d35e872ca37c0c4572668c3286908fc03b0929a7604ea08a457eb268de8401213192aa96158e4463a1bab032fdaee3f7dbf786b831fcdc846670e7f
7
+ data.tar.gz: 61b4a2ee3e61c9f223fccb8623272fd74f5864b8facafb04672c50a4b8b9f17ba31c6db702852c2527e90f07129af62d95c0f34c4530059dff3c2b5d3bc1b859
@@ -15,7 +15,7 @@ module Playbook
15
15
  def tokens; end
16
16
 
17
17
  def kits
18
- params[:type] ||= "rails"
18
+ params[:type] ||= "react"
19
19
  @type = params[:type]
20
20
  end
21
21
 
@@ -23,7 +23,7 @@ module Playbook
23
23
  end
24
24
  end
25
25
 
26
- def get_kit_description(kit)
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
- return menu['kits']
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 = kit_show_path(kit)
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
- render inline: "<a href='#{url}'>#{ pb_rails(:title, props: { text: pb_kit_title(kit), tag: 'h3', size: 2 })}</a>"
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 'pb_filter/filter';
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
- .pb--kit-show.flex-kit {
2
- [class^=pb_flex_kit] { background: #F3F7FB; }
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
- .tall { min-height: 200px; }
12
+ .tall {
13
+ min-height: 200px;
14
+ }
12
15
  }
@@ -37,6 +37,7 @@ $pb_button_border_width: 1px;
37
37
  justify-content: center;
38
38
  flex-basis: auto;
39
39
  width: fit-content;
40
+ font-family: $font_family_base;
40
41
 
41
42
  .loading-icon {
42
43
  position: absolute;
@@ -2,7 +2,8 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname,
5
- aria: object.aria) do %>
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,
@@ -65,6 +65,8 @@ $pb_card_highlight_size: 4px;
65
65
  @include pb_card_selected;
66
66
  }
67
67
  &[class*=_dark] {
68
+ @include pb_card_dark;
69
+
68
70
  &[class*=_selected] {
69
71
  @include pb_card_selected_dark;
70
72
  }
@@ -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,5 +1,5 @@
1
1
  <%= pb_rails("card") do %>
2
- Card content
2
+ Card Content
3
3
  <% end %>
4
4
 
5
5
  <br>
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("card", props: { dark: true }) do %>
2
+ Dark Card content
3
+ <% end %>
@@ -0,0 +1,12 @@
1
+ import React from 'react'
2
+ import Card from '../_card.jsx'
3
+
4
+ const CardDark = () => {
5
+ return (
6
+ <div>
7
+ <Card dark>{'Card content'}</Card>
8
+ </div>
9
+ )
10
+ }
11
+
12
+ export default CardDark
@@ -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 { Button, Caption, Card, CircleIconButton, Flex, Icon, PbReactPopover, SectionSeparator, Title, TitleCount } from '../'
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
- sortMenu?: Array<Hash>
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
- sortMenu,
21
- filters,
38
+ results,
39
+ sortMenu = null,
40
+ template = 'default',
22
41
  }: FilterProps) => {
23
- return (
24
- <div
25
- className={className}
26
- data={data}
27
- id={id}
28
- >
29
- <Card padding="none">
30
- <Flex
31
- orientation="row"
32
- vertical="center"
33
- >
34
- <CircleIconButton
35
- icon="filter"
36
- id="filter"
37
- variant="secondary"
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
- <div className="maskContainer">
40
- <div className="filters">
41
- <div className="left_gradient" />
42
- <div className="filter">
43
- <Caption text={`${filters[0].name}`} />
44
- <Title
45
- size={4}
46
- tag="h4"
47
- text="name"
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
- </div>
50
- <div className="right_gradient" />
51
- </div>
52
- </div>
53
- </Flex>
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
- <TitleCount
62
- align="center"
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
- </Card>
81
- <PbReactPopover>
82
- {children}
83
- </PbReactPopover>
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
  }