playbook_ui 14.18.0 → 14.19.0.pre.alpha.PLAY1968typeaheadpreservesearchreact7796

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 (273) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +11 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +148 -15
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +20 -3
  6. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +23 -13
  7. data/app/pb_kits/playbook/pb_advanced_table/Utilities/VisibilityTree.ts +47 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +313 -21
  9. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +12 -3
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +6 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +0 -6
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color.jsx +80 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color.md +3 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.html.erb +58 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.md +3 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +57 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +4 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.jsx +62 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +1 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.jsx +82 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.md +1 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +65 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +1 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +5 -1
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.jsx → _advanced_table_selectable_rows_no_subrows_react.jsx} +2 -2
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +3 -2
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +10 -5
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +7 -2
  29. data/app/pb_kits/playbook/pb_advanced_table/flat_advanced_table.js +106 -0
  30. data/app/pb_kits/playbook/pb_advanced_table/index.js +228 -11
  31. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +1 -0
  32. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +9 -1
  33. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -3
  34. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +1 -2
  35. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +4 -0
  36. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +3 -0
  37. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +3 -3
  38. data/app/pb_kits/playbook/pb_avatar/avatar.rb +2 -0
  39. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +18 -0
  40. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.html.erb +5 -0
  41. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.jsx +16 -0
  42. data/app/pb_kits/playbook/pb_avatar/docs/example.yml +2 -0
  43. data/app/pb_kits/playbook/pb_avatar/docs/index.js +1 -0
  44. data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
  45. data/app/pb_kits/playbook/pb_card/card.rb +12 -0
  46. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +1 -1
  47. data/app/pb_kits/playbook/pb_circle_chart/circleChart.test.js +2 -2
  48. data/app/pb_kits/playbook/pb_circle_chart/circleChartTheme.ts +53 -0
  49. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.html.erb +2 -2
  50. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx +1 -1
  51. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.html.erb +1 -1
  52. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx +1 -1
  53. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.html.erb +1 -1
  54. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.jsx +1 -1
  55. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.html.erb +1 -1
  56. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx +1 -1
  57. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.html.erb +1 -1
  58. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.jsx +1 -1
  59. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_live_data.jsx +2 -2
  60. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.jsx +38 -0
  61. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.md +1 -0
  62. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.html.erb +1 -1
  63. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.jsx +1 -1
  64. data/app/pb_kits/playbook/pb_circle_chart/docs/example.yml +2 -3
  65. data/app/pb_kits/playbook/pb_circle_chart/docs/index.js +2 -1
  66. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +12 -0
  67. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +12 -0
  68. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +50 -1
  69. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +2 -2
  70. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +4 -1
  71. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_rails.md +4 -0
  72. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_range_limit.md +1 -1
  73. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_react.md +5 -1
  74. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern.jsx +34 -0
  75. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern.md +14 -0
  76. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.html.erb +20 -0
  77. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.md +14 -0
  78. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  79. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  80. data/app/pb_kits/playbook/pb_date_picker/plugins/quickPick.tsx +10 -0
  81. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.html.erb +64 -0
  82. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.html.erb +55 -0
  83. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors_rails.md +1 -0
  84. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line.html.erb +55 -0
  85. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line_rails.md +5 -0
  86. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_rails.md +5 -0
  87. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners.jsx +59 -0
  88. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners_react.md +1 -0
  89. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +4 -1
  90. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  91. data/app/pb_kits/playbook/pb_draggable/draggable.rb +9 -1
  92. data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +11 -1
  93. data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +11 -1
  94. data/app/pb_kits/playbook/pb_draggable/index.js +141 -142
  95. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +33 -5
  96. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +5 -0
  97. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +5 -16
  98. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_error.html.erb +5 -2
  99. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_error.jsx +4 -1
  100. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.html.erb +28 -0
  101. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +17 -64
  102. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.html.erb +58 -0
  103. data/app/pb_kits/playbook/pb_dropdown/docs/{_dropdown_with_autocomplete_and_custom_display.jsx → _dropdown_with_autocomplete_with_subcomponents.jsx} +11 -25
  104. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.md +1 -0
  105. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +11 -0
  106. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +1 -1
  107. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +33 -2
  108. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.md +3 -1
  109. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_external_control.md +1 -0
  110. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.jsx +61 -0
  111. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.md +2 -0
  112. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.html.erb +52 -0
  113. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.md +2 -0
  114. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +7 -4
  115. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -2
  116. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +2 -2
  117. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +4 -0
  118. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +45 -1
  119. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +10 -0
  120. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +3 -0
  121. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +12 -2
  122. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +3 -1
  123. data/app/pb_kits/playbook/pb_dropdown/index.js +71 -1
  124. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +26 -0
  125. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +3 -4
  126. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +5 -5
  127. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +8 -1
  128. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_alignment.html.erb +27 -0
  129. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_default.html.erb +7 -0
  130. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_orientation.html.erb +12 -0
  131. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_size.html.erb +23 -0
  132. data/app/pb_kits/playbook/pb_empty_state/docs/example.yml +5 -1
  133. data/app/pb_kits/playbook/pb_empty_state/empty_state.html.erb +19 -0
  134. data/app/pb_kits/playbook/pb_empty_state/empty_state.rb +123 -0
  135. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +13 -0
  136. data/app/pb_kits/playbook/pb_file_upload/_file_upload.tsx +11 -1
  137. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.html.erb +1 -0
  138. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.jsx +41 -0
  139. data/app/pb_kits/playbook/pb_file_upload/docs/example.yml +2 -0
  140. data/app/pb_kits/playbook/pb_file_upload/docs/index.js +1 -0
  141. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -0
  142. data/app/pb_kits/playbook/pb_file_upload/file_upload.rb +7 -1
  143. data/app/pb_kits/playbook/pb_file_upload/fileupload.test.js +18 -0
  144. data/app/pb_kits/playbook/pb_filter/docs/_filter_within_turbo_frames.html.erb +41 -0
  145. data/app/pb_kits/playbook/pb_filter/docs/_filter_within_turbo_frames.md +1 -0
  146. data/app/pb_kits/playbook/pb_filter/docs/example.yml +1 -0
  147. data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +22 -18
  148. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +19 -12
  149. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.jsx +0 -1
  150. data/app/pb_kits/playbook/pb_gauge/gaugeTheme.ts +3 -1
  151. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +13 -7
  152. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +52 -0
  153. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +1 -0
  154. data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +1 -0
  155. data/app/pb_kits/playbook/pb_line_graph/docs/index.js +1 -0
  156. data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +110 -0
  157. data/app/pb_kits/playbook/pb_message/_message.tsx +3 -0
  158. data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.html.erb +9 -0
  159. data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.jsx +21 -0
  160. data/app/pb_kits/playbook/pb_message/docs/example.yml +2 -0
  161. data/app/pb_kits/playbook/pb_message/docs/index.js +1 -0
  162. data/app/pb_kits/playbook/pb_message/message.html.erb +2 -1
  163. data/app/pb_kits/playbook/pb_message/message.rb +1 -0
  164. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
  165. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
  166. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
  167. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
  168. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
  169. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
  170. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
  171. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
  172. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
  173. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
  174. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
  175. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
  176. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
  177. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
  178. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
  179. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
  180. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
  181. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
  182. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
  183. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
  184. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
  185. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
  186. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
  187. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
  188. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +2 -0
  189. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
  190. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +3 -1
  191. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
  192. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
  193. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
  194. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
  195. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
  196. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
  197. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
  198. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +2 -1
  199. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +1 -1
  200. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +5 -4
  201. data/app/pb_kits/playbook/pb_person/_person.tsx +12 -2
  202. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +21 -8
  203. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +3 -1
  204. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_country_search.html.erb +10 -0
  205. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_country_search.jsx +20 -0
  206. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_country_search.md +1 -0
  207. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.jsx +8 -1
  208. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
  209. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  210. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  211. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.test.js +19 -0
  212. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.html.erb +46 -0
  213. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.md +1 -0
  214. data/app/pb_kits/playbook/pb_popover/docs/example.yml +1 -0
  215. data/app/pb_kits/playbook/pb_popover/index.ts +13 -1
  216. data/app/pb_kits/playbook/pb_popover/popover.rb +2 -0
  217. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +2 -2
  218. data/app/pb_kits/playbook/pb_select/_select.scss +10 -0
  219. data/app/pb_kits/playbook/pb_select/docs/_select_error.html.erb +1 -1
  220. data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +7 -2
  221. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx +7 -7
  222. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +5 -5
  223. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +4 -2
  224. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb +1 -1
  225. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx +9 -1
  226. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb +5 -1
  227. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.jsx +7 -1
  228. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +70 -3
  229. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_error_state.html.erb +8 -1
  230. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_error_state.jsx +6 -2
  231. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.jsx +23 -0
  232. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.md +1 -0
  233. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  234. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  235. data/app/pb_kits/playbook/pb_user/_user.tsx +3 -0
  236. data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.html.erb +6 -0
  237. data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.jsx +16 -0
  238. data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
  239. data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
  240. data/app/pb_kits/playbook/pb_user/user.html.erb +2 -1
  241. data/app/pb_kits/playbook/pb_user/user.rb +1 -0
  242. data/dist/chunks/_typeahead-D8guY7O0.js +22 -0
  243. data/dist/chunks/_weekday_stacked-8LDnfK3v.js +45 -0
  244. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  245. data/dist/chunks/lib-B20MXZcW.js +29 -0
  246. data/dist/chunks/{pb_form_validation-BRjyJrKh.js → pb_form_validation-WWvUXPKD.js} +1 -1
  247. data/dist/chunks/vendor.js +1 -1
  248. data/dist/menu.yml +6 -14
  249. data/dist/playbook-doc.js +2 -2
  250. data/dist/playbook-rails-react-bindings.js +1 -1
  251. data/dist/playbook-rails.js +1 -1
  252. data/dist/playbook.css +1 -1
  253. data/lib/playbook/version.rb +2 -2
  254. metadata +79 -24
  255. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.md +0 -1
  256. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_hook.jsx +0 -79
  257. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.scss +0 -3
  258. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.tsx +0 -72
  259. data/app/pb_kits/playbook/pb_gantt_chart/docs/_gantt_chart_default.jsx +0 -53
  260. data/app/pb_kits/playbook/pb_gantt_chart/docs/example.yml +0 -7
  261. data/app/pb_kits/playbook/pb_gantt_chart/docs/index.js +0 -1
  262. data/app/pb_kits/playbook/pb_gantt_chart/gantt_chart.test.jsx +0 -19
  263. data/dist/chunks/_typeahead-C_FX7o_S.js +0 -22
  264. data/dist/chunks/_weekday_stacked-B4RLTeDo.js +0 -45
  265. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  266. data/dist/chunks/lib-ySl8uEpT.js +0 -29
  267. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_react.md → _advanced_table_selectable_rows.md} +0 -0
  268. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.html.erb → _advanced_table_selectable_rows_no_subrows_rails.html.erb} +0 -0
  269. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.html.erb → _advanced_table_selectable_rows_rails.html.erb} +0 -0
  270. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_drop_zones_colors.md → _draggable_drop_zones_colors_react.md} +0 -0
  271. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_drop_zones_line.md → _draggable_drop_zones_line_react.md} +0 -0
  272. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_drop_zones.md → _draggable_drop_zones_react.md} +0 -0
  273. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_event_listeners.md → _draggable_event_listeners_rails.md} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94ec449a03aebe3006ca1edc972e4632eb4ce67276e4e2a575dd54e4a26d87be
