playbook_ui 12.36.0.pre.alpha.PLAY942collapsiblenav21035 → 12.36.0.pre.alpha.svgiconmethods1059

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -2
  3. data/app/pb_kits/playbook/pb_badge/docs/_badge_colors_swift.md +33 -0
  4. data/app/pb_kits/playbook/pb_badge/docs/_badge_default_swift.md +9 -0
  5. data/app/pb_kits/playbook/pb_badge/docs/_badge_notification_swift.md +9 -0
  6. data/app/pb_kits/playbook/pb_badge/docs/_badge_props_swift.md +6 -0
  7. data/app/pb_kits/playbook/pb_badge/docs/_badge_rounded_swift.md +9 -0
  8. data/app/pb_kits/playbook/pb_badge/docs/example.yml +7 -0
  9. data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +13 -15
  10. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +8 -24
  11. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +4 -15
  13. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +2 -2
  14. data/app/pb_kits/playbook/pb_icon/docs/_icon_animate.html.erb +1 -0
  15. data/app/pb_kits/playbook/pb_icon/docs/_icon_custom.html.erb +2 -0
  16. data/app/pb_kits/playbook/pb_icon/docs/_icon_svg.html.erb +4 -0
  17. data/app/pb_kits/playbook/pb_icon/docs/example.yml +10 -9
  18. data/app/pb_kits/playbook/pb_icon/icon.html.erb +3 -3
  19. data/app/pb_kits/playbook/pb_icon/icon.rb +17 -0
  20. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -22
  21. data/app/pb_kits/playbook/pb_nav/_item.tsx +2 -26
  22. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.jsx +79 -59
  23. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom_icons.jsx +6 -4
  24. data/app/pb_kits/playbook/pb_nav/docs/example.yml +2 -2
  25. data/app/pb_kits/playbook/pb_nav/item.rb +1 -5
  26. data/app/pb_kits/playbook/pb_pill/docs/_pill_default_swift.md +5 -0
  27. data/app/pb_kits/playbook/pb_pill/docs/_pill_props_swift.md +5 -0
  28. data/app/pb_kits/playbook/pb_pill/docs/_pill_variants_swift.md +10 -0
  29. data/app/pb_kits/playbook/pb_pill/docs/example.yml +5 -0
  30. data/app/pb_kits/playbook/pb_radio/docs/_radio_alignment_swift.md +16 -0
  31. data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_swift.md +18 -0
  32. data/app/pb_kits/playbook/pb_radio/docs/_radio_default_swift.md +15 -0
  33. data/app/pb_kits/playbook/pb_radio/docs/_radio_error_swift.md +14 -0
  34. data/app/pb_kits/playbook/pb_radio/docs/_radio_orientation_swift.md +15 -0
  35. data/app/pb_kits/playbook/pb_radio/docs/_radio_padding_swift.md +31 -0
  36. data/app/pb_kits/playbook/pb_radio/docs/_radio_props_swift.md +10 -0
  37. data/app/pb_kits/playbook/pb_radio/docs/_radio_spacing_swift.md +36 -0
  38. data/app/pb_kits/playbook/pb_radio/docs/_radio_subtitle_swift.md +13 -0
  39. data/app/pb_kits/playbook/pb_radio/docs/example.yml +11 -0
  40. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align_swift.md +45 -0
  41. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default_swift.md +26 -0
  42. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_swift.md +25 -0
  43. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_props_swift.md +10 -0
  44. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_swift.md +67 -0
  45. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_swift.md +19 -0
  46. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +8 -0
  47. data/dist/playbook-rails.js +7 -7
  48. data/lib/playbook/version.rb +1 -1
  49. metadata +26 -3
  50. data/app/pb_kits/playbook/pb_collapsible/useCollapsible.tsx +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6db34cdefea717b8e05435f34ffeca2768916aafc09c5fc75fe585cf29eeed83
4
- data.tar.gz: '079ed7c7c64c2c7ee0825b84398cb909e08d08badd9cab8fb16870c4391210f0'
3
+ metadata.gz: ec711d432d4190c4c97e001b5f2b54451759c429c49f24b2c05fac61d6709e24
4
+ data.tar.gz: e23d53f03b689f982ddd4da48ebc0654cbaccee55546ebd9695578bb9eafa1b2
5
5
  SHA512:
