playbook_ui 16.9.0 → 16.10.0.pre.alpha.PLAY3053advancedtablebottompinnedrowsreact17469

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 (375) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +32 -11
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +5 -2
  5. data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +27 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +19 -14
  7. data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +4 -2
  8. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +17 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/Utilities/StickyLayoutHelper.ts +100 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +38 -71
  11. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +27 -77
  12. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +7 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +128 -12
  14. data/app/pb_kits/playbook/pb_advanced_table/advanced_table_action_bar.js +31 -9
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +19 -2
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_react.md +2 -2
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +4 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.jsx +6 -2
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +1 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_react.md +1 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +36 -44
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +10 -19
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +0 -4
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +3 -5
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.json +2 -8
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.overrides.json +1 -8
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +0 -1
  29. data/app/pb_kits/playbook/pb_advanced_table/index.js +20 -29
  30. data/app/pb_kits/playbook/pb_advanced_table/kit.schema.json +0 -12
  31. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +1 -1
  32. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +2 -1
  33. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +16 -2
  34. data/app/pb_kits/playbook/pb_badge/kit.schema.json +1 -1
  35. data/app/pb_kits/playbook/pb_button_toolbar/kit.schema.json +1 -1
  36. data/app/pb_kits/playbook/pb_card/card.rb +1 -1
  37. data/app/pb_kits/playbook/pb_card/kit.schema.json +2 -0
  38. data/app/pb_kits/playbook/pb_checkbox/kit.schema.json +2 -2
  39. data/app/pb_kits/playbook/pb_circle_icon_button/kit.schema.json +2 -2
  40. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +6 -0
  41. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +19 -2
  42. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +58 -1
  43. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +3 -0
  44. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +319 -65
  45. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.html.erb +1 -0
  46. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.jsx +15 -0
  47. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.md +1 -0
  48. data/app/pb_kits/playbook/pb_date_picker/docs/_playground.json +1 -0
  49. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  50. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  51. data/app/pb_kits/playbook/pb_date_picker/kit.schema.json +9 -1
  52. data/app/pb_kits/playbook/pb_date_time/kit.schema.json +1 -1
  53. data/app/pb_kits/playbook/pb_date_time_stacked/kit.schema.json +1 -1
  54. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +54 -1
  55. data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +21 -5
  56. data/app/pb_kits/playbook/pb_dialog/_dialog_context.tsx +8 -2
  57. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_header.tsx +1 -1
  58. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -1
  59. data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +125 -0
  60. data/app/pb_kits/playbook/pb_dialog/index.js +11 -1
  61. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +1 -1
  62. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners_rails.md +1 -1
  63. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_independent_containers.html.erb +35 -0
  64. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_independent_containers_rails.md +8 -0
  65. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.md +3 -1
  66. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_react.md +1 -1
  67. data/app/pb_kits/playbook/pb_draggable/docs/_playground.json +260 -19
  68. data/app/pb_kits/playbook/pb_draggable/docs/_playground.overrides.json +258 -13
  69. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +1 -0
  70. data/app/pb_kits/playbook/pb_draggable/index.js +10 -3
  71. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +122 -0
  72. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +114 -35
  73. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.html.erb +93 -0
  74. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.jsx +127 -0
  75. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.md +1 -0
  76. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.html.erb +10 -0
  77. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.jsx +37 -0
  78. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.html.erb +10 -0
  79. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.jsx +37 -0
  80. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.md +1 -0
  81. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.json +150 -237
  82. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.overrides.json +58 -74
  83. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +6 -0
  84. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +3 -0
  85. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +5 -4
  86. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +6 -1
  87. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +96 -0
  88. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +1 -0
  89. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +2 -0
  90. data/app/pb_kits/playbook/pb_dropdown/dropdown_option.html.erb +2 -2
  91. data/app/pb_kits/playbook/pb_dropdown/dropdown_option.rb +27 -2
  92. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +4 -2
  93. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +2 -0
  94. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +25 -5
  95. data/app/pb_kits/playbook/pb_dropdown/index.js +270 -25
  96. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +19 -10
  97. data/app/pb_kits/playbook/pb_dropdown/kit.schema.json +8 -0
  98. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +39 -2
  99. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +15 -4
  100. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +22 -13
  101. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.html.erb +66 -0
  102. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.jsx +53 -0
  103. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.md +5 -0
  104. data/app/pb_kits/playbook/pb_file_upload/docs/_playground.json +2 -1
  105. data/app/pb_kits/playbook/pb_file_upload/docs/example.yml +3 -1
  106. data/app/pb_kits/playbook/pb_file_upload/docs/index.js +1 -0
  107. data/app/pb_kits/playbook/pb_file_upload/kit.schema.json +3 -3
  108. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +55 -28
  109. data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.tsx +4 -1
  110. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +4 -1
  111. data/app/pb_kits/playbook/pb_filter/Filter/InteractiveFilter.tsx +277 -0
  112. data/app/pb_kits/playbook/pb_filter/_filter.scss +88 -1
  113. data/app/pb_kits/playbook/pb_filter/_filter.tsx +27 -0
  114. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive.html.erb +116 -0
  115. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive.md +12 -0
  116. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive_react.jsx +153 -0
  117. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive_react.md +10 -0
  118. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +1 -1
  119. data/app/pb_kits/playbook/pb_filter/docs/_playground.json +308 -5
  120. data/app/pb_kits/playbook/pb_filter/docs/_playground.overrides.json +312 -0
  121. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  122. data/app/pb_kits/playbook/pb_filter/docs/index.js +2 -1
  123. data/app/pb_kits/playbook/pb_filter/filter.html.erb +80 -3
  124. data/app/pb_kits/playbook/pb_filter/filter.rb +71 -0
  125. data/app/pb_kits/playbook/pb_filter/filter.test.js +78 -0
  126. data/app/pb_kits/playbook/pb_filter/index.ts +349 -0
  127. data/app/pb_kits/playbook/pb_filter/kit.schema.json +94 -29
  128. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.json +210 -14
  129. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.overrides.json +231 -0
  130. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/kit.schema.json +1 -1
  131. data/app/pb_kits/playbook/pb_flex/docs/_playground.json +297 -38
  132. data/app/pb_kits/playbook/pb_flex/docs/_playground.overrides.json +300 -40
  133. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +20 -19
  134. data/app/pb_kits/playbook/pb_form/docs/_playground.json +1 -13
  135. data/app/pb_kits/playbook/pb_form_group/docs/_playground.json +82 -5
  136. data/app/pb_kits/playbook/pb_form_group/docs/_playground.overrides.json +91 -0
  137. data/app/pb_kits/playbook/pb_form_pill/docs/_playground.json +155 -14
  138. data/app/pb_kits/playbook/pb_form_pill/docs/_playground.overrides.json +147 -0
  139. data/app/pb_kits/playbook/pb_form_pill/kit.schema.json +1 -1
  140. data/app/pb_kits/playbook/pb_full_screen/_full_screen.scss +77 -0
  141. data/app/pb_kits/playbook/pb_full_screen/_full_screen.tsx +183 -0
  142. data/app/pb_kits/playbook/pb_full_screen/docs/_description.md +1 -0
  143. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.jsx +68 -0
  144. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.md +1 -0
  145. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.jsx +71 -0
  146. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.md +1 -0
  147. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.html.erb +3 -0
  148. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.jsx +63 -0
  149. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.md +1 -0
  150. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.jsx +68 -0
  151. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.md +1 -0
  152. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.jsx +68 -0
  153. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.md +1 -0
  154. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.jsx +149 -0
  155. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.md +1 -0
  156. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.json +155 -0
  157. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.overrides.json +137 -0
  158. data/app/pb_kits/playbook/pb_full_screen/docs/example.yml +14 -0
  159. data/app/pb_kits/playbook/pb_full_screen/docs/index.js +6 -0
  160. data/app/pb_kits/playbook/pb_full_screen/full_screen.html.erb +12 -0
  161. data/app/pb_kits/playbook/pb_full_screen/full_screen.rb +11 -0
  162. data/app/pb_kits/playbook/pb_full_screen/full_screen.test.jsx +237 -0
  163. data/app/pb_kits/playbook/pb_full_screen/kit.schema.json +89 -0
  164. data/app/pb_kits/playbook/pb_full_screen/useFullScreen.ts +15 -0
  165. data/app/pb_kits/playbook/pb_hashtag/docs/_playground.json +72 -11
  166. data/app/pb_kits/playbook/pb_hashtag/docs/_playground.overrides.json +75 -0
  167. data/app/pb_kits/playbook/pb_highlight/docs/_playground.json +75 -4
  168. data/app/pb_kits/playbook/pb_highlight/docs/_playground.overrides.json +75 -0
  169. data/app/pb_kits/playbook/pb_home_address_street/docs/_playground.json +138 -12
  170. data/app/pb_kits/playbook/pb_home_address_street/docs/_playground.overrides.json +162 -0
  171. data/app/pb_kits/playbook/pb_icon/_icon.tsx +22 -11
  172. data/app/pb_kits/playbook/pb_icon/docs/_icon_default.jsx +1 -1
  173. data/app/pb_kits/playbook/pb_icon/docs/_playground.json +66 -41
  174. data/app/pb_kits/playbook/pb_icon/docs/_playground.overrides.json +85 -27
  175. data/app/pb_kits/playbook/pb_icon/icon.rb +5 -2
  176. data/app/pb_kits/playbook/pb_icon/kit.schema.json +3 -5
  177. data/app/pb_kits/playbook/pb_icon_button/docs/_playground.json +111 -9
  178. data/app/pb_kits/playbook/pb_icon_button/docs/_playground.overrides.json +131 -0
  179. data/app/pb_kits/playbook/pb_icon_button/kit.schema.json +1 -1
  180. data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.json +92 -7
  181. data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.overrides.json +108 -0
  182. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.json +32 -17
  183. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.overrides.json +81 -8
  184. data/app/pb_kits/playbook/pb_icon_value/docs/_playground.json +28 -18
  185. data/app/pb_kits/playbook/pb_icon_value/docs/_playground.overrides.json +58 -9
  186. data/app/pb_kits/playbook/pb_image/docs/_playground.json +124 -47
  187. data/app/pb_kits/playbook/pb_image/docs/_playground.overrides.json +122 -47
  188. data/app/pb_kits/playbook/pb_label_pill/docs/_playground.json +68 -6
  189. data/app/pb_kits/playbook/pb_label_pill/docs/_playground.overrides.json +85 -0
  190. data/app/pb_kits/playbook/pb_label_value/docs/_playground.json +59 -36
  191. data/app/pb_kits/playbook/pb_label_value/docs/_playground.overrides.json +101 -30
  192. data/app/pb_kits/playbook/pb_layout/docs/_playground.json +216 -10
  193. data/app/pb_kits/playbook/pb_layout/docs/_playground.overrides.json +188 -0
  194. data/app/pb_kits/playbook/pb_legend/docs/_playground.json +60 -7
  195. data/app/pb_kits/playbook/pb_legend/docs/_playground.overrides.json +77 -0
  196. data/app/pb_kits/playbook/pb_list/docs/_playground.json +165 -17
  197. data/app/pb_kits/playbook/pb_list/docs/_playground.overrides.json +191 -0
  198. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +3 -1
  199. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.html.erb +21 -0
  200. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.jsx +55 -0
  201. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.md +1 -0
  202. data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.json +28 -1
  203. data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.overrides.json +27 -1
  204. data/app/pb_kits/playbook/pb_loading_inline/docs/example.yml +2 -0
  205. data/app/pb_kits/playbook/pb_loading_inline/docs/index.js +1 -0
  206. data/app/pb_kits/playbook/pb_loading_inline/kit.schema.json +18 -2
  207. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +1 -1
  208. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.rb +3 -0
  209. data/app/pb_kits/playbook/pb_map/docs/_playground.json +164 -7
  210. data/app/pb_kits/playbook/pb_map/docs/_playground.overrides.json +180 -0
  211. data/app/pb_kits/playbook/pb_message/docs/_playground.json +114 -8
  212. data/app/pb_kits/playbook/pb_message/docs/_playground.overrides.json +144 -0
  213. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -7
  214. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +127 -12
  215. data/app/pb_kits/playbook/pb_multi_level_select/docs/_playground.json +310 -61
  216. data/app/pb_kits/playbook/pb_multi_level_select/docs/_playground.overrides.json +327 -44
  217. data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.json +35 -6
  218. data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.overrides.json +35 -6
  219. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.json +32 -21
  220. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.overrides.json +32 -21
  221. data/app/pb_kits/playbook/pb_nav/docs/_playground.json +546 -18
  222. data/app/pb_kits/playbook/pb_nav/docs/_playground.overrides.json +561 -14
  223. data/app/pb_kits/playbook/pb_online_status/docs/_playground.json +18 -23
  224. data/app/pb_kits/playbook/pb_online_status/docs/_playground.overrides.json +18 -14
  225. data/app/pb_kits/playbook/pb_overlay/docs/_playground.json +133 -14
  226. data/app/pb_kits/playbook/pb_overlay/docs/_playground.overrides.json +154 -0
  227. data/app/pb_kits/playbook/pb_pagination/docs/_playground.json +35 -14
  228. data/app/pb_kits/playbook/pb_pagination/docs/_playground.overrides.json +35 -14
  229. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb +1 -1
  230. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.html.erb +1 -1
  231. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.html.erb +5 -5
  232. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.html.erb +1 -1
  233. data/app/pb_kits/playbook/pb_passphrase/docs/_playground.json +129 -14
  234. data/app/pb_kits/playbook/pb_passphrase/docs/_playground.overrides.json +148 -0
  235. data/app/pb_kits/playbook/pb_passphrase/index.ts +58 -0
  236. data/app/pb_kits/playbook/pb_passphrase/kit.schema.json +13 -0
  237. data/app/pb_kits/playbook/pb_passphrase/passphrase.html.erb +70 -1
  238. data/app/pb_kits/playbook/pb_passphrase/passphrase.rb +70 -0
  239. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_playground.json +378 -4
  240. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_playground.overrides.json +245 -0
  241. data/app/pb_kits/playbook/pb_pb_bar_graph/kit.schema.json +1 -1
  242. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_playground.json +215 -4
  243. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_playground.overrides.json +224 -0
  244. data/app/pb_kits/playbook/pb_pb_circle_chart/kit.schema.json +1 -1
  245. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_playground.json +149 -4
  246. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_playground.overrides.json +162 -0
  247. data/app/pb_kits/playbook/pb_pb_gauge_chart/kit.schema.json +1 -1
  248. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_playground.json +392 -4
  249. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_playground.overrides.json +212 -0
  250. data/app/pb_kits/playbook/pb_pb_line_graph/kit.schema.json +1 -1
  251. data/app/pb_kits/playbook/pb_person/docs/_playground.json +27 -11
  252. data/app/pb_kits/playbook/pb_person/docs/_playground.overrides.json +34 -9
  253. data/app/pb_kits/playbook/pb_person_contact/docs/_playground.json +72 -21
  254. data/app/pb_kits/playbook/pb_person_contact/docs/_playground.overrides.json +71 -21
  255. data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.json +179 -21
  256. data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.overrides.json +180 -0
  257. data/app/pb_kits/playbook/pb_phone_number_input/kit.schema.json +2 -2
  258. data/app/pb_kits/playbook/pb_pill/docs/_playground.json +16 -49
  259. data/app/pb_kits/playbook/pb_pill/docs/_playground.overrides.json +33 -30
  260. data/app/pb_kits/playbook/pb_popover/_popover.scss +27 -0
  261. data/app/pb_kits/playbook/pb_popover/_popover.tsx +49 -16
  262. data/app/pb_kits/playbook/pb_popover/docs/_playground.json +155 -46
  263. data/app/pb_kits/playbook/pb_popover/docs/_playground.overrides.json +162 -30
  264. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +9 -11
  265. data/app/pb_kits/playbook/pb_popover/index.ts +35 -4
  266. data/app/pb_kits/playbook/pb_popover/popover.html.erb +5 -2
  267. data/app/pb_kits/playbook/pb_popover/popover.test.js +212 -5
  268. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.json +26 -13
  269. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.overrides.json +24 -6
  270. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.json +50 -17
  271. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.overrides.json +41 -7
  272. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.json +197 -10
  273. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.overrides.json +189 -0
  274. data/app/pb_kits/playbook/pb_radio/docs/_playground.json +80 -6
  275. data/app/pb_kits/playbook/pb_radio/docs/_playground.overrides.json +82 -3
  276. data/app/pb_kits/playbook/pb_radio/kit.schema.json +1 -1
  277. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +12 -24
  278. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.json +152 -22
  279. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.overrides.json +153 -0
  280. data/app/pb_kits/playbook/pb_select/_select.tsx +1 -0
  281. data/app/pb_kits/playbook/pb_select/docs/_playground.json +65 -19
  282. data/app/pb_kits/playbook/pb_select/docs/_playground.overrides.json +54 -14
  283. data/app/pb_kits/playbook/pb_select/kit.schema.json +2 -2
  284. data/app/pb_kits/playbook/pb_select/select.html.erb +1 -1
  285. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.json +75 -82
  286. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.overrides.json +76 -76
  287. data/app/pb_kits/playbook/pb_selectable_card/kit.schema.json +2 -2
  288. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.json +105 -15
  289. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.overrides.json +106 -0
  290. data/app/pb_kits/playbook/pb_selectable_card_icon/kit.schema.json +2 -2
  291. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.json +37 -21
  292. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.overrides.json +35 -18
  293. data/app/pb_kits/playbook/pb_selectable_icon/kit.schema.json +1 -1
  294. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.json +174 -12
  295. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.overrides.json +162 -10
  296. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.json +68 -6
  297. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.overrides.json +80 -0
  298. data/app/pb_kits/playbook/pb_source/docs/_playground.json +67 -6
  299. data/app/pb_kits/playbook/pb_source/docs/_playground.overrides.json +80 -0
  300. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.json +28 -53
  301. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.overrides.json +33 -32
  302. data/app/pb_kits/playbook/pb_star_rating/kit.schema.json +1 -1
  303. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.json +15 -9
  304. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.overrides.json +15 -5
  305. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.json +19 -9
  306. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.overrides.json +18 -7
  307. data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +1 -1
  308. data/app/pb_kits/playbook/pb_table/docs/_playground.json +223 -21
  309. data/app/pb_kits/playbook/pb_table/docs/_playground.overrides.json +176 -0
  310. data/app/pb_kits/playbook/pb_text_input/docs/_playground.json +44 -5
  311. data/app/pb_kits/playbook/pb_text_input/docs/_playground.overrides.json +39 -3
  312. data/app/pb_kits/playbook/pb_text_input/kit.schema.json +3 -3
  313. data/app/pb_kits/playbook/pb_textarea/docs/_playground.json +35 -3
  314. data/app/pb_kits/playbook/pb_textarea/docs/_playground.overrides.json +28 -3
  315. data/app/pb_kits/playbook/pb_textarea/kit.schema.json +1 -1
  316. data/app/pb_kits/playbook/pb_time/docs/_playground.json +28 -14
  317. data/app/pb_kits/playbook/pb_time/docs/_playground.overrides.json +26 -13
  318. data/app/pb_kits/playbook/pb_time_picker/_time_picker.scss +42 -0
  319. data/app/pb_kits/playbook/pb_time_picker/_time_picker.tsx +309 -167
  320. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.json +36 -30
  321. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.overrides.json +31 -26
  322. data/app/pb_kits/playbook/pb_time_picker/index.ts +263 -11
  323. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.json +63 -9
  324. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.overrides.json +69 -0
  325. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.json +30 -9
  326. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.overrides.json +30 -9
  327. data/app/pb_kits/playbook/pb_timeline/docs/_playground.json +178 -6
  328. data/app/pb_kits/playbook/pb_timeline/docs/_playground.overrides.json +165 -0
  329. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.json +36 -21
  330. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.overrides.json +35 -20
  331. data/app/pb_kits/playbook/pb_toggle/docs/_playground.json +24 -13
  332. data/app/pb_kits/playbook/pb_toggle/docs/_playground.overrides.json +20 -12
  333. data/app/pb_kits/playbook/pb_toggle/kit.schema.json +2 -2
  334. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.json +42 -23
  335. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.overrides.json +35 -15
  336. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +109 -3
  337. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.json +124 -44
  338. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.overrides.json +98 -31
  339. data/app/pb_kits/playbook/pb_typeahead/kit.schema.json +8 -2
  340. data/app/pb_kits/playbook/pb_user/docs/_playground.json +33 -15
  341. data/app/pb_kits/playbook/pb_user/docs/_playground.overrides.json +32 -15
  342. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.json +26 -12
  343. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.overrides.json +26 -9
  344. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.json +32 -5
  345. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.overrides.json +30 -4
  346. data/app/pb_kits/playbook/tokens/_colors.scss +5 -1
  347. data/app/pb_kits/playbook/utilities/_border.scss +262 -0
  348. data/app/pb_kits/playbook/utilities/floatingPortalHosts.ts +565 -0
  349. data/app/pb_kits/playbook/utilities/global-props.schema.json +98 -0
  350. data/app/pb_kits/playbook/utilities/globalProps.ts +83 -1
  351. data/app/pb_kits/playbook/utilities/icons/allicons.tsx +38 -0
  352. data/app/pb_kits/playbook/utilities/test/globalProps/border.test.js +66 -0
  353. data/dist/chunks/{_pb_line_graph-B870s9g1.js → _pb_line_graph-C2H9vs_8.js} +1 -1
  354. data/dist/chunks/_typeahead-Du8dRYaM.js +5 -0
  355. data/dist/chunks/globalProps-DIAZ03-L.js +6 -0
  356. data/dist/chunks/lib-ZHDedNfP.js +29 -0
  357. data/dist/chunks/time_picker_helper-CVMV9ync.js +1 -0
  358. data/dist/chunks/vendor.js +5 -5
  359. data/dist/menu.yml +7 -0
  360. data/dist/playbook-rails-react-bindings.js +1 -1
  361. data/dist/playbook-rails.js +1 -1
  362. data/dist/playbook.css +1 -1
  363. data/lib/playbook/border.rb +87 -0
  364. data/lib/playbook/classnames.rb +1 -0
  365. data/lib/playbook/forms/builder/form_field_builder.rb +2 -0
  366. data/lib/playbook/kit_base.rb +2 -0
  367. data/lib/playbook/pb_forms_global_props_helper.rb +15 -0
  368. data/lib/playbook/version.rb +2 -2
  369. metadata +93 -9
  370. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +0 -92
  371. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md +0 -3
  372. data/dist/chunks/_typeahead-jMN-A0_C.js +0 -5
  373. data/dist/chunks/globalProps-BInmh-C7.js +0 -6
  374. data/dist/chunks/lib-CVYIIiwI.js +0 -29
  375. data/dist/chunks/time_picker_helper-Bx8nzyM8.js +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1bf2d157b05e934cbfa3297c60f74cabb576373b5cb3b4a2b61d48df0ed27a3
