playbook_ui 12.38.0.pre.alpha.PLAY932removemomentqp1088 → 12.38.0.pre.alpha.PLAY966collapsiblenav41082

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +6 -0
  3. data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +3 -3
  4. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +10 -9
  5. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_color.jsx +2 -2
  6. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.jsx +2 -2
  7. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +4 -8
  8. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.md +1 -1
  9. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_size.jsx +5 -5
  10. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_state.jsx +75 -0
  11. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_state.md +3 -0
  12. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +7 -6
  13. data/app/pb_kits/playbook/pb_collapsible/docs/index.js +2 -1
  14. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +8 -18
  15. data/app/pb_kits/playbook/pb_date_picker/plugins/quickPick.tsx +39 -45
  16. data/app/pb_kits/playbook/pb_kit/dateTime.ts +1 -204
  17. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +280 -17
  18. data/app/pb_kits/playbook/pb_nav/_horizontal_nav.scss +6 -0
  19. data/app/pb_kits/playbook/pb_nav/_item.tsx +75 -24
  20. data/app/pb_kits/playbook/pb_nav/_mixins.scss +5 -0
  21. data/app/pb_kits/playbook/pb_nav/_nav.tsx +18 -1
  22. data/app/pb_kits/playbook/pb_nav/_subtle_mixin.scss +6 -7
  23. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +1 -1
  24. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.jsx +85 -58
  25. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.md +1 -0
  26. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom.jsx +58 -0
  27. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom.md +1 -0
  28. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_emphasize.html.erb +23 -0
  29. data/app/pb_kits/playbook/pb_nav/docs/{_collapsible_nav_custom_icons.jsx → _collapsible_nav_emphasize.jsx} +14 -5
  30. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_emphasize.md +1 -0
  31. data/app/pb_kits/playbook/pb_nav/docs/example.yml +5 -3
  32. data/app/pb_kits/playbook/pb_nav/docs/index.js +2 -1
  33. data/app/pb_kits/playbook/pb_nav/item.html.erb +5 -4
  34. data/app/pb_kits/playbook/pb_nav/item.rb +29 -3
  35. data/dist/playbook-rails.js +279 -7
  36. data/lib/playbook/version.rb +1 -1
  37. metadata +11 -3
@@ -11,57 +11,109 @@ import Collapsible from '../pb_collapsible/_collapsible'
11
11
  type NavItemProps = {
12
12
  active?: boolean,
13
13
  aria?: { [key: string]: string },
14
+ fontWeight?: "regular" | "bold" | "bolder",
14
15
  children?: React.ReactNode[] | React.ReactNode,
15
16
  className?: string,
16
17
  collapsible?: boolean,
17
- collapsibleClick?: () => void,
18
18
  data?: object,
19
+ dark?: boolean,
20
+ fontSize?: "normal" | "small",
19
21
  iconLeft?: string,
20
22
  iconRight?: string | string[],
21
- iconRightClick?: () => void,
22
- iconLeftClick?: () => void,
23
+ onIconRightClick?: () => void,
24
+ onIconLeftClick?: () => void,
23
25
  id?: string,
24
26
  imageUrl?: string,
25
27
  link?: string,
26
- onClick?: React.MouseEventHandler<HTMLElement>,
28
+ onClick?: () => void,
27
29
  target?: '_blank' | '_self' | '_parent' | '_top',
28
30
  text: string,
29
- toggleCollapsed?: any
31
+ collapsibleTrail?: boolean,
32
+ collapsed?: boolean,
33
+ paddingBottom?: string,
34
+ paddingTop?: string,
35
+ paddingLeft?: string,
36
+ paddingRight?: string,
37
+ paddingX?: string,
38
+ paddingY?: string,
39
+ padding?: 'none' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl',
40
+ orientation?: "vertical" | "horizontal",
41
+ variant?: "normal" | "subtle",
30
42
  } & GlobalProps
31
43
 
