playbook_ui 13.24.0.pre.alpha.play1305drycontenttag2689 β†’ 13.25.0.pre.alpha.PBNTR272Dropdownkitv42769

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/index.js +2 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +1 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +1 -1
  9. data/app/pb_kits/playbook/pb_background/_background.tsx +7 -5
  10. data/app/pb_kits/playbook/pb_background/background.html.erb +0 -1
  11. data/app/pb_kits/playbook/pb_badge/badge.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_body/_body.tsx +1 -1
  13. data/app/pb_kits/playbook/pb_body/body.html.erb +1 -1
  14. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumb_item.html.erb +1 -1
  15. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.html.erb +1 -1
  16. data/app/pb_kits/playbook/pb_button/_button.scss +1 -1
  17. data/app/pb_kits/playbook/pb_button/button.html.erb +1 -2
  18. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_caption/caption.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
  21. data/app/pb_kits/playbook/pb_card/card_body.html.erb +1 -1
  22. data/app/pb_kits/playbook/pb_card/card_header.html.erb +1 -1
  23. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +1 -1
  24. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_collapsible/collapsible.html.erb +1 -1
  26. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.html.erb +1 -1
  27. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +1 -2
  28. data/app/pb_kits/playbook/pb_contact/contact.html.erb +1 -1
  29. data/app/pb_kits/playbook/pb_currency/currency.html.erb +1 -1
  30. data/app/pb_kits/playbook/pb_currency/docs/_currency_alignment_swift.md +43 -0
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_props_swift.md +12 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/_currency_size_swift.md +31 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/example.yml +5 -0
  34. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.html.erb +1 -1
  35. data/app/pb_kits/playbook/pb_date/date.html.erb +1 -1
  36. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -2
  37. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.html.erb +1 -1
  38. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.html.erb +1 -1
  39. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_default_swift.md +14 -0
  40. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_props_swift.md +9 -0
  41. data/app/pb_kits/playbook/pb_date_range_stacked/docs/example.yml +4 -0
  42. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +1 -1
  43. data/app/pb_kits/playbook/pb_date_time/date_time.html.erb +1 -1
  44. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +1 -1
  45. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.html.erb +1 -1
  46. data/app/pb_kits/playbook/pb_detail/detail.html.erb +1 -1
  47. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +4 -2
  48. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +1 -1
  49. data/app/pb_kits/playbook/pb_dialog/dialog_body.html.erb +1 -1
  50. data/app/pb_kits/playbook/pb_dialog/dialog_footer.html.erb +1 -1
  51. data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +1 -2
  52. data/app/pb_kits/playbook/pb_dialog/docs/example.yml +1 -1
  53. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +181 -0
  54. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +266 -0
  55. data/app/pb_kits/playbook/pb_dropdown/context/index.tsx +5 -0
  56. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.jsx +38 -0
  57. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.md +1 -0
  58. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +87 -0
  59. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.md +1 -0
  60. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.jsx +102 -0
  61. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.md +1 -0
  62. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +104 -0
  63. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +5 -0
  64. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_options.jsx +63 -0
  65. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_options.md +1 -0
  66. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_padding.jsx +48 -0
  67. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_padding.md +1 -0
  68. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_trigger.jsx +77 -0
  69. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_trigger.md +1 -0
  70. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_external_control.jsx +62 -0
  71. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_hook.jsx +75 -0
  72. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.jsx +39 -0
  73. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.md +1 -0
  74. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +15 -0
  75. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +10 -0
  76. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +207 -0
  77. data/app/pb_kits/playbook/pb_dropdown/hooks/useDropdown.tsx +17 -0
  78. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +61 -0
  79. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +109 -0
  80. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +116 -0
  81. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +190 -0
  82. data/app/pb_kits/playbook/pb_dropdown/utilities/subComponentHelper.tsx +61 -0
  83. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
  84. data/app/pb_kits/playbook/pb_filter/filter.html.erb +1 -1
  85. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.html.erb +1 -1
  86. data/app/pb_kits/playbook/pb_flex/flex.html.erb +1 -1
  87. data/app/pb_kits/playbook/pb_flex/flex_item.html.erb +1 -2
  88. data/app/pb_kits/playbook/pb_form_group/form_group.html.erb +1 -1
  89. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
  90. data/app/pb_kits/playbook/pb_hashtag/hashtag.html.erb +1 -1
  91. data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +1 -1
  92. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.html.erb +1 -1
  93. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +1 -1
  94. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.tsx +1 -1
  95. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.html.erb +1 -1
  96. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  97. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.test.js +3 -3
  98. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +1 -1
  99. data/app/pb_kits/playbook/pb_icon_value/icon_value.html.erb +1 -1
  100. data/app/pb_kits/playbook/pb_label_pill/label_pill.html.erb +1 -1
  101. data/app/pb_kits/playbook/pb_label_value/label_value.html.erb +1 -1
  102. data/app/pb_kits/playbook/pb_layout/body.html.erb +1 -1
  103. data/app/pb_kits/playbook/pb_layout/footer.html.erb +1 -1
  104. data/app/pb_kits/playbook/pb_layout/header.html.erb +1 -1
  105. data/app/pb_kits/playbook/pb_layout/item.html.erb +1 -1
  106. data/app/pb_kits/playbook/pb_layout/layout.html.erb +1 -1
  107. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +1 -1
  108. data/app/pb_kits/playbook/pb_list/_list_item.tsx +2 -2
  109. data/app/pb_kits/playbook/pb_list/item.html.erb +1 -2
  110. data/app/pb_kits/playbook/pb_list/list.html.erb +1 -3
  111. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +1 -1
  112. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
  113. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +1 -1
  114. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +1 -1
  115. data/app/pb_kits/playbook/pb_multiple_users/multiple_users.html.erb +1 -1
  116. data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.html.erb +1 -1
  117. data/app/pb_kits/playbook/pb_nav/item.html.erb +1 -4
  118. data/app/pb_kits/playbook/pb_nav/nav.html.erb +1 -1
  119. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -2
  120. data/app/pb_kits/playbook/pb_pagination/pagination.html.erb +1 -1
  121. data/app/pb_kits/playbook/pb_passphrase/passphrase.html.erb +1 -1
  122. data/app/pb_kits/playbook/pb_person/person.html.erb +1 -1
  123. data/app/pb_kits/playbook/pb_person_contact/person_contact.html.erb +1 -1
  124. data/app/pb_kits/playbook/pb_pill/pill.html.erb +1 -1
  125. data/app/pb_kits/playbook/pb_popover/popover.html.erb +1 -1
  126. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -2
  127. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -2
  128. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -1
  129. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +1 -1
  130. data/app/pb_kits/playbook/pb_radio/radio.html.erb +1 -2
  131. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +6 -2
  132. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +11 -1
  133. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +1 -1
  134. data/app/pb_kits/playbook/pb_select/select.html.erb +1 -1
  135. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -1
  136. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -1
  137. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -1
  138. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.html.erb +1 -1
  139. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +1 -1
  140. data/app/pb_kits/playbook/pb_source/source.html.erb +1 -1
  141. data/app/pb_kits/playbook/pb_source/source.test.js +2 -2
  142. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +1 -1
  143. data/app/pb_kits/playbook/pb_stat_change/stat_change.html.erb +1 -1
  144. data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +1 -1
  145. data/app/pb_kits/playbook/pb_table/table.html.erb +2 -8
  146. data/app/pb_kits/playbook/pb_table/table_body.html.erb +2 -2
  147. data/app/pb_kits/playbook/pb_table/table_cell.html.erb +2 -2
  148. data/app/pb_kits/playbook/pb_table/table_head.html.erb +2 -2
  149. data/app/pb_kits/playbook/pb_table/table_header.html.erb +2 -3
  150. data/app/pb_kits/playbook/pb_table/table_row.html.erb +2 -2
  151. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +5 -1
  152. data/app/pb_kits/playbook/pb_textarea/textarea.html.erb +1 -1
  153. data/app/pb_kits/playbook/pb_time/time.html.erb +1 -1
  154. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.html.erb +1 -1
  155. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.html.erb +1 -1
  156. data/app/pb_kits/playbook/pb_timeline/item.html.erb +1 -1
  157. data/app/pb_kits/playbook/pb_timeline/timeline.html.erb +1 -1
  158. data/app/pb_kits/playbook/pb_timestamp/timestamp.html.erb +1 -1
  159. data/app/pb_kits/playbook/pb_title/title.html.erb +1 -3
  160. data/app/pb_kits/playbook/pb_title_count/title_count.html.erb +1 -1
  161. data/app/pb_kits/playbook/pb_title_detail/title_detail.html.erb +1 -1
  162. data/app/pb_kits/playbook/pb_toggle/toggle.html.erb +1 -1
  163. data/app/pb_kits/playbook/pb_tooltip/tooltip.html.erb +1 -1
  164. data/app/pb_kits/playbook/pb_user/user.html.erb +1 -1
  165. data/app/pb_kits/playbook/pb_user_badge/user_badge.html.erb +1 -1
  166. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.html.erb +1 -1
  167. data/app/pb_kits/playbook/playbook-doc.js +2 -0
  168. data/dist/menu.yml +5 -1
  169. data/dist/playbook-rails.js +5 -5
  170. data/lib/playbook/kit_base.rb +1 -1
  171. data/lib/playbook/version.rb +2 -2
  172. metadata +38 -3
  173. /data/app/pb_kits/playbook/pb_dialog/docs/{_dialog_props_table.md β†’ _dialog_props_swift.md} +0 -0