4
- data.tar.gz: 91635a39004a1f4169780f5065c21207b407308d0509d88710e9ad55b5eefc3c
3
+ metadata.gz: 47abbd6021f5f2e78c6eec2c21e748448cbdc2a3b5699f97914e9dec865836ea
4
+ data.tar.gz: 1e3542fd598d4209193fc2f6f1357d06ab1fffcb17fef11b0d84aa322663fb7b
5
5
  SHA512:
6
- metadata.gz: f9d9fe0b6fea54f0eb1a347d9dd1b7d6c4d7a930825e5818c781c406edd89d444675b5772e3cba27e4d4de5f60acdf6e536a7f98dd905d91669dc95d616db777
7
- data.tar.gz: 37fa1f6e6c2610ecfd26f259be1e048053c37a562511007f05efb577cc3659ba9745518ff9214d63e92da275b45210228d86fe2f3e2500e5e91b1f5f9edc404c
6
+ metadata.gz: '02951b7c75b1fc99bffa8893be7def930da61e5f98f1ecda05df882085a94ce56b07ba45131f0fe96f8e14b48db98d5ae414c68de8f05b439396d4735c743b00'
7
+ data.tar.gz: ab82942a91594a7e180f52942659480309c98210bce7cb630a7ca8308f3dad9ca977859088147cfc039716362af2af0dc18f4fe8c5fd2f064c55b3d15a9f3ca4
@@ -36,6 +36,7 @@
36
36
  @import 'pb_form/form';
