playbook_ui 14.19.0 → 14.20.0.pre.alpha.PLAY2140upgraderailsdependency8003

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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +11 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +175 -16
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +56 -25
  5. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +23 -13
  6. data/app/pb_kits/playbook/pb_advanced_table/Utilities/VisibilityTree.ts +47 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +14 -10
  8. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +7 -2
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +16 -8
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +9 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +6 -2
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +57 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +4 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.jsx +62 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +1 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.jsx +82 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.md +1 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +66 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +3 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.md +1 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +137 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.md +3 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +40 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.md +1 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -0
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +5 -1
  27. data/app/pb_kits/playbook/pb_advanced_table/index.js +155 -12
  28. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +1 -0
  29. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +23 -0
  30. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.rb +19 -0
  31. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +4 -0
  32. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +4 -11
  33. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +10 -6
  34. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +2 -48
  35. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +1 -0
  36. data/app/pb_kits/playbook/pb_checkbox/index.js +56 -0
  37. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  38. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +77 -19
  39. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +31 -0
  40. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.md +5 -0
  41. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.jsx +56 -0
  42. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.md +3 -0
  43. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.jsx +58 -0
  44. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.md +3 -0
  45. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.html.erb +20 -0
  46. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.md +1 -0
  47. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.html.erb +19 -0
  48. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.md +3 -0
  49. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.html.erb +20 -0
  50. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.jsx +57 -0
  51. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.md +1 -0
  52. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.html.erb +50 -0
  53. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.jsx +105 -0
  54. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.html.erb +22 -0
  55. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.jsx +67 -0
  56. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +11 -0
  57. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +1 -1
  58. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +33 -2
  59. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.md +3 -1
  60. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +11 -1
  61. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +5 -0
  62. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -3
  63. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +16 -2
  64. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +108 -2
  65. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +34 -13
  66. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +3 -1
  67. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +0 -6
  68. data/app/pb_kits/playbook/pb_dropdown/index.js +359 -29
  69. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +39 -12
  70. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +2 -2
  71. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +16 -12
  72. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +79 -13
  73. data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +58 -0
  74. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +13 -0
  75. data/app/pb_kits/playbook/pb_file_upload/_file_upload.tsx +11 -1
  76. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.html.erb +1 -0
  77. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.jsx +41 -0
  78. data/app/pb_kits/playbook/pb_file_upload/docs/example.yml +2 -0
  79. data/app/pb_kits/playbook/pb_file_upload/docs/index.js +1 -0
  80. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -0
  81. data/app/pb_kits/playbook/pb_file_upload/file_upload.rb +7 -1
  82. data/app/pb_kits/playbook/pb_file_upload/fileupload.test.js +18 -0
  83. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  84. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -0
  85. data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +2 -2
  86. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +19 -12
  87. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +13 -7
  88. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
  89. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
  90. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
  91. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
  92. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
  93. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
  94. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
  95. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
  96. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
  97. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
  98. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
  99. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
  100. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
  101. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
  102. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
  103. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
  104. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
  105. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
  106. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
  107. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
  108. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
  109. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
  110. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
  111. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
  112. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +2 -0
  113. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
  114. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +3 -1
  115. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
  116. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
  117. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
  118. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
  119. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
  120. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
  121. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
  122. data/app/pb_kits/playbook/pb_person/_person.tsx +12 -2
  123. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +9 -9
  124. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
  125. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.html.erb +4 -0
  126. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.jsx +15 -0
  127. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.md +1 -0
  128. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_only_countries.jsx +1 -1
  129. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +4 -3
  130. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  131. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  132. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +2 -2
  133. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.html.erb +12 -0
  134. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.jsx +31 -0
  135. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.md +1 -0
  136. data/app/pb_kits/playbook/pb_select/docs/example.yml +2 -0
  137. data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
  138. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +3 -51
  139. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +4 -2
  140. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +73 -3
  141. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.jsx +23 -0
  142. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.md +1 -0
  143. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  144. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  145. data/dist/chunks/_typeahead-CRW6dJbW.js +22 -0
  146. data/dist/chunks/_weekday_stacked-C4d17aYW.js +45 -0
  147. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  148. data/dist/chunks/lib-D5R1BjUn.js +29 -0
  149. data/dist/chunks/{pb_form_validation-BioH7DWv.js → pb_form_validation-BZ2AVAi_.js} +1 -1
  150. data/dist/chunks/vendor.js +1 -1
  151. data/dist/menu.yml +1 -1
  152. data/dist/playbook-doc.js +2 -2
  153. data/dist/playbook-rails-react-bindings.js +1 -1
  154. data/dist/playbook-rails.js +1 -1
  155. data/dist/playbook.css +1 -1
  156. data/lib/playbook/kit_base.rb +3 -3
  157. data/lib/playbook/version.rb +2 -2
  158. metadata +52 -8
  159. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.html.erb +0 -10
  160. data/dist/chunks/_typeahead-D62OcwsT.js +0 -22
  161. data/dist/chunks/_weekday_stacked-Ceh9N0ow.js +0 -45
  162. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  163. data/dist/chunks/lib-CeKZrPmu.js +0 -29