32
44
  const NavItem = (props: NavItemProps) => {
33
45
  const {
34
46
  active = false,
35
47
  aria = {},
48
+ fontWeight = "regular",
36
49
  children,
37
50
  className,
38
51
  collapsible,
39
- collapsibleClick,
40
52
  data = {},
53
+ dark = false,
54
+ fontSize = "normal",
41
55
  iconLeft,
42
56
  iconRight,
43
- iconRightClick,
44
- iconLeftClick,
57
+ onIconRightClick,
58
+ onIconLeftClick,
45
59
  id,
46
60
  imageUrl,
47
61
  link,
48
62
  onClick = () => { },
49
63
  target = '_self',
50
64
  text = '',
51
- toggleCollapsed
65
+ collapsibleTrail,
66
+ collapsed,
67
+ // orientation,
68
+ // variant,
69
+ padding,
70
+ paddingX,
71
+ paddingY,
72
+ paddingBottom,
73
+ paddingTop,
74
+ paddingLeft,
75
+ paddingRight
52
76
  } = props
53
77
 
78
+ const filteredProps = {...props}
79
+ delete filteredProps?.padding
80
+ delete filteredProps?.paddingX
81
+ delete filteredProps?.paddingY
82
+ delete filteredProps?.paddingBottom
83
+ delete filteredProps?.paddingTop
84
+ delete filteredProps?.paddingRight
85
+ delete filteredProps?.paddingLeft
86
+
54
87
  const Tag = link ? 'a' : 'div'
55
88
  const activeClass = active === true ? 'active' : ''
89
+ const collapsibleTrailClass = collapsible && collapsibleTrail ? 'collapsible_trail' : ''
90
+ const fontSizeClass = fontSize === 'small' ? "font_size_small" : "font_size_normal"
91
+ const fontWeightClass = fontWeight === 'bold' ? "font_bold" : fontWeight === 'bolder' ? "font_bolder" : "font_regular"
56
92
  const ariaProps = buildAriaProps(aria)
57
93
  const dataProps = buildDataProps(data)
58
- const classes = classnames(buildCss('pb_nav_list_kit_item', activeClass), collapsible ? 'pb_collapsible_nav_item' : '', globalProps(props), className)
94
+ const classes = classnames(buildCss('pb_nav_list_kit_item', activeClass),
95
+ collapsible ? buildCss('pb_collapsible_nav_item', activeClass, collapsibleTrailClass) : '',
96
+ fontSizeClass,
97
+ fontWeightClass,
98
+ globalProps(filteredProps),
99
+ className)
100
+
101
+ const tagClasses = classnames(collapsible ? 'pb_nav_list_item_link_collapsible' : "pb_nav_list_item_link",
102
+ globalProps({
103
+ padding,
104
+ paddingBottom,
105
+ paddingLeft,
106
+ paddingRight,
107
+ paddingTop,
108
+ paddingX,
109
+ paddingY,
110
+ }))
59
111
 
60
112
 
61
113
  const handleIconClick = (e:any) => {
62
- if (iconLeftClick) {
114
+ if (onIconLeftClick) {
63
115
  e.stopPropagation();
64
- iconLeftClick()
116
+ onIconLeftClick()
65
117
  }
66
118
  }
67
119
 
@@ -77,20 +129,19 @@ const NavItem = (props: NavItemProps) => {
77
129
  <Collapsible icon={iconRight ? iconRight : ['plus','minus']}
78
130
  iconSize="xs"
79
131
  id={id}
80
- collapsed={toggleCollapsed}
81
- iconClick={iconRightClick}
82
- onClick={collapsibleClick}
132
+ collapsed={collapsed}
133
+ onIconClick={onIconRightClick}
134
+ onClick={onClick}
83
135
  >
84
- <Collapsible.Main>
136
+ <Collapsible.Main dark={dark}>
85
137
  <Tag
86
- className="pb_nav_list_item_link"
138
+ className={tagClasses}
87
139
  href={link}
88
- onClick={onClick}
89
140
  target={target}
90
141
  >
91
142
  {imageUrl &&
92
143
  <div
93
- className="pb_nav_list_item_icon_section"
144
+ className="pb_nav_list_item_icon_section_collapsible"
94
145
  key={imageUrl}
95
146
  onClick={(e)=>handleIconClick(e)}
96
147
  >
@@ -103,18 +154,18 @@ const NavItem = (props: NavItemProps) => {
103
154
 
104
155
  {iconLeft &&
105
156
  <div
106
- className="pb_nav_list_item_icon_section"
157
+ className="pb_nav_list_item_icon_section_collapsible"
107
158
  key={iconLeft}
108
159
  onClick={(e)=>handleIconClick(e)}
109
160
  >
110
161
  <Icon
111
- className="pb_nav_list_item_icon_left"
162
+ className="pb_nav_list_item_icon_left_collapsible"
112
163
  fixedWidth
113
164
  icon={iconLeft}
114
165
  />
115
166
  </div>
116
167
  }
117
- <span className="pb_nav_list_item_text">
168
+ <span className="pb_nav_list_item_text_collapsible">
118
169
  {text}
119
170
  </span>
120
171
  </Tag>
@@ -125,8 +176,8 @@ const NavItem = (props: NavItemProps) => {
125
176
  </Collapsible>
126
177
  ) : (
127
178
  <Tag
128
- className="pb_nav_list_item_link"
129
- href={link}
179
+ className={tagClasses}
180
+ href={link}
130
181
  onClick={onClick}
131
182
  target={target}
132
183
  >
@@ -0,0 +1,5 @@
1
+ @mixin collapsible_trail_class {
2
+ .pb_collapsible_content_kit {
3
+ border-color: $border_light;
4
+ }
5
+ }
@@ -22,6 +22,11 @@ type NavProps = {
22
22
  variant?: "normal" | "subtle",
23
23
  } & GlobalProps
24
24
 
25
+ type NavChildProps = {
26
+ orientation: "vertical" | "horizontal";
27
+ variant: "normal" | "subtle";
28
+ };
29
+
25
30
  const Nav = (props: NavProps) => {
26
31
  const {
27
32
  aria = {},
@@ -50,6 +55,18 @@ const Nav = (props: NavProps) => {
50
55
  className
51
56
  )
52
57
 
58
+ // Map over the children and clone them with orientation and variant props to gain access to them in navItem
59
+ const childrenWithProps = React.Children.map(children, (child) => {
60
+ if (React.isValidElement(child)) {
61
+ const childProps: NavChildProps = {
62
+ orientation: orientation,
63
+ variant: variant,
64
+ };
65
+ return React.cloneElement(child, childProps);
66
+ }
67
+ return child;
68
+ });
69
+
53
70
  return (
54
71
  <nav
55
72
  {...ariaProps}
@@ -72,7 +89,7 @@ const Nav = (props: NavProps) => {
72
89
  </a>
73
90
  </div>
74
91
  }
75
- <ul>{children}</ul>
92
+ <ul>{childrenWithProps}</ul>
76
93
  </nav>
77
94
  )
78
95
  }
@@ -27,14 +27,7 @@
27
27
  }
28
28
  [class*=_text] {
29
29
  flex: 1;
30
- font-weight: $regular;
31
30
  }
32
- }
33
- &[class*=_active] [class*=_link] {
34
- @include pb_title_4;
35
- color: $primary;
36
- letter-spacing: normal;
37
- }
38
31
  &:hover {
39
32
  background-color: rgba($primary, 0.03);
40
33
  [class*=_icon] {
@@ -44,5 +37,11 @@
44
37
  color: $primary;
45
38
  }
46
39
  }
40
+ }
41
+ &[class*=_active] [class*=_link] {
42
+ @include pb_title_4;
43
+ color: $primary;
44
+ letter-spacing: normal;
45
+ }
47
46
  }
48
47
  }
@@ -56,7 +56,7 @@ $selector: ".pb_nav_list";
56
56
  color: $primary;
57
57
  }
58
58
  [class*=_text] {
59
- color: $primary;
59
+ color: $primary !important;
60
60
  }
61
61
  }