37
37
  @import 'pb_form_group/form_group';
38
38
  @import 'pb_form_pill/form_pill';
39
+ @import 'pb_full_screen/full_screen';
39
40
  @import 'pb_hashtag/hashtag';
40
41
  @import 'pb_highlight/highlight';
41
42
  @import 'pb_home_address_street/home_address_street';
@@ -128,3 +129,4 @@
128
129
  @import 'utilities/vertical_align';
129
130
  @import 'utilities/height';
130
131
  @import 'utilities/gap';
132
+ @import 'utilities/border';
@@ -6,7 +6,7 @@ import { GenericObject } from "../../types"
6
6
  import { isChrome } from "../Utilities/BrowserCheck"
7
7
  import { findColumnDefByAccessor } from "../Utilities/ColumnStylingHelper"
8
8
  import { playbookColumnLayoutStylesFromMeta } from "../Utilities/ColumnLayoutHelper"
9
- import { getRowColorClass, shouldShowLoadingIndicator } from "../Utilities/RowUtils"
9
+ import { getFontWeight, getRowColorClass, getRowStyle, shouldShowLoadingIndicator } from "../Utilities/RowUtils"
10
10
 
11
11
  import LoadingInline from "../../pb_loading_inline/_loading_inline"
12
12
  import Checkbox from "../../pb_checkbox/_checkbox"
