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

Sign up to get free protection for your applications and to get access to all the features.
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