playbook_ui 7.1.2 → 7.3.0.pre.alpha4

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/bar_graph.rb +1 -1
  3. data/app/pb_kits/playbook/pb_body/body.rb +1 -1
  4. data/app/pb_kits/playbook/pb_caption/_caption.html.erb +7 -5
  5. data/app/pb_kits/playbook/pb_caption/docs/_caption_block.html.erb +11 -0
  6. data/app/pb_kits/playbook/pb_caption/docs/_caption_block.jsx +28 -0
  7. data/app/pb_kits/playbook/pb_caption/docs/example.yml +2 -0
  8. data/app/pb_kits/playbook/pb_caption/docs/index.js +1 -0
  9. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.jsx +1 -1
  10. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +19 -14
  11. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +17 -1
  13. data/app/pb_kits/playbook/pb_gauge/_gauge.jsx +1 -1
  14. data/app/pb_kits/playbook/pb_line_graph/line_graph.rb +1 -1
  15. data/app/pb_kits/playbook/pb_nav/_item.html.erb +3 -0
  16. data/app/pb_kits/playbook/pb_nav/_item.jsx +14 -1
  17. data/app/pb_kits/playbook/pb_nav/_nav.jsx +3 -0
  18. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +22 -3
  19. data/app/pb_kits/playbook/pb_nav/docs/_borderless_nav.html.erb +6 -0
  20. data/app/pb_kits/playbook/pb_nav/docs/_borderless_nav.jsx +29 -0
  21. data/app/pb_kits/playbook/pb_nav/docs/_with_img_nav.html.erb +7 -0
  22. data/app/pb_kits/playbook/pb_nav/docs/_with_img_nav.jsx +42 -0
  23. data/app/pb_kits/playbook/pb_nav/docs/_with_img_nav.md +1 -0
  24. data/app/pb_kits/playbook/pb_nav/docs/example.yml +5 -0
  25. data/app/pb_kits/playbook/pb_nav/docs/index.js +2 -0
  26. data/app/pb_kits/playbook/pb_nav/item.rb +1 -0
  27. data/app/pb_kits/playbook/pb_nav/nav.rb +6 -1
  28. data/app/pb_kits/playbook/pb_pill/_pill.scss +1 -0
  29. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +2 -2
  30. data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +1 -3
  31. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +26 -47
  32. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +32 -0
  33. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +6 -2
  34. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +2 -1
  35. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +2 -1
  36. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_vertical.jsx +9 -3
  37. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +1 -1
  38. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +4 -4
  39. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_options.html.erb +16 -0
  40. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +3 -2
  41. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +16 -9
  42. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.html.erb +3 -2
  43. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_selectable_card_icon_options.html.erb +16 -0
  44. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/example.yml +4 -3
  45. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.rb +3 -0
  46. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.html.erb +3 -3
  47. data/app/pb_kits/playbook/pb_selectable_icon/docs/_selectable_icon_options.html.erb +15 -0
  48. data/app/pb_kits/playbook/pb_selectable_icon/docs/example.yml +3 -2
  49. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.rb +10 -0
  50. data/app/pb_kits/playbook/pb_time/_time.html.erb +17 -20
  51. data/app/pb_kits/playbook/pb_time/_time.jsx +40 -27
  52. data/app/pb_kits/playbook/pb_time/_time.scss +4 -24
  53. data/app/pb_kits/playbook/pb_time/docs/_time_align.jsx +4 -1
  54. data/app/pb_kits/playbook/pb_time/docs/_time_default.html.erb +11 -11
  55. data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +13 -1
  56. data/app/pb_kits/playbook/pb_time/docs/_time_sizes.jsx +4 -1
  57. data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +3 -1
  58. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +7 -2
  59. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.html.erb +3 -2
  60. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +11 -7
  61. data/app/pb_kits/playbook/props.rb +1 -1
  62. data/app/pb_kits/playbook/props/base.rb +6 -4
  63. data/lib/playbook/version.rb +1 -1
  64. metadata +15 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cb61398fc3d613b35dc39daba264bf9aeaa61144b5f9cc4880807a51ff477ed
4
- data.tar.gz: fb3db39898e1601ffdc37bc76bfa0de086b31e94b388424b7ad17b3f9d1e4e9d
3
+ metadata.gz: c254b4df78da26ac88080e216dcabcff2c7ae67749755eca2e7f289d2f428728
4
+ data.tar.gz: 6f5aaae2cc86313968d331881d933a36e4d9e7ec1a6c82b51471f18652834aca
5
5
  SHA512:
