playbook_ui 5.4.0 → 5.5.1.pre.alpha3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/data/menu.yml +2 -0
  4. data/app/pb_kits/playbook/index.js +2 -0
  5. data/app/pb_kits/playbook/packs/examples.js +2 -0
  6. data/app/pb_kits/playbook/packs/samples.js +2 -0
  7. data/app/pb_kits/playbook/pb_body/_body.jsx +2 -2
  8. data/app/pb_kits/playbook/pb_button/_button.jsx +2 -0
  9. data/app/pb_kits/playbook/pb_caption/_caption.scss +2 -2
  10. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +3 -2
  11. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.jsx +15 -12
  12. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +36 -0
  13. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +98 -0
  14. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +59 -0
  15. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +38 -0
  16. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +91 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +4 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +13 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  31. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  32. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  33. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +23 -0
  34. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +8 -0
  35. data/app/pb_kits/playbook/pb_date_picker/index.js +11 -0
  36. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +1 -0
  37. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  38. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +3 -1
  39. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
  40. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +15 -0
  41. data/app/pb_kits/playbook/pb_image/_image.jsx +1 -1
  42. data/app/pb_kits/playbook/pb_layout/_layout.scss +16 -0
  43. data/app/pb_kits/playbook/pb_legend/_legend.html.erb +1 -0
  44. data/app/pb_kits/playbook/pb_legend/_legend.jsx +25 -4
  45. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +3 -0
  46. data/app/pb_kits/playbook/pb_popover/_popover.html.erb +1 -1
  47. data/app/pb_kits/playbook/pb_popover/_popover.jsx +3 -1
  48. data/app/pb_kits/playbook/pb_popover/_popover.scss +4 -0
  49. data/app/pb_kits/playbook/pb_popover/popover.rb +4 -0
  50. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.html.erb +2 -2
  51. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.jsx +24 -10
  52. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +3 -1
  53. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +6 -0
  54. data/app/pb_kits/playbook/pb_title/_title.jsx +7 -4
  55. data/app/pb_kits/playbook/pb_title/_title.scss +7 -0
  56. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -0
  57. data/app/pb_kits/playbook/pb_title/title.rb +4 -1
  58. data/app/pb_kits/playbook/vendor.js +4 -0
  59. data/app/views/layouts/playbook/samples.html.erb +1 -0
  60. data/app/views/playbook/samples/collection_detail/index.html.erb +169 -0
  61. data/app/views/playbook/samples/collection_detail/index.jsx +372 -0
  62. data/lib/playbook/version.rb +1 -1
  63. metadata +31 -4
@@ -1,4 +1,5 @@
1
1
  <%= content_tag(:div, object.text,
2
+ aria: object.aria,
2
3
  id: object.id,
3
4
  data: object.data,
4
5
  class: object.classname) do %>
@@ -2,12 +2,14 @@
2
2
 
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
- import { buildCss } from '../utilities/props'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
6
  import { spacing } from '../utilities/spacing.js'
7
7
 
8
8
  import { Body, Title } from '../'
9
9
 
10
10
  type LegendProps = {
11
+ aria?: object,
12
+ className?: String,
11
13
  color?: | "data_1"
12
14
  | "data_2"
13
15
  | "data_3"
@@ -16,20 +18,39 @@ type LegendProps = {
16
18
  | "data_6"
17
19
  | "data_7",
18
20
  dark?: Boolean,
21
+ data?: object,
22
+ id?: String,
19
23
  prefixText?: String,
20
24
  text: String,
21
25
  }
22
26
 
23
27
  const Legend = (props: LegendProps) => {
24
- const { color = 'data_1', dark = false, prefixText, text } = props
28
+ const {
29
+ aria = {},
30
+ className,
31
+ color = 'data_1',
32
+ dark = false,
33
+ data = {},
34
+ id,
35
+ prefixText,
36
+ text,
37
+ } = props
38
+
39
+ const ariaProps = buildAriaProps(aria)
40
+ const dataProps = buildDataProps(data)
25
41
  const darkClass = dark ? 'dark' : 'light'
26
42
  const bodyCSS = classnames(
27
- buildCss('pb_legend_kit', color, darkClass),
43
+ buildCss('pb_legend_kit', color, darkClass), className,
28
44
  spacing(props)
29
45
  )
30
46
 
31
47
  return (
32
- <div className={bodyCSS}>
48
+ <div
49
+ {...ariaProps}
50
+ {...dataProps}
51
+ className={bodyCSS}
52
+ id={id}
53
+ >
33
54
  <Body color={dark ? 'lighter' : 'light'}>
34
55
  <span className="pb_legend_indicator_circle" />
35
56
  <If condition={prefixText}>
@@ -32,6 +32,7 @@ $selector: ".pb_nav_list";
32
32
  }
33
33
  [class*=_item_text] {
34
34
  color: $primary;
35
+ font-weight: $bold;
35
36
  }
36
37
  }
37
38
  }
