playbook_ui 4.11.0.pre.alpha.pre.2 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  }