playbook_ui 15.4.0 → 15.5.0.pre.alpha.PLAY2503datepickerdefaultdateoutsideminmaxrange12814

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 (242) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +96 -6
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +2 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +3 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_editing.jsx +3 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.jsx +2 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_background/_background.tsx +6 -6
  11. data/app/pb_kits/playbook/pb_background/background.test.js +5 -1
  12. data/app/pb_kits/playbook/pb_background/docs/_background_light.html.erb +1 -1
  13. data/app/pb_kits/playbook/pb_background/docs/_background_light.jsx +0 -1
  14. data/app/pb_kits/playbook/pb_background/docs/_background_light.md +1 -0
  15. data/app/pb_kits/playbook/pb_background/docs/example.yml +2 -2
  16. data/app/pb_kits/playbook/pb_copy_button/_copy_button.tsx +21 -8
  17. data/app/pb_kits/playbook/pb_copy_button/copy_button.html.erb +6 -2
  18. data/app/pb_kits/playbook/pb_copy_button/copy_button.rb +3 -0
  19. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +24 -0
  20. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant.html.erb +9 -0
  21. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant.jsx +24 -0
  22. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant_rails.md +1 -0
  23. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant_react.md +1 -0
  24. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.html.erb +2 -2
  25. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.jsx +1 -2
  26. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.html.erb +2 -2
  27. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.jsx +2 -0
  28. data/app/pb_kits/playbook/pb_copy_button/docs/example.yml +2 -0
  29. data/app/pb_kits/playbook/pb_copy_button/docs/index.js +1 -0
  30. data/app/pb_kits/playbook/pb_currency/docs/_currency_abbreviated.md +1 -0
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_matching_decimals_rails.md +1 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/_currency_matching_decimals_react.md +1 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.html.erb +10 -0
  34. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.jsx +10 -0
  35. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.md +1 -0
  36. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol_rails.md +1 -0
  37. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol_react.md +1 -0
  38. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +7 -0
  39. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.jsx +7 -0
  40. data/app/pb_kits/playbook/pb_currency/docs/_description.md +2 -2
  41. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +25 -11
  42. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +24 -0
  43. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +225 -6
  44. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +18 -0
  45. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +20 -13
  46. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.rb +6 -4
  47. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.test.js +17 -0
  48. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.html.erb +4 -0
  49. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.jsx +43 -0
  50. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.md +1 -0
  51. data/app/pb_kits/playbook/pb_date_range_inline/docs/_description.md +1 -1
  52. data/app/pb_kits/playbook/pb_date_range_inline/docs/example.yml +3 -2
  53. data/app/pb_kits/playbook/pb_date_range_inline/docs/index.js +1 -0
  54. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +6 -4
  55. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +2 -3
  56. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +11 -5
  57. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +26 -9
  58. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.html.erb +12 -0
  59. data/app/pb_kits/playbook/pb_date_stacked/docs/{_date_stacked_not_current_year.jsx → _date_stacked_current_year.jsx} +6 -5
  60. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.md +1 -0
  61. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_default.html.erb +1 -1
  62. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_default.jsx +1 -1
  63. data/app/pb_kits/playbook/pb_date_stacked/docs/_description.md +1 -1
  64. data/app/pb_kits/playbook/pb_date_stacked/docs/example.yml +2 -2
  65. data/app/pb_kits/playbook/pb_date_stacked/docs/index.js +1 -1
  66. data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +3 -0
  67. data/app/pb_kits/playbook/pb_date_time/date_time.html.erb +1 -0
  68. data/app/pb_kits/playbook/pb_date_time/date_time.rb +1 -0
  69. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year.html.erb +4 -0
  70. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year.jsx +14 -0
  71. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year_rails.md +1 -0
  72. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year_react.md +1 -0
  73. data/app/pb_kits/playbook/pb_date_time/docs/example.yml +3 -1
  74. data/app/pb_kits/playbook/pb_date_time/docs/index.js +1 -0
  75. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +3 -0
  76. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +2 -2
  77. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.rb +2 -0
  78. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +33 -0
  79. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.html.erb +4 -0
  80. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.jsx +22 -0
  81. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.md +1 -0
  82. data/app/pb_kits/playbook/pb_date_time_stacked/docs/example.yml +3 -1
  83. data/app/pb_kits/playbook/pb_date_time_stacked/docs/index.js +1 -0
  84. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.html.erb +33 -2
  85. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +156 -6
  86. data/app/pb_kits/playbook/pb_draggable/context/types.ts +8 -3
  87. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.jsx +180 -0
  88. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.md +22 -0
  89. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +3 -2
  90. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  91. data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +77 -1
  92. data/app/pb_kits/playbook/pb_dropdown/index.js +32 -14
  93. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_alignment.jsx +2 -1
  94. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_default.jsx +2 -1
  95. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_orientation.jsx +2 -1
  96. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_size.jsx +2 -1
  97. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +4 -4
  98. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +31 -9
  99. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +12 -5
  100. data/app/pb_kits/playbook/pb_flex/docs/_flex_item_example.jsx +1 -0
  101. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +8 -1
  102. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +11 -1
  103. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +4 -1
  104. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +34 -22
  105. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +16 -12
  106. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +1 -1
  107. data/app/pb_kits/playbook/pb_home_address_street/none_emphasis.html.erb +16 -12
  108. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +16 -12
  109. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.jsx +1 -1
  110. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +10 -0
  111. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +66 -15
  112. data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.jsx +42 -0
  113. data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.md +1 -0
  114. data/app/pb_kits/playbook/pb_multiple_users/docs/example.yml +1 -0
  115. data/app/pb_kits/playbook/pb_multiple_users/docs/index.js +1 -0
  116. data/app/pb_kits/playbook/pb_multiple_users/multiple_users.test.js +25 -0
  117. data/app/pb_kits/playbook/pb_nav/_item.tsx +18 -4
  118. data/app/pb_kits/playbook/pb_nav/_nav.scss +30 -5
  119. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +192 -0
  120. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +1 -1
  121. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.html.erb +21 -0
  122. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.jsx +113 -0
  123. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.md +1 -0
  124. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.html.erb +30 -0
  125. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.jsx +117 -0
  126. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.md +1 -0
  127. data/app/pb_kits/playbook/pb_nav/docs/example.yml +4 -0
  128. data/app/pb_kits/playbook/pb_nav/docs/index.js +3 -1
  129. data/app/pb_kits/playbook/pb_nav/item.html.erb +6 -4
  130. data/app/pb_kits/playbook/pb_nav/item.rb +11 -2
  131. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_description.md +3 -1
  132. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors.jsx +1 -1
  133. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.jsx +1 -1
  134. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.md +1 -0
  135. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_height.jsx +1 -1
  136. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_horizontal.jsx +1 -1
  137. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend.jsx +1 -1
  138. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_non_clickable.jsx +1 -2
  139. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.html.erb +1 -1
  140. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.jsx +1 -1
  141. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.md +11 -0
  142. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_negative_numbers.jsx +1 -1
  143. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_secondary_y_axis.jsx +1 -1
  144. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_spline.jsx +1 -2
  145. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_stacked.jsx +1 -2
  146. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_description.md +3 -1
  147. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.jsx +2 -1
  148. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.jsx +2 -1
  149. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.jsx +1 -1
  150. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.md +2 -1
  151. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.jsx +2 -1
  152. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.jsx +1 -1
  153. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.jsx +1 -1
  154. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.jsx +1 -1
  155. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.md +1 -0
  156. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.jsx +1 -1
  157. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_live_data.jsx +2 -1
  158. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.jsx +1 -1
  159. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.jsx +1 -1
  160. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_description.md +3 -1
  161. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.jsx +1 -1
  162. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.md +2 -2
  163. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.jsx +2 -1
  164. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.md +1 -0
  165. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.jsx +2 -1
  166. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.jsx +2 -1
  167. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.jsx +2 -1
  168. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.jsx +2 -1
  169. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_description.md +3 -1
  170. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.jsx +1 -1
  171. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.md +1 -0
  172. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.html.erb +1 -1
  173. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +44 -10
  174. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.html.erb +34 -4
  175. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.jsx +16 -7
  176. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +4 -1
  177. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +384 -262
  178. data/app/pb_kits/playbook/pb_progress_step/docs/_description.md +1 -5
  179. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.html.erb +14 -0
  180. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.jsx +29 -0
  181. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.md +3 -0
  182. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.jsx +31 -0
  183. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.md +1 -0
  184. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.html.erb +4 -1
  185. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.jsx +14 -3
  186. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.md +3 -0
  187. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tracker.md +3 -0
  188. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.html.erb +1 -7
  189. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.md +1 -0
  190. data/app/pb_kits/playbook/pb_progress_step/docs/example.yml +3 -0
  191. data/app/pb_kits/playbook/pb_progress_step/docs/index.js +2 -0
  192. data/app/pb_kits/playbook/pb_progress_step/progress_step.test.js +41 -0
  193. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +3 -1
  194. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +3 -1
  195. data/app/pb_kits/playbook/pb_table/_table.tsx +28 -26
  196. data/app/pb_kits/playbook/pb_table/styles/_vertical_border.scss +49 -0
  197. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +4 -1
  198. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
  199. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +15 -0
  200. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -0
  201. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +13 -2
  202. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +7 -1
  203. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +34 -7
  204. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.html.erb +30 -0
  205. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.jsx +37 -0
  206. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.md +3 -0
  207. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_react_hook.jsx +2 -1
  208. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  209. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +2 -1
  210. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +6 -1
  211. data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +1 -1
  212. data/app/pb_kits/playbook/utilities/_truncate.scss +2 -0
  213. data/app/pb_kits/playbook/utilities/globalProps.ts +26 -8
  214. data/app/pb_kits/playbook/utilities/test/globalProps/alignContent.test.js +18 -0
  215. data/app/pb_kits/playbook/utilities/test/globalProps/alignItems.test.js +18 -0
  216. data/app/pb_kits/playbook/utilities/test/globalProps/alignSelf.test.js +18 -0
  217. data/app/pb_kits/playbook/utilities/test/globalProps/display.test.js +18 -0
  218. data/app/pb_kits/playbook/utilities/test/globalProps/flex.test.js +18 -0
  219. data/app/pb_kits/playbook/utilities/test/globalProps/flexDirection.test.js +18 -0
  220. data/app/pb_kits/playbook/utilities/test/globalProps/flexGrow.test.js +18 -0
  221. data/app/pb_kits/playbook/utilities/test/globalProps/flexShrink.test.js +18 -0
  222. data/app/pb_kits/playbook/utilities/test/globalProps/flexWrap.test.js +18 -0
  223. data/app/pb_kits/playbook/utilities/test/globalProps/justifyContent.test.js +18 -0
  224. data/app/pb_kits/playbook/utilities/test/globalProps/justifySelf.test.js +18 -0
  225. data/app/pb_kits/playbook/utilities/test/globalProps/order.test.js +18 -0
  226. data/dist/chunks/_typeahead-DCwdpOmC.js +6 -0
  227. data/dist/chunks/lib-x6lM2EFN.js +29 -0
  228. data/dist/chunks/vendor.js +37 -1
  229. data/dist/playbook-rails-react-bindings.js +1 -1
  230. data/dist/playbook-rails.js +1 -1
  231. data/dist/playbook.css +1 -1
  232. data/lib/playbook/version.rb +2 -2
  233. metadata +54 -12
  234. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
  235. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_not_current_year.html.erb +0 -5
  236. data/dist/chunks/_line_graph-r__oOO2H.js +0 -1
  237. data/dist/chunks/_typeahead-B7c52zVj.js +0 -6
  238. data/dist/chunks/_weekday_stacked-DgiIj2w3.js +0 -37
  239. data/dist/chunks/componentRegistry-DzmmLR2x.js +0 -1
  240. data/dist/chunks/lib-CRUXizZe.js +0 -29
  241. data/dist/chunks/pb_form_validation-CywJN0ej.js +0 -1
  242. data/dist/playbook-doc.js +0 -19