@@ -90,6 +91,7 @@ $selector: ".pb_nav_list";
90
91
  text-decoration: none;
91
92
  display: flex;
92
93
  align-items: center;
94
+ border: none;
93
95
  padding: $space_xs ($space_sm - 2px);
94
96
  transition-property: color, background-color;
95
97
  transition-duration: 0.15s;
@@ -106,6 +108,7 @@ $selector: ".pb_nav_list";
106
108
  }
107
109
  [class*=_text] {
108
110
  flex: 1;
111
+ font-weight: $regular;
109
112
  }
110
113
  &:hover {
111
114
  background-color: rgba($primary, 0.03);
@@ -3,7 +3,7 @@
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
5
  <div class="pb_popover_tooltip" id="<%= object.tooltip_id %>" role="tooltip" style="<%= object.z_index_helper %>">
6
- <div class="pb_popover_body <%= object.popover_spacing_helper %>" style="<%= object.width_height_helper %>">
6
+ <div class="pb_popover_body <%= object.width_height_class_helper %> <%= object.popover_spacing_helper %>" style="<%= object.width_height_helper %>">
7
7
  <%= capture(&object.children) %>
8
8
  </div>
9
9
  </div>
@@ -59,6 +59,7 @@ const Popover = (props: PbPopoverProps) => {
59
59
  } = props
60
60
 
61
61
  const popoverSpacing = spacing(props) ? spacing(props) : 'p_sm'
62
+ const overflowHandling = maxHeight || maxWidth ? 'overflow_handling' : ''
62
63
  const zIndexStyle = zIndex ? { zIndex: zIndex } : {}
63
64
  const widthHeightStyles = () => {
64
65
  return Object.assign(
@@ -96,7 +97,8 @@ const Popover = (props: PbPopoverProps) => {
96
97
  <div
97
98
  className={classnames(
98
99
  'pb_popover_body',
99
- popoverSpacing
100
+ popoverSpacing,
101
+ overflowHandling
100
102
  )}
101
103
  style={widthHeightStyles()}
102
104
  >
@@ -23,6 +23,8 @@
23
23
  @include pb_card;
24
24
  border: 0;
25
25
  box-shadow: $shadow_deeper;
26
+ }
27
+ .overflow_handling {
26
28
  overflow: auto;
27
29
  }
28
30
  }
@@ -49,6 +51,8 @@
49
51
  @include pb_card;
50
52
  border: 0;
51
53
  box-shadow: $shadow_deeper;
54
+ }
55
+ .overflow_handling {
52
56
  overflow: auto;
53
57
  }
54
58
 
@@ -42,6 +42,10 @@ module Playbook
42
42
  out
43
43
  end
44
44
 
45
+ def width_height_class_helper
46
+ "overflow_handling" if max_height || max_width
47
+ end
48
+
45
49
  def data
46
50
  Hash(values[:data]).merge(
47
51
  pb_popover_kit: true,
@@ -4,10 +4,10 @@
4
4
  class: object.classname) do %>
5
5
  <div class="pb_time_range_inline_wrapper">
6
6
  <% if object.icon == true %>
7
- <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: pb_rails("icon", props: { icon: "clock", dark: object.dark, classname:"pb_time_range_inline_icon", fixed_width: true, size: object.size }) }) %>
7
+ <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, color: object.icon_color, text: pb_rails("icon", props: { icon: "clock", dark: object.dark, classname:"pb_time_range_inline_icon", fixed_width: true, size: object.size }) }) %>
8
8
  <% end %>