@@ -81,6 +81,7 @@ const TableCellRenderer = ({
81
81
 
82
82
  const paddingValue = colDef?.columnStyling?.cellPadding ?? customRowStyle?.cellPadding
83
83
  const paddingClass = paddingValue ? `p_${paddingValue}` : undefined
84
+ const fontWeight = getFontWeight(customRowStyle)
84
85
 
85
86
  return (
86
87
  <td
@@ -103,6 +104,7 @@ const TableCellRenderer = ({
103
104
  : undefined,
104
105
  backgroundColor: cellBackgroundColor || (i === 0 && customRowStyle?.backgroundColor),
105
106
  color: cellFontColor || customRowStyle?.fontColor,
107
+ fontWeight,
106
108
  }}
107
109
  >
108
110
  {collapsibleTrail && i === 0 && row.depth > 0 && renderCollapsibleTrail(row.depth)}
@@ -136,6 +138,7 @@ export const RegularTableView = ({
136
138
  pinnedRows,
137
139
  headerHeight,
138
140
  rowHeight,
141
+ actionBarHeight,
139
142
  rowStyling = [],
140
143
  sampleRowRef,
141
144
  } = useContext(AdvancedTableContext)
@@ -159,22 +162,29 @@ export const RegularTableView = ({
159
162
  );
160
163
 
161
164
  // Row pinning
162
- function PinnedRow({ row }: { row: Row<any> }) {
163
- const customRowStyle = rowStyling?.length > 0 && rowStyling?.find((s: GenericObject) => s?.rowId === row.id);
165
+ function PinnedRow({ row, position }: { row: Row<any>; position: 'top' | 'bottom' }) {
166
+ const customRowStyle = getRowStyle(rowStyling, row);
167
+ const bottomRowsCount = table.getBottomRows().length;
168
+
164
169
  return (
165
170
  <tr
166
- className={classnames(
167
- `pinned-row`,
168
- )}
171
+ className={classnames('pinned-row', {
172
+ 'pinned-row-bottom': position === 'bottom',
173
+ })}
169
174
  style={{
170
175
  backgroundColor: customRowStyle?.backgroundColor ? customRowStyle?.backgroundColor : 'white',
171
176
  color: customRowStyle?.fontColor,
172
177
  position: 'sticky',
173
178
  top:
174
- row.getIsPinned() === 'top'
175
- ? `${row.getPinnedIndex() * rowHeight + headerHeight}px`
179
+ position === 'top'
180
+ ? `${row.getPinnedIndex() * rowHeight + headerHeight + actionBarHeight}px`
181
+ : undefined,
182
+ bottom:
183
+ position === 'bottom'
184
+ ? `${(bottomRowsCount - 1 - row.getPinnedIndex()) * rowHeight}px`
176
185
  : undefined,
177
- zIndex: '3'
186
+ zIndex: '3',
187
+ fontWeight: getFontWeight(customRowStyle),
178
188
  }}
179
189
  >
180
190
  <TableCellRenderer
@@ -197,6 +207,7 @@ export const RegularTableView = ({
197
207
  <>
198
208
  {pinnedRows && table.getTopRows().map((row: Row<GenericObject>) => (
199
209
  <PinnedRow key={row.id}
210
+ position="top"
200
211
  row={row}
201
212
  />
202
213
  ))}
@@ -204,7 +215,7 @@ export const RegularTableView = ({
204
215
  const isFirstChildofSubrow = row.depth > 0 && row.index === 0;
205
216
  const numberOfColumns = table.getAllFlatColumns().length;
206
217
  const isFirstRegularRow = rowIndex === 0 && !row.getIsPinned();
207
- const customRowStyle = rowStyling?.length > 0 && rowStyling?.find((s: GenericObject) => s?.rowId === row.id);
218
+ const customRowStyle = getRowStyle(rowStyling, row);
208
219
 
209
220
  // Use functions from RowUtils for consistent cell coloring
210
221
  const rowColor = getRowColorClass(row, inlineRowLoading || false);
@@ -227,7 +238,11 @@ export const RegularTableView = ({
227
238
  className={`${rowColor} ${row.depth > 0 ? `depth-sub-row-${row.depth}` : ""}`}
228
239
  id={`${row.index}-${row.id}-${row.depth}-row`}
229
240
  ref={isFirstRegularRow ? sampleRowRef : null}
230
- style={{backgroundColor: customRowStyle?.backgroundColor, color: customRowStyle?.fontColor}}
241
+ style={{
242
+ backgroundColor: customRowStyle?.backgroundColor,
243
+ color: customRowStyle?.fontColor,
244
+ fontWeight: getFontWeight(customRowStyle),
245
+ }}
231
246
  >
232
247
  {/* Render custom checkbox column when we want selectableRows for non-expanding tables */}
233
248
  {selectableRows && !hasAnySubRows && (
@@ -266,6 +281,12 @@ export const RegularTableView = ({
266
281
  </React.Fragment>
267
282
  );
268
283
  })}
284
+ {pinnedRows && table.getBottomRows().map((row: Row<GenericObject>) => (
285
+ <PinnedRow key={row.id}
286
+ position="bottom"
287
+ row={row}
288
+ />
289
+ ))}
269
290
  </>
270
291
  );
271
292
  }
@@ -17,6 +17,7 @@ import {
17
17
  showActionBar,
18
18
  hideActionBar,
19
19
  } from "../Utilities/ActionBarAnimationHelper";
20
+ import { scheduleStickyActionBarHeightUpdate } from "../Utilities/StickyLayoutHelper";
20
21
  import { GenericObject } from "../../types";
21
22
 
22
23
  interface TableActionBarProps {
@@ -39,7 +40,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
39
40
  type = "row-selection",
40
41
  }) => {
41
42
  const cardRef = useRef(null);
42
- const { table, columnVisibilityControl, columnDefinitions } =
43
+ const { table, columnVisibilityControl, columnDefinitions, tableContainerRef } =
43
44
  useContext(AdvancedTableContext);
44
45
 
45
46
  // ----------- Column visibility logic -----------
@@ -131,8 +132,10 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
131
132
  } else {
132
133
  hideActionBar(cardRef.current);
133
134
  }
135
+
136
+ scheduleStickyActionBarHeightUpdate(tableContainerRef?.current ?? null);
134
137
  }
135
- }, [isVisible, type]);
138
+ }, [isVisible, type, tableContainerRef]);
136
139
 
137
140
  const [showPopover, setShowPopover] = useState(false)
138
141
 
@@ -4,6 +4,7 @@ import { useVirtualizer } from '@tanstack/react-virtual';
4
4
  import { Row } from "@tanstack/react-table";
5
5
  import { GenericObject } from "../../types";
6
6
  import { getRowHeightEstimate } from '../Utilities/TableContainerStyles';
7
+ import { measureElementHeight } from '../Utilities/StickyLayoutHelper';
7
8
 
8
9
  const AdvancedTableContext = createContext<any>({});
9
10
 
@@ -30,8 +31,11 @@ export const AdvancedTableProvider = ({ children, ...props }: {
30
31
 
31
32
  const [headerHeight, setHeaderHeight] = useState(44);
32
33
  const [rowHeight, setRowHeight] = useState(38);
34
+ const [actionBarHeight, setActionBarHeight] = useState(0);
33
35
 
34
36
  const measureHeights = useCallback(() => {
37
+ const wrapper = (props.tableContainerRef?.current || tableContainerRef.current) as HTMLElement | null;
38
+
35
39
  if (headerRef.current) {
36
40
  const headerElement = headerRef.current as HTMLElement;
37
41
  const headerRect = headerElement.getBoundingClientRect();
@@ -45,7 +49,21 @@ export const AdvancedTableProvider = ({ children, ...props }: {
45
49
  setRowHeight(rowRect.height);
46
50
  }
47
51
  }
48
- }, []);
52
+
53
+ if (wrapper) {
54
+ const actionBar = wrapper.querySelector(
55
+ ".row-selection-actions-card.is-visible, .row-selection-actions-card.show-action-card"
56
+ ) as HTMLElement | null;
57
+ const measuredActionBarHeight = actionBar
58
+ ? measureElementHeight(actionBar)
59
+ : 0;
60
+ setActionBarHeight(measuredActionBarHeight);
61
+ wrapper.style.setProperty(
62
+ "--advanced-table-action-bar-height",
63
+ `${measuredActionBarHeight}px`
64
+ );
65
+ }
66
+ }, [props.tableContainerRef]);
49
67
 
50
68
  useEffect(() => {
51
69
  const resizeObserver = new ResizeObserver(() => {
@@ -56,6 +74,12 @@ export const AdvancedTableProvider = ({ children, ...props }: {
56
74
  resizeObserver.observe(headerRef.current);
57
75
  }
58
76
 
77
+ const wrapper = (props.tableContainerRef?.current || tableContainerRef.current) as HTMLElement | null;
78
+ const actionBar = wrapper?.querySelector(".row-selection-actions-card");
79
+ if (actionBar) {
80
+ resizeObserver.observe(actionBar);
81
+ }
82
+
59
83
  if (sampleRowRef.current) {
60
84
  resizeObserver.observe(sampleRowRef.current);
61
85
  }
@@ -72,7 +96,7 @@ export const AdvancedTableProvider = ({ children, ...props }: {
72
96
 
73
97
  useEffect(() => {
74
98
  measureHeights();
75
- }, [table?.getRowModel().rows.length, headerGroupCount, measureHeights]);
99
+ }, [table?.getRowModel().rows.length, headerGroupCount, props.isActionBarVisible, measureHeights]);
76
100
 
77
101
 
78
102
  // Create a flattened data array that includes ALL components for virtualization
@@ -202,6 +226,7 @@ export const AdvancedTableProvider = ({ children, ...props }: {
202
226
  keepPinnedRows: props.keepPinnedRows,
203
227
  headerHeight,
204
228
  rowHeight,
229
+ actionBarHeight,
205
230
  headerRef,
206
231
  sampleRowRef,
207
232
  measureHeights,
@@ -39,7 +39,7 @@ interface UseTableStateProps {
39
39
  tableOptions?: GenericObject;
40
40
  onRowSelectionChange?: (arg: RowSelectionState) => void;
41
41
  columnVisibilityControl?: GenericObject;
42
- rowStyling?: GenericObject;
42
+ rowStyling?: GenericObject[];
43
43
  inlineRowLoading?: boolean;
44
44
  sortParentOnly?: boolean;
45
45
  }
@@ -72,6 +72,7 @@ export function useTableState({
72
72
  const [localColumnVisibility, setLocalColumnVisibility] = useState({});
73
73
  const [localRowPinning, setLocalRowPinning] = useState<RowPinningState>({
74
74
  top: [],
75
+ bottom: [],
75
76
  });
76
77
  // Manage local state to preserve current page index when inlineRowLoading is enabled so it does not boot table to page 1
77
78
  // We can extend this for more usecases, but for now scoping it only for inlineRowLoading
@@ -150,7 +151,7 @@ export function useTableState({
150
151
 
151
152
  return columnStructure;
152
153
  }) || [];
153
- }, [columnHelper, onRowToggleClick, selectableRows]);
154
+ }, [columnHelper, onRowToggleClick, rowStyling, selectableRows]);
154
155
 
155
156
  const columns = useMemo(() => buildColumns(columnDefinitions), [buildColumns, columnDefinitions]);
156
157
 
@@ -235,22 +236,26 @@ export function useTableState({
235
236
  // Handle row pinning changes
236
237
  useEffect(() => {
237
238
  const topPins = pinnedRows?.value?.top ?? [];
238
- if (topPins.length === 0) {
239
- onRowPinningChange({ top: [] });
240
- return;
241
- }
239
+ const bottomPins = pinnedRows?.value?.bottom ?? [];
240
+
242
241
  const rows = table.getRowModel().rows;
243
242
  const collectAllDescendantIds = (subs: Row<GenericObject>[]): string[] =>
244
243
  subs.flatMap(r => [r.id, ...collectAllDescendantIds(r.subRows)]);
245
- const allPinned: string[] = [];
246
- topPins.forEach(id => {
247
- const parent = rows.find(r => r.id === id && r.depth === 0);
248
- if (parent) {
249
- allPinned.push(parent.id, ...collectAllDescendantIds(parent.subRows));
250
- }
244
+ const expandPins = (ids: string[]): string[] => {
245
+ const allPinned: string[] = [];
246
+ ids.forEach(id => {
247
+ const parent = rows.find(r => r.id === id && r.depth === 0);
248
+ if (parent) {
249
+ allPinned.push(parent.id, ...collectAllDescendantIds(parent.subRows));
250
+ }
251
+ });
252
+ return allPinned;
253
+ };
254
+ onRowPinningChange({
255
+ top: expandPins(topPins),
256
+ bottom: expandPins(bottomPins),
251
257
  });
252
- onRowPinningChange({ top: allPinned });
253
- }, [table, pinnedRows?.value?.top?.join(',')]);
258
+ }, [table, pinnedRows?.value?.top?.join(','), pinnedRows?.value?.bottom?.join(',')]);
254
259
 
255
260
  // Set pagination state when pagination is enabled
256
261
  useEffect(() => {
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import { Row, Getter } from "@tanstack/react-table";
3
3
  import { GenericObject } from "../../types";
4
4
  import { CustomCell } from "../Components/CustomCell";
5
+ import { getRowStyle } from "./RowUtils";
5
6
 
6
7
  /**
7
8
  * Creates a cell render function for table columns
@@ -18,7 +19,7 @@ export const createCellFunction = (
18
19
  isFirstColumn?: boolean,
19
20
  onRowToggleClick?: (row: Row<GenericObject>) => void,
20
21
  selectableRows?: boolean,
21
- rowStyling?: GenericObject
22
+ rowStyling?: GenericObject[]
22
23
  ) => {
23
24
  // Add display name to the returned function
24
25
  const cellRenderer = ({
@@ -29,7 +30,7 @@ export const createCellFunction = (
29
30
  getValue: Getter<string>
30
31
  }) => {
31
32
  const rowData = row.original;
32
- const customStyle = rowStyling?.length > 0 && rowStyling?.find((s:GenericObject) => s?.rowId === row.id);
33
+ const customStyle = getRowStyle(rowStyling, row);
33
34
 
34
35
  if (isFirstColumn) {
35
36
  switch (row.depth) {
@@ -52,6 +53,7 @@ export const createCellFunction = (
52
53
  return accessorValue ? (
53
54
  <CustomCell
54
55
  customRenderer={customRenderer}
56
+ customStyle={customStyle}
55
57
  onRowToggleClick={onRowToggleClick}
56
58
  row={row}
57
59
  selectableRows={selectableRows}
@@ -36,6 +36,23 @@ export const shouldShowLoadingIndicator = (
36
36
  (row.depth < cellAccessorsLength);
37
37
  }
38
38
 
39
+ export const getRowStyle = (
40
+ rowStyling: GenericObject[] | undefined,
41
+ row: Row<GenericObject>
42
+ ) => {
43
+ const rowId = row.original?.id ?? row.id
44
+ if (rowId == null) return
45
+
46
+ return rowStyling?.find((style: GenericObject) => (
47
+ String(style?.rowId) === String(rowId)
48
+ ))
49
+ }
50
+
51
+ export const getFontWeight = (rowStyle?: GenericObject) => {
52
+ if (rowStyle?.fontWeight === "bold") return 700
53
+ if (rowStyle?.fontWeight === "regular") return 400
54
+ }
55
+
39
56
  /**
40
57
  * Creates a virtual item style object for virtualized rows
41
58
  */
@@ -0,0 +1,100 @@
1
+ const VISIBLE_ACTION_BAR_SELECTOR =
2
+ ".row-selection-actions-card.is-visible, .row-selection-actions-card.show-action-card";
3
+
4
+ const ACTION_BAR_HEIGHT_TRANSITION_MS = 350;
5
+
6
+ export const measureElementHeight = (element: HTMLElement): number => {
7
+ const { height: rectHeight } = element.getBoundingClientRect();
8
+ const scrollHeight = element.scrollHeight;
9
+ const offsetHeight = element.offsetHeight;
10
+
11
+ return Math.ceil(Math.max(rectHeight, scrollHeight, offsetHeight));
12
+ };
13
+
14
+ export const updateStickyActionBarHeight = (
15
+ advancedTableWrapper: HTMLElement | null
16
+ ): number => {
17
+ if (!advancedTableWrapper) return 0;
18
+
19
+ const actionBar = advancedTableWrapper.querySelector(
20
+ VISIBLE_ACTION_BAR_SELECTOR
21
+ ) as HTMLElement | null;
22
+
23
+ if (!actionBar) {
24
+ advancedTableWrapper.style.setProperty(
25
+ "--advanced-table-action-bar-height",
26
+ "0px"
27
+ );
28
+ return 0;
29
+ }
30
+
31
+ const actionBarHeight = measureElementHeight(actionBar);
32
+
33
+ advancedTableWrapper.style.setProperty(
34
+ "--advanced-table-action-bar-height",
35
+ `${actionBarHeight}px`
36
+ );
37
+
38
+ return actionBarHeight;
39
+ };
40
+
41
+ export const scheduleStickyActionBarHeightUpdate = (
42
+ advancedTableWrapper: HTMLElement | null
43
+ ): void => {
44
+ if (!advancedTableWrapper) return;
45
+
46
+ updateStickyActionBarHeight(advancedTableWrapper);
47
+
48
+ requestAnimationFrame(() => {
49
+ updateStickyActionBarHeight(advancedTableWrapper);
50
+ requestAnimationFrame(() => {
51
+ updateStickyActionBarHeight(advancedTableWrapper);
52
+ });
53
+ });
54
+
55
+ window.setTimeout(() => {
56
+ updateStickyActionBarHeight(advancedTableWrapper);
57
+ }, ACTION_BAR_HEIGHT_TRANSITION_MS);
58
+ };
59
+
60
+ export const updateStickyHeaderRowHeights = (
61
+ advancedTableWrapper: HTMLElement | null
62
+ ): void => {
63
+ if (!advancedTableWrapper) return;
64
+
65
+ const table = advancedTableWrapper.querySelector("table.pb_table");
66
+ const thead = table?.querySelector("thead");
67
+ if (!thead) return;
68
+
69
+ const rows = Array.from(thead.querySelectorAll("tr"));
70
+ let totalHeight = 0;
71
+
72
+ rows.forEach((tr, index) => {
73
+ const height = tr.offsetHeight;
74
+ if (index === 0) {
75
+ advancedTableWrapper.style.setProperty(
76
+ "--advanced-table-header-row-0-height",
77
+ `${height}px`
78
+ );
79
+ } else if (index === 1) {
80
+ advancedTableWrapper.style.setProperty(
81
+ "--advanced-table-header-row-1-height",
82
+ `${height}px`
83
+ );
84
+ }
85
+ totalHeight += height;
86
+ });
87
+
88
+ advancedTableWrapper.style.setProperty(
89
+ "--advanced-table-header-height",
90
+ `${totalHeight}px`
91
+ );
92
+
93
+ updateStickyActionBarHeight(advancedTableWrapper);
94
+ };
95
+
96
+ export const updateStickyLayoutHeights = (
97
+ advancedTableWrapper: HTMLElement | null
98
+ ): void => {
99
+ updateStickyHeaderRowHeights(advancedTableWrapper);
100
+ };
@@ -364,6 +364,34 @@
364
364
  }
365
365
  }
366
366
 
367
+ &.advanced-table-sticky-header {
368
+ .row-selection-actions-card.show-action-card,
369
+ .row-selection-actions-card.is-visible {
370
+ background-color: $white;
371
+ left: 0;
372
+ position: sticky;
373
+ top: 0;
374
+ z-index: 5;
375
+ }
376
+
377
+ .pb_table.sticky-header {
378
+ thead,
379
+ .pb_advanced_table_header {
380
+ top: var(--advanced-table-action-bar-height, 0px);
381
+ z-index: 3;
382
+ }
383
+ }
384
+
385
+ &.hidden-action-bar {
386
+ .pb_table.sticky-header {
387
+ thead,
388
+ .pb_advanced_table_header {
389
+ top: 0;
390
+ }
391
+ }
392
+ }
393
+ }
394
+
367
395
  // Max height overflow - the below prevents expansion from overflowing container at full screen for responsive and nonresponsive tables
368
396
  &.advanced-table-max-height-xs {
369
397
  max-height: 320px;
@@ -401,55 +429,6 @@
401
429
  @include scrollbar-styling;
402
430
  }
403
431
 
404
- // Fullscreen
405
- &.advanced-table-allow-fullscreen {
406
- transition: all 0.3s ease;
407
- }
408
-
409
- &.advanced-table-fullscreen {
410
- background-color: $bg_light;
411
- box-sizing: border-box;
412
- height: 100vh;
413
- left: 0;
414
- overflow: auto;
415
- position: fixed;
416
- top: 0;
417
- width: 100%;
418
- z-index: $z_10;
419
-
420
- .pb_table {
421
- th,
422
- td,
423
- div,
424
- button {
425
- font-size: calc(100%);
426
- }
427
- box-sizing: border-box;
428
- margin: $space_lg;
429
- max-width: calc(100% - 64px);
430
- width: calc(100% - 64px);
431
- }
432
-
433
- .pb_table.sticky-header {
434
- thead,
435
- .pb_advanced_table_header {
436
- position: sticky !important;
437
- top: 44px !important;
438
- z-index: $z_10;
439
- }
440
- }
441
- }
442
-
443
- .advanced-table-fullscreen-header {
444
- background-color: $white;
445
- height: 44px;
446
- padding: 13px 20px;
447
- position: sticky;
448
- top: 0;
449
- width: 100%;
450
- z-index: $z_10;
451
- }
452
-
453
432
  // Icons
454
433
  .button-icon {
455
434
  display: flex;
@@ -507,16 +486,6 @@
507
486
  }
508
487
  }
509
488
 
510
- .fullscreen-icon {
511
- @extend .button-icon;
512
- @extend %primary-color-pseudo;
513
- padding: 2px 0;
514
-
515
- &:focus-visible {
516
- border-radius: $border_rad_lighter;
517
- }
518
- }
519
-
520
489
  // First column separator/border
521
490
  .table-header-cells:first-child,
522
491
  .table-header-cells-custom:first-child,
@@ -778,6 +747,9 @@
778
747
  // Row Pinning - React uses inline style; Rails passes same style via html_options from table_body
779
748
  .pinned-row {
780
749
  box-shadow: 0 4px 10px 0 rgba($shadow, 0.16) !important;
750
+ &.pinned-row-bottom {
751
+ box-shadow: 0 -3px 8px 0 rgba($shadow, 0.1) !important;
752
+ }
781
753
  }
782
754
 
783
755
  // For Rails, we can't target the &:last-child since collapsed rows are display: none;
@@ -987,6 +959,13 @@
987
959
  background-color: $bg_dark_card;
988
960
  }
989
961
 
962
+ &.advanced-table-sticky-header {
963
+ .row-selection-actions-card.show-action-card,
964
+ .row-selection-actions-card.is-visible {
965
+ background-color: $bg_dark_card;
966
+ }
967
+ }
968
+
990
969
  .loading-toggle-icon,
991
970
  .loading-cell {
992
971
  &::after {
@@ -1002,18 +981,6 @@
1002
981
  }
1003
982
  }
1004
983
 
1005
- // Fullscreen
1006
- &.advanced-table-fullscreen {
1007
- background: $bg_dark;
1008
- }
1009
-
1010
- .advanced-table-fullscreen-header {
1011
- background-color: $bg_dark_card;
1012
- position: sticky;
1013
- top: 0;
1014
- z-index: $z_10;
1015
- }
1016
-
1017
984
  &[class*="advanced-table-sticky-left-columns"] {
1018
985
  .sticky-left {
1019
986
  background-color: $bg_dark;