playbook_ui 12.36.0 → 12.37.0

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +2 -1
  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 +15 -13
  10. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +24 -8
  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 +15 -4
  13. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +1 -1
  14. data/app/pb_kits/playbook/pb_collapsible/useCollapsible.tsx +14 -0
  15. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +22 -1
  16. data/app/pb_kits/playbook/pb_nav/_item.tsx +26 -2
  17. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.jsx +59 -79
  18. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom_icons.jsx +4 -6
  19. data/app/pb_kits/playbook/pb_nav/docs/example.yml +1 -1
  20. data/app/pb_kits/playbook/pb_nav/item.rb +5 -1
  21. data/app/pb_kits/playbook/pb_pill/docs/_pill_default_swift.md +5 -0
  22. data/app/pb_kits/playbook/pb_pill/docs/_pill_props_swift.md +5 -0
  23. data/app/pb_kits/playbook/pb_pill/docs/_pill_variants_swift.md +10 -0
  24. data/app/pb_kits/playbook/pb_pill/docs/example.yml +5 -0
  25. data/app/pb_kits/playbook/pb_radio/docs/_radio_alignment_swift.md +16 -0
  26. data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_swift.md +18 -0
  27. data/app/pb_kits/playbook/pb_radio/docs/_radio_default_swift.md +15 -0
  28. data/app/pb_kits/playbook/pb_radio/docs/_radio_error_swift.md +14 -0
  29. data/app/pb_kits/playbook/pb_radio/docs/_radio_orientation_swift.md +15 -0
  30. data/app/pb_kits/playbook/pb_radio/docs/_radio_padding_swift.md +31 -0
  31. data/app/pb_kits/playbook/pb_radio/docs/_radio_props_swift.md +10 -0
  32. data/app/pb_kits/playbook/pb_radio/docs/_radio_spacing_swift.md +36 -0
  33. data/app/pb_kits/playbook/pb_radio/docs/_radio_subtitle_swift.md +13 -0
  34. data/app/pb_kits/playbook/pb_radio/docs/example.yml +11 -0
  35. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_options.html.erb +12 -0
  36. data/app/pb_kits/playbook/pb_text_input/docs/example.yml +1 -0
  37. data/app/pb_kits/playbook/pb_text_input/text_input.rb +1 -1
  38. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align_swift.md +45 -0
  39. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default_swift.md +26 -0
  40. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_swift.md +25 -0
  41. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_props_swift.md +10 -0
  42. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_swift.md +67 -0
  43. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_swift.md +19 -0
  44. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +8 -0
  45. data/dist/playbook-rails.js +7 -7
  46. data/lib/playbook/version.rb +2 -2
  47. metadata +27 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0a98a2809eb8f345dd7c46ebb952d03d2e5fdc357804e70e344546ab013b8a0
4
- data.tar.gz: e72f1812fd7f819375cc1788d6eabb2a280bd392a3fb46e2af4b1d8ce022fbd7
3
+ metadata.gz: 92ab5b99e6bc4d33881e4087db34763fd0d818607d0412cbe5305e9a376c6c31
4
+ data.tar.gz: 0ed7902b4ebff49a4dbc5dd60e7e6411311ab7fdee3bf0812501a6d2fe63a0f5
5
5
  SHA512:
6
- metadata.gz: ce9e6790efcab2fce2080635bdd3331f7a9ae8af497756d5a2c6111a57ac859ce4a73d567f0c51123dcc271ee46f1b2ebc2e02e1af28bed233f860c93850a973
7
- data.tar.gz: d6d7bcb5b2684b64a05806680f5c9129082888394d2036ef53866121a68622d3a0a01803287b08881836186983fe9f5e4641225333a36bcfbb69fad597829683
6
+ metadata.gz: 40657ad869c7a5ca5aa6494a5d4ef300f1e00aa30fe8f4fac97402b4fe169f46dbccdf166fa926a91543c6751b410471dcb1ad0add23601b99e71758204f3cd2
7
+ data.tar.gz: 3b44c5fd8f3a0fad567fd4ff9064273ea86e86b5dec6ec283cc419fff7fad6a354571b4d7e77fafb59391fd913c0431f6764a00b895896aec9d1cc11ab1c8880
@@ -129,4 +129,5 @@ 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'
132
+ export {default as mapTheme} from './pb_map/pbMapTheme'
133
+ export {default as useCollapsible} from './pb_collapsible/useCollapsible'
@@ -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,5 +1,6 @@
1
- import React, { useState } from 'react'
1
+ import React, { useEffect } from 'react'
2
2
  import classnames from 'classnames'