9
9
  <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: object.format_start_time_string }) %>
10
- <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, classname:"pb_time_range_inline_dash", text: "" }) %>
10
+ <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, color: object.icon_color, classname:"pb_time_range_inline_arrow", text: pb_rails("icon", props: { icon: "long-arrow-right", fixed_width: true, classname:"pb_time_range_inline_arrow"}) }) %>
11
11
  <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: object.format_end_time_string }) %>
12
12
  <% if object.timezone == true %>
13
13
  <%= pb_rails(object.text_kit, props: { tag: "span", color: object.text_timezone_color, classname:"pb_time_range_inline_timezone", text: object.pb_date_end_time.to_timezone.upcase }) %>
@@ -45,19 +45,33 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
45
45
  startTime,
46
46
  endTime,
47
47
  } = props
48
- const separator = `${'—'}`
48
+ const separator = (
49
+ <Body color="light">
50
+ <Icon
51
+ className="pb_time_range_inline_arrow"
52
+ dark={dark}
53
+ fixedWidth
54
+ icon="long-arrow-right"
55
+ />
56
+ </Body>
57
+ )
49
58
 
50
59
  const iconContent = () => {
51
60
  return (
52
61
  <If condition={icon}>
53
- <Icon
54
- className="pb_time_range_inline_icon"
55
- dark={dark}
56
- fixedWidth
57
- icon="clock"
58
- size={size}
62
+ <Body
63
+ color="light"
59
64
  tag="span"
60
- />
65
+ >
66
+ <Icon
67
+ className="pb_time_range_inline_icon"
68
+ dark={dark}
69
+ fixedWidth
70
+ icon="clock"
71
+ size={size}
72
+ tag="span"
73
+ />
74
+ </Body>
61
75
  </If>
62
76
  )
63
77
  }
@@ -80,7 +94,7 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
80
94
  </time>
81
95
  </Caption>
82
96
  <Caption
83
- className="pb_time_range_inline_dash"
97
+ className="pb_time_range_inline_arrow"
84
98
  dark={dark}
85
99
  tag="span"
86
100
  >
@@ -119,7 +133,7 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
119
133
  </time>
120
134
  </Body>
121
135
  <Body
122
- className="pb_time_range_inline_dash"
136
+ className="pb_time_range_inline_arrow"
123
137
  dark={dark}
124
138
  tag="span"
125
139
  >