6
- metadata.gz: 64df1795f5747f3cd07c3b232ab59bd5b495de12befe3521ead0d5038a2aa6c7fbd473bd58437a21fef615818aec5250edf41230335d94698751b51bcbf51e8a
7
- data.tar.gz: 77437b020c051293e007d11ab19dcb0c1e8cc01def39f1b105dc6ee0343f372e173d4acb13e675b82fb2db91f7595073c435dc0fda7cd24992183653f4b91ebd
6
+ metadata.gz: 6f48fbdf2a8cc92bd85997620b4953832e3478724e76b5571af4c1ad76ae59ee25d0935413f96e73d8e68597b51b2288affbc36250854dc7c07cb757d3688972
7
+ data.tar.gz: 37fe5b56013bb0256efe3ef1d28e120a23b34cf74b56cb8dc25c4e30c58c6859cccd33824fc5479ee4c710c37fa3622acdd6ec7c9e34429bb67d96f7bd8fcfcb
@@ -16,7 +16,7 @@ module Playbook
16
16
  prop :subtitle
17
17
  prop :title
18
18
  prop :x_axis_categories, type: Playbook::Props::Array,
19
- default:[]
19
+ default: []
20
20
  prop :y_axis_min, type: Playbook::Props::Numeric
21
21
  prop :y_axis_max, type: Playbook::Props::Numeric
22
22
  prop :legend, type: Playbook::Props::Boolean,
@@ -5,7 +5,7 @@ module Playbook
5
5
  class Body
6
6
  include Playbook::Props
7
7
  include ActionView::Helpers
8
-
8
+
9
9
  partial "pb_body/body"
10
10
 
11
11
  prop :color, type: Playbook::Props::Enum,
@@ -1,5 +1,7 @@
1
- <%= content_tag(object.tag, object.text,
2
- id: object.id,
3
- data: object.data,
4
- class: object.classname,
5
- aria: object.aria) %>
1
+ <%= content_tag(object.tag,
2
+ aria: object.aria,
3
+ id: object.id,
4
+ data: object.data,
5
+ class: object.classname) do %>
6
+ <%= object.children.present? ? capture(&object.children) : object.text %>
7
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <%= pb_rails("caption") do %>
2
+ Block
3
+ <% end %>
4
+
5
+ <%= pb_rails("caption", props: { size: 'lg' }) do %>
6
+ Large Block
7
+ <% end %>
8
+
9
+ <%= pb_rails("caption", props: { size: 'xs' }) do %>
10
+ Subcaption Block
11
+ <% end %>
@@ -0,0 +1,28 @@
1
+ import React from 'react'
2
+ import { Caption } from '../../'
3
+
4
+ const CaptionBlock = (props) => {
5
+ return (
6
+ <div>
7
+ <Caption {...props}>
8
+ {'Block'}
9
+ </Caption>
10
+
11
+ <Caption
12
+ {...props}
13
+ size="lg"
14
+ >
15
+ {'Large Block'}
16
+ </Caption>
17
+
18
+ <Caption
19
+ {...props}
20
+ size="xs"
21
+ >
22
+ {'Subcaption Block'}
23
+ </Caption>
24
+ </div>
25
+ )
26
+ }
27
+
28
+ export default CaptionBlock
@@ -1,5 +1,7 @@
1
1
  examples:
2
2
  rails:
3
3
  - caption_light: Default
4
+ - caption_block: Block
4
5
  react:
5
6
  - caption_light: Default
7
+ - caption_block: Block
@@ -1,2 +1,3 @@
1
1
  export { default as CaptionLight } from './_caption_light.jsx'
2
2
  export { default as CaptionVariants } from './_caption_variants.jsx'