62
62
  }
@@ -1,63 +1,90 @@
1
- import React from "react"
2
- import { Nav, NavItem, useCollapsible } from "../.."
1
+ import React from "react";
2
+ import { Nav, NavItem } from '../..'
3
3
 
4
4
  const CollapsibleNav = (props) => {
5
- const navItems = ["Overview", "Albums", "Similar Artists"]
6
- // eslint-disable-next-line react-hooks/rules-of-hooks
7
- const collapsibles = navItems.map(() => useCollapsible(true))
8
-
9
- const handleMainClick = (index) => {
10
- collapsibles.forEach(([, , setCollapsed], idx) => {
11
- if (idx === index) {
12
- setCollapsed(false)
13
- } else {
14
- setCollapsed(true)
15
- }
16
- })
17
- }
18
-
19
-
20
- const handleIconRightClick = (index) => {
21
- const [isCollapsed, setCollapsed] = collapsibles[index]
22
- setCollapsed(!isCollapsed)
23
- }
24
-
25
5
  return (
26
- <>
27
- <Nav variant='subtle'>
28
- {navItems.map((text, index) => {
29
- const [collapsed] = collapsibles[index]
30
- return (
31
- <NavItem
32
- collapsible
33
- collapsibleClick={() => handleMainClick(index)}
34
- iconLeft="chevron-down"
35
- iconRightClick={() => handleIconRightClick(index)}
36
- id={`collapsible-nav-item-${index + 1}`}
37
- key={index}
38
- link="#"
39
- text={text}
40
- toggleCollapsed={collapsed}
41
- {...props}
42
- >
43
- <NavItem link="#"
44
- text="City"
45
- {...props}
46
- />
47
- <NavItem link="#"
48
- text="People"
49
- {...props}
50
- />
51
- <NavItem link="#"
52
- text="Business"
53
- {...props}
54
- />
55
- </NavItem>
56
- );
57
- })}
58
- </Nav>
59
- </>
60
- )
61
- }
6
+ <Nav>
7
+ <NavItem
8
+ active
9
+ collapsible
10
+ collapsibleTrail
11
+ fontWeight="bolder"
12
+ iconLeft="city"
13
+ iconRight={["plus", "minus"]}
14
+ link="#"
15
+ text="Overview"
16
+ {...props}
17
+ >
18
+ <NavItem
19
+ link="#"
20
+ text="City"
21
+ {...props}
22
+ />
23
+ <NavItem
24
+ link="#"
25
+ text="People"
26
+ {...props}
27
+ />
28
+ <NavItem
29
+ link="#"
30
+ text="Business"
31
+ {...props}
32
+ />
33
+ </NavItem>
34
+ <NavItem
35
+ collapsible
36
+ collapsibleTrail
37
+ fontWeight="bolder"
38
+ iconLeft="theater-masks"
39
+ iconRight={["plus", "minus"]}
40
+ link="#"
41
+ text="Albums"
42
+ {...props}
43
+ >
44
+ <NavItem
45
+ link="#"
46
+ text="Entertainment"
47
+ {...props}
48
+ />
49
+ <NavItem
50
+ link="#"
51
+ text="Food"
52
+ {...props}
53
+ />
54
+ <NavItem
55
+ link="#"
56
+ text="Style"
57
+ {...props}
58
+ />
59
+ </NavItem>
60
+ <NavItem
61
+ collapsible
62
+ collapsibleTrail
63
+ fontWeight="bolder"
64
+ iconLeft="city"
65
+ iconRight={["plus", "minus"]}
66
+ link="#"
67
+ text="Similar Artists"
68
+ {...props}
69
+ >
70
+ <NavItem
71
+ link="#"
72
+ text="City"
73
+ {...props}
74
+ />
75
+ <NavItem
76
+ link="#"
77
+ text="People"
78
+ {...props}
79
+ />
80
+ <NavItem
81
+ link="#"
82
+ text="Business"
83
+ {...props}
84
+ />
85
+ </NavItem>
86
+ </Nav>
87
+ );
88
+ };
62
89
 