@@ -1,3 +1,4 @@
1
+
1
2
  [class^=pb_time_range_inline_kit] {
2
3
  &[class*=_center] {
3
4
  & > [class^=pb_caption],
@@ -19,7 +20,8 @@
19
20
  }
20
21
  [class^=pb_time_range_inline_wrapper] {
21
22
  display: flex;
22
- [class*=pb_time_range_inline_dash] {
23
+ align-items: center;
24
+ [class*=pb_time_range_inline_arrow] {
23
25
  margin-left: 4px;
24
26
  margin-right: 4px;
25
27
  }
@@ -53,6 +53,12 @@ module Playbook
53
53
  nil
54
54
  end
55
55
 
56
+ def icon_color
57
+ return "light" if size == "sm"
58
+
59
+ nil
60
+ end
61
+
56
62
  def text_kit
57
63
  case size
58
64
  when "xs"
@@ -7,14 +7,15 @@ import { spacing } from '../utilities/spacing.js'
7
7
 
8
8
  type TitleProps = {
9
9
  aria?: object,
10
- className?: String,
11
10
  children?: Array<React.ReactNode> | React.ReactNode,
11
+ className?: String,
12
12
  dark?: Boolean,
13
13
  data?: object,
14
14
  id?: String,
15
15
  size?: 1 | 2 | 3 | 4,
16
16
  tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div",
17
17
  text?: String,
18
+ variant?: null | "primary",
18
19
  }
19
20
 
20
21
  const Title = (props: TitleProps) => {
@@ -27,12 +28,14 @@ const Title = (props: TitleProps) => {
27
28
  id,
28
29
  size = 3,
29
30
  tag = 'h3',
30
- text } = props
31
+ text,
32
+ variant = null,
33
+ } = props
31
34
 
32
- const themeStyle = dark === true ? '_dark' : ''
35
+ const themeStyle = dark === true ? 'dark' : ''
33
36
  const ariaProps = buildAriaProps(aria)
34
37
  const dataProps = buildDataProps(data)
35
- const classes = classnames(buildCss('pb_title_kit', size, themeStyle), className, spacing(props))
38
+ const classes = classnames(buildCss('pb_title_kit', size, themeStyle, variant), className, spacing(props))
36
39
  const Tag = `${tag}`
37
40
 
38
41
  return (
@@ -1,4 +1,5 @@
1
1
  @import "title_mixin";
2
+ @import "../tokens/colors";
2
3
 
3
4
  [class^=pb_title_kit]{
4
5
  &[class*=_1] {
@@ -20,4 +21,10 @@
20
21
  &[class*=_dark] {
21
22
  @include pb_title_dark;
22
23
  }
24
+
25
+ @each $color_name, $color_value in $status_colors {
26
+ &[class*=_#{$color_name}] {
27
+ color: map-get($status_color_text, $color_name);
28
+ }
29
+ }
23
30
  }
@@ -36,3 +36,5 @@
36
36
  @mixin pb_title_dark {
37
37
  color: $text_dk_default;
38
38
  }
39
+
40
+
@@ -16,9 +16,12 @@ module Playbook
16
16
  values: %w[h1 h2 h3 h4 h5 h6 p div span],
17
17
  default: "h3"
18
18
  prop :text
19
+ prop :variant, type: Playbook::Props::Enum,
20
+ values: [nil, "primary"],
21
+ default: nil
19
22
 
20
23
  def classname
21
- generate_classname("pb_title_kit", size, dark_class)
24
+ generate_classname("pb_title_kit", size, dark_class, variant)
22
25
  end
23
26
 
24
27
  private
@@ -5,6 +5,10 @@ window.pbChart = pbChart
5
5
  // Forms
6
6
  import './pb_form/pb_form_validation'
7
7
 
8
+ // Date Picker
9
+ import datePickerHelper from './pb_date_picker/date_picker_helper.js'
10
+ window.datePickerHelper = datePickerHelper
11
+
8
12
  // Lazy image loading
9
13
  import 'lazysizes'
10
14
 
@@ -4,6 +4,7 @@
4
4
  <title>Full Screen Examples</title>
5
5
  <%= csrf_meta_tags %>
6
6
  <%= csp_meta_tag %>
7
+ <meta content="user-scalable=0, initial-scale=1.0, minimum-scale=1" name="viewport"/>
7
8
  <%= stylesheet_packs_with_chunks_tag 'main' %>
8
9
  </head>
9
10
  <body>
@@ -0,0 +1,169 @@
1
+ <%= pb_rails("layout", props: {position: "left", size: "sm", collapse: "md", layout: "collection_detail" }) do %>
2
+ <%= pb_rails("layout/sidebar") do %>
3
+ <%= pb_rails("card", props: { padding: "none" }) do %>
4
+ <%= pb_rails("caption", props: { text: "News Stories", size: 'lg', margin: "md" }) %>
5
+ <%= pb_rails("section_separator") %>
6
+ <%= pb_rails("nav", props: {link: "#", padding_top:"sm" }) do %>
7
+ <%= pb_rails("nav/item", props: { text: "All News", link: "#" }) %>
8
+ <%= pb_rails("nav/item", props: { text: "Top Stories", link: "#" }) %>
9
+ <%= pb_rails("nav/item", props: { text: "National", link: "#", active: true }) %>
10
+ <%= pb_rails("nav", props: {variant: "subtle", highlight: false }) do %>
11
+ <%= pb_rails("nav/item", props: { text: "All", link: "#", active: true }) %>
12
+ <%= pb_rails("nav/item", props: { text: "Planet Money", link: "#" }) %>
13
+ <%= pb_rails("nav/item", props: { text: "Books", link: "#" }) %>
14
+ <%= pb_rails("nav/item", props: { text: "Books, News, and Features", link: "#" }) %>
15
+ <%= pb_rails("nav/item", props: { text: "Science", link: "#" }) %>
16
+ <%= pb_rails("nav/item", props: { text: "Politics", link: "#" }) %>
17
+ <%= pb_rails("nav/item", props: { text: "National Security", link: "#" }) %>
18
+ <%= pb_rails("nav/item", props: { text: "Environment", link: "#" }) %>
19
+ <%= pb_rails("nav/item", props: { text: "Shots - Health News", link: "#" }) %>
20
+ <%= pb_rails("nav/item", props: { text: "Analysis", link: "#" }) %>
21
+ <% end %>
22
+ <%= pb_rails("nav/item", props: { text: "World", link: "#" }) %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+
27
+ <%= pb_rails("layout/body") do %>
28
+ <!-- START PLANET MONEY CARD -->
29
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
30
+ <%= pb_rails("card/card_header", props: { padding: "sm" }) do %>
31
+ <%= pb_rails("caption", props: { text: "Planet Money", dark: true }) %>
32
+ <% end %>
33
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
34
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/292f0C2i3f2z2f2A0P0n/Screen%20Shot%202020-07-09%20at%201.23.31%20PM.png?X-CloudApp-Visitor-Id=3399053&v=ed16c3c4" }) %>
35
+ <%= pb_rails("title", props: { text: "Where’d the Money Go, and Other Questions", tag: "h4", size: 4, padding: "sm" }) %>
36
+ <%= pb_rails("section_separator") %>
37
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
38
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
39
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "391" }) %>
40
+ <% end %>
41
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
42
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "2,039" }) %>
43
+ <% end %>
44
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
45
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "89" }) %>
46
+ <% end %>
47
+ <% end %>
48
+ <% end %>
49
+ <% end %>
50
+ <!-- END PLANET MONEY CARD -->
51
+ <!-- START WORLD CARD -->
52
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
53
+ <%= pb_rails("card/card_header", props: { padding: "sm", category_color: 2 }) do %>
54
+ <%= pb_rails("caption", props: { text: "World", dark: true }) %>
55
+ <% end %>
56
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
57
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/0n07340O0c3R0V0L1V0P/Screen%20Shot%202020-07-09%20at%201.41.26%20PM.png?X-CloudApp-Visitor-Id=3399053&v=b532b3f0" }) %>
58
+ <%= pb_rails("title", props: { text: "U.K. Willing To Admit 3 Million If China Adopts Security Law", tag: "h4", size: 4, padding: "sm" }) %>
59
+ <%= pb_rails("section_separator") %>
60
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
61
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
62
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "304" }) %>
63
+ <% end %>
64
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
65
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "5,032" }) %>
66
+ <% end %>
67
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
68
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "102" }) %>
69
+ <% end %>
70
+ <% end %>
71
+ <% end %>
72
+ <% end %>
73
+ <!-- END WORLD CARD -->
74
+ <!-- START BOOKS CARD -->
75
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
76
+ <%= pb_rails("card/card_header", props: { padding: "sm", category_color: 3 }) do %>
77
+ <%= pb_rails("caption", props: { text: "Books", dark: true }) %>
78
+ <% end %>
79
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
80
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/1j2k1g3f2H2W2f1v3225/Screen%20Shot%202020-07-09%20at%201.42.32%20PM.png?X-CloudApp-Visitor-Id=3399053&v=2ab46cb6" }) %>
81
+ <%= pb_rails("title", props: { text: "Opinion: Harry Potter's Magic Fades When His Creator Tweets", tag: "h4", size: 4, padding: "sm" }) %>
82
+ <%= pb_rails("section_separator") %>
83
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
84
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
85
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "201" }) %>
86
+ <% end %>
87
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
88
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "890" }) %>
89
+ <% end %>
90
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
91
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "2" }) %>
92
+ <% end %>
93
+ <% end %>
94
+ <% end %>
95
+ <% end %>
96
+ <!-- END BOOKS CARD -->
97
+ <!-- START NATIONAL CARD -->
98
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
99
+ <%= pb_rails("card/card_header", props: { padding: "sm", category_color: 4 }) do %>
100
+ <%= pb_rails("caption", props: { text: "National", dark: true }) %>
101
+ <% end %>
102
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
103
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/2j0G2k3I0f3W3a2c2q3o/Screen%20Shot%202020-07-09%20at%201.43.40%20PM.png?X-CloudApp-Visitor-Id=3399053&v=d2667a0b" }) %>
104
+ <%= pb_rails("title", props: { text: "1st U.S. Woman To Walk In Space Dives To Deepest Point In Ocean", tag: "h4", size: 4, padding: "sm" }) %>
105
+ <%= pb_rails("section_separator") %>
106
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
107
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
108
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "245" }) %>
109
+ <% end %>
110
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
111
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "10,302" }) %>
112
+ <% end %>
113
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
114
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "89" }) %>
115
+ <% end %>
116
+ <% end %>
117
+ <% end %>
118
+ <% end %>
119
+ <!-- END NATIONAL CARD -->
120
+ <!-- START BOOKS, NEWS, AND FEATURES CARD -->
121
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
122
+ <%= pb_rails("card/card_header", props: { padding: "sm", category_color: 5 }) do %>
123
+ <%= pb_rails("caption", props: { text: "Books, News, and Features", dark: true }) %>
124
+ <% end %>
125
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
126
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/0m353s3A3I3B0w3N3W2U/Screen%20Shot%202020-07-09%20at%201.44.30%20PM.png?X-CloudApp-Visitor-Id=3399053&v=5b24787c" }) %>
127
+ <%= pb_rails("title", props: { text: "Publishers Sue Internet Archive For Mass Copyright Infringement", tag: "h4", size: 4, padding: "sm" }) %>
128
+ <%= pb_rails("section_separator") %>
129
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
130
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
131
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "84" }) %>
132
+ <% end %>
133
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
134
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "5,592" }) %>
135
+ <% end %>
136
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
137
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "104" }) %>
138
+ <% end %>
139
+ <% end %>
140
+ <% end %>
141
+ <% end %>
142
+ <!-- END BOOKS, NEWS, AND FEATURES CARD -->
143
+ <!-- START SCIENCE CARD -->
144
+ <%= pb_rails("card", props: { padding: "none", header: true}) do %>
145
+ <%= pb_rails("card/card_header", props: { padding: "sm", category_color: 6 }) do %>
146
+ <%= pb_rails("caption", props: { text: "Science", dark: true }) %>
147
+ <% end %>
148
+ <%= pb_rails("card/card_body", props: { padding: "none" }) do %>
149
+ <%= pb_rails("image", props: { url: "https://djenjyj46f9j9.cloudfront.net/items/0n1b1V1F4614343t3547/Screen%20Shot%202020-07-09%20at%201.45.26%20PM.png?X-CloudApp-Visitor-Id=3399053&v=a3cc4d20" }) %>
150
+ <%= pb_rails("title", props: { text: "New Book Argues Migration Isn’t A Crisis — It’s The Solution", tag: "h4", size: 4, padding: "sm" }) %>
151
+ <%= pb_rails("section_separator") %>
152
+ <%= pb_rails("flex", props: { padding: "sm", wrap: true }) do %>
153
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
154
+ <%= pb_rails("icon_value", props: { icon: "share-alt", text: "54" }) %>
155
+ <% end %>
156
+ <%= pb_rails("body", props: {classname: "flex-item", margin_right: "md" }) do %>
157
+ <%= pb_rails("icon_value", props: { icon: "eye", text: "3,982" }) %>
158
+ <% end %>
159
+ <%= pb_rails("body", props: {classname: "flex-item" }) do %>
160
+ <%= pb_rails("icon_value", props: { icon: "comments", text: "12" }) %>
161
+ <% end %>
162
+ <% end %>
163
+ <% end %>
164
+ <% end %>
165
+ <!-- END SCIENCE CARD -->
166
+ <% end %>
167
+ <% end %>
168
+
169
+