@@ -1,5 +1,5 @@
1
1
  .pb_file_upload_kit {
2
- .pb_card_kit_deselected_border_radius_md {
2
+ .pb_card_kit {
3
3
  border: 1px #ccc dashed;
4
4
  text-align: center;
5
5
  }
@@ -11,7 +11,7 @@
11
11
  }
12
12
  &.error,
13
13
  &.pb_file_upload_kit_error {
14
- .pb_card_kit_deselected_border_radius_md {
14
+ .pb_card_kit {
15
15
  border-color: $error;
16
16
  }
17
17
  .pb_body_kit_negative {
@@ -30,12 +30,12 @@
30
30
  }
31
31
 
32
32
  .dark .pb_file_upload_kit {
33
- .pb_card_kit_deselected_border_radius_md {
33
+ .pb_card_kit {
34
34
  border: 1px $text_dk_lighter dashed;
35
35
  }
36
36
  &.error,
37
37
  &.pb_file_upload_kit_error {
38
- .pb_card_kit_deselected_border_radius_md {
38
+ .pb_card_kit {
39
39
  border-color: $error_dark;
40
40
  }
41
41
  }
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from "react";
1
+ import React, { useEffect, useState, useRef } from "react";
2
2
  import classnames from "classnames";
3
3
 
4
4
  import { globalProps, GlobalProps } from "../utilities/globalProps";
@@ -36,6 +36,7 @@ type FixedConfirmationToastProps = {
36
36
 
37
37
  const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.ReactElement => {
38
38
  const [showToast, toggleToast] = useState(true);
39
+ const timeoutRef = useRef<NodeJS.Timeout | null>(null);
39
40
 
40
41
  const {
41
42
  autoClose = 0,
@@ -67,21 +68,42 @@ const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.React
67
68
 
68
69
  const htmlProps = buildHtmlProps(htmlOptions);
69
70
 
70
- const autoCloseToast = () => {
71
- if (autoClose && open) {
72
- setTimeout(() => {
71
+ useEffect(() => {
72
+ toggleToast(open);
73
+ }, [open]);
74
+
75
+ // Manage auto-close timeout separately
76
+ useEffect(() => {
77
+ // Clear any existing timeout
78
+ if (timeoutRef.current) {
79
+ clearTimeout(timeoutRef.current);
80
+ timeoutRef.current = null;
81
+ }
82
+
83
+ // Set new timeout if autoClose is enabled and toast is open
84
+ if (autoClose && open && showToast) {
85
+ timeoutRef.current = setTimeout(() => {
73
86
  toggleToast(false);
74
87
  onClose();
88
+ timeoutRef.current = null;
75
89
  }, autoClose);
76
90
  }
77
- };
78
91
 
79
- useEffect(() => {
80
- toggleToast(open);
81
- autoCloseToast();
82
- }, [open]);
92
+ // Cleanup function to clear timeout on unmount or when dependencies change
93
+ return () => {
94
+ if (timeoutRef.current) {
95
+ clearTimeout(timeoutRef.current);
96
+ timeoutRef.current = null;
97
+ }
98
+ };
99
+ }, [autoClose, open, showToast, onClose]);
83
100
 
84
101
  const handleClick = () => {
102
+ // Clear autoClose timeout when manually closing
103
+ if (timeoutRef.current) {
104
+ clearTimeout(timeoutRef.current);
105
+ timeoutRef.current = null;
106
+ }
85
107
  toggleToast(!closeable);
86
108
  onClose();
87
109
  };
@@ -2,6 +2,7 @@ import React from 'react'
2
2
  import classnames from 'classnames'
3
3
  import { buildCss, buildHtmlProps } from '../utilities/props'
4
4
  import { globalProps, GlobalProps, globalInlineProps} from '../utilities/globalProps'
5
+
5
6
  type FlexItemPropTypes = {
6
7
  children: React.ReactNode[] | React.ReactNode,
7
8
  fixedSize?: string,
@@ -28,22 +29,28 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
28
29
  alignSelf,
29
30
  displayFlex
30
31
  } = props
32
+
31
33
  const growClass = grow === true ? 'pb_flex_item_kit_grow' : ''
32
34
  const displayFlexClass = displayFlex === true ? 'pb_flex_item_kit_display_flex' : ''
33
35
  const flexClass = flex !== 'none' ? `pb_flex_item_kit_flex_${flex}` : ''
34
36
  const shrinkClass = shrink === true ? 'pb_flex_item_kit_shrink' : ''
35
37
  const alignSelfClass = alignSelf ? `pb_flex_item_kit_align_self_${alignSelf}` : ''
36
- const fixedStyle =
37
- fixedSize !== undefined ? { flexBasis: `${fixedSize}` } : null
38
+ const fixedStyle = fixedSize !== undefined ? { flexBasis: `${fixedSize}` } : null
38
39
  const orderClass = order !== 'none' ? `pb_flex_item_kit_order_${order}` : ''
39
40
  const dynamicInlineProps = globalInlineProps(props)
41
+
42
+ // Extract style from htmlOptions and remove it
43
+ const { style: htmlStyle, ...htmlOptionsWithoutStyle } = htmlOptions
44
+ const htmlStyleObj = htmlStyle && typeof htmlStyle === 'object' ? htmlStyle : {}
45
+
46
+ // Merge all styles
40
47
  const combinedStyles = {
48
+ ...htmlStyleObj,
41
49
  ...fixedStyle,
42
50
  ...dynamicInlineProps
43
51
  }
44
52
 
45
- const htmlProps = buildHtmlProps(htmlOptions)
46
-
53
+ const htmlProps = buildHtmlProps(htmlOptionsWithoutStyle)
47
54
 
48
55
  return (
49
56
  <div
@@ -66,4 +73,4 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
66
73
  )
67
74
  }
68
75
 
69
- export default FlexItem
76
+ export default FlexItem
@@ -15,6 +15,7 @@ const FlexItemExample = (props) => {
15
15
  <FlexItem
16
16
  displayFlex
17
17
  gap="xs"
18
+ htmlOptions={{style: {padding:"2px"}}}
18
19
  {...props}
19
20
  >
20
21
  <FlexItem>
@@ -112,7 +112,14 @@
112
112
  name: "checkbox-name",
113
113
  class: "checkbox-class"
114
114
  %>
115
- <%= form.date_picker :example_date_picker_1, props: { label: true } %>
115
+ <%= form.date_picker :example_date_picker_1, props: {
116
+ label: true,
117
+ # Testing out-of-range default date feature: default_date is earlier than min_date
118
+ # This should still display the default date even though it's outside the valid range
119
+ default_date: (DateTime.current - 3.days).utc.iso8601,
120
+ min_date: (DateTime.current - 1.day).utc.iso8601,
121
+ max_date: (DateTime.current + 7.days).utc.iso8601
122
+ } %>
116
123
  <%= form.star_rating_field :example_star_rating, props: { variant: "interactive", label: true } %>
117
124
  <%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true } %>
118
125
  <%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form-default", tree_data: treeData, margin_bottom: "sm", label: "Example Multi Level Select field" } %>
@@ -113,7 +113,17 @@
113
113
  <%= form.select :example_select_validation, [ ["Yes", 1], ["No", 2] ], props: { label: true, blank_selection: "Select One...", required: true, validation_message: "Please, select an option." } %>
114
114
  <%= form.collection_select :example_collection_select_validation, example_collection, :value, :name, props: { label: true, blank_selection: "Select One...", required: true } %>
115
115
  <%= form.check_box :example_checkbox_validation, props: { text: "Example Checkbox Validation", label: true, required: true }, checked_value: "1", unchecked_value: "0" %>
116
- <%= form.date_picker :example_date_picker_2, props: { label: true, required: true, validation_message: "Please, select a date.", allow_input: true } %>
116
+ <%= form.date_picker :example_date_picker_2, props: {
117
+ label: true,
118
+ required: true,
119
+ validation_message: "Please, select a date.",
120
+ allow_input: true,
121
+ # Testing out-of-range default date feature: default_date is earlier than min_date
122
+ # This should still display the default date even though it's outside the valid range
123
+ default_date: (DateTime.current - 3.days).utc.iso8601,
124
+ min_date: (DateTime.current - 1.day).utc.iso8601,
125
+ max_date: (DateTime.current + 7.days).utc.iso8601
126
+ } %>
117
127
  <%= form.star_rating_field :example_star_rating_validation, props: { variant: "interactive", label: true, required: true } %>
118
128
  <%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true, blank_selection: "Select a Time Zone...", required: true } %>
119
129
  <%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form", tree_data: treeData, margin_bottom: "sm", required: true, label: "Example Multi Level Select field" } %>
@@ -1,5 +1,8 @@
1
1
  import React from 'react'
2
- import { Card, Caption, FormPill, Typeahead } from 'playbook-ui'
2
+ import Card from '../../pb_card/_card'
3
+ import Caption from '../../pb_caption/_caption'
4
+ import FormPill from '../_form_pill'
5
+ import Typeahead from '../../pb_typeahead/_typeahead'
3
6
 
4
7
  const names = [
5
8
  { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
@@ -96,20 +96,24 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
96
96
  {hasAllEmptyProps && '—'}
97
97
  {emphasis == 'street' && !hasAllEmptyProps &&
98
98
  <div>
99
- <Title
100
- className="pb_home_address_street_address"
101
- dark={dark}
102
- size={4}
103
- >
104
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
105
- </Title>
106
- <Title
107
- className="pb_home_address_street_address"
108
- dark={dark}
109
- size={4}
110
- >
111
- {titleize(addressCont)}
112
- </Title>
99
+ {(address || houseStyle) && (
100
+ <Title
101
+ className="pb_home_address_street_address"
102
+ dark={dark}
103
+ size={4}
104
+ >
105
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
106
+ </Title>
107
+ )}
108
+ {addressCont && (
109
+ <Title
110
+ className="pb_home_address_street_address"
111
+ dark={dark}
112
+ size={4}
113
+ >
114
+ {titleize(addressCont)}
115
+ </Title>
116
+ )}
113
117
  <Body color="light">
114
118
  {`${city ? `${titleize(city)}, ` : ''}${uppercaseState}${zipcode ? ` ${zipcode}` : ''}`}
115
119
  </Body>
@@ -117,10 +121,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
117
121
  }
118
122
  {emphasis == 'city' && !hasAllEmptyProps &&
119
123
  <div>
120
- <Body color="light">
121
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
122
- </Body>
123
- <Body color="light">{titleize(addressCont)}</Body>
124
+ {(address || houseStyle) && (
125
+ <Body color="light">
126
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
127
+ </Body>
128
+ )}
129
+ {addressCont && (
130
+ <Body color="light">{titleize(addressCont)}</Body>
131
+ )}
124
132
  <div>
125
133
  <Title
126
134
  className="pb_home_address_street_address"
@@ -141,10 +149,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
141
149
  }
142
150
  {emphasis == 'none' && !hasAllEmptyProps &&
143
151
  <div>
144
- <Body dark={dark}>
145
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
146
- </Body>
147
- <Body dark={dark}>{formatStreetAdr(addressCont)}</Body>
152
+ {(address || houseStyle) && (
153
+ <Body dark={dark}>
154
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
155
+ </Body>
156
+ )}
157
+ {addressCont && (
158
+ <Body dark={dark}>{formatStreetAdr(addressCont)}</Body>
159
+ )}
148
160
  <div>
149
161
  <Body
150
162
  color="light"
@@ -1,15 +1,19 @@
1
- <%= pb_rails "body", props: {
2
- classname: "pb_home_address_street_address",
3
- color: "light",
4
- text: object.address_house_style,
5
- dark: object.dark
6
- } %>
7
- <%= pb_rails "body", props: {
8
- classname: "pb_home_address_street_address",
9
- color: "light",
10
- text: object.address_house_style2,
11
- dark: object.dark
12
- } %>
1
+ <% if object.address_house_style.present? %>
2
+ <%= pb_rails "body", props: {
3
+ classname: "pb_home_address_street_address",
4
+ color: "light",
5
+ text: object.address_house_style,
6
+ dark: object.dark
7
+ } %>
8
+ <% end %>
9
+ <% if object.address_house_style2.present? %>
10
+ <%= pb_rails "body", props: {
11
+ classname: "pb_home_address_street_address",
12
+ color: "light",
13
+ text: object.address_house_style2,
14
+ dark: object.dark
15
+ } %>
16
+ <% end %>
13
17
  <div>
14
18
  <%= pb_rails "title", props: {
15
19
  tag: "span",
@@ -8,4 +8,4 @@
8
8
  state: "PA",
9
9
  zipcode: "19382",
10
10
  territory: "PHL",
11
- }) %>
11
+ }) %>
@@ -1,15 +1,19 @@
1
- <%= pb_rails "body", props: {
2
- classname: "pb_home_address_street_address",
3
- size: 4,
4
- text: object.address_house_style,
5
- dark: object.dark
6
- } %>
7
- <%= pb_rails "body", props: {
8
- classname: "pb_home_address_street_address",
9
- size: 4,
10
- text: object.address_house_style2,
11
- dark: object.dark
12
- } %>
1
+ <% if object.address_house_style.present? %>
2
+ <%= pb_rails "body", props: {
3
+ classname: "pb_home_address_street_address",
4
+ size: 4,
5
+ text: object.address_house_style,
6
+ dark: object.dark
7
+ } %>
8
+ <% end %>
9
+ <% if object.address_house_style2.present? %>
10
+ <%= pb_rails "body", props: {
11
+ classname: "pb_home_address_street_address",
12
+ size: 4,
13
+ text: object.address_house_style2,
14
+ dark: object.dark
15
+ } %>
16
+ <% end %>
13
17
  <%= pb_rails "body", props: {
14
18
  color: "light",
15
19
  text: object.city_state_zip,
@@ -1,15 +1,19 @@
1
- <%= pb_rails "title", props: {
2
- classname: "pb_home_address_street_address",
3
- size: 4,
4
- text: object.address_house_style,
5
- dark: object.dark
6
- } %>
7
- <%= pb_rails "title", props: {
8
- classname: "pb_home_address_street_address",
9
- size: 4,
10
- text: object.address_house_style2,
11
- dark: object.dark
12
- } %>
1
+ <% if object.address_house_style.present? %>
2
+ <%= pb_rails "title", props: {
3
+ classname: "pb_home_address_street_address",
4
+ size: 4,
5
+ text: object.address_house_style,
6
+ dark: object.dark
7
+ } %>
8
+ <% end %>
9
+ <% if object.address_house_style2.present? %>
10
+ <%= pb_rails "title", props: {
11
+ classname: "pb_home_address_street_address",
12
+ size: 4,
13
+ text: object.address_house_style2,
14
+ dark: object.dark
15
+ } %>
16
+ <% end %>
13
17
  <%= pb_rails "body", props: {
14
18
  color: "light",
15
19
  text: object.city_state_zip,
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { LoadingInline } from 'playbook-ui'
2
+ import LoadingInline from '../_loading_inline'
3
3
 
4
4
  const LoadingInlineVariant = (props) => {
5
5
  return (
@@ -36,6 +36,16 @@ $pb_multiple_users_size_xxs: map-get($avatar-sizes, "xxs");
36
36
  height: $pb_multiple_users_size_xxs;
37
37
  }
38
38
 
39
+
40
+ .user_tooltip {
41
+ margin-left: $pb_multiple_users_overlap !important;
42
+ }
43
+
44
+ .user_count_tooltip {
45
+ margin-left: $pb_multiple_users_overlap !important;
46
+ position: relative;
47
+ }
48
+
39
49
  .pb_multiple_users_item {
40
50
  margin-left: $pb_multiple_users_overlap;
41
51
  margin-right: 0;
@@ -5,17 +5,19 @@ import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../uti
5
5
  import { globalProps } from '../utilities/globalProps'
6
6
 
7
7
  import Avatar from '../pb_avatar/_avatar'
8
+ import Tooltip from '../pb_tooltip/_tooltip'
8
9
 
9
10
  type MultipleUsersProps = {
10
11
  aria?: { [key: string]: string },
11
12
  className?: string,
12
13
  dark?: boolean,
13
14
  data?: { [key: string]: string },
14
- htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
15
16
  id?: string,
16
17
  maxDisplayedUsers?: number,
17
18
  reverse?: boolean,
18
19
  size?: "md" | "lg" | "sm" | "xl" | "xs" | "xxs",
20
+ withTooltip?: boolean,
19
21
  users: Array<{ [key: string]: string }>,
20
22
  }
21
23
 
@@ -30,6 +32,7 @@ const MultipleUsers = (props: MultipleUsersProps): React.ReactElement => {
30
32
  maxDisplayedUsers = 4,
31
33
  reverse = false,
32
34
  size = 'xs',
35
+ withTooltip = false,
33
36
  users,
34
37
  } = props
35
38
 
@@ -62,22 +65,70 @@ const MultipleUsers = (props: MultipleUsersProps): React.ReactElement => {
62
65
  className={classes}
63
66
  id={id}
64
67
  >
65
- {usersToDisplay.map((avatarData, index) => (
66
- <Avatar
67
- {...avatarData}
68
- className="pb_multiple_users_item"
69
- dark={dark}
70
- imageAlt={avatarData.name}
71
- key={index}
72
- size={size}
73
- />
74
- ))}
68
+ {withTooltip ?
69
+ <>
70
+ {usersToDisplay.map((avatarData, index) => (
71
+ <Tooltip
72
+ key={"user_tooltip_" + index}
73
+ placement='top'
74
+ text={avatarData.tooltip ? avatarData.tooltip : ''}
75
+ zIndex={10}
76
+ >
77
+ <Avatar
78
+ {...avatarData}
79
+ className={"pb_multiple_users_item" + (withTooltip ? " user_tooltip" : "")}
80
+ dark={dark}
81
+ imageAlt={avatarData.name}
82
+ key={index}
83
+ size={size}
84
+ />
85
+ </Tooltip>
86
+ ))}
75
87
 
76
- { users.length > maxDisplayedUsers &&
77
- <div className={itemClasses}>
78
- {`+${users.length - 3}`}
79
- </div>
88
+ {users.length > maxDisplayedUsers &&
89
+ <Tooltip
90
+ placement='top'
91
+ text={
92
+ <div>
93
+ {
94
+ usersToDisplay.length < users.length ?
95
+ users.slice(displayCount).map((u, i) => (
96
+ <div key={i}>{u.tooltip}</div>
97
+ ))
98
+ :
99
+ ''
100
+ }
101
+ </div>
102
+ }
103
+ zIndex={10}
104
+ >
105
+ <div className={itemClasses + (withTooltip ? " user_count_tooltip" : "")}>
106
+ {`+${users.length - displayCount}`}
107
+ </div>
108
+ </Tooltip>
109
+ }
110
+ </>
111
+ :
112
+ <>
113
+ {usersToDisplay.map((avatarData, index) => (
114
+ <Avatar
115
+ {...avatarData}
116
+ className="pb_multiple_users_item"
117
+ dark={dark}
118
+ imageAlt={avatarData.name}
119
+ key={index}
120
+ size={size}
121
+ />
122
+ ))}
123
+
124
+ {users.length > maxDisplayedUsers &&
125
+ <div className={itemClasses}>
126
+ {`+${users.length - 3}`}
127
+ </div>
128
+ }
129
+ </>
80
130
  }
131
+
81
132
  </div>
82
133
  )
83
134
  }
@@ -0,0 +1,42 @@
1
+ import React from 'react'
2
+ import MultipleUsers from '../../pb_multiple_users/_multiple_users'
3
+
4
+ const MultipleUsersWithTooltip = (props) => {
5
+ return (
6
+ <div>
7
+ <MultipleUsers
8
+ users={[
9
+ {
10
+ name: 'Patrick Welch',
11
+ imageUrl: 'https://randomuser.me/api/portraits/men/9.jpg',
12
+ tooltip: "Patrick Welch - Online"
13
+ },
14
+ {
15
+ name: 'Lucille Sanchez',
16
+ imageUrl: 'https://randomuser.me/api/portraits/women/6.jpg',
17
+ tooltip: "Lucille Sanchez - Offline"
18
+ },
19
+ {
20
+ name: 'Beverly Reyes',
21
+ imageUrl: 'https://randomuser.me/api/portraits/women/74.jpg',
22
+ tooltip: "Beverly Reyes - Online"
23
+ },
24
+ {
25
+ name: 'Keith Craig',
26
+ imageUrl: 'https://randomuser.me/api/portraits/men/40.jpg',
27
+ tooltip: "Keith Craig - Away"
28
+ },
29
+ {
30
+ name: 'Alicia Cooper',
31
+ imageUrl: 'https://randomuser.me/api/portraits/women/46.jpg',
32
+ tooltip: "Alicia Cooper - Busy"
33
+ },
34
+ ]}
35
+ withTooltip
36
+ {...props}
37
+ />
38
+ </div>
39
+ )
40
+ }
41
+ ``
42
+ export default MultipleUsersWithTooltip
@@ -0,0 +1 @@
1
+ Use the `withTooltip` boolean prop to enable setting user-specific tooltip content via the `tooltip` property in the users array.
@@ -10,6 +10,7 @@ examples:
10
10
  - multiple_users_default: Default
11
11
  - multiple_users_reverse: Reverse
12
12
  - multiple_users_size: Size
13
+ - multiple_users_with_tooltip: With Tooltip
13
14
 
14
15
  swift:
15
16
  - multiple_users_default_swift: Default
@@ -1,3 +1,4 @@
1
1
  export { default as MultipleUsersDefault } from './_multiple_users_default.jsx'
2
2
  export { default as MultipleUsersReverse } from './_multiple_users_reverse.jsx'
3
3
  export { default as MultipleUsersSize } from './_multiple_users_size.jsx'
4
+ export { default as MultipleUsersWithTooltip } from './_multiple_users_with_tooltip.jsx'
@@ -49,4 +49,29 @@ test('should render aria-label', () => {
49
49
 
50
50
  const kit = screen.getByTestId(testId)
51
51
  expect(kit).toHaveAttribute('aria-label', testId)
52
+ })
53
+
54
+ test('should render withTooltip prop', () => {
55
+ render(
56
+ <MultipleUsers
57
+ data={{ testid: testId }}
58
+ users={[
59
+ {
60
+ name: 'Patrick Welch',
61
+ imageUrl: 'https://randomuser.me/api/portraits/men/9.jpg',
62
+ tooltip: "Patrick Welch - Online"
63
+ },
64
+ {
65
+ name: 'Lucille Sanchez',
66
+ imageUrl: 'https://randomuser.me/api/portraits/women/6.jpg',
67
+ tooltip: "Lucille Sanchez - Offline"
68
+ },
69
+ ]}
70
+ withTooltip
71
+ />
72
+ )
73
+
74
+ const kit = screen.getByTestId(testId)
75
+ const childWithTooltip = kit.querySelector('.pb_tooltip_kit')
76
+ expect(childWithTooltip).not.toBeNull()
52
77
  })