3
+ import useCollapsible from './useCollapsible'
3
4
 
4
5
  import { globalProps } from '../utilities/globalProps'
5
6
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
@@ -16,20 +17,15 @@ type CollapsibleProps = {
16
17
  className?: string,
17
18
  collapsed?: boolean,
18
19
  data?: object,
19
- icon?: string | string[]
20
+ icon?: string | string[],
20
21
  iconColor?: 'default' | 'light' | 'lighter' | 'link' | 'error' | 'success',
21
- iconSize?: IconSizes
22
+ iconSize?: IconSizes,
23
+ iconClick?: ()=> void,
24
+ onClick?: ()=> void,
22
25
  id?: string,
23
26
  }
24
27
 
25
- const useCollapsible = (initial = false) => {
26
- const [collapsed, setCollapsed] = useState(initial)
27
28
 
28
- return [
29
- collapsed,
30
- () => setCollapsed((t) => !t),
31
- ]
32
- }
33
29
 
34
30
  const Collapsible = ({
35
31
  aria = {},
@@ -40,10 +36,17 @@ const Collapsible = ({
40
36
  icon,
41
37
  iconColor = 'default',
42
38
  iconSize,
39
+ iconClick,
40
+ onClick,
43
41
  id,
44
42
  ...props
45
43
  }: CollapsibleProps) => {
46
- const [isCollapsed, collapse] = useCollapsible(collapsed)
44
+ const [isCollapsed, toggle, setIsCollapsed] = useCollapsible(collapsed)
45
+
46
+ useEffect(()=> {
47
+ setIsCollapsed(collapsed)
48
+ },[collapsed])
49
+
47
50
  const CollapsibleParent = React.Children.toArray(children) as JSX.Element[]
48
51
 
49
52
  if (CollapsibleParent.length !== 2) {
@@ -62,9 +65,8 @@ const Collapsible = ({
62
65
  globalProps(props),
63
66
  className
64
67
  )
65
-
66
68
  return (
67
- <CollapsibleContext.Provider value={{ collapsed: isCollapsed, collapse, icon, iconSize, iconColor }}>
69
+ <CollapsibleContext.Provider value={{ collapsed: isCollapsed, toggle, icon, iconSize, iconColor, iconClick, onClick }}>
68
70
  <div
69
71
  {...ariaProps}
70
72
  {...dataProps}
@@ -33,7 +33,7 @@ type CollapsibleMainProps = {
33
33
  children: React.ReactNode[] | React.ReactNode,
34
34
  className?: string,
35
35
  cursor?: string,
36
-
36
+ onClick?: ()=> void
37
37
  }
38
38
  type IconColors = "default" | "light" | "lighter" | "link" | "error" | "success"
39
39
 
@@ -42,9 +42,10 @@ type IconProps = {
42
42
  icon?: string[] | string
43
43
  iconColor?: IconColors
44
44
  iconSize?: IconSizes
45
+ iconClick?: ()=> void
45
46
  }
46
47
 
47
- const ToggleIcon = ({ collapsed, icon, iconSize, iconColor }: IconProps) => {
48
+ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor, iconClick }: IconProps) => {
48
49
  const color = colorMap[iconColor]
49
50
 
50
51
  const showIcon = (icon: string |string[]) => {
@@ -54,6 +55,13 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor }: IconProps) => {
54
55
  return icon
55
56
  }
56
57
 
58
+ const handleIconClick = (e:any) => {
59
+ if (iconClick) {
60
+ e.stopPropagation();
61
+ iconClick()
62
+ }
63
+ }
64
+
57
65
  return (
58
66
  <>
59
67
  {collapsed ? (
@@ -61,6 +69,7 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor }: IconProps) => {
61
69
  className="icon_wrapper"
62
70
  key={icon ? showIcon(icon)[0] : "chevron-down"}
63
71
  style={{ verticalAlign: "middle", color: color }}
72
+ onClick={(e)=> handleIconClick(e)}
64
73
  >
65
74
  <Icon icon={icon ? showIcon(icon)[0] : "chevron-down"} size={iconSize} />
66
75
  </div>
@@ -69,6 +78,7 @@ const ToggleIcon = ({ collapsed, icon, iconSize, iconColor }: IconProps) => {
69
78
  className="icon_wrapper"
70
79
  key={icon ? showIcon(icon)[1] : "chevron-up"}
71
80
  style={{ verticalAlign: "middle", color: color }}
81
+ onClick={(e)=> handleIconClick(e)}
72
82
  >
73
83
  <Icon icon={icon ? showIcon(icon)[1] : "chevron-up"} size={iconSize} />
74
84
  </div>
@@ -83,13 +93,18 @@ const CollapsibleMain = ({
83
93
  cursor = 'pointer',
84
94
  ...props
85
95
  }: CollapsibleMainProps): React.ReactElement=> {
86
- const context: {[key: string]: IconColors | (() => void)} | boolean = useContext(CollapsibleContext)
96
+ const {collapsed, toggle, icon, iconSize, iconColor, iconClick, onClick}: any = useContext(CollapsibleContext)
87
97
  const mainCSS = buildCss('pb_collapsible_main_kit')
88
98
  const mainSpacing = globalProps(props, { cursor })
89
99
 
100
+ const handleCollapsibleClick = (e:any) => {
101
+ toggle();
102
+ onClick && onClick(e)
103
+ }
104
+
90
105
  return (
91
106
  <div className={classnames(mainCSS, className, mainSpacing)}>
92
- <div onClick={context.collapse as (() => void)}>
107
+ <div onClick={(e)=>handleCollapsibleClick(e)}>
93
108
  <Flex
94
109
  spacing="between"
95
110
  vertical="center"
@@ -97,10 +112,11 @@ const CollapsibleMain = ({
97
112
  <FlexItem>{children}</FlexItem>
98
113
  <FlexItem>
99
114
  <ToggleIcon
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}
115
+ collapsed={collapsed as () => void}
116
+ iconColor={iconColor as IconColors}
117
+ iconSize={iconSize as IconSizes}
118
+ icon={icon as string[] | string}
119
+ iconClick={iconClick}
104
120
  />
105
121
  </FlexItem>
106
122
  </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 %>">
12
+ <div style="color: <%= object.icon_color %>" class="icon_wrapper" >
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,8 +1,17 @@
1
1
  import React from 'react'
2
- import { Collapsible } from '../..'
2
+ import { Collapsible, useCollapsible, Button } from '../..'
3
3
 
4
- const CollapsibleIcons = () => (
5
- <Collapsible icon={['plus','minus']}>
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
+ >
6
15
  <Collapsible.Main>
7
16
  <div>{'Main Section'}</div>
8
17
  </Collapsible.Main>
@@ -14,6 +23,8 @@ const CollapsibleIcons = () => (
14
23
  </div>
15
24
  </Collapsible.Content>
16
25
  </Collapsible>
17
- )
26
+ </>
27
+ )
28
+ }
18
29
 
19
30
  export default CollapsibleIcons
@@ -10,4 +10,4 @@ examples:
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
@@ -0,0 +1,14 @@
1
+ import {useState} from 'react';
2
+
3
+ const useCollapsible = (initial= true) => {
4
+ const [collapsed, setCollapsed] = useState(initial)
5
+
6
+ const toggle = () => setCollapsed((prev) => !prev)
7
+ return [
8
+ collapsed,
9
+ toggle,
10
+ setCollapsed as any,
11
+ ]
12
+ }
13
+
14
+ export default useCollapsible
@@ -1,6 +1,27 @@
1
+ @import "../tokens/spacing";
2
+ @import "../tokens/colors";
3
+ @import "../tokens/border_radius";
4
+
1
5
  [class^="pb_nav_list"] {
6
+ .pb_collapsible_nav_item {
2
7
  .pb_collapsible_main_kit,
3
- .pb_collapsible_content_kit {
8
+ .pb_collapsible_content_kit,
9
+ .pb_collapsible_kit {
4
10
  padding: 0 !important;
5
11
  }
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
+ }
6
27
  }
@@ -14,15 +14,19 @@ type NavItemProps = {
14
14
  children?: React.ReactNode[] | React.ReactNode,
15
15
  className?: string,
16
16
  collapsible?: boolean,
17
+ collapsibleClick?: () => void,
17
18
  data?: object,
18
19
  iconLeft?: string,
19
20
  iconRight?: string | string[],
21
+ iconRightClick?: () => void,
22
+ iconLeftClick?: () => void,
20
23
  id?: string,
21
24
  imageUrl?: string,
22
25
  link?: string,
23
26
  onClick?: React.MouseEventHandler<HTMLElement>,
24
27
  target?: '_blank' | '_self' | '_parent' | '_top',
25
28
  text: string,
29
+ toggleCollapsed?: any
26
30
  } & GlobalProps
27
31
 
28
32
  const NavItem = (props: NavItemProps) => {
@@ -32,22 +36,34 @@ const NavItem = (props: NavItemProps) => {
32
36
  children,
33
37
  className,
34
38
  collapsible,
39
+ collapsibleClick,
35
40
  data = {},
36
41
  iconLeft,
37
42
  iconRight,
43
+ iconRightClick,
44
+ iconLeftClick,
38
45
  id,
39
46
  imageUrl,
40
47
  link,
41
48
  onClick = () => { },
42
49
  target = '_self',
43
50
  text = '',
51
+ toggleCollapsed
44
52
  } = props
45
53
 
46
54
  const Tag = link ? 'a' : 'div'
47
55
  const activeClass = active === true ? 'active' : ''
48
56
  const ariaProps = buildAriaProps(aria)
49
57
  const dataProps = buildDataProps(data)
50
- const classes = classnames(buildCss('pb_nav_list_kit_item', activeClass), globalProps(props), className)
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
+ }
51
67
 
52
68
  return (
53
69
  <li
@@ -58,7 +74,13 @@ const NavItem = (props: NavItemProps) => {
58
74
  >
59
75
  {
60
76
  collapsible ? (
61
- <Collapsible icon={iconRight ? iconRight : ['plus','minus']} iconSize="xs">
77
+ <Collapsible icon={iconRight ? iconRight : ['plus','minus']}
78
+ iconSize="xs"
79
+ id={id}
80
+ collapsed={toggleCollapsed}
81
+ iconClick={iconRightClick}
82
+ onClick={collapsibleClick}
83
+ >
62
84
  <Collapsible.Main>
63
85
  <Tag
64
86
  className="pb_nav_list_item_link"
@@ -70,6 +92,7 @@ const NavItem = (props: NavItemProps) => {
70
92
  <div
71
93
  className="pb_nav_list_item_icon_section"
72
94
  key={imageUrl}
95
+ onClick={(e)=>handleIconClick(e)}
73
96
  >
74
97
  <Image
75
98
  className="pb_nav_img_wrapper"
@@ -82,6 +105,7 @@ const NavItem = (props: NavItemProps) => {
82
105
  <div
83
106
  className="pb_nav_list_item_icon_section"
84
107
  key={iconLeft}
108
+ onClick={(e)=>handleIconClick(e)}
85
109
  >
86
110
  <Icon
87
111
  className="pb_nav_list_item_icon_left"
@@ -1,83 +1,63 @@
1
- import React from "react";
2
-
3
- import Nav from "../_nav";
4
- import NavItem from "../_item";
1
+ import React from "react"
2
+ import { Nav, NavItem, useCollapsible } from "../.."
5
3
 
6
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
+
7
25
  return (
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
- };
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
+ }
82
62
 
83
- export default CollapsibleNav;
63
+ export default CollapsibleNav
@@ -1,7 +1,5 @@
1
1
  import React from "react";
2
-
3
- import Nav from "../_nav";
4
- import NavItem from "../_item";
2
+ import { Nav, NavItem } from '../..'
5
3
 
6
4
  const CollapsibleNavCustomIcons = (props) => {
7
5
  return (
@@ -9,7 +7,7 @@ const CollapsibleNavCustomIcons = (props) => {
9
7
  <NavItem
10
8
  collapsible
11
9
  iconLeft="city"
12
- iconRight={["chevron-down", "chevron-up"]}
10
+ iconRight={["plus", "minus"]}
13
11
  link="#"
14
12
  text="Overview"
15
13
  {...props}
@@ -34,7 +32,7 @@ const CollapsibleNavCustomIcons = (props) => {
34
32
  active
35
33
  collapsible
36
34
  iconLeft="theater-masks"
37
- iconRight={["chevron-down", "chevron-up"]}
35
+ iconRight={["plus", "minus"]}
38
36
  link="#"
39
37
  text="Albums"
40
38
  {...props}
@@ -58,7 +56,7 @@ const CollapsibleNavCustomIcons = (props) => {
58
56
  <NavItem
59
57
  collapsible
60
58
  iconLeft="city"
61
- iconRight={["chevron-down", "chevron-up"]}
59
+ iconRight={["plus", "minus"]}
62
60
  link="#"
63
61
  text="Similar Artists"
64
62
  {...props}
@@ -26,7 +26,7 @@ examples:
26
26
  - subtle_nav: Subtle Variant
27
27
  - subtle_with_icons_nav: Subtle With Icons
28
28
  # - collapsible_nav: Subtle With Collapsible
29
- # - collapsible_nav_custom_icons: Subtle With Collapsible (Custom Toggle Icons)
29
+ # - collapsible_nav_custom_icons: Subtle With Collapsible (No custom toggling)
30
30
  - subtle_no_highlight_nav: Subtle No Highlight
31
31
  - bold_vertical_nav: Bold Variant
32
32
  - horizontal_nav: Horizontal Nav
@@ -14,7 +14,11 @@ module Playbook
14
14
  values: %w[_blank _self _parent _top],
15
15
  default: "_self"
16
16
  def classname
17
- generate_classname("pb_nav_list_kit_item", active_class)
17
+ if collapsible
18
+ "pb_collapsible_nav_item #{generate_classname('pb_nav_list_kit_item', active_class)}"
19
+ else
20
+ generate_classname("pb_nav_list_kit_item", active_class)
21
+ end
18
22
  end
19
23
 
20
24
  def tag
@@ -0,0 +1,5 @@
1
+ ![pill-default](https://github.com/powerhome/playbook/assets/92755007/608cb5dd-9400-45f4-afb2-ac1bbd972c3d)
2
+
3
+ ```swift
4
+ PBPill("default")
5
+ ```
@@ -0,0 +1,5 @@
1
+ ### Props
2
+ | Name | Type | Description | Default | Values |
3
+ | --- | ----------- | --------- | --------- | --------- |
4
+ | **title** | `String` | Specifies the value of the Pill | | |
5
+ | **variant** | `Variant` | Changes the color of the Pill | `.neutral` | `.error` `.info` `.neutral` `.primary` `.success` `.warning` |
@@ -0,0 +1,10 @@
1
+ ![pill-variants](https://github.com/powerhome/playbook/assets/92755007/79ac4260-633e-4429-8b1f-0a97b8178a86)
2
+
3
+ ```swift
4
+ PBPill("success", variant: .success)
5
+ PBPill("error", variant: .error)
6
+ PBPill("warning", variant: .warning)
7
+ PBPill("info", variant: .info)
8
+ PBPill("neutral", variant: .neutral)
9
+ PBPill("primary", variant: .primary)
10
+ ```