@@ -0,0 +1,104 @@
1
+ import React, { useState } from 'react'
2
+ import { Dropdown, User, FlexItem, Badge, Avatar } from '../../'
3
+
4
+ const DropdownWithCustomDisplay = (props) => {
5
+ const [selectedOption, setSelectedOption] = useState();
6
+
7
+ const options = [
8
+ {
9
+ label: "Jasper Furniss",
10
+ value: "Jasper Furniss",
11
+ territory: "PHL",
12
+ title: "Senior UX Engineer",
13
+ id: "jasper-furniss",
14
+ status: "Offline"
15
+ },
16
+ {
17
+ label: "Ramon Ruiz",
18
+ value: "Ramon Ruiz",
19
+ territory: "PHL",
20
+ title: "Senior UX Desinger",
21
+ id: "ramon-ruiz",
22
+ status: "Away"
23
+ },
24
+ {
25
+ label: "Jason Cypret",
26
+ value: "Jason Cypret",
27
+ territory: "PHL",
28
+ title: "VP of User Experience",
29
+ id: "jason-cypret",
30
+ status: "Online"
31
+ },
32
+ {
33
+ label: "Courtney Long",
34
+ value: "Courtney Long",
35
+ territory: "PHL",
36
+ title: "UX Design Mentor",
37
+ id: "courtney-long",
38
+ status: "Online"
39
+ }
40
+ ];
41
+
42
+ const CustomDisplay = () => {
43
+ return (
44
+ <>
45
+ {
46
+ selectedOption && (
47
+ <Avatar
48
+ name={selectedOption.label}
49
+ size="xs"
50
+ />
51
+ )
52
+ }
53
+ </>
54
+ )
55
+ };
56
+
57
+
58
+ return (
59
+ <div>
60
+ <Dropdown
61
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
62
+ options={options}
63
+ {...props}
64
+ >
65
+ <Dropdown.Trigger customDisplay={<CustomDisplay/>}
66
+ placeholder="Select a User"
67
+ />
68
+ {options.map((option) => (
69
+ <Dropdown.Option key={option.id}
70
+ option={option}
71
+ >
72
+ <>
73
+ <FlexItem>
74
+ <User
75
+ align="left"
76
+ avatar
77
+ name={option.label}
78
+ orientation="horizontal"
79
+ territory={option.territory}
80
+ title={option.title}
81
+ />
82
+ </FlexItem>
83
+ <FlexItem>
84
+ <Badge dark
85
+ rounded
86
+ text={option.status}
87
+ variant={`${
88
+ option.status === "Offline"
89
+ ? "neutral"
90
+ : option.status === "Online"
91
+ ? "success"
92
+ : "warning"
93
+ }`}
94
+ />
95
+ </FlexItem>
96
+ </>
97
+ </Dropdown.Option>
98
+ ))}
99
+ </Dropdown>
100
+ </div>
101
+ )
102
+ }
103
+
104
+ export default DropdownWithCustomDisplay
@@ -0,0 +1,5 @@
1
+ The `customDisplay` prop can be used to customize the display of the selected item by allowing devs to pass in a component that will be rendered to the left of the default text-based display. In this example the Avatar kit is being used.
2
+
3
+ The `placeholder` prop can also be used to customize the placeholder text for the default Trigger.
4
+
5
+ The `onSelect` prop is a function that gives the dev one argument: the selected option. In this example we are using the `onSelect` to set a state with the selected option and using it to customize the `customDisplay`.
@@ -0,0 +1,63 @@
1
+ import React from 'react'
2
+ import { Dropdown, Icon, Body, FlexItem, Flex } from '../..'
3
+
4
+ const DropdownWithCustomOptions = (props) => {
5
+
6
+ const options = [
7
+ {
8
+ label: "United States",
9
+ value: "United States",
10
+ areaCode: "+1",
11
+ icon: "πŸ‡ΊπŸ‡Έ",
12
+ id: "United-states"
13
+ },
14
+ {
15
+ label: "Canada",
16
+ value: "Canada",
17
+ areaCode: "+1",
18
+ icon: "πŸ‡¨πŸ‡¦",
19
+ id: "canada"
20
+ },
21
+ {
22
+ label: "Pakistan",
23
+ value: "Pakistan",
24
+ areaCode: "+92",
25
+ icon: "πŸ‡΅πŸ‡°",
26
+ id: "pakistan"
27
+ }
28
+ ];
29
+
30
+
31
+ return (
32
+ <div>
33
+ <Dropdown
34
+ options={options}
35
+ {...props}
36
+ >
37
+ {options.map((option) => (
38
+ <Dropdown.Option key={option.id}
39
+ option={option}
40
+ >
41
+ <>
42
+ <FlexItem>
43
+ <Flex>
44
+ <Icon icon={option.icon}
45
+ paddingRight="xs"
46
+ />
47
+ <Body text={option.label} />
48
+ </Flex>
49
+ </FlexItem>
50
+ <FlexItem>
51
+ <Body color="light"
52
+ text={option.areaCode}
53
+ />
54
+ </FlexItem>
55
+ </>
56
+ </Dropdown.Option>
57
+ ))}
58
+ </Dropdown>
59
+ </div>
60
+ )
61
+ }
62
+
63
+ export default DropdownWithCustomOptions
@@ -0,0 +1 @@
1
+ The Dropdown also allows for custom options that can be passed in as children to the `Dropdown.Option` subcomponent. If no children are passed in the `Dropdown.Option`, the kit will render each option as text by default.
@@ -0,0 +1,48 @@
1
+ import React from 'react'
2
+ import { Dropdown } from '../..'
3
+
4
+ const DropdownWithCustomPadding = (props) => {
5
+
6
+ const options = [
7
+ {
8
+ label: "United States",
9
+ value: "United States",
10
+ areaCode: "+1",
11
+ icon: "πŸ‡ΊπŸ‡Έ",
12
+ id: "United-states"
13
+ },
14
+ {
15
+ label: "Canada",
16
+ value: "Canada",
17
+ areaCode: "+1",
18
+ icon: "πŸ‡¨πŸ‡¦",
19
+ id: "canada"
20
+ },
21
+ {
22
+ label: "Pakistan",
23
+ value: "Pakistan",
24
+ areaCode: "+92",
25
+ icon: "πŸ‡΅πŸ‡°",
26
+ id: "pakistan"
27
+ }
28
+ ];
29
+
30
+
31
+ return (
32
+ <div>
33
+ <Dropdown
34
+ options={options}
35
+ {...props}
36
+ >
37
+ {options.map((option) => (
38
+ <Dropdown.Option key={option.id}
39
+ option={option}
40
+ padding="sm"
41
+ />
42
+ ))}
43
+ </Dropdown>
44
+ </div>
45
+ )
46
+ }
47
+
48
+ export default DropdownWithCustomPadding
@@ -0,0 +1 @@
1
+ By default, the padding on each option in the dropdown is set to `xs`. The `padding` Global Props however can be used to override this default. In this example, we are setting padding to `sm`.
@@ -0,0 +1,77 @@
1
+ import React, { useState } from 'react'
2
+ import { Dropdown, Icon, Body, FlexItem, Flex, IconCircle } from '../..'
3
+
4
+ const DropdownWithCustomTrigger = (props) => {
5
+
6
+ const [selectedOption, setSelectedOption] = useState();
7
+
8
+ const options = [
9
+ {
10
+ label: "United States",
11
+ value: "United States",
12
+ areaCode: "+1",
13
+ icon: "πŸ‡ΊπŸ‡Έ",
14
+ id: "United-states"
15
+ },
16
+ {
17
+ label: "Canada",
18
+ value: "Canada",
19
+ areaCode: "+1",
20
+ icon: "πŸ‡¨πŸ‡¦",
21
+ id: "canada"
22
+ },
23
+ {
24
+ label: "Pakistan",
25
+ value: "Pakistan",
26
+ areaCode: "+92",
27
+ icon: "πŸ‡΅πŸ‡°",
28
+ id: "pakistan"
29
+ }
30
+ ];
31
+
32
+
33
+ return (
34
+ <div>
35
+ <Dropdown
36
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
37
+ options={options}
38
+ {...props}
39
+ >
40
+ <Dropdown.Trigger>
41
+ <div key={selectedOption ? selectedOption.icon : "flag"}>
42
+ <IconCircle
43
+ cursor="pointer"
44
+ icon={selectedOption ? selectedOption.icon : "flag"}
45
+ variant="royal"
46
+ />
47
+ </div>
48
+ </Dropdown.Trigger>
49
+ <Dropdown.Container maxWidth="xs">
50
+ {options.map((option) => (
51
+ <Dropdown.Option key={option.id}
52
+ option={option}
53
+ >
54
+ <>
55
+ <FlexItem>
56
+ <Flex>
57
+ <Icon icon={option.icon}
58
+ paddingRight="xs"
59
+ />
60
+ <Body text={option.label} />
61
+ </Flex>
62
+ </FlexItem>
63
+ <FlexItem>
64
+ <Body color="light"
65
+ text={option.areaCode}
66
+ />
67
+ </FlexItem>
68
+ </>
69
+ </Dropdown.Option>
70
+ ))}
71
+ </Dropdown.Container>
72
+ </Dropdown>
73
+ </div>
74
+ )
75
+ }
76
+
77
+ export default DropdownWithCustomTrigger
@@ -0,0 +1 @@
1
+ The Dropdown can also be given a custom Trigger by passing children to the `Dropdown.Trigger` subcomponent as shown in this example. Here we are using the IconCircle kit.
@@ -0,0 +1,62 @@
1
+ import React, { useState } from 'react'
2
+ import { Dropdown, useDropdown, Button } from '../../'
3
+
4
+ const DropdownWithExternalControl = (props) => {
5
+ // eslint-disable-next-line no-unused-vars
6
+ const [selectedOption, setSelectedOption] = useState();
7
+ const [isDropDownClosed, setIsDropdownClosed] = useDropdown(true);
8
+
9
+ const options = [
10
+ {
11
+ label: "United States",
12
+ value: "United States",
13
+ areaCode: "+1",
14
+ icon: "πŸ‡ΊπŸ‡Έ",
15
+ id: "United-states"
16
+ },
17
+ {
18
+ label: "Canada",
19
+ value: "Canada",
20
+ areaCode: "+1",
21
+ icon: "πŸ‡¨πŸ‡¦",
22
+ id: "canada"
23
+ },
24
+ {
25
+ label: "Pakistan",
26
+ value: "Pakistan",
27
+ areaCode: "+92",
28
+ icon: "πŸ‡΅πŸ‡°",
29
+ id: "pakistan"
30
+ }
31
+ ];
32
+
33
+ return (
34
+ <div>
35
+ <Button
36
+ data={{dropdown:'pb-dropdown-trigger'}}
37
+ marginBottom='sm'
38
+ onClick={() => setIsDropdownClosed(!isDropDownClosed)}
39
+ padding="none"
40
+ tabIndex={0}
41
+ variant="link"
42
+ >
43
+ {isDropDownClosed ? "Open Dropdown" : "Close Dropdown"}
44
+ </Button>
45
+
46
+ <Dropdown
47
+ isClosed={isDropDownClosed}
48
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
49
+ options={options}
50
+ {...props}
51
+ >
52
+ {options.map((option) => (
53
+ <Dropdown.Option key={option.id}
54
+ option={option}
55
+ />
56
+ ))}
57
+ </Dropdown>
58
+ </div>
59
+ )
60
+ }
61
+
62
+ export default DropdownWithExternalControl
@@ -0,0 +1,75 @@
1
+ import React, { useState, useRef } from 'react'
2
+ import { Dropdown, useDropdown, CircleIconButton, Icon, Body, FlexItem, Flex } from '../..'
3
+
4
+ const DropdownWithHook = (props) => {
5
+ // eslint-disable-next-line no-unused-vars
6
+ const [selectedOption, setSelectedOption] = useState();
7
+ const [isDropDownClosed, setIsDropdownClosed] = useDropdown(true);
8
+ const buttonRef = useRef(null);
9
+
10
+ const options = [
11
+ {
12
+ label: "United States",
13
+ value: "United States",
14
+ areaCode: "+1",
15
+ icon: "πŸ‡ΊπŸ‡Έ",
16
+ id: "United-states"
17
+ },
18
+ {
19
+ label: "Canada",
20
+ value: "Canada",
21
+ areaCode: "+1",
22
+ icon: "πŸ‡¨πŸ‡¦",
23
+ id: "canada"
24
+ },
25
+ {
26
+ label: "Pakistan",
27
+ value: "Pakistan",
28
+ areaCode: "+92",
29
+ icon: "πŸ‡΅πŸ‡°",
30
+ id: "pakistan"
31
+ }
32
+ ];
33
+
34
+ return (
35
+ <div>
36
+ <CircleIconButton
37
+ htmlOptions={{ref: buttonRef}}
38
+ icon={"flag"}
39
+ onClick={() => setIsDropdownClosed(!isDropDownClosed)}
40
+ variant="secondary"
41
+ />
42
+ <Dropdown
43
+ isClosed={isDropDownClosed}
44
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
45
+ options={options}
46
+ triggerRef={buttonRef}
47
+ {...props}
48
+ >
49
+ {options.map((option) => (
50
+ <Dropdown.Option key={option.id}
51
+ option={option}
52
+ >
53
+ <>
54
+ <FlexItem>
55
+ <Flex paddingRight='md'>
56
+ <Icon icon={option.icon}
57
+ paddingRight="xs"
58
+ />
59
+ <Body text={option.label} />
60
+ </Flex>
61
+ </FlexItem>
62
+ <FlexItem>
63
+ <Body color="light"
64
+ text={option.areaCode}
65
+ />
66
+ </FlexItem>
67
+ </>
68
+ </Dropdown.Option>
69
+ ))}
70
+ </Dropdown>
71
+ </div>
72
+ )
73
+ }
74
+
75
+ export default DropdownWithHook
@@ -0,0 +1,39 @@
1
+ import React from 'react'
2
+ import { Dropdown } from '../..'
3
+
4
+ const DropdownDefault = (props) => {
5
+
6
+ const options = [
7
+ {
8
+ label: "United States",
9
+ value: "United States",
10
+ },
11
+ {
12
+ label: "Canada",
13
+ value: "Canada",
14
+ },
15
+ {
16
+ label: "Pakistan",
17
+ value: "Pakistan",
18
+ }
19
+ ];
20
+
21
+
22
+ return (
23
+ <div>
24
+ <Dropdown
25
+ label="Select a Country"
26
+ options={options}
27
+ {...props}
28
+ >
29
+ {options.map((option) => (
30
+ <Dropdown.Option key={option.id}
31
+ option={option}
32
+ />
33
+ ))}
34
+ </Dropdown>
35
+ </div>
36
+ )
37
+ }
38
+
39
+ export default DropdownDefault
@@ -0,0 +1 @@
1
+ The optional `label` prop takes a string value that if present will render that string as the label for the Dropdown.
@@ -0,0 +1,15 @@
1
+ examples:
2
+
3
+
4
+ react:
5
+ - dropdown_default: Default
6
+ - dropdown_with_label: With Label
7
+ - dropdown_with_custom_options: Custom Options
8
+ - dropdown_with_custom_display: Custom Display
9
+ - dropdown_with_custom_trigger: Custom Trigger
10
+ - dropdown_with_custom_padding: Custom Padding for Dropdown Options
11
+ # - dropdown_with_autocomplete: Autocomplete
12
+ # - dropdown_with_autocomplete_and_custom_display: Autocomplete with Custom Display
13
+ # - dropdown_with_external_control: useDropdown Hook
14
+ # - dropdown_with_hook: useDropdown Hook with Any Trigger
15
+
@@ -0,0 +1,10 @@
1
+ export { default as DropdownDefault } from './_dropdown_default.jsx'
2
+ export { default as DropdownWithCustomDisplay } from './_dropdown_with_custom_display.jsx'
3
+ export { default as DropdownWithCustomOptions } from './_dropdown_with_custom_options.jsx'
4
+ export { default as DropdownWithCustomTrigger } from './_dropdown_with_custom_trigger.jsx'
5
+ export { default as DropdownWithAutocomplete } from './_dropdown_with_autocomplete.jsx'
6
+ export { default as DropdownWithAutocompleteAndCustomDisplay } from './_dropdown_with_autocomplete_and_custom_display.jsx'
7
+ export { default as DropdownWithCustomPadding } from './_dropdown_with_custom_padding.jsx'
8
+ export { default as DropdownWithLabel } from './_dropdown_with_label.jsx'
9
+ export { default as DropdownWithExternalControl } from './_dropdown_with_external_control.jsx'
10
+ export { default as DropdownWithHook } from './_dropdown_with_hook.jsx'