@@ -5,25 +5,25 @@ import Badge from "../../pb_badge/_badge";
5
5
  const treeData = [
6
6
  {
7
7
  label: "Power Home Remodeling",
8
- value: "Power Home Remodeling",
8
+ value: "powerHomeRemodeling",
9
9
  id: "powerhome1",
10
10
  expanded: true,
11
11
  children: [
12
12
  {
13
13
  label: "People",
14
- value: "People",
14
+ value: "people",
15
15
  id: "people1",
16
16
  expanded: true,
17
17
  status: "active",
18
18
  children: [
19
19
  {
20
20
  label: "Talent Acquisition",
21
- value: "Talent Acquisition",
21
+ value: "talentAcquisition",
22
22
  id: "talent1",
23
23
  },
24
24
  {
25
25
  label: "Business Affairs",
26
- value: "Business Affairs",
26
+ value: "businessAffairs",
27
27
  id: "business1",
28
28
  status: "active",
29
29
  variant: "primary",
@@ -31,12 +31,12 @@ const treeData = [
31
31
  children: [
32
32
  {
33
33
  label: "Initiatives",
34
- value: "Initiatives",
34
+ value: "initiatives",
35
35
  id: "initiative1",
36
36
  },
37
37
  {
38
38
  label: "Learning & Development",
39
- value: "Learning & Development",
39
+ value: "learningAndDevelopment",
40
40
  id: "development1",
41
41
  status: "Inactive",
42
42
  },
@@ -44,31 +44,31 @@ const treeData = [
44
44
  },
45
45
  {
46
46
  label: "People Experience",
47
- value: "People Experience",
47
+ value: "peopleExperience",
48
48
  id: "experience1",
49
49
  },
50
50
  ],
51
51
  },
52
52
  {
53
53
  label: "Contact Center",
54
- value: "Contact Center",
54
+ value: "contactCenter",
55
55
  id: "contact1",
56
56
  status: "Inactive",
57
57
  variant: "error",
58
58
  children: [
59
59
  {
60
60
  label: "Appointment Management",
61
- value: "Appointment Management",
61
+ value: "appointmentManagement",
62
62
  id: "appointment1",
63
63
  },
64
64
  {
65
65
  label: "Customer Service",
66
- value: "Customer Service",
66
+ value: "customerService",
67
67
  id: "customer1",
68
68
  },
69
69
  {
70
70
  label: "Energy",
71
- value: "Energy",
71
+ value: "energy",
72
72
  id: "energy1",
73
73
  },
74
74
  ],
@@ -2,62 +2,62 @@
2
2
 
3
3
  <% treeData = [{
4
4
  label: "Power Home Remodeling",
5
- value: "Power Home Remodeling",
5
+ value: "powerHomeRemodeling",
6
6
  id: "powerhome1",
7
7
  expanded: true,
8
8
  children: [
9
9
  {
10
10
  label: "People",
11
- value: "People",
11
+ value: "people",
12
12
  id: "people1",
13
13
  children: [
14
14
  {
15
15
  label: "Talent Acquisition",
16
- value: "Talent Acquisition",
16
+ value: "talentAcquisition",
17
17
  id: "talent1",
18
18
  },
19
19
  {
20
20
  label: "Business Affairs",
21
- value: "Business Affairs",
21
+ value: "businessAffairs",
22
22
  id: "business1",
23
23
  children: [
24
24
  {
25
25
  label: "Initiatives",
26
- value: "Initiatives",
26
+ value: "initiatives",
27
27
  id: "initiative1",
28
28
  },
29
29
  {
30
30
  label: "Learning & Development",
31
- value: "Learning & Development",
31
+ value: "learningAndDevelopment",
32
32
  id: "development1",
33
33
  },
34
34
  ],
35
35
  },
36
36
  {
37
37
  label: "People Experience",
38
- value: "People Experience",
38
+ value: "peopleExperience",
39
39
  id: "experience1",
40
40
  },
41
41
  ],
42
42
  },
43
43
  {
44
44
  label: "Contact Center",
45
- value: "Contact Center",
45
+ value: "contactCenter",
46
46
  id: "contact1",
47
47
  children: [
48
48
  {
49
49
  label: "Appointment Management",
50
- value: "Appointment Management",
50
+ value: "appointmentManagement",
51
51
  id: "appointment1",
52
52
  },
53
53
  {
54
54
  label: "Customer Service",
55
- value: "Customer Service",
55
+ value: "customerService",
56
56
  id: "customer1",
57
57
  },
58
58
  {
59
59
  label: "Energy",
60
- value: "Energy",
60
+ value: "energy",
61
61
  id: "energy1",
62
62
  },
63
63
  ],
@@ -41,6 +41,16 @@ const Person = (props: PersonProps): React.ReactElement => {
41
41
  className
42
42
  )
43
43
 
44
+ const hasAllEmptyProps = [firstName, lastName].every(field => field === undefined || field === null || field === '')
45
+
46
+ if (hasAllEmptyProps) {
47
+ return (
48
+ <>
49
+
50
+ </>
51
+ )
52
+ }
53
+
44
54
  return (
45
55
  <div
46
56
  {...ariaProps}
@@ -53,13 +63,13 @@ const Person = (props: PersonProps): React.ReactElement => {
53
63
  className="pb_person_first"
54
64
  tag="span"
55
65
  >
56
- {firstName}
66
+ {firstName ?? ''}
57
67
  </Body>
58
68
  {lastName &&
59
69
  <Title
60
70
  className="pb_person_first"
61
71
  size={4}
62
- text={` ${lastName}`}
72
+ text={lastName ? ` ${lastName}` : ''}
63
73
  />
64
74
  }
65
75
  </div>
@@ -42,7 +42,7 @@ $flag-min-resolution: 192dpi;
42
42
  .iti__country-list {
43
43
  min-width: $dropdown-min-width;
44
44
  }
45
- // iti-spacer-horizontal's default is 8px, or $space_xs
45
+ // iti-spacer-horizontal's default is 8px, or $space_xs
46
46
  .iti__country-list .iti__flag, .iti__country-name {
47
47
  margin-right: $space_xs;
48
48
  }
@@ -60,7 +60,7 @@ $flag-min-resolution: 192dpi;
60
60
  color: $focus_input_light;
61
61
  }
62
62
 
63
- .dropdown_open {
63
+ .dropdown_open:not(.error) {
64
64
  .text_input {
65
65
  border-color: $primary !important;
66
66
  }
@@ -76,7 +76,7 @@ $flag-min-resolution: 192dpi;
76
76
  }
77
77
 
78
78
  .iti__divider {
79
- border-bottom: 1px solid $border_light !important;
79
+ border-bottom: 1px solid $border_light !important;
80
80
  }
81
81
 
82
82
  .iti__selected-country-primary {
@@ -96,7 +96,7 @@ $flag-min-resolution: 192dpi;
96
96
  justify-content: center;
97
97
  align-items: center;
98
98
  border-width: 0;
99
- border-radius: $space_xxs;
99
+ border-radius: $space_xxs;
100
100
 
101
101
  &[aria-expanded="true"] {
102
102
  color: $primary_action;
@@ -199,7 +199,7 @@ $flag-min-resolution: 192dpi;
199
199
  }
200
200
 
201
201
  .iti__dropdown-content {
202
- border-radius: $space_xs;
202
+ border-radius: $space_xs;
203
203
  border: 1px solid $border_light !important;
204
204
  position: absolute;
205
205
  top: 100%;
@@ -228,13 +228,13 @@ $flag-min-resolution: 192dpi;
228
228
  }
229
229
 
230
230
  .iti__dropdown-content {
231
- border-radius: $space_xs;
231
+ border-radius: $space_xs;
232
232
  border: 1px solid $border_dark !important;
233
233
  .iti__search-input {
234
234
  background-color: $bg_dark_card;
235
235
  &:hover {
236
236
  background-color: $bg_dark_card;
237
- }
237
+ }
238
238
  &:active,
239
239
  &:focus {
240
240
  background-color: $card_dark;
@@ -243,7 +243,7 @@ $flag-min-resolution: 192dpi;
243
243
  }
244
244
 
245
245
  .iti__divider {
246
- border-bottom: 1px solid $border_dark !important;
246
+ border-bottom: 1px solid $border_dark !important;
247
247
  }
248
248
 
249
249
  .iti__country-list {
@@ -278,7 +278,7 @@ $flag-min-resolution: 192dpi;
278
278
  color: $white;
279
279
  }
280
280
  }
281
-
281
+
282
282
  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: $flag-min-resolution) {
283
283
  .iti__flag {
284
284
  background-image: url("https://unpkg.com/intl-tel-input@24.6.0/build/img/flags@2x.png");
@@ -33,6 +33,7 @@ type PhoneNumberInputProps = {
33
33
  onChange?: (e: React.FormEvent<HTMLInputElement>) => void,
34
34
  onValidate?: Callback<boolean, void>,
35
35
  onlyCountries: string[],
36
+ excludeCountries: string[],
36
37
  preferredCountries?: string[],
37
38
  required?: boolean,
38
39
  value?: string,
@@ -88,6 +89,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
88
89
  },
89
90
  onValidate = () => null,
90
91
  onlyCountries = [],
92
+ excludeCountries = [],
91
93
  required = false,
92
94
  preferredCountries = [],
93
95
  value = "",
@@ -234,6 +236,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
234
236
  const fallbackCountry =
235
237
  preferredCountries.length > 0 ? preferredCountries[0] :
236
238
  onlyCountries.length > 0 ? onlyCountries.sort()[0] :
239
+ excludeCountries.length > 0 ? excludeCountries.sort()[0] :
237
240
  "af";
238
241
 
239
242
  useEffect(() => {
@@ -244,6 +247,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
244
247
  autoInsertDialCode: false,
245
248
  initialCountry: initialCountry || fallbackCountry,
246
249
  onlyCountries,
250
+ excludeCountries,
247
251
  countrySearch: countrySearch,
248
252
  fixDropdownWidth: false,
249
253
  formatAsYouType: formatAsYouType,
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ initial_country: 'gb',
3
+ exclude_countries: ['us', 'br']
4
+ }) %>
@@ -0,0 +1,15 @@
1
+ import React from 'react'
2
+ import PhoneNumberInput from '../../pb_phone_number_input/_phone_number_input'
3
+
4
+ const PhoneNumberInputExcludeCountries = (props) => (
5
+ <>
6
+ <PhoneNumberInput
7
+ excludeCountries={['us', 'br']}
8
+ id='exclude'
9
+ initialCountry='gb'
10
+ {...props}
11
+ />
12
+ </>
13
+ )
14
+
15
+ export default PhoneNumberInputExcludeCountries
@@ -0,0 +1 @@
1
+ Excluding countries removes the selected countries from the dropdown.
@@ -6,7 +6,7 @@ const PhoneNumberInputOnlyCountries = (props) => (
6
6
  <PhoneNumberInput
7
7
  id='only'
8
8
  onlyCountries={['us', 'br']}
9
- {...props}
9
+ {...props}
10
10
  />
11
11
  </>
12
12
  )
@@ -4,7 +4,8 @@ examples:
4
4
  - phone_number_input_default: Default
5
5
  - phone_number_input_preferred_countries: Preferred Countries
6
6
  - phone_number_input_initial_country: Initial Country
7
- - phone_number_input_only_countries: Limited Countries
7
+ - phone_number_input_only_countries: Only Countries
8
+ - phone_number_input_exclude_countries: Exclude Countries
8
9
  - phone_number_input_validation: Form Validation
9
10
  - phone_number_input_clear_field: Clearing the Input Field
10
11
  - phone_number_input_access_input_element: Accessing the Input Element
@@ -15,9 +16,9 @@ examples:
15
16
  - phone_number_input_default: Default
16
17
  - phone_number_input_preferred_countries: Preferred Countries
17
18
  - phone_number_input_initial_country: Initial Country
18
- - phone_number_input_only_countries: Limited Countries
19
+ - phone_number_input_only_countries: Only Countries
20
+ - phone_number_input_exclude_countries: Exclude Countries
19
21
  - phone_number_input_validation: Form Validation
20
22
  - phone_number_input_format: Format as You Type
21
23
  - phone_number_input_hidden_inputs: Hidden Inputs
22
24
  - phone_number_input_country_search: Country Search
23
-
@@ -2,6 +2,7 @@ export { default as PhoneNumberInputDefault } from './_phone_number_input_defaul
2
2
  export { default as PhoneNumberInputPreferredCountries } from './_phone_number_input_preferred_countries'
3
3
  export { default as PhoneNumberInputInitialCountry } from './_phone_number_input_initial_country'
4
4
  export { default as PhoneNumberInputOnlyCountries } from './_phone_number_input_only_countries'
5
+ export { default as PhoneNumberInputExcludeCountries } from './_phone_number_input_exclude_countries'
5
6
  export { default as PhoneNumberInputValidation } from './_phone_number_input_validation'
6
7
  export { default as PhoneNumberInputClearField } from './_phone_number_input_clear_field'
7
8
  export { default as PhoneNumberInputAccessInputElement } from './_phone_number_input_access_input_element'
@@ -15,6 +15,8 @@ module Playbook
15
15
  default: ""
16
16
  prop :only_countries, type: Playbook::Props::Array,
17
17
  default: []
18
+ prop :exclude_countries, type: Playbook::Props::Array,
19
+ default: []
18
20
  prop :preferred_countries, type: Playbook::Props::Array,
19
21
  default: []
20
22
  prop :error, type: Playbook::Props::String,
@@ -44,6 +46,7 @@ module Playbook
44
46
  label: label,
45
47
  name: name,
46
48
  onlyCountries: only_countries,
49
+ excludeCountries: exclude_countries,
47
50
  preferredCountries: preferred_countries,
48
51
  required: required,
49
52
  value: value,
@@ -2,7 +2,7 @@ import React from 'react'
2
2
  import classnames from 'classnames'
3
3
 
4
4
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
5
- import { globalProps, globalInlineProps } from '../utilities/globalProps'
5
+ import { globalProps, globalInlineProps, GlobalProps } from '../utilities/globalProps'
6
6
 
7
7
  import Caption from '../pb_caption/_caption'
8
8
 
@@ -19,7 +19,7 @@ type SectionSeparatorProps = {
19
19
  orientation?: "horizontal" | "vertical",
20
20
  text?: string,
21
21
  variant?: "card" | "background",
22
- }
22
+ } & GlobalProps
23
23
 
24
24
  const SectionSeparator = (props: SectionSeparatorProps): React.ReactElement => {
25
25
  const {
@@ -0,0 +1,12 @@
1
+ <%= pb_rails("select", props: { label: "Favorite Animal" }) do %>
2
+ <select name="animal" id="animal">
3
+ <optgroup label="Mammal">
4
+ <option value="1">Cat</option>
5
+ <option value="2">Dog</option>
6
+ </optgroup>
7
+ <optgroup label="Amphibian">
8
+ <option value="3">Frog</option>
9
+ <option value="4">Salamander</option>
10
+ </optgroup>
11
+ </select>
12
+ <% end %>
@@ -0,0 +1,31 @@
1
+ import React from 'react'
2
+
3
+ import Select from '../_select'
4
+
5
+ const SelectCustomSelectSubheaders = (props) => {
6
+ return (
7
+ <div>
8
+ <Select
9
+ label="Favorite Animal"
10
+ {...props}
11
+ >
12
+ <select
13
+ id="animal"
14
+ name="animal"
15
+ {...props}
16
+ >
17
+ <optgroup label="Mammal">
18
+ <option value="1">{'Cat'}</option>
19
+ <option value="2">{'Dog'}</option>
20
+ </optgroup>
21
+ <optgroup label="Amphibian">
22
+ <option value="3">{'Frog'}</option>
23
+ <option value="4">{'Salamander'}</option>
24
+ </optgroup>
25
+ </select>
26
+ </Select>
27
+ </div>
28
+ )
29
+ }
30
+
31
+ export default SelectCustomSelectSubheaders
@@ -0,0 +1 @@
1
+ To create a select with non-selectable subheaders, use a Custom Select component to render a native `<select>` containing `<optgroup>` elements. The [optgroup HTML element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/optgroup) groups related options under a non-selectable label in the dropdown.
@@ -8,6 +8,7 @@ examples:
8
8
  - select_required: Required Select Field
9
9
  - select_value_text_same: Equal option value and value text
10
10
  - select_custom_select: Custom Select
11
+ - select_custom_select_subheaders: Custom Select Subheaders
11
12
  - select_error: Select w/ Error
12
13
  - select_inline: Select Inline
13
14
  - select_inline_show_arrow: Select Inline (Always Show Arrow)
@@ -25,6 +26,7 @@ examples:
25
26
  - select_required: Required Select Field
26
27
  - select_value_text_same: Equal option value and value text
27
28
  - select_custom_select: Custom Select
29
+ - select_custom_select_subheaders: Custom Select Subheaders
28
30
  - select_error: Select w/ Error
29
31
  - select_inline: Select Inline
30
32
  - select_inline_show_arrow: Select Inline (Always Show Arrow)
@@ -11,3 +11,4 @@ export { default as SelectInlineShowArrow } from './_select_inline_show_arrow.js
11
11
  export { default as SelectInlineCompact } from './_select_inline_compact.jsx'
12
12
  export { default as SelectMultiple } from './_select_multiple.jsx'
13
13
  export { default as SelectReactHook } from './_select_react_hook.jsx'
14
+ export { default as SelectCustomSelectSubheaders } from './_select_custom_select_subheaders.jsx'
@@ -18,7 +18,7 @@
18
18
  checked: true,
19
19
  value: "checkbox-value",
20
20
  name: "main-checkbox-selectable",
21
- indeterminate: true,
21
+ indeterminate_main: true,
22
22
  id: "checkbox-selectable"
23
23
  }) %>
24
24
  <% end %>
@@ -33,7 +33,7 @@
33
33
  <% checkboxes.each_with_index do |checkbox, index| %>
34
34
  <%= pb_rails("table/table_row") do %>
35
35
  <%= pb_rails("table/table_cell") do %>
36
- <%= pb_rails("checkbox", props: { checked: checkbox[:checked], id: "#{checkbox[:id]}-selectable-checkbox", name: "#{checkbox[:id]}-selectable-checkbox", on_change: "updateCheckboxes(#{index})", value: "check-box value" }) %>
36
+ <%= pb_rails("checkbox", props: { checked: checkbox[:checked], id: "#{checkbox[:id]}-selectable-checkbox", name: "#{checkbox[:id]}-selectable-checkbox", on_change: "updateCheckboxes(#{index})", value: "check-box value", indeterminate_parent: "checkbox-selectable" }) %>
37
37
  <% end %>
38
38
  <%= pb_rails("table/table_cell") do %>
39
39
  <%= pb_rails("image", props: { alt: "picture of a misty forest", size: "xs", url: "https://unsplash.it/500/400/?image=634" }) %>
@@ -45,52 +45,4 @@
45
45
  <% end %>
46
46
  <% end %>
47
47
  <% end %>
48
- <% end %>
49
-
50
- <script>
51
- document.addEventListener('DOMContentLoaded', function() {
52
- const mainCheckboxWrapper = document.getElementById('checkbox-selectable');
53
- const mainCheckbox = document.getElementsByName("main-checkbox-selectable")[0];
54
- const childCheckboxes = document.querySelectorAll('input[type="checkbox"][id$="selectable-checkbox"]');
55
- const deleteButton = document.getElementById('delete-button');
56
-
57
- const updateDeleteButton = () => {
58
- const anyChecked = Array.from(childCheckboxes).some(checkbox => checkbox.checked);
59
- deleteButton.style.display = anyChecked ? 'block' : 'none';
60
- };
61
-
62
- const updateMainCheckbox = () => {
63
- // Count the number of checked child checkboxes
64
- const checkedCount = Array.from(childCheckboxes).filter(cb => cb.checked).length;
65
- // Determine if the main checkbox should be in an indeterminate state
66
- const indeterminate = checkedCount > 0 && checkedCount < childCheckboxes.length;
67
-
68
- // Set the main checkbox states
69
- mainCheckbox.indeterminate = indeterminate;
70
- mainCheckbox.checked = checkedCount > 0;
71
-
72
- // Determine the icon class to add and remove based on the number of checked checkboxes
73
- const iconClassToAdd = checkedCount === 0 ? 'pb_checkbox_checkmark' : 'pb_checkbox_indeterminate';
74
- const iconClassToRemove = checkedCount === 0 ? 'pb_checkbox_indeterminate' : 'pb_checkbox_checkmark';
75
-
76
- // Add and remove the icon class to the main checkbox wrapper
77
- mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.add(iconClassToAdd);
78
- mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.remove(iconClassToRemove);
79
-
80
- // Toggle the visibility of the checkbox icon based on the indeterminate state
81
- mainCheckboxWrapper.getElementsByClassName("indeterminate_icon")[0].classList.toggle('hidden', !indeterminate);
82
- mainCheckboxWrapper.getElementsByClassName("check_icon")[0].classList.toggle('hidden', indeterminate);
83
-
84
- updateDeleteButton();
85
- };
86
-
87
- mainCheckbox.addEventListener('change', function() {
88
- childCheckboxes.forEach(cb => cb.checked = this.checked);
89
- updateMainCheckbox();
90
- });
91
-
92
- childCheckboxes.forEach(cb => {
93
- cb.addEventListener('change', updateMainCheckbox);
94
- });
95
- });
96
- </script>
48
+ <% end %>
@@ -71,7 +71,8 @@
71
71
  }
72
72
  &.error {
73
73
  .text_input_wrapper {
74
- input,
74
+ // The `:not` here prevents error styling from affecting the country search input in the Phone Number Input Kit.
75
+ input:not(.iti__search-input),
75
76
  .text_input {
76
77
  border-color: $error_dark;
77
78
  }
@@ -102,7 +103,8 @@
102
103
  [class*="pb_body_kit"] {
103
104
  margin-top: $space_xs / 2;
104
105
  }
105
- input,
106
+ // The `:not` here prevents error styling from affecting the country search input in the Phone Number Input Kit.
107
+ input:not(.iti__search-input),
106
108
  .text_input {
107
109
  border-color: $error;
108
110
  }