4
- data.tar.gz: 6843d0fe6728e70935869341db3aa00e22eaa987e935ff80c502629f841fee9b
3
+ metadata.gz: 6bed6ade52008d5911f299b17a869ddb77c217fb405b1c46c9bf5c75749d9221
4
+ data.tar.gz: 0e5edb1df0dc073cc773d70be62d84c02d784ddbc1bb33d193d61b62248bd2c5
5
5
  SHA512:
6
- metadata.gz: c4f7a5ceff1a63c95bfea4df95fcc16a633fd926d6a521cf812062292da2cc73ddaf8b3e010311bcedd20b962a7558855c44895d236ab5db3b0015cda458fb1c
7
- data.tar.gz: ed2800f912e35e9e0c2e457613ad19d58e9801b9fc8ce8a322c38d0d0609b28138eaeb9dcce449e441ceb93983697c628b49790eccc930c9264e4e9c11fbc505
6
+ metadata.gz: 3b62a955711654b165ecade39fb80b18fc25a62a3fcea4e8f4ae39d605af292bb0b3a3a2792d73482ad39d6e011556bb21c66687c0462ad9306cf362ec43bf0f
7
+ data.tar.gz: 70ba764eb695adf53f3bbbd137c1f551c92c1fea7f7fc2c617a3101014fabbe551809ca4156d16ed13b5ad95cd33a17d8213f0833f27c5964a6edb7becdb81dd
@@ -40,7 +40,6 @@
40
40
  @import 'pb_form/form';