63
90
  export default CollapsibleNav
@@ -0,0 +1 @@
1
+ The `collapsible` prop allows users to create a nested, collapsible nav. Pass `collapsible` to NavItem and nest as many more NavItems as needed as children for that NavItem to see this in action.
@@ -0,0 +1,58 @@
1
+ import React from "react"
2
+ import { Nav, NavItem, useCollapsible } from "../.."
3
+
4
+ const CollapsibleNavCustom = (props) => {
5
+ const navItems = ["Overview", "Albums", "Similar Artists"]
6
+ // eslint-disable-next-line react-hooks/rules-of-hooks
7
+ const collapsibles = navItems.map(() => useCollapsible(true))
8
+
9
+ const handleMainClick = (index) => {
10
+ collapsibles.forEach(([, , setCollapsed], idx) => {
11
+ if (idx === index) {
12
+ setCollapsed(false)
13
+ } else {
14
+ setCollapsed(true)
15
+ }
16
+ })
17
+ }
18
+
19
+ return (
20
+ <>
21
+ <Nav variant='subtle'>
22
+ {navItems.map((text, index) => {
23
+ const [collapsed] = collapsibles[index]
24
+ return (
25
+ <NavItem
26
+ collapsed={collapsed}
27
+ collapsible
28
+ collapsibleTrail
29
+ fontWeight="bolder"
30
+ iconLeft="chevron-down"
31
+ id={`collapsible-nav-item-${index + 1}`}
32
+ key={index}
33
+ link="#"
34
+ onClick={() => handleMainClick(index)}
35
+ text={text}
36
+ {...props}
37
+ >
38
+ <NavItem link="#"
39
+ text="City"
40
+ {...props}
41
+ />
42
+ <NavItem link="#"
43
+ text="People"
44
+ {...props}
45
+ />
46
+ <NavItem link="#"
47
+ text="Business"
48
+ {...props}
49
+ />
50
+ </NavItem>
51
+ );
52
+ })}
53
+ </Nav>
54
+ </>
55
+ )
56
+ }
57
+
58
+ export default CollapsibleNavCustom
@@ -0,0 +1 @@
1
+ The collapsible nav kit uses our Collapsible kit under the hood and as such the `useCollapsible` hook can be used to achieve custom toggling of the collapsible nav. To do this, you must import and declare the `useCollapsible` hook and pass it's state to the `collapsed` prop. See our code example below to see how this can be done.
@@ -0,0 +1,23 @@
1
+ <%= pb_rails("nav", props: { variant: "subtle" }) do %>
2
+ <%= pb_rails("nav/item", props: { text: "Overview", link: "#", font_weight:"bolder", font_size:"small", collapsible: true, icon_left:"city", collapsible_trail: true }) do %>
3
+ <%= pb_rails("nav", props: { variant: "subtle" }) do %>
4
+ <%= pb_rails("nav/item", props: { text: "City", link: "#" }) %>
5
+ <%= pb_rails("nav/item", props: { text: "People", link: "#" }) %>
6
+ <%= pb_rails("nav/item", props: { text: "Business", link: "#" }) %>
7
+ <% end %>
8
+ <% end %>
9
+ <%= pb_rails("nav/item", props: { text: "Albums", link: "#", font_weight:"bolder", font_size:"small", collapsible: true, icon_left: "theater-masks", collapsible_trail:true }) do %>
10
+ <%= pb_rails("nav", props: { variant: "subtle" }) do %>
11
+ <%= pb_rails("nav/item", props: { text: "Entertainment", link: "#" }) %>
12
+ <%= pb_rails("nav/item", props: { text: "Food", link: "#" }) %>
13
+ <%= pb_rails("nav/item", props: { text: "Style", link: "#" }) %>
14
+ <% end %>
15
+ <% end %>
16
+ <%= pb_rails("nav/item", props: { text: "Similar Artists", link: "#", font_weight:"bolder", font_size:"small", collapsible: true, icon_left: "city", collapsible_trail:true }) do %>
17
+ <%= pb_rails("nav", props: { variant: "subtle" }) do %>
18
+ <%= pb_rails("nav/item", props: { text: "City", link: "#" }) %>
19
+ <%= pb_rails("nav/item", props: { text: "People", link: "#" }) %>
20
+ <%= pb_rails("nav/item", props: { text: "Business", link: "#" }) %>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
@@ -1,11 +1,15 @@
1
1
  import React from "react";