6
- metadata.gz: 96a3770480378c8930a578bf3c021aebcce6cf4dd8f45b9c6de753bfa67768334db24beede7c1f24d64b522cb4607c174bd7b120a4c24eada9d71c68427d70d0
7
- data.tar.gz: 3708ce113f29d42deeaea57d6e166676fe51d9e9618a1d11383e82a2bf8658497b62dadd111ba2a2332ca5edf69f56cab283639da997399c07b3be04cda70093
6
+ metadata.gz: 3f21320b6f2effb489b63c81a39ece8b395bf295c4b1993f155e70871c211ce2bc12cb141c27631fdb1c97a6b67ce93009f20adcdfd4291d8af76df2c567d2ba
7
+ data.tar.gz: f260ad098d4c076e73f170c6e4a9d139d39cb6f3eb431fb925dbb39b6ebdd9f330115a39b89977f8d49acde1334fef9f2bd4433f2650b60d7d2a4f93e17d3409
@@ -129,5 +129,4 @@ export { default as PbTypeahead } from './pb_typeahead'
129
129
  export { default as dialogHelper } from './pb_dialog/dialogHelper'
130
130
 
131
131
  //Theming
132
- export {default as mapTheme} from './pb_map/pbMapTheme'
133
- export {default as useCollapsible} from './pb_collapsible/useCollapsible'
132
+ export {default as mapTheme} from './pb_map/pbMapTheme'
@@ -0,0 +1,33 @@
1
+ ![badge-colors](https://github.com/powerhome/playbook/assets/92755007/52ce34ef-eb0d-48c0-9232-89edfff60cef)
2
+
3
+ ```swift
4
+ HStack {
5
+ PBBadge(text: "1", rounded: true, variant: .chat)
6
+ PBBadge(text: "4", variant: .chat)
7
+ PBBadge(text: "1000", variant: .chat)
8
+
9
+ PBBadge(text: "1", rounded: true, variant: .error)
10
+ PBBadge(text: "4", variant: .error)
11
+ PBBadge(text: "1000", variant: .error)
12
+
13
+ PBBadge(text: "1", rounded: true, variant: .info)
14
+ PBBadge(text: "4", variant: .info)
15
+ PBBadge(text: "1000", variant: .info)
16
+
17
+ PBBadge(text: "1", rounded: true, variant: .neutral)
18
+ PBBadge(text: "4", variant: .neutral)
19
+ PBBadge(text: "1000", variant: .neutral)
20
+
21
+ PBBadge(text: "1", rounded: true, variant: .primary)
22
+ PBBadge(text: "4", variant: .primary)
23
+ PBBadge(text: "1000", variant: .primary)
24
+
25
+ PBBadge(text: "1", rounded: true, variant: .success)
26
+ PBBadge(text: "4", variant: .success)
27
+ PBBadge(text: "1000", variant: .success)
28
+
29
+ PBBadge(text: "1", rounded: true, variant: .warning)
30
+ PBBadge(text: "4", variant: .warning)
31
+ PBBadge(text: "1000", variant: .warning)
32
+ }
33
+ ```
@@ -0,0 +1,9 @@
1
+ ![badge-rectangle](https://github.com/powerhome/playbook/assets/92755007/04188c68-84f0-475b-9764-7b9a325f73da)
2
+
3
+ ```swift
4
+ HStack {
5
+ PBBadge(text: "+1", variant: .primary)
6
+ PBBadge(text: "+4", variant: .primary)
7
+ PBBadge(text: "+1000", variant: .primary)
8
+ }
9
+ ```
@@ -0,0 +1,9 @@
1
+ ![badge-chat-notification](https://github.com/powerhome/playbook/assets/92755007/f769c3bc-6a63-465d-8538-3efb5f3ec0d3)
2
+
3
+ ```swift
4
+ HStack {
5
+ PBBadge(text: "1", rounded: true, variant: .chat)
6
+ PBBadge(text: "4", variant: .chat)
7
+ PBBadge(text: "1000", variant: .chat)
8
+ }
9
+ ```
@@ -0,0 +1,6 @@
1
+ ### Props
2
+ | Name | Type | Description | Default | Values |
3
+ | --- | ----------- | --------- | --------- | --------- |
4
+ | **text** | `String` | Specifies the value of the Badge | | |
5
+ | **rounded** | `Bool` | Displays the rounded variant | `false` | |
6
+ | **variant** | `Variant` | Changes the color of the Badge | `.primary` | `.chat` `.error` `.info` `.neutral` `.primary` `.success` `.warning` |
@@ -0,0 +1,9 @@
1
+ ![badge-rounded](https://github.com/powerhome/playbook/assets/92755007/775a906f-0108-4ee1-a277-e7b9f2715a2b)
2
+
3
+ ```swift
4
+ HStack {
5
+ PBBadge(text: "+1", rounded: true, variant: .primary)
6
+ PBBadge(text: "+4", rounded: true, variant: .primary)
7
+ PBBadge(text: "+1000", rounded: true, variant: .primary)
8
+ }
9
+ ```
@@ -10,3 +10,10 @@ examples:
10
10
  - badge_rounded: Rounded
11
11
  - badge_colors: Colors
12
12
  - badge_notification: Notification
13
+
14
+ swift:
15
+ - badge_default_swift: Rectangle
16
+ - badge_rounded_swift: Rounded
17
+ - badge_colors_swift: Colors
18
+ - badge_notification_swift: Notification
19
+ - badge_props_swift: ""
@@ -1,6 +1,5 @@
1
- import React, { useEffect } from 'react'
1
+ import React, { useState } from 'react'
2
2
  import classnames from 'classnames'
3
- import useCollapsible from './useCollapsible'
4
3
 
5
4
  import { globalProps } from '../utilities/globalProps'
6
5
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
@@ -17,15 +16,20 @@ type CollapsibleProps = {
17
16
  className?: string,
18
17
  collapsed?: boolean,
19
18
  data?: object,
20
- icon?: string | string[],
19
+ icon?: string | string[]
21
20
  iconColor?: 'default' | 'light' | 'lighter' | 'link' | 'error' | 'success',
22
- iconSize?: IconSizes,
23
- iconClick?: ()=> void,
24
- onClick?: ()=> void,
21
+ iconSize?: IconSizes
25
22
  id?: string,
26
23
  }
27
24
 
25
+ const useCollapsible = (initial = false) => {
26
+ const [collapsed, setCollapsed] = useState(initial)
28
27
 
28
+ return [
29
+ collapsed,
30
+ () => setCollapsed((t) => !t),
31
+ ]
32
+ }
29
33
 
30
34
  const Collapsible = ({
31
35
  aria = {},
@@ -36,17 +40,10 @@ const Collapsible = ({
36
40
  icon,
37
41
  iconColor = 'default',
38
42
  iconSize,
39
- iconClick,
40
- onClick,
41
43
  id,
42
44
  ...props
43
45
  }: CollapsibleProps) => {
44
- const [isCollapsed, toggle, setIsCollapsed] = useCollapsible(collapsed)
45
-
46
- useEffect(()=> {
47
- setIsCollapsed(collapsed)
48
- },[collapsed])
49
-
46
+ const [isCollapsed, collapse] = useCollapsible(collapsed)
50
47
  const CollapsibleParent = React.Children.toArray(children) as JSX.Element[]
51
48
 
52
49
  if (CollapsibleParent.length !== 2) {
@@ -65,8 +62,9 @@ const Collapsible = ({
65
62
  globalProps(props),
66
63
  className
67
64
  )
65
+
68
66
  return (
69
- <CollapsibleContext.Provider value={{ collapsed: isCollapsed, toggle, icon, iconSize, iconColor, iconClick, onClick }}>
67
+ <CollapsibleContext.Provider value={{ collapsed: isCollapsed, collapse, icon, iconSize, iconColor }}>
70
68
  <div
71
69
  {...ariaProps}
72
70
  {...dataProps}
@@ -33,7 +33,7 @@ type CollapsibleMainProps = {
33
33
  children: React.ReactNode[] | React.ReactNode,
34
34
  className?: string,
35
35
  cursor?: string,
36
- onClick?: ()=> void
36
+
37
37
  }
38
38
  type IconColors = "default" | "light" | "lighter" | "link" | "error" | "success"
39
39
 
@@ -42,10 +42,9 @@ type IconProps = {
42
42
  icon?: string[] | string
43
43
  iconColor?: IconColors
44
44
  iconSize?: IconSizes
45
- iconClick?: ()=> void
46
45
  }
47
46
 
48
- const ToggleIcon = ({ collapsed, icon, iconSize, iconColor, iconClick }: IconProps) => {
47
+ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor }: IconProps) => {
49
48
  const color = colorMap[iconColor]
50
49
 
51
50
  const showIcon = (icon: string |string[]) => {
@@ -55,13 +54,6 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor, iconClick }: IconPro
55
54
  return icon
56
55
  }
57
56
 
58
- const handleIconClick = (e:any) => {
59
- if (iconClick) {
60
- e.stopPropagation();
61
- iconClick()
62
- }
63
- }
64
-
65
57
  return (
66
58
  <>
67
59
  {collapsed ? (
@@ -69,7 +61,6 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor, iconClick }: IconPro
69
61
  className="icon_wrapper"
70
62
  key={icon ? showIcon(icon)[0] : "chevron-down"}
71
63
  style={{ verticalAlign: "middle", color: color }}
72
- onClick={(e)=> handleIconClick(e)}
73
64
  >
74
65
  <Icon icon={icon ? showIcon(icon)[0] : "chevron-down"} size={iconSize} />
75
66
  </div>
@@ -78,7 +69,6 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor, iconClick }: IconPro
78
69
  className="icon_wrapper"
79
70
  key={icon ? showIcon(icon)[1] : "chevron-up"}
80
71
  style={{ verticalAlign: "middle", color: color }}
81
- onClick={(e)=> handleIconClick(e)}
82
72
  >
83
73
  <Icon icon={icon ? showIcon(icon)[1] : "chevron-up"} size={iconSize} />
84
74
  </div>
@@ -93,18 +83,13 @@ const CollapsibleMain = ({
93
83
  cursor = 'pointer',
94
84
  ...props
95
85
  }: CollapsibleMainProps): React.ReactElement=> {
96
- const {collapsed, toggle, icon, iconSize, iconColor, iconClick, onClick}: any = useContext(CollapsibleContext)
86
+ const context: {[key: string]: IconColors | (() => void)} | boolean = useContext(CollapsibleContext)
97
87
  const mainCSS = buildCss('pb_collapsible_main_kit')
98
88
  const mainSpacing = globalProps(props, { cursor })
99
89
 
100
- const handleCollapsibleClick = (e:any) => {
101
- toggle();
102
- onClick && onClick(e)
103
- }
104
-
105
90
  return (
106
91
  <div className={classnames(mainCSS, className, mainSpacing)}>
107
- <div onClick={(e)=>handleCollapsibleClick(e)}>
92
+ <div onClick={context.collapse as (() => void)}>
108
93
  <Flex
109
94
  spacing="between"
110
95
  vertical="center"
@@ -112,11 +97,10 @@ const CollapsibleMain = ({
112
97
  <FlexItem>{children}</FlexItem>
113
98
  <FlexItem>
114
99
  <ToggleIcon
115
- collapsed={collapsed as () => void}
116
- iconColor={iconColor as IconColors}
117
- iconSize={iconSize as IconSizes}
118
- icon={icon as string[] | string}
119
- iconClick={iconClick}
100
+ collapsed={context.collapsed as () => void}
101
+ iconColor={context.iconColor as IconColors}
102
+ iconSize={context.iconSize as IconSizes}
103
+ icon={context.icon as string[] | string}
120
104
  />
121
105
  </FlexItem>
122
106
  </Flex>
@@ -9,7 +9,7 @@
9
9
  <%= content.presence %>
10
10
  <% end %>
11
11
  <%= pb_rails("flex/flex_item") do %>
12
- <div style="color: <%= object.icon_color %>" class="icon_wrapper" >
12
+ <div style="color: <%= object.icon_color %>">
13
13
  <% if object.icon.present? %>
14
14
  <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[0], id:"collapsible_open_icon", size: object.size }) %>
15
15
  <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[1], id:"collapsible_close_icon", size: object.size }) %>
@@ -1,17 +1,8 @@
1
1
  import React from 'react'
2
- import { Collapsible, useCollapsible, Button } from '../..'
2
+ import { Collapsible } from '../..'
3
3
 
4
- const CollapsibleIcons = () => {
5
- const [isCollapsed, setIsCollapsed] = useCollapsible(true)
6
-
7
- return (
8
- <>
9
- <Button onClick={()=> setIsCollapsed(!isCollapsed)}>
10
- {isCollapsed ? "Expand" : "Collapse"}
11
- </Button>
12
- <Collapsible collapsed={isCollapsed}
13
- icon={['plus','minus']}
14
- >
4
+ const CollapsibleIcons = () => (
5
+ <Collapsible icon={['plus','minus']}>
15
6
  <Collapsible.Main>
16
7
  <div>{'Main Section'}</div>
17
8
  </Collapsible.Main>
@@ -23,8 +14,6 @@ const CollapsibleIcons = () => {
23
14
  </div>
24
15
  </Collapsible.Content>
25
16
  </Collapsible>
26
- </>
27
- )
28
- }
17
+ )
29
18
 
30
19
  export default CollapsibleIcons
@@ -4,10 +4,10 @@ examples:
4
4
  - collapsible_default: Default
5
5
  - collapsible_size: Size
6
6
  - collapsible_color: Color
7
- - collapsible_icons: Custom Icons
7
+ # - collapsible_icons: Custom Icons
8
8
 
9
9
  react:
10
10
  - collapsible_default: Default
11
11
  - collapsible_size: Size
12
12
  - collapsible_color: Color
13
- - collapsible_icons: Custom Icons
13
+ # - collapsible_icons: Custom Icons
@@ -1,3 +1,4 @@
1
1
  <p><%= pb_rails("icon", props: { icon: "spinner", spin: true, fixed_width: true, size: "2x" }) %> <span>Spin</span></p>
2
2
  <br/>
3
3
  <p><%= pb_rails("icon", props: { icon: "spinner", pulse: true, fixed_width: true, size: "2x" }) %> <span>Pulse</span></p>
4
+
@@ -14,3 +14,5 @@
14
14
  parent element's css color properties."
15
15
  } ) %>
16
16
  </div>
17
+
18
+
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("icon", props: { size: "5x", custom_icon: "copilot", padding_left: "xl" } ) %>
2
+ <%= pb_rails("icon", props: { size: "5x", custom_icon: "squirrel" } ) %>
3
+ <%= pb_rails("icon", props: { size: "5x", custom_icon: "star" } ) %>
4
+
@@ -1,14 +1,15 @@
1
1
  examples:
2
2
  rails:
3
- - icon_default: Icon Default
4
- - icon_rotate: Icon Rotate
5
- - icon_flip: Icon Flip
6
- - icon_animate: Icon Animation
7
- - icon_pull: Icon Pull
8
- - icon_border: Icon Border
9
- - icon_sizes: Icon Sizes
10
- - icon_custom: Icon Custom
11
- - icon_fa_kit: Icon with FontAwesome Kit
3
+ # - icon_default: Icon Default
4
+ # - icon_rotate: Icon Rotate
5
+ # - icon_flip: Icon Flip
6
+ # - icon_animate: Icon Animation
7
+ # - icon_pull: Icon Pull
8
+ # - icon_border: Icon Border
9
+ # - icon_sizes: Icon Sizes
10
+ # - icon_custom: Icon Custom
11
+ # - icon_fa_kit: Icon with FontAwesome Kit
12
+ - icon_svg: Icon SVG
12
13
 
13
14
  react:
14
15
  - icon_default: Icon Default
@@ -1,15 +1,15 @@
1
1
  <% if object.custom_icon %>
2
- <%= object.render_svg(object.custom_icon) %>
2
+ <%= object.embedded_svg(object.custom_icon) %>
3
3
  <% elsif object.valid_emoji(object.icon) %>
4
4
  <span class="pb_icon_kit_emoji"><%= object.icon.html_safe %></span>
5
5
  <% else %>
6
6
  <%= content_tag(:i, nil,
7
7
  id: object.id,
8
8
  data: object.data,
9
- class: object.classname
9
+ class: object.classname,
10
10
  ) %>
11
11
  <%= content_tag(:span, nil,
12
12
  aria: { label: "#{object.icon} icon" }.merge(object.aria),
13
13
  hidden: true
14
14
  ) %>
15
- <% end %>
15
+ <% end %>
@@ -90,6 +90,23 @@ module Playbook
90
90
  end
91
91
  end
92
92
 
93
+ def embedded_svg(icon_name)
94
+ file = File.read(Rails.root.join("app", "assets", "images", "#{icon_name}.svg"))
95
+ doc = Nokogiri::HTML::DocumentFragment.parse file
96
+ svg = doc.at_css "svg"
97
+
98
+ doc.to_html.html_safe
99
+
100
+ size_factor = size.to_i
101
+ if size_factor > 1
102
+ pixel_size = size_factor * 16
103
+ svg["width"] = pixel_size.to_s
104
+ svg["height"] = pixel_size.to_s
105
+ end
106
+
107
+ raw doc
108
+ end
109
+
93
110
  private
94
111
 
95
112
  def border_class
@@ -1,27 +1,6 @@
1
- @import "../tokens/spacing";
2
- @import "../tokens/colors";
3
- @import "../tokens/border_radius";
4
-
5
1
  [class^="pb_nav_list"] {
6
- .pb_collapsible_nav_item {
7
2
  .pb_collapsible_main_kit,
8
- .pb_collapsible_content_kit,
9
- .pb_collapsible_kit {
3
+ .pb_collapsible_content_kit {
10
4
  padding: 0 !important;
11
5
  }
12
-
13
- .icon_wrapper {
14
- border-radius: $border_radius_rounded;
15
- width: 19px;
16
- height: 19px;
17
- display:flex;
18
- align-items: center;
19
- justify-content: center;
20
- margin-right: $space_xs;
21
- &:hover {
22
- background-color: rgba($primary_action, $opacity_3);
23
-
24
- }
25
- }
26
- }
27
6
  }
@@ -14,19 +14,15 @@ type NavItemProps = {
14
14
  children?: React.ReactNode[] | React.ReactNode,
15
15
  className?: string,
16
16
  collapsible?: boolean,
17
- collapsibleClick?: () => void,
18
17
  data?: object,
19
18
  iconLeft?: string,
20
19
  iconRight?: string | string[],
21
- iconRightClick?: () => void,
22
- iconLeftClick?: () => void,
23
20
  id?: string,
24
21
  imageUrl?: string,
25
22
  link?: string,
26
23
  onClick?: React.MouseEventHandler<HTMLElement>,
27
24
  target?: '_blank' | '_self' | '_parent' | '_top',
28
25
  text: string,
29
- toggleCollapsed?: any
30
26
  } & GlobalProps
31
27
 
32
28
  const NavItem = (props: NavItemProps) => {
@@ -36,34 +32,22 @@ const NavItem = (props: NavItemProps) => {
36
32
  children,
37
33
  className,
38
34
  collapsible,
39
- collapsibleClick,
40
35
  data = {},
41
36
  iconLeft,
42
37
  iconRight,
43
- iconRightClick,
44
- iconLeftClick,
45
38
  id,
46
39
  imageUrl,
47
40
  link,
48
41
  onClick = () => { },
49
42
  target = '_self',
50
43
  text = '',
51
- toggleCollapsed
52
44
  } = props
53
45
 
54
46
  const Tag = link ? 'a' : 'div'
55
47
  const activeClass = active === true ? 'active' : ''
56
48
  const ariaProps = buildAriaProps(aria)
57
49
  const dataProps = buildDataProps(data)
58
- const classes = classnames(buildCss('pb_nav_list_kit_item', activeClass), collapsible ? 'pb_collapsible_nav_item' : '', globalProps(props), className)
59
-
60
-
61
- const handleIconClick = (e:any) => {
62
- if (iconLeftClick) {
63
- e.stopPropagation();
64
- iconLeftClick()
65
- }
66
- }
50
+ const classes = classnames(buildCss('pb_nav_list_kit_item', activeClass), globalProps(props), className)
67
51
 
68
52
  return (
69
53
  <li
@@ -74,13 +58,7 @@ const NavItem = (props: NavItemProps) => {
74
58
  >
75
59
  {
76
60
  collapsible ? (
77
- <Collapsible icon={iconRight ? iconRight : ['plus','minus']}
78
- iconSize="xs"
79
- id={id}
80
- collapsed={toggleCollapsed}
81
- iconClick={iconRightClick}
82
- onClick={collapsibleClick}
83
- >
61
+ <Collapsible icon={iconRight ? iconRight : ['plus','minus']} iconSize="xs">
84
62
  <Collapsible.Main>
85
63
  <Tag
86
64
  className="pb_nav_list_item_link"
@@ -92,7 +70,6 @@ const NavItem = (props: NavItemProps) => {
92
70
  <div
93
71
  className="pb_nav_list_item_icon_section"
94
72
  key={imageUrl}
95
- onClick={(e)=>handleIconClick(e)}
96
73
  >
97
74
  <Image
98
75
  className="pb_nav_img_wrapper"
@@ -105,7 +82,6 @@ const NavItem = (props: NavItemProps) => {
105
82
  <div
106
83
  className="pb_nav_list_item_icon_section"
107
84
  key={iconLeft}
108
- onClick={(e)=>handleIconClick(e)}
109
85
  >
110
86
  <Icon
111
87
  className="pb_nav_list_item_icon_left"
@@ -1,63 +1,83 @@
1
- import React from "react"
2
- import { Nav, NavItem, useCollapsible } from "../.."
3
-
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
- }
1
+ import React from "react";
18
2
 
3
+ import Nav from "../_nav";
4
+ import NavItem from "../_item";
19
5
 
20
- const handleIconRightClick = (index) => {
21
- const [isCollapsed, setCollapsed] = collapsibles[index]
22
- setCollapsed(!isCollapsed)
23
- }
24
-
6
+ const CollapsibleNav = (props) => {
25
7
  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
- }
8
+ <Nav variant="subtle">
9
+ <NavItem
10
+ collapsible
11
+ iconLeft="city"
12
+ link="#"
13
+ text="Overview"
14
+ {...props}
15
+ >
16
+ <NavItem
17
+ link="#"
18
+ text="City"
19
+ {...props}
20
+ />
21
+ <NavItem
22
+ link="#"
23
+ text="People"
24
+ {...props}
25
+ />
26
+ <NavItem
27
+ link="#"
28
+ text="Business"
29
+ {...props}
30
+ />
31
+ </NavItem>
32
+ <NavItem
33
+ active
34
+ collapsible
35
+ iconLeft="theater-masks"
36
+ link="#"
37
+ text="Albums"
38
+ {...props}
39
+ >
40
+ <NavItem
41
+ link="#"
42
+ text="Entertainment"
43
+ {...props}
44
+ />
45
+ <NavItem
46
+ link="#"
47
+ text="Food"
48
+ {...props}
49
+ />
50
+ <NavItem
51
+ link="#"
52
+ text="Style"
53
+ {...props}
54
+ />
55
+ </NavItem>
56
+ <NavItem
57
+ collapsible
58
+ iconLeft="city"
59
+ link="#"
60
+ text="Similar Artists"
61
+ {...props}
62
+ >
63
+ <NavItem
64
+ link="#"
65
+ text="City"
66
+ {...props}
67
+ />
68
+ <NavItem
69
+ link="#"
70
+ text="People"
71
+ {...props}
72
+ />
73
+ <NavItem
74
+ link="#"
75
+ text="Business"
76
+ {...props}
77
+ />
78
+ </NavItem>
79
+ </Nav>
80
+ );
81
+ };
62
82
 
63
- export default CollapsibleNav
83
+ export default CollapsibleNav;