41
41
  @import 'pb_form_group/form_group';
42
42
  @import 'pb_form_pill/form_pill';
43
- @import 'pb_gantt_chart/gantt_chart';
44
43
  @import 'pb_gauge/gauge';
45
44
  @import 'pb_hashtag/hashtag';
46
45
  @import 'pb_highlight/highlight';
@@ -93,7 +93,17 @@ export const RegularTableView = ({
93
93
 
94
94
  {row.getVisibleCells().map((cell: Cell<GenericObject, unknown>, i: number) => {
95
95
  const isPinnedLeft = columnPinning.left.includes(cell.column.id);
96
- const isLastCell = cell.column.parent?.columns?.at(-1)?.id === cell.column.id;
96
+ const isLastCell = (() => {
97
+ const parent = cell.column.parent;
98
+ if (!parent) {
99
+ const last = row.getVisibleCells().at(-1);
100
+ return last?.column.id === cell.column.id;
101
+ }
102
+
103
+ const visibleSiblings = parent.columns.filter(col => col.getIsVisible());
104
+ return visibleSiblings.at(-1)?.id === cell.column.id;
105
+ })();
106
+
97
107
  const { column } = cell;
98
108
  return (
99
109
  <td
@@ -1,25 +1,112 @@
1
- import React, { useEffect, useRef } from "react";
1
+ import React, { useEffect, useRef, useContext } from "react";
2
+
3
+ import AdvancedTableContext from "../Context/AdvancedTableContext";
4
+ import { buildVisibilityTree } from "../Utilities/VisibilityTree";
5
+
2
6
  import Card from "../../pb_card/_card";
3
7
  import Caption from "../../pb_caption/_caption";
4
8
  import Flex from "../../pb_flex/_flex";
5
9
  import FlexItem from "../../pb_flex/_flex_item";
6
- import { showActionBar, hideActionBar } from "../Utilities/ActionBarAnimationHelper";
10
+ import Dropdown from "../../pb_dropdown/_dropdown";
11
+ import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer";
12
+ import DropdownTrigger from "../../pb_dropdown/subcomponents/DropdownTrigger";
13
+ import Icon from "../../pb_icon/_icon";
14
+ import Checkbox from "../../pb_checkbox/_checkbox";
15
+ import SectionSeparator from "../../pb_section_separator/_section_separator";
16
+ import Tooltip from "../../pb_tooltip/_tooltip";
17
+
18
+ import {
19
+ showActionBar,
20
+ hideActionBar,
21
+ } from "../Utilities/ActionBarAnimationHelper";
22
+ import { GenericObject } from "../../types";
7
23
 
8
24
  interface TableActionBarProps {
9
- isVisible: boolean;
25
+ isVisible: boolean | GenericObject | undefined;
10
26
  selectedCount: number;
11
27
  actions?: React.ReactNode[] | React.ReactNode;
28
+ type?: string;
29
+ }
30
+
31
+ interface VisibilityNode {
32
+ id?: string | undefined;
33
+ label?: string | undefined;
34
+ children?: VisibilityNode[];
12
35
  }
13
36
 
14
37
  const TableActionBar: React.FC<TableActionBarProps> = ({
15
38
  isVisible,
16
39
  selectedCount,
17
- actions
40
+ actions,
41
+ type = "row-selection",
18
42
  }) => {
19
43
  const cardRef = useRef(null);
44
+ const { table, columnVisibilityControl, columnDefinitions } =
45
+ useContext(AdvancedTableContext);
46
+
47
+ // ----------- Column visibility logic -----------
48
+ const includeIds = columnVisibilityControl?.includeIds;
49
+ const firstLeafId = table.getAllLeafColumns()[0]?.id;
50
+ // Get the first leaf column ID to exclude it from the visibility tree
51
+ // This is to avoid showing the first column in the dropdown
52
+ // as toggling it's visibility breaks the expanded row functionality
53
+ const tree = buildVisibilityTree(columnDefinitions, includeIds).filter(node => node.id !== firstLeafId);
54
+
55
+ const renderLeaf = (id: string, label: string) => {
56
+ const col = table.getColumn(id);
57
+ const show = col.getIsVisible();
58
+
59
+ return (
60
+ <Checkbox
61
+ checked={show}
62
+ key={id}
63
+ onChange={() => col.toggleVisibility()}
64
+ paddingBottom="xs"
65
+ text={label}
66
+ />
67
+ );
68
+ };
69
+
70
+ const gatherLeafIds = (node: VisibilityNode): string[] =>
71
+ node.children && node.children.length
72
+ ? node.children.flatMap(gatherLeafIds)
73
+ : node.id
74
+ ? [node.id]
75
+ : [];
76
+
77
+ const renderGroup = (node: VisibilityNode ) => {
78
+ const leaves = gatherLeafIds(node);
79
+ const visibleArray = leaves.map((id) => table.getColumn(id).getIsVisible());
80
+ const allOn = visibleArray.every(Boolean);
81
+ const someOn = visibleArray.some(Boolean);
82
+
83
+ return (
84
+ <>
85
+ <Checkbox
86
+ checked={allOn}
87
+ indeterminate={!allOn && someOn}
88
+ onChange={() =>
89
+ leaves.forEach((id) =>
90
+ table.getColumn(id).toggleVisibility(!allOn),
91
+ )
92
+ }
93
+ paddingBottom="xs"
94
+ text={node.label}
95
+ />
96
+ <Flex flexDirection="column"
97
+ paddingLeft="lg"
98
+ >
99
+ {node?.children?.map((child) =>
100
+ child.children ? renderGroup(child) : renderLeaf(child.id, child.label),
101
+ )}
102
+ </Flex>
103
+ </>
104
+ );
105
+ };
106
+ // ------------ End of column visibility logic --------
20
107
 
21
108
  useEffect(() => {
22
- if (cardRef.current) {
109
+ if (cardRef.current && type === "row-selection") {
23
110
  if (isVisible) {
24
111
  showActionBar(cardRef.current);
25
112
  } else {
@@ -31,22 +118,68 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
31
118
  return (
32
119
  <Card
33
120
  borderNone={!isVisible}
34
- className={`${isVisible && "show-action-card row-selection-actions-card"}`}
121
+ className={`${
122
+ isVisible && "show-action-card row-selection-actions-card"
123
+ }`}
35
124
  htmlOptions={{ ref: cardRef as any }}
36
125
  padding={`${isVisible ? "xs" : "none"}`}
37
126
  >
38
127
  <Flex
39
128
  alignItems="center"
40
- justify="between"
129
+ justify={type === "row-selection" ? "between" : "end"}
41
130
  >
42
- <Caption
43
- color="light"
44
- paddingLeft="xs"
45
- size="xs"
46
- >
47
- {selectedCount} Selected
48
- </Caption>
49
- <FlexItem>{actions}</FlexItem>
131
+ {type === "row-selection" ? (
132
+ <>
133
+ <Caption color="light"
134
+ paddingLeft="xs"
135
+ size="xs"
136
+ >
137
+ {selectedCount} Selected
138
+ </Caption>
139
+ <FlexItem>{actions}</FlexItem>
140
+ </>
141
+ ) : (
142
+ <Dropdown
143
+ className="column-visibility-dropdown-wrapper"
144
+ options={columnDefinitions}
145
+ >
146
+ <DropdownTrigger>
147
+ <Tooltip
148
+ placement='top'
149
+ text="Column Configuration"
150
+ zIndex={10}
151
+ >
152
+ <Icon
153
+ color="primary"
154
+ cursor="pointer"
155
+ icon="sliders-h"
156
+ />
157
+ </Tooltip>
158
+ </DropdownTrigger>
159
+ <DropdownContainer
160
+ className="column-visibility-dropdown"
161
+ paddingTop="sm"
162
+ >
163
+ <>
164
+ <Caption
165
+ paddingBottom="sm"
166
+ text="Columns Config"
167
+ textAlign="center"
168
+ />
169
+ <SectionSeparator paddingBottom="xs" />
170
+ {tree.map((node: VisibilityNode) => (
171
+ <Flex cursor="pointer"
172
+ flexDirection="column"
173
+ key={node.id}
174
+ paddingX="xs"
175
+ >
176
+ {node.children ? renderGroup(node) : renderLeaf(node.id, node.label)}
177
+ </Flex>
178
+ ))}
179
+ </>
180
+ </DropdownContainer>
181
+ </Dropdown>
182
+ )}
50
183
  </Flex>
51
184
  </Card>
52
185
  );
@@ -79,9 +79,26 @@ export const TableHeaderCell = ({
79
79
  header?.column.getLeafColumns().length === 1 &&
80
80
  header?.column.getLeafColumns()[0].id === header.column.id
81
81
 
82
- const isLastHeaderCell =
83
- header?.column.parent?.columns.at(-1) === header?.column ||
84
- (header?.colSpan > 1 && header?.column.parent !== undefined);
82
+ const columnHasVisibleLeaf = (col: any): boolean =>
83
+ col.getIsVisible?.() ||
84
+ (Array.isArray(col.columns) &&
85
+ col.columns.some((child: any) => columnHasVisibleLeaf(child)));
86
+
87
+ // Check on column position in stack + visibility to add the vertical border
88
+ const isLastHeaderCell = (() => {
89
+ if (!header) return false;
90
+
91
+ if (header.colSpan > 1 && header.column.parent !== undefined) return true;
92
+
93
+ const parent = header.column.parent;
94
+
95
+ if (!parent) {
96
+ const topHeaders = table?.getHeaderGroups()[0].headers.filter((h: any) => columnHasVisibleLeaf(h.column));
97
+ return topHeaders?.at(-1)?.id === header.id;
98
+ }
99
+ const visibleSiblings = parent.columns.filter(columnHasVisibleLeaf);
100
+ return visibleSiblings.at(-1) === header.column;
101
+ })();
85
102
 
86
103
  const cellClassName = classnames(
87
104
  "table-header-cells",
@@ -26,6 +26,8 @@ interface UseTableStateProps {
26
26
  virtualizedRows?: boolean;
27
27
  tableOptions?: GenericObject;
28
28
  onRowSelectionChange?: (arg: RowSelectionState) => void;
29
+ columnVisibilityControl?: GenericObject;
30
+
29
31
  }
30
32
 
31
33
  export function useTableState({
@@ -40,16 +42,19 @@ export function useTableState({
40
42
  pagination = false,
41
43
  paginationProps,
42
44
  virtualizedRows = false,
43
- tableOptions
45
+ tableOptions,
46
+ columnVisibilityControl
44
47
  }: UseTableStateProps) {
45
48
  // Create a local state for expanded and setExpanded if expandedControl not used
46
49
  const [localExpanded, setLocalExpanded] = useState({});
47
50
  const [loadingStateRowCount, setLoadingStateRowCount] = useState(initialLoadingRowsCount);
48
51
  const [rowSelection, setRowSelection] = useState<RowSelectionState>({});
49
-
52
+ const [localColumnVisibility, setLocalColumnVisibility] = useState({});
50
53
  // Determine whether to use the prop or the local state
51
54
  const expanded = expandedControl ? expandedControl.value : localExpanded;
52
55
  const setExpanded = expandedControl ? expandedControl.onChange : setLocalExpanded;
56
+ const columnVisibility = (columnVisibilityControl && columnVisibilityControl.value) ? columnVisibilityControl.value : localColumnVisibility;
57
+ const setColumnVisibility = (columnVisibilityControl && columnVisibilityControl.onChange) ? columnVisibilityControl.onChange : setLocalColumnVisibility;
53
58
 
54
59
  // Virtualized data handling (chunked loading)
55
60
  const fetchSize = 20; // Number of rows per "page"
@@ -104,17 +109,21 @@ export function useTableState({
104
109
  }]), [columnDefinitions, sortControl]);
105
110
 
106
111
  // Custom state based on features enabled
107
- const customState = useCallback(() => {
108
- if (sortControl && selectableRows) {
109
- return { state: { expanded, sorting, rowSelection } };
110
- } else if (sortControl) {
111
- return { state: { expanded, sorting } };
112
- } else if (selectableRows) {
113
- return { state: { expanded, rowSelection } };
114
- } else {
115
- return { state: { expanded } };
116
- }
117
- }, [expanded, rowSelection, sortControl, selectableRows, sorting]);
112
+ const customState = useCallback(() => ({
113
+ state: {
114
+ expanded,
115
+ ...(sortControl && { sorting }),
116
+ ...(selectableRows && { rowSelection }),
117
+ ...(columnVisibility && { columnVisibility }),
118
+ },
119
+ }), [
120
+ expanded,
121
+ sortControl,
122
+ sorting,
123
+ selectableRows,
124
+ rowSelection,
125
+ columnVisibility,
126
+ ]);
118
127
 
119
128
  // Pagination configuration
120
129
  const paginationInitializer = useMemo(() => {
@@ -145,6 +154,7 @@ export function useTableState({
145
154
  sortDescFirst: true,
146
155
  onRowSelectionChange: setRowSelection,
147
156
  getRowId: selectableRows ? row => row.id : undefined,
157
+ onColumnVisibilityChange: setColumnVisibility,
148
158
  meta: {
149
159
  columnDefinitions
150
160
  },
@@ -0,0 +1,47 @@
1
+ export interface VisibilityNode {
2
+ id: string;
3
+ label: string;
4
+ children?: VisibilityNode[];
5
+ }
6
+ export const buildVisibilityTree = (
7
+ defs: any[],
8
+ allowed?: string[] | null
9
+ ): VisibilityNode[] =>
10
+ defs
11
+ .map((def) => {
12
+ const isGroup = Array.isArray(def.columns) && def.columns.length > 0;
13
+
14
+ // No filter at all → keep it
15
+ if (!allowed?.length) {
16
+ return isGroup
17
+ ? {
18
+ id: def.id,
19
+ label: def.label,
20
+ children: buildVisibilityTree(def.columns, allowed),
21
+ }
22
+ : { id: def.id, label: def.label };
23
+ }
24
+
25
+ // 1️⃣ If *this* ID is explicitly allowed → keep it & all its children
26
+ if (allowed.includes(def.id)) {
27
+ return isGroup
28
+ ? {
29
+ id: def.id,
30
+ label: def.label,
31
+ children: buildVisibilityTree(def.columns, null),
32
+ }
33
+ : { id: def.id, label: def.label };
34
+ }
35
+
36
+ // Otherwise, if it’s a group, recurse & keep only if kids survive
37
+ if (isGroup) {
38
+ const kids = buildVisibilityTree(def.columns, allowed).filter(Boolean);
39
+ return kids.length
40
+ ? { id: def.id, label: def.label, children: kids }
41
+ : null;
42
+ }
43
+
44
+ // Leaf not allowed → drop it
45
+ return null;
46
+ })
47
+ .filter(Boolean);