3
+ export { default as CaptionBlock } from './_caption_block.jsx'
@@ -101,7 +101,7 @@ const CircleChart = (props: CircleChartProps) => {
101
101
  useEffect(() => {
102
102
  if (componentDidMount.current) {
103
103
  Highcharts.charts.forEach((chart) => {
104
- if (chart.renderTo.id === id) {
104
+ if (chart && chart.renderTo.id === id) {
105
105
  const updatedValueArray = chartData.map((obj) => {
106
106
  return obj.value
107
107
  })
@@ -3,20 +3,25 @@
3
3
  class: object.classname + object.error_class,
4
4
  data: object.data,
5
5
  id: object.id) do %>
6
- <div class="input_wrapper">
7
- <%= pb_rails("text_input", props: {
8
- aria: object.input_aria,
9
- autocomplete: false,
10
- dark: object.dark,
11
- data: object.input_data,
12
- disabled: object.disable_input,
13
- error: object.error,
14
- id: object.picker_id,
15
- label: object.hide_label ? nil : object.label,
16
- name: object.name,
17
- placeholder: object.placeholder,
18
- required: object.required
19
- }) %>
6
+ <% if object.children %>
7
+ <div class="input_wrapper">
8
+ <%= capture(&object.children) %>
9
+ <% else %>
10
+ <div class="input_wrapper">
11
+ <%= pb_rails("text_input", props: {
12
+ aria: object.input_aria,
13
+ autocomplete: false,
14
+ dark: object.dark,
15
+ data: object.input_data,
16
+ disabled: object.disable_input,
17
+ error: object.error,
18
+ id: object.picker_id,
19
+ label: object.hide_label ? nil : object.label,
20
+ name: object.name,
21
+ placeholder: object.placeholder,
22
+ required: object.required,
23
+ }) %>
24
+ <% end %>
20
25
  <% if !object.hide_icon %>
21
26
  <div
22
27
  class="<%= object.icon_wrapper_class %>"
@@ -52,7 +52,7 @@
52
52
  <%= form.select :example_select_field, [["Yes", 1], ["No", 2]], props: { label: true } %>
53
53
  <%= form.collection_select :example_collection_select_field, example_collection, :value, :name, props: { label: true } %>
54
54
  <%= form.check_box :example_checkbox_field, props: { text: "Example Checkbox", label: true } %>
55
- <%= form.date_picker :example_date_picker_field_1, props: { default_date: 'blank', label: true } %>
55
+ <%= form.date_picker :example_date_picker_field_1, props: { label: true } %>
56
56
 
57
57
  <%= form.actions do |action| %>
58
58
  <%= action.submit %>
@@ -13,7 +13,23 @@ module Playbook
13
13
  props[:name] = html_attribute_name
14
14
  props[:picker_id] = html_id
15
15
 
16
- @template.pb_rails("date_picker", props: props)
16
+ input = text_field(
17
+ name,
18
+ autocomplete: "off",
19
+ disabled: props[:disable_input],
20
+ data: props[:input_data],
21
+ aria: props[:input_aria],
22
+ props: {
23
+ error: props[:error],
24
+ label: props[:label],
25
+ placeholder: props[:placeholder],
26
+ required: props[:required],
27
+ }
28
+ )
29
+
30
+ @template.pb_rails("date_picker", props: props) do
31
+ input
32
+ end
17
33
  end
18
34
  end
19
35
  end
@@ -88,7 +88,7 @@ const Gauge = (props: GaugeProps) => {
88
88
  useEffect(() => {
89
89
  if (componentDidMount.current) {
90
90
  Highcharts.charts.forEach((chart) => {
91
- if (chart.renderTo.id === id) {
91
+ if (chart && chart.renderTo.id === id) {
92
92
  chart.series[0].setData([chartData[0].value])
93
93
  chart.series[0].data[0].name = chartData[0].name
94
94
  }
@@ -16,7 +16,7 @@ module Playbook
16
16
  prop :subtitle
17
17
  prop :title
18
18
  prop :x_axis_categories, type: Playbook::Props::Array,
19
- default:[]
19
+ default: []
20
20
  prop :y_axis_min, type: Playbook::Props::Numeric
21
21
  prop :y_axis_max, type: Playbook::Props::Numeric
22
22
  prop :legend, type: Playbook::Props::Boolean,
@@ -5,6 +5,9 @@
5
5
  id: object.id) do %>
6
6
  <%= content_tag(object.tag,
7
7
  object.link ? object.link_options : object.options) do %>
8
+ <% if object.image_url %>
9
+ <%= pb_rails("image", props: { url: object.image_url, classname: "pb_nav_img_wrapper" }) %>
10
+ <% end %>
8
11
  <% if object.icon_left %>
9
12
  <%= pb_rails("icon", props: { icon: object.icon_left, classname: "pb_nav_list_item_icon_left", fixed_width: true}) %>
10
13
  <% end %>
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
- import { Icon } from '../'
5
+ import { Icon, Image } from '../'
6
6
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
7
7
  import { globalProps } from '../utilities/globalProps.js'
8
8
 
@@ -15,6 +15,7 @@ type NavItemProps = {
15
15
  iconLeft: string,
16
16
  iconRight: string,
17
17
  id?: string,
18
+ imageUrl: String,
18
19
  link: string,
19
20
  onClick?: EventHandler,
20
21
  text: string,
@@ -30,6 +31,7 @@ const NavItem = (props: NavItemProps) => {
30
31
  iconLeft,
31
32
  iconRight,
32
33
  id,
34
+ imageUrl,
33
35
  link,
34
36
  onClick = () => {},
35
37
  text = '',
@@ -53,6 +55,17 @@ const NavItem = (props: NavItemProps) => {
53
55
  href={link}
54
56
  onClick={onClick}
55
57
  >
58
+ <If condition={imageUrl}>
59
+ <div
60
+ className="pb_nav_list_item_icon_section"
61
+ key={imageUrl}
62
+ >
63
+ <Image
64
+ className="pb_nav_img_wrapper"
65
+ url={imageUrl}
66
+ />
67
+ </div>
68
+ </If>
56
69
  <If condition={iconLeft}>
57
70
  <div
58
71
  className="pb_nav_list_item_icon_section"
@@ -8,6 +8,7 @@ import { globalProps } from '../utilities/globalProps.js'
8
8
 
9
9
  type NavProps = {
10
10
  aria?: object,
11
+ borderless?: boolean,
11
12
  children?: React.Node,
12
13
  className?: string | array<string>,
13
14
  data?: object,
@@ -22,6 +23,7 @@ type NavProps = {
22
23
  const Nav = (props: NavProps) => {
23
24
  const {
24
25
  aria = {},
26
+ borderless = false,
25
27
  children,
26
28
  className,
27
29
  data = {},
@@ -39,6 +41,7 @@ const Nav = (props: NavProps) => {
39
41
  const cardCss = classnames(
40
42
  buildCss('pb_nav_list', variant, orientation, {
41
43
  highlight: highlight,
44
+ borderless: borderless,
42
45
  }),
43
46
  globalProps(props),
44
47
  className
@@ -40,7 +40,7 @@ $selector: ".pb_nav_list";
40
40
  text-decoration: none;
41
41
  display: flex;
42
42
  align-items: center;
43
- padding: $space_sm $space_md $space_sm ($space_md - 3px);
43
+ padding: $space_sm $space_sm $space_sm ($space_sm - 3px);
44
44
  border: 0 solid transparent;
45
45
  border-width: 0 0 0 3px;
46
46
  transition-property: color, border-color, background-color;
@@ -59,7 +59,7 @@ $selector: ".pb_nav_list";
59
59
  }
60
60
  [class*=_icon_left] {
61
61
  font-size: $font_large;
62
- margin-right: $space_sm;
62
+ margin-right: $space_xs;
63
63
  color: $text_lt_lighter;
64
64
  }
65
65
  [class*=_icon_right] {
@@ -69,10 +69,14 @@ $selector: ".pb_nav_list";
69
69
  }
70
70
  [class*=_text] {
71
71
  font-size: $font_base;
72
- font-weight: $bold;
73
72
  color: $text_lt_default;
74
73
  flex: 1;
75
74
  }
75
+ [class*=_img_left] {
76
+ margin-right: $space_xs;
77
+ height: 20px;
78
+ width: 25px;
79
+ }
76
80
  }
77
81
  &:last-child {
78
82
  border-bottom: 0;
@@ -167,4 +171,19 @@ $selector: ".pb_nav_list";
167
171
  }
168
172
  }
169
173
 
174
+ //Borderless
175
+ &[class*=_borderless] {
176
+ [class*=pb_nav_list_kit_item] {
177
+ list-style: none;
178
+ border-bottom: 0;
179
+ }
180
+ }
181
+
182
+ }
183
+
184
+ //Image Wrapper
185
+ .pb_nav_img_wrapper {
186
+ width: 24px;
187
+ height: 24px;
188
+ margin-right: $space_xs;
170
189
  }
@@ -0,0 +1,6 @@
1
+ <%= pb_rails("nav", props: {borderless: true}) do %>
2
+ <%= pb_rails("nav/item", props: { text: "Photos", link: "#" }) %>
3
+ <%= pb_rails("nav/item", props: { text: "Music", link: "#" }) %>
4
+ <%= pb_rails("nav/item", props: { text: "Video", link: "#", active: true }) %>
5
+ <%= pb_rails("nav/item", props: { text: "Files", link: "#" }) %>
6
+ <% end %>
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import { Nav } from '../../'
3
+ import NavItem from '../_item.jsx'
4
+
5
+ const BorderlessNav = () => {
6
+ return (
7
+ <Nav borderless>
8
+ <NavItem
9
+ active
10
+ link="#"
11
+ text="All Categories"
12
+ />
13
+ <NavItem
14
+ link="#"
15
+ text="Food"
16
+ />
17
+ <NavItem
18
+ link="#"
19
+ text="Digital"
20
+ />
21
+ <NavItem
22
+ link="#"
23
+ text="Design Art"
24
+ />
25
+ </Nav>
26
+ )
27
+ }
28
+
29
+ export default BorderlessNav
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("nav", props: {title: "Browse", link: "#"}) do %>
2
+ <%= pb_rails("nav/item", props: { image_url: "https://upload.wikimedia.org/wikipedia/commons/0/00/Apple_News_icon_%28macOS%29.png", text: "News Feed" }) %>
3
+ <%= pb_rails("nav/item", props: { image_url: "https://p7.hiclipart.com/preview/928/339/723/messages-iphone-apple-imessage-iphone-thumbnail.jpg", link: "#", text: "Messages", active: true }) %>
4
+ <%= pb_rails("nav/item", props: { image_url: "https://www.clipartmax.com/png/middle/103-1038653_circle-icons-calendar-svg-event-icon.png", icon_right: "angle-down", link: "#", text: "Events" }) %>
5
+ <%= pb_rails("nav/item", props: { image_url: "https://www.pngitem.com/pimgs/m/228-2289227_find-friends-icon-png-image-iphone-find-my.png", link: "#", text: "Friends" }) %>
6
+ <%= pb_rails("nav/item", props: { image_url: "https://img.favpng.com/18/5/20/blue-human-behavior-silhouette-area-communication-png-favpng-wLT3QYknSwc68uu9GAUHGS5FY_t.jpg", icon_right: "angle-down", link: "#", text: "Groups" }) %>
7
+ <% end %>
@@ -0,0 +1,42 @@
1
+ import React from 'react'
2
+ import { Nav } from '../../'
3
+ import NavItem from '../_item.jsx'
4
+
5
+ const WithImageNav = () => {
6
+ return (
7
+ <Nav
8
+ link="#"
9
+ title="Browse"
10
+ >
11
+ <NavItem
12
+ imageUrl="https://upload.wikimedia.org/wikipedia/commons/0/00/Apple_News_icon_%28macOS%29.png"
13
+ text="News Feed"
14
+ />
15
+ <NavItem
16
+ active
17
+ imageUrl="https://p7.hiclipart.com/preview/928/339/723/messages-iphone-apple-imessage-iphone-thumbnail.jpg"
18
+ link="#"
19
+ text="Messages"
20
+ />
21
+ <NavItem
22
+ iconRight="angle-down"
23
+ imageUrl="https://www.clipartmax.com/png/middle/103-1038653_circle-icons-calendar-svg-event-icon.png"
24
+ link="#"
25
+ text="Events"
26
+ />
27
+ <NavItem
28
+ imageUrl="https://www.pngitem.com/pimgs/m/228-2289227_find-friends-icon-png-image-iphone-find-my.png"
29
+ link="#"
30
+ text="Friends"
31
+ />
32
+ <NavItem
33
+ iconRight="angle-down"
34
+ imageUrl="https://img.favpng.com/18/5/20/blue-human-behavior-silhouette-area-communication-png-favpng-wLT3QYknSwc68uu9GAUHGS5FY_t.jpg"
35
+ link="#"
36
+ text="Groups"
37
+ />
38
+ </Nav>
39
+ )
40
+ }
41
+
42
+ export default WithImageNav
@@ -0,0 +1 @@
1
+ Icon used needs to be square. Icon size is 24px by 24px.
@@ -2,7 +2,9 @@ examples:
2
2
  rails:
3
3
  - default_nav: Default
4
4
  - with_icons_nav: With Icons
5
+ - with_img_nav: With Custom Icon
5
6
  - no_highlight_nav: No Highlight
7
+ - borderless_nav: No Borders
6
8
  - subtle_nav: Subtle Variant
7
9
  - subtle_with_icons_nav: Subtle With Icons
8
10
  - subtle_no_highlight_nav: Subtle No Highlight
@@ -13,10 +15,13 @@ examples:
13
15
  react:
14
16
  - default_nav: Default
15
17
  - with_icons_nav: With Icons
18
+ - with_img_nav: With Custom Icon
16
19
  - no_highlight_nav: No Highlight
20
+ - borderless_nav: No Borders
17
21
  - subtle_nav: Subtle Variant
18
22
  - subtle_with_icons_nav: Subtle With Icons
19
23
  - subtle_no_highlight_nav: Subtle No Highlight
20
24
  - horizontal_nav: Horizontal Nav
21
25
  - block_nav: Block
22
26
  - block_no_title_nav: Without Title
27
+