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
@@ -1,21 +1,13 @@
1
1
  import React from "react"
2
2
  import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
-
4
- const tableData = Array.from({ length: 15 }, (_, index) => ({
5
- year: String(2020 + index),
6
- newEnrollments: String(20 + index),
7
- scheduledMeetings: String(10 + index),
8
- attendanceRate: `${50 + index}%`,
9
- completedClasses: String(3 + index),
10
- classCompletionRate: `${30 + index}%`,
11
- graduatedStudents: String(19 + index),
12
- }))
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
13
4
 
14
5
  const AdvancedTableTablePropsStickyHeader = (props) => {
15
6
  const columnDefinitions = [
16
7
  {
17
8
  accessor: "year",
18
9
  label: "Year",
10
+ cellAccessors: ["quarter", "month", "day"],
19
11
  },
20
12
  {
21
13
  accessor: "newEnrollments",
@@ -44,18 +36,17 @@ const AdvancedTableTablePropsStickyHeader = (props) => {
44
36
  ]
45
37
 
46
38
  const tableProps = {
47
- sticky: true
39
+ sticky: true,
48
40
  }
49
41
 
50
42
  return (
51
- <div style={{ maxHeight: "320px", overflowY: "auto" }}>
52
- <AdvancedTable
53
- columnDefinitions={columnDefinitions}
54
- tableData={tableData}
55
- tableProps={tableProps}
56
- {...props}
57
- />
58
- </div>
43
+ <AdvancedTable
44
+ columnDefinitions={columnDefinitions}
45
+ maxHeight="xs"
46
+ tableData={MOCK_DATA}
47
+ tableProps={tableProps}
48
+ {...props}
49
+ />
59
50
  )
60
51
  }
61
52
 
@@ -2,10 +2,6 @@ Create a sticky header that works for responsive Advanced Tables by setting `sti
2
2
 
3
3
  **NOTE**: This behavior requires a `max_height` to work. The header is sticky within the table container, allowing for it to work along with the first column stickiness of a responsive table on smaller screen sizes.
4
4
 
5
- Scroll inside the table preview to see the header stick.
6
-
7
- This example builds flat table data inline for the docs preview. For typical `table_data` setup, see [Default (Required Props)](/kits/advanced_table/default/rails#advanced_table_beta).
8
-
9
5
  Expand the table above to see this in action.
10
6
 
11
7
  A sticky header on a nonresponsive table is demonstrated in the ["Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table#sticky-header) doc example above.
@@ -1,9 +1,7 @@
1
- Create a sticky header that works for responsive Advanced Tables by setting `sticky: true` via `tableProps` and wrapping the table in a scroll container (or using `maxHeight`).
1
+ Create a sticky header that works for responsive Advanced Tables by setting `sticky: true` via `tableProps` and giving the AdvancedTable a `maxHeight` using our [Max Height](https://playbook.powerapp.cloud/global_props/max_height) global prop.
2
2
 
3
- **NOTE**: The header is sticky within the table scroll area. The live example uses flat rows so you can scroll inside the preview without expanding subrows.
3
+ **NOTE**: This behavior requires a `maxHeight` to work. The header is sticky within the table container, allowing for it to work along with the first column stickiness of a responsive table on smaller screen sizes.
4
4
 
5
- This example builds flat table data inline for the docs preview. For typical `tableData` setup, see [Default (Required Props)](/kits/advanced_table/default/react#advanced_table_default).
6
-
7
- Expand the table above to see responsive behavior in action.
5
+ Expand the table above to see this in action.
8
6
 
9
7
  A sticky header on a nonresponsive table is demonstrated in the ["Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table/react#sticky-header) doc example above.
@@ -28,7 +28,8 @@
28
28
  "rowId": "1",
29
29
  "backgroundColor": "#0056CF",
30
30
  "fontColor": "#FFFFFF",
31
- "expandButtonColor": "#FFFFFF"
31
+ "expandButtonColor": "#FFFFFF",
32
+ "fontWeight": "bold"
32
33
  }
33
34
  ],
34
35
  "expandByDepth": [
@@ -233,11 +234,6 @@
233
234
  "customSort": true
234
235
  }
235
236
  },
236
- "fullScreenControl": {
237
- "requires": {
238
- "allowFullScreen": true
239
- }
240
- },
241
237
  "enableSortingRemoval": {
242
238
  "requires": {
243
239
  "enableSorting": true
@@ -2954,9 +2950,7 @@
2954
2950
  },
2955
2951
  "hiddenProps": [
2956
2952
  "sortControl",
2957
- "fullScreenControl",
2958
2953
  "expandedControl",
2959
- "allowFullScreen",
2960
2954
  "pagination",
2961
2955
  "paginationProps"
2962
2956
  ],
@@ -73,9 +73,7 @@
73
73
  },
74
74
  "hiddenProps": [
75
75
  "sortControl",
76
- "fullScreenControl",
77
76
  "expandedControl",
78
- "allowFullScreen",
79
77
  "pagination",
80
78
  "paginationProps"
81
79
  ],
@@ -106,7 +104,7 @@
106
104
  "tableProps": {
107
105
  "container": false
108
106
  },
109
- "rowStyling": [{ "rowId": "1", "backgroundColor": "#0056CF", "fontColor": "#FFFFFF", "expandButtonColor": "#FFFFFF" }],
107
+ "rowStyling": [{ "rowId": "1", "backgroundColor": "#0056CF", "fontColor": "#FFFFFF", "expandButtonColor": "#FFFFFF", "fontWeight": "bold" }],
110
108
  "expandByDepth": [
111
109
  {
112
110
  "depth": 0,
@@ -291,11 +289,6 @@
291
289
  "customSort": true
292
290
  }
293
291
  },
294
- "fullScreenControl": {
295
- "requires": {
296
- "allowFullScreen": true
297
- }
298
- },
299
292
  "enableSortingRemoval": {
300
293
  "requires": {
301
294
  "enableSorting": true
@@ -89,5 +89,4 @@ examples:
89
89
  - advanced_table_column_styling_background_multi: Column Styling Background Color with Multiple Headers
90
90
  - advanced_table_padding_control: Padding Control using Column Styling
91
91
  - advanced_table_column_border_color: Column Group Border Color
92
- - advanced_table_fullscreen: Fullscreen
93
92
  - advanced_table_infinite_scroll: Infinite Scroll
@@ -23,7 +23,6 @@ export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_tabl
23
23
  export { default as AdvancedTableColumnHeadersCustomCell } from './_advanced_table_column_headers_custom_cell.jsx'
24
24
  export { default as AdvancedTableColumnHeadersVerticalBorder } from './_advanced_table_column_headers_vertical_border.jsx'
25
25
  export { default as AdvancedTableInlineEditing } from './_advanced_table_inline_editing.jsx'
26
- export { default as AdvancedTableFullscreen } from './_advanced_table_fullscreen.jsx'
27
26
  export { default as AdvancedTableStickyColumns } from './_advanced_table_sticky_columns.jsx'
28
27
  export { default as AdvancedTableStickyHeader } from './_advanced_table_sticky_header.jsx'
29
28
  export { default as AdvancedTableStickyColumnsAndHeader } from './_advanced_table_sticky_columns_and_header.jsx'
@@ -1,6 +1,11 @@
1
1
  import PbEnhancedElement from "../pb_enhanced_element";
2
2
  import { updateSelectionActionBar } from "./advanced_table_action_bar";
3
3
  import { setArrowVisibility, toggleVisibility } from "../utilities/domHelpers";
4
+ import {
5
+ updateStickyActionBarHeight as measureStickyActionBarHeight,
6
+ updateStickyHeaderRowHeights as measureStickyHeaderRowHeights,
7
+ updateStickyLayoutHeights,
8
+ } from "./Utilities/StickyLayoutHelper";
4
9
 
5
10
  const ADVANCED_TABLE_SELECTOR = "[data-advanced-table]";
6
11
  const DOWN_ARROW_SELECTOR = "#advanced-table_open_icon";
@@ -196,7 +201,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
196
201
  if (table.dataset.pbAdvancedTableInitialized) return;
197
202
  table.dataset.pbAdvancedTableInitialized = "true";
198
203
 
199
- // Measure header height so pinned rows don't overlap when header wraps (e.g. mobile)
204
+ // Measure header/action bar height so sticky offsets stay accurate.
200
205
  if (mainTable) {
201
206
  PbAdvancedTable.updateStickyHeaderRowHeights(mainTable);
202
207
  const resizeObserver = new ResizeObserver(() => {
@@ -204,6 +209,12 @@ export default class PbAdvancedTable extends PbEnhancedElement {
204
209
  PbAdvancedTable.updatePinnedRowsStickyTops(mainTable);
205
210
  });
206
211
  resizeObserver.observe(table);
212
+
213
+ const actionBar = mainTable.querySelector(".row-selection-actions-card");
214
+ if (actionBar) {
215
+ resizeObserver.observe(actionBar);
216
+ }
217
+
207
218
  mainTable._advancedTableHeaderResizeObserver = resizeObserver;
208
219
  }
209
220
 
@@ -337,32 +348,11 @@ export default class PbAdvancedTable extends PbEnhancedElement {
337
348
  * multi-row sticky headers use the correct offset. Re-run when header wraps (e.g. mobile).
338
349
  */
339
350
  static updateStickyHeaderRowHeights(advancedTableWrapper) {
340
- if (!advancedTableWrapper) return;
341
- const table = advancedTableWrapper.querySelector("table.pb_table");
342
- const thead = table?.querySelector("thead");
343
- if (!thead) return;
344
-
345
- const rows = Array.from(thead.querySelectorAll("tr"));
346
- let totalHeight = 0;
347
- rows.forEach((tr, index) => {
348
- const h = tr.offsetHeight;
349
- if (index === 0) {
350
- advancedTableWrapper.style.setProperty(
351
- "--advanced-table-header-row-0-height",
352
- `${h}px`
353
- );
354
- } else if (index === 1) {
355
- advancedTableWrapper.style.setProperty(
356
- "--advanced-table-header-row-1-height",
357
- `${h}px`
358
- );
359
- }
360
- totalHeight += h;
361
- });
362
- advancedTableWrapper.style.setProperty(
363
- "--advanced-table-header-height",
364
- `${totalHeight}px`
365
- );
351
+ measureStickyHeaderRowHeights(advancedTableWrapper);
352
+ }
353
+
354
+ static updateStickyActionBarHeight(advancedTableWrapper) {
355
+ return measureStickyActionBarHeight(advancedTableWrapper);
366
356
  }
367
357
 
368
358
  /**
@@ -378,7 +368,8 @@ export default class PbAdvancedTable extends PbEnhancedElement {
378
368
  (tr) => tr.style.display !== "none" && tr.offsetParent !== null
379
369
  );
380
370
 
381
- const headerOffset = "var(--advanced-table-header-height, 44px)";
371
+ const headerOffset =
372
+ "calc(var(--advanced-table-header-height, 44px) + var(--advanced-table-action-bar-height, 0px))";
382
373
  visibleRows.forEach((tr, index) => {
383
374
  tr.style.top = `calc(${headerOffset} + 2.5em * ${index})`;
384
375
  });
@@ -589,7 +580,7 @@ window.expandAllSubRows = (element, rowDepth) => {
589
580
  // Fix header height and pinned row sticky tops on load (header wrap + collapsed rows)
590
581
  function updateAllAdvancedTableStickyHeights() {
591
582
  document.querySelectorAll(".pb_advanced_table").forEach((wrapper) => {
592
- PbAdvancedTable.updateStickyHeaderRowHeights(wrapper);
583
+ updateStickyLayoutHeights(wrapper);
593
584
  PbAdvancedTable.updatePinnedRowsStickyTops(wrapper);
594
585
  });
595
586
  }
@@ -274,18 +274,6 @@
274
274
  "react"
275
275
  ]
276
276
  },
277
- "allowFullScreen": {
278
- "type": "boolean",
279
- "platforms": [
280
- "react"
281
- ]
282
- },
283
- "fullScreenControl": {
284
- "type": "function",
285
- "platforms": [
286
- "react"
287
- ]
288
- },
289
277
  "enableSorting": {
290
278
  "type": "boolean",
291
279
  "platforms": [
@@ -230,7 +230,7 @@ module Playbook
230
230
 
231
231
  # Build inline style for sticky pinned row (matches React). Pass via html_options so the tr gets the attribute.
232
232
  def build_pinned_row_style(pinned_index, background: "white")
233
- header_offset = "var(--advanced-table-header-height, 44px)"
233
+ header_offset = "calc(var(--advanced-table-header-height, 44px) + var(--advanced-table-action-bar-height, 0px))"
234
234
  row_offset = "calc(2.5em * #{pinned_index})"
235
235
  "position: sticky; top: calc(#{header_offset} + #{row_offset}); z-index: 3; background: #{background};"
236
236
  end
@@ -3,6 +3,7 @@
3
3
  button_color = row_style&.[](:expand_button_color)
4
4
  bg_color = row_style&.[](:background_color)
5
5
  font_color = row_style&.[](:font_color)
6
+ font_weight = row_style&.[](:font_weight)
6
7
  tr_options = (object.html_options || {}).stringify_keys
7
8
  tr_options["class"] = [tr_options["class"], object.classname].reject(&:blank?).join(" ")
8
9
  %>
@@ -14,7 +15,7 @@
14
15
  <% end %>
15
16
  <% object.column_definitions.each_with_index do |column, index| %>
16
17
  <% next unless column[:accessor].present? %>
17
- <% component_info = object.cell_component_info(column, index, bg_color, font_color) %>
18
+ <% component_info = object.cell_component_info(column, index, bg_color, font_color, font_weight) %>
18
19
  <%= pb_rails(component_info[:name], props: component_info[:props]) do %>
19
20
  <%= pb_rails("flex", props:{ align: "center", justify: object.justify_for(column, index), classname: object.loading ? "loading-cell" : "" }) do %>
20
21
  <% if collapsible_trail && index.zero? %>
@@ -107,9 +107,10 @@ module Playbook
107
107
  end
108
108
 
109
109
  # Uses a regular table/table_cell component if there is no custom background color; if there is a cell_background_color uses a background component with tag "td"
110
- def cell_component_info(column, index, bg_color, font_color)
110
+ def cell_component_info(column, index, bg_color, font_color, font_weight = nil)
111
111
  column_font_color = cell_font_color(column)
112
112
  effective_font_color = column_font_color || font_color
113
+ effective_font_weight = font_weight_value(font_weight)
113
114
 
114
115
  if has_custom_background_color?(column)
115
116
  custom_bg_color = cell_background_color(column)
@@ -119,11 +120,15 @@ module Playbook
119
120
  tag: "td",
120
121
  classname: td_classname(column, index),
121
122
  }
122
- component_props[:html_options] = { style: { color: effective_font_color } } if effective_font_color.present?
123
+ style_hash = {}
124
+ style_hash[:color] = effective_font_color if effective_font_color.present?
125
+ style_hash[:"font-weight"] = effective_font_weight if effective_font_weight.present?
126
+ component_props[:html_options] = { style: style_hash } if style_hash.present?
123
127
  else
124
128
  component_name = "table/table_cell"
125
129
  style_hash = { "background-color": bg_color }
126
130
  style_hash[:color] = effective_font_color if effective_font_color.present?
131
+ style_hash[:"font-weight"] = effective_font_weight if effective_font_weight.present?
127
132
  component_props = {
128
133
  html_options: {
129
134
  style: style_hash,
@@ -216,6 +221,15 @@ module Playbook
216
221
  end
217
222
  end
218
223
 
224
+ def font_weight_value(font_weight)
225
+ case font_weight.to_s
226
+ when "bold"
227
+ "700"
228
+ when "regular"
229
+ "400"
230
+ end
231
+ end
232
+
219
233
  private
220
234
 
221
235
  def custom_renderer_value(column, index)
@@ -20,7 +20,7 @@
20
20
  ]
21
21
  },
22
22
  "removeOnClick": {
23
- "type": "ReactNode",
23
+ "type": "function",
24
24
  "platforms": [
25
25
  "react"
26
26
  ]
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "props": {
10
10
  "onClick": {
11
- "type": "ReactNode",
11
+ "type": "function",
12
12
  "platforms": [
13
13
  "react"
14
14
  ]
@@ -15,7 +15,7 @@ module Playbook
15
15
  values: %w[xs sm md lg xl none rounded],
16
16
  default: "md"
17
17
  prop :background, type: Playbook::Props::Enum,
18
- values: %w[white light dark product_1_background product_1_highlight product_2_background product_2_highlight product_3_background product_3_highlight product_4_background product_4_highlight product_5_background product_5_highlight product_6_background product_6_highlight product_7_background product_7_highlight product_8_background product_8_highlight product_9_background product_9_highlight product_10_background product_10_highlight windows siding doors solar roofing gutters insulation none success_subtle warning_subtle error_subtle info_subtle neutral_subtle],
18
+ values: %w[white light dark product_1_background product_1_highlight product_2_background product_2_highlight product_3_background product_3_highlight product_4_background product_4_highlight product_5_background product_5_highlight product_6_background product_6_highlight product_7_background product_7_highlight product_8_background product_8_highlight product_9_background product_9_highlight product_10_background product_10_highlight product_11_background product_11_highlight windows siding doors solar roofing gutters insulation none success_subtle warning_subtle error_subtle info_subtle neutral_subtle],
19
19
  default: "none"
20
20
  prop :drag_id, type: Playbook::Props::String
21
21
  prop :draggable_item, type: Playbook::Props::Boolean,
@@ -37,6 +37,8 @@
37
37
  "product_9_highlight",
38
38
  "product_10_background",
39
39
  "product_10_highlight",
40
+ "product_11_background",
41
+ "product_11_highlight",
40
42
  "windows",
41
43
  "siding",
42
44
  "doors",
@@ -51,7 +51,7 @@
51
51
  ]
52
52
  },
53
53
  "onChange": {
54
- "type": "ReactNode",
54
+ "type": "function",
55
55
  "platforms": [
56
56
  "react"
57
57
  ]
@@ -106,7 +106,7 @@
106
106
  "platforms": [
107
107
  "rails"
108
108
  ],
109
- "type": "string"
109
+ "type": "GenericObject"
110
110
  },
111
111
  "required": {
112
112
  "platforms": [
@@ -44,7 +44,7 @@
44
44
  "default": false
45
45
  },
46
46
  "onClick": {
47
- "type": "ReactNode",
47
+ "type": "function",
48
48
  "platforms": [
49
49
  "react"
50
50
  ]
@@ -106,7 +106,7 @@
106
106
  "platforms": [
107
107
  "rails"
108
108
  ],
109
- "type": "string"
109
+ "type": "GenericObject"
110
110
  }
111
111
  },
112
112
  "globalProps": true,
@@ -80,3 +80,9 @@
80
80
  content: none;
81
81
  }
82
82
  }
83
+
84
+ .pb_date_picker_floating_shell {
85
+ margin: 0;
86
+ padding: 0;
87
+ pointer-events: auto;
88
+ }
@@ -1,4 +1,4 @@
1
- import React, { useEffect } from 'react'
1
+ import React, { useContext, useEffect } from 'react'
2
2
  import classnames from 'classnames'
3
3
 
4
4
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
@@ -6,6 +6,7 @@ import { deprecatedProps, globalProps, GlobalProps } from '../utilities/globalPr
6
6
  import { getAllIcons } from "../utilities/icons/allicons"
7
7
  import { camelToSnakeCase } from '../utilities/text'
8
8
 
9
+ import { DialogContext } from '../pb_dialog/_dialog_context'
9
10
  import datePickerHelper from './date_picker_helper'
10
11
  import Icon from '../pb_icon/_icon'
11
12
  import Caption from '../pb_caption/_caption'
@@ -87,6 +88,7 @@ type DatePickerProps = {
87
88
  thisRangesEndToday?: boolean,
88
89
  timeFormat?: string,
89
90
  type?: string,
91
+ yearAscending?: boolean,
90
92
  yearRange?: number[],
91
93
  controlsStartId?: string,
92
94
  controlsEndId?: string,
@@ -140,6 +142,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
140
142
  showTimezone = false,
141
143
  staticPosition = true,
142
144
  thisRangesEndToday = false,
145
+ yearAscending = false,
143
146
  yearRange = [1900, 2100],
144
147
  controlsStartId,
145
148
  controlsEndId,
@@ -147,6 +150,8 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
147
150
  syncEndWith,
148
151
  } = props
149
152
 
153
+ const dialogCtx = useContext(DialogContext)
154
+
150
155
  const ariaProps = buildAriaProps(aria)
151
156
  const normalizedDefaultDate = normalizeDefaultDate(defaultDate)
152
157
  const filterResetDefaultSerialized = serializeDefaultDateForFilterReset(normalizedDefaultDate)
@@ -184,6 +189,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
184
189
  format,
185
190
  hideIcon,
186
191
  inLine,
192
+ inline: inLine,
187
193
  maxDate,
188
194
  minDate,
189
195
  mode,
@@ -199,14 +205,25 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
199
205
  showTimezone,
200
206
  staticPosition,
201
207
  thisRangesEndToday,
208
+ yearAscending,
202
209
  yearRange,
203
210
  controlsStartId,
204
211
  controlsEndId,
205
212
  syncStartWith,
206
213
  syncEndWith,
207
214
  required: false,
215
+ dialogPortalTarget: dialogCtx?.selectMenuPortalTarget ?? null,
208
216
  }, scrollContainer)
209
- }, initializeOnce ? [] : undefined)
217
+
218
+ return () => {
219
+ const input = document.getElementById(String(pickerId)) as
220
+ | (HTMLElement & { _flatpickr?: { destroy: () => void }; _pbDatePickerOpenUnsub?: () => void })
221
+ | null
222
+ input?._pbDatePickerOpenUnsub?.()
223
+ delete input?._pbDatePickerOpenUnsub
224
+ input?._flatpickr?.destroy()
225
+ }
226
+ }, initializeOnce ? [initializeOnce, dialogCtx?.selectMenuPortalTarget, pickerId] : undefined)
210
227
 
211
228
  const filteredProps = {...props}
212
229
  if (filteredProps.marginBottom === undefined) {
@@ -96,22 +96,73 @@
96
96
  })
97
97
  }
98
98
 
99
+ const disconnectPopoverWatch = (input) => {
100
+ if (!input) return
101
+
102
+ if (input._pbDatePickerPopoverObserver) {
103
+ input._pbDatePickerPopoverObserver.disconnect()
104
+ delete input._pbDatePickerPopoverObserver
105
+ }
106
+
107
+ delete input.dataset.pbDatePickerPopoverWatch
108
+ }
109
+
99
110
  const loadDatePicker = () => {
100
111
  const input = document.getElementById("<%= object.picker_id %>")
101
112
 
102
- if (!input || input._flatpickr) return true
113
+ if (!input || input._flatpickr) {
114
+ disconnectPopoverWatch(input)
115
+ return true
116
+ }
103
117
  if (typeof window.datePickerHelper !== "function") return false
104
118
 
119
+ const popoverTooltip = input.closest(".pb_popover_tooltip")
120
+ if (popoverTooltip && !popoverTooltip.classList.contains("show")) {
121
+ return false
122
+ }
123
+
105
124
  window.datePickerHelper(<%= object.date_picker_config %>, "<%= object.scroll_container %>")
106
125
  initQuickPickChangeListener(input)
126
+ disconnectPopoverWatch(input)
107
127
 
108
128
  return true
109
129
  }
110
130
 
131
+ const watchPopoverVisibility = () => {
132
+ const input = document.getElementById("<%= object.picker_id %>")
133
+ if (!input || input.dataset.pbDatePickerPopoverWatch) return
134
+
135
+ const popoverTooltip = input.closest(".pb_popover_tooltip")
136
+ if (!popoverTooltip) return
137
+
138
+ input.dataset.pbDatePickerPopoverWatch = "true"
139
+ const tryInitWhenVisible = () => {
140
+ if (!input.isConnected || !popoverTooltip.isConnected) {
141
+ disconnectPopoverWatch(input)
142
+ return
143
+ }
144
+
145
+ if (popoverTooltip.classList.contains("show")) {
146
+ loadDatePicker()
147
+ }
148
+ }
149
+
150
+ const observer = new MutationObserver(tryInitWhenVisible)
151
+ input._pbDatePickerPopoverObserver = observer
152
+ observer.observe(popoverTooltip, { attributes: true, attributeFilter: ["class"] })
153
+ tryInitWhenVisible()
154
+ }
155
+
111
156
  let attempts = 0
112
157
  const retryLoad = () => {
113
158
  if (loadDatePicker()) return
114
159
 
160
+ const input = document.getElementById("<%= object.picker_id %>")
161
+ if (input?.closest(".pb_popover_tooltip")) {
162
+ watchPopoverVisibility()
163
+ return
164
+ }
165
+
115
166
  if (attempts++ < 20) {
116
167
  setTimeout(retryLoad, 100)
117
168
  }
@@ -134,6 +185,12 @@
134
185
  if (<%= !object.custom_event_type.empty? %>) {
135
186
  window.addEventListener("<%= object.custom_event_type %>", retryLoad)
136
187
  }
188
+
189
+ document.addEventListener("turbo:before-cache", () => {
190
+ const input = document.getElementById("<%= object.picker_id %>")
191
+ disconnectPopoverWatch(input)
192
+ input?._flatpickr?.destroy()
193
+ })
137
194
  })()
138
195
  <% end %>
139
196
  <% end %>
@@ -89,6 +89,8 @@ module Playbook
89
89
  default: ""
90
90
  prop :cursor, type: Playbook::Props::String,
91
91
  default: "pointer"
92
+ prop :year_ascending, type: Playbook::Props::Boolean,
93
+ default: false
92
94
 
93
95
  def classname
94
96
  default_margin_bottom = margin_bottom.present? ? "" : " mb_sm"
@@ -122,6 +124,7 @@ module Playbook
122
124
  staticPosition: static_position,
123
125
  thisRangesEndToday: this_ranges_end_today,
124
126
  yearRange: year_range,
127
+ yearAscending: year_ascending,
125
128
  controlsStartId: controls_start_id,
126
129
  controlsEndId: controls_end_id,
127
130
  syncStartWith: sync_start_with,