2
2
  import { Nav, NavItem } from '../..'
3
3
 
4
- const CollapsibleNavCustomIcons = (props) => {
4
+ const CollapsibleNavEmphasize = (props) => {
5
5
  return (
6
- <Nav variant="subtle">
6
+ <Nav variant="bold">
7
7
  <NavItem
8
- collapsible
8
+ active
9
+ collapsible
10
+ collapsibleTrail
11
+ fontSize="small"
12
+ fontWeight="bolder"
9
13
  iconLeft="city"
10
14
  iconRight={["plus", "minus"]}
11
15
  link="#"
@@ -29,8 +33,10 @@ const CollapsibleNavCustomIcons = (props) => {
29
33
  />
30
34
  </NavItem>
31
35
  <NavItem
32
- active
33
36
  collapsible
37
+ collapsibleTrail
38
+ fontSize="small"
39
+ fontWeight="bolder"
34
40
  iconLeft="theater-masks"
35
41
  iconRight={["plus", "minus"]}
36
42
  link="#"
@@ -55,6 +61,9 @@ const CollapsibleNavCustomIcons = (props) => {
55
61
  </NavItem>
56
62
  <NavItem
57
63
  collapsible
64
+ collapsibleTrail
65
+ fontSize="small"
66
+ fontWeight="bolder"
58
67
  iconLeft="city"
59
68
  iconRight={["plus", "minus"]}
60
69
  link="#"
@@ -81,4 +90,4 @@ const CollapsibleNavCustomIcons = (props) => {
81
90
  );
82
91
  };
83
92
 
84
- export default CollapsibleNavCustomIcons;
93
+ export default CollapsibleNavEmphasize;
@@ -0,0 +1 @@
1
+ The ` navBold` prop can be passed to NavItem
@@ -7,7 +7,8 @@ examples:
7
7
  - borderless_nav: No Borders
8
8
  - subtle_nav: Subtle Variant
9
9
  - subtle_with_icons_nav: Subtle With Icons
10
- # - collapsible_nav: Subtle With Collapsible
10
+ - collapsible_nav: Collapsible Nav
11
+ - collapsible_nav_emphasize: Collapsible Nav with Emphasize Styling
11
12
  - subtle_no_highlight_nav: Subtle No Highlight
12
13
  - bold_vertical_nav: Bold Variant
13
14
  - horizontal_nav: Horizontal Nav
@@ -25,8 +26,9 @@ examples:
25
26
  - borderless_nav: No Borders
26
27
  - subtle_nav: Subtle Variant
27
28
  - subtle_with_icons_nav: Subtle With Icons
28
- # - collapsible_nav: Subtle With Collapsible
29
- # - collapsible_nav_custom_icons: Subtle With Collapsible (No custom toggling)
29
+ - collapsible_nav: Collapsible Nav
30
+ - collapsible_nav_emphasize: Collapsible Nav with Emphasize Styling
31
+ - collapsible_nav_custom: Collapsible Nav With Custom Toggling
30
32
  - subtle_no_highlight_nav: Subtle No Highlight
31
33
  - bold_vertical_nav: Bold Variant
32
34
  - horizontal_nav: Horizontal Nav
@@ -14,4 +14,5 @@ export { default as NewTab } from './_new_tab.jsx'
14
14
  export { default as BoldHorizontalNav } from './_bold_horizontal_nav.jsx'
15
15
  export { default as BoldVerticalNav } from './_bold_vertical_nav.jsx'
16
16
  export { default as CollapsibleNav } from './_collapsible_nav.jsx'
17
- export { default as CollapsibleNavCustomIcons } from './_collapsible_nav_custom_icons.jsx'
17
+ export { default as CollapsibleNavCustom } from './_collapsible_nav_custom.jsx'
18
+ export { default as CollapsibleNavEmphasize } from "./_collapsible_nav_emphasize.jsx"
@@ -2,19 +2,20 @@
2
2
  aria: object.aria,
3
3
  class: object.classname,
4
4
  data: object.data,
5
+ dark: object.dark,
5
6
  id: object.id) do %>
6
7
  <% if object.collapsible %>
7
8
  <%= pb_rails("collapsible", props: { name: "collapsible-nav-example" }) do %>
8
- <%= pb_rails("collapsible/collapsible_main", props: { name: "default-collapsible-nav", icon: object.collapsible_icons, size: "xs" }) do %>
9
+ <%= pb_rails("collapsible/collapsible_main", props: { name: "default-collapsible-nav", icon: object.collapsible_icons, size: "xs", dark: object.dark }) do %>
9
10
  <%= content_tag(object.tag,
10
11
  object.link ? object.link_options : object.options) do %>
11
12
  <% if object.image_url %>
12
- <%= pb_rails("image", props: { url: object.image_url, classname: "pb_nav_img_wrapper" }) %>
13
+ <%= pb_rails("image", props: { url: object.image_url, classname: "pb_nav_img_wrapper_collapsible" }) %>
13
14
  <% end %>
14
15
  <% if object.icon_left %>
15
- <%= pb_rails("icon", props: { icon: object.icon_left, classname: "pb_nav_list_item_icon_left", fixed_width: true}) %>
16
+ <%= pb_rails("icon", props: { icon: object.icon_left, classname: "pb_nav_list_item_icon_left_collapsible", fixed_width: true}) %>
16
17
  <% end %>
17
- <span class="pb_nav_list_item_text">
18
+ <span class="pb_nav_list_item_text_collapsible">
18
19
  <%= object.text %>
19
20
  </span>
20
21
  <% end %>
@@ -4,9 +4,16 @@ module Playbook
4
4
  module PbNav
5
5
  class Item < Playbook::KitBase
6
6
  prop :active, type: Playbook::Props::Boolean, default: false
7
+ prop :font_size, type: Playbook::Props::Enum,
8
+ values: %w[normal small],
9
+ default: "normal"
10
+ prop :font_weight, type: Playbook::Props::Enum,
11
+ values: %w[bold regular bolder],
12
+ default: "regular"
7
13
  prop :collapsible, type: Playbook::Props::Boolean, default: false
8
14
  prop :link
9
15
  prop :text
16
+ prop :collapsible_trail, type: Playbook::Props::Boolean, default: false
10
17
  prop :icon_left
11
18
  prop :icon_right
12
19
  prop :image_url
@@ -15,9 +22,9 @@ module Playbook
15
22
  default: "_self"
16
23
  def classname
17
24
  if collapsible
18
- "pb_collapsible_nav_item #{generate_classname('pb_nav_list_kit_item', active_class)}"
25
+ "#{generate_classname('pb_nav_list_kit_item', active_class)} #{generate_classname('pb_collapsible_nav_item', active_class, collapsible_trail_class)} #{font_size_class} #{font_weight_class}"
19
26
  else
20
- generate_classname("pb_nav_list_kit_item", active_class)
27
+ "#{generate_classname('pb_nav_list_kit_item', active_class)} #{font_size_class} #{font_weight_class}"
21
28
  end
22
29
  end
23
30
 
@@ -27,7 +34,7 @@ module Playbook
27
34
 
28
35
  def options
29
36
  {
30
- class: "pb_nav_list_item_link",
37
+ class: collapsible ? "pb_nav_list_item_link_collapsible" : "pb_nav_list_item_link",
31
38
  }.compact
32
39
  end
33
40
 
@@ -47,6 +54,25 @@ module Playbook
47
54
  def active_class
48
55
  active ? "active" : nil
49
56
  end
57
+
58
+ def font_weight_class
59
+ case font_weight
60
+ when "bold"
61
+ "font_bold"
62
+ when "bolder"
63
+ "font_bolder"
64
+ else
65
+ "font_regular"
66
+ end
67
+ end
68
+
69
+ def collapsible_trail_class
70
+ collapsible_trail ? "collapsible_trail" : nil
71
+ end
72
+
73
+ def font_size_class
74
+ font_size === "small" ? "font_size_small" : "font_size_normal"
75
+ end
50
76
  end
51
77
  end
52
78
  end