@elastic/eui 116.1.0 → 116.2.0-snapshot.1780097782326

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 (445) hide show
  1. package/es/components/avatar/avatar.js +15 -6
  2. package/es/components/badge/badge.js +1 -1
  3. package/es/components/badge/beta_badge/beta_badge.js +1 -1
  4. package/es/components/banner/banner.js +202 -0
  5. package/es/components/banner/banner.styles.js +76 -0
  6. package/es/components/banner/index.js +9 -0
  7. package/es/components/basic_table/basic_table.js +28 -14
  8. package/es/components/basic_table/collapsed_item_actions.js +5 -4
  9. package/es/components/basic_table/default_item_action.js +3 -5
  10. package/es/components/basic_table/in_memory_table.js +4 -4
  11. package/es/components/breadcrumbs/_breadcrumb_content.js +29 -19
  12. package/es/components/button/button_display/_button_display_content.js +1 -1
  13. package/es/components/button/button_empty/button_empty.js +1 -1
  14. package/es/components/button/button_icon/button_icon.js +1 -1
  15. package/es/components/call_out/call_out.js +1 -1
  16. package/es/components/card/card.js +1 -1
  17. package/es/components/collapsible_nav/collapsible_nav_group/collapsible_nav_group.js +1 -1
  18. package/es/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +1 -1
  19. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +1 -1
  20. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +2 -2
  21. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +2 -2
  22. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +4 -4
  23. package/es/components/combo_box/combo_box_options_list/combo_box_options_list.js +2 -1
  24. package/es/components/comment_list/comment.js +2 -2
  25. package/es/components/comment_list/comment_event.js +1 -1
  26. package/es/components/comment_list/comment_list.js +2 -2
  27. package/es/components/comment_list/comment_timeline.js +1 -1
  28. package/es/components/context_menu/context_menu_item.js +1 -1
  29. package/es/components/context_menu/context_menu_panel_title.js +0 -12
  30. package/es/components/datagrid/body/cell/data_grid_cell.js +12 -12
  31. package/es/components/datagrid/body/cell/data_grid_cell_actions.js +11 -7
  32. package/es/components/datagrid/body/cell/data_grid_cell_actions.styles.js +2 -2
  33. package/es/components/datagrid/body/data_grid_body.js +7 -7
  34. package/es/components/datagrid/body/data_grid_body_custom.js +7 -7
  35. package/es/components/datagrid/body/data_grid_body_virtualized.js +7 -7
  36. package/es/components/datagrid/body/header/data_grid_header_cell.js +6 -6
  37. package/es/components/datagrid/controls/column_sorting.js +7 -7
  38. package/es/components/datagrid/controls/column_sorting_draggable.js +1 -1
  39. package/es/components/datagrid/controls/data_grid_toolbar_control.js +1 -1
  40. package/es/components/datagrid/controls/display_selector.js +2 -1
  41. package/es/components/datagrid/controls/keyboard_shortcuts.js +2 -1
  42. package/es/components/datagrid/utils/in_memory.js +6 -6
  43. package/es/components/date_picker/auto_refresh/auto_refresh.js +7 -4
  44. package/es/components/date_picker/date_picker.js +2 -2
  45. package/es/components/date_picker/date_picker_range.js +1 -1
  46. package/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +6 -3
  47. package/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +10 -2
  48. package/es/components/date_picker/super_date_picker/date_popover/date_popover_button.styles.js +2 -1
  49. package/es/components/date_picker/super_date_picker/quick_select_popover/quick_select_popover.js +8 -5
  50. package/es/components/empty_prompt/empty_prompt.js +1 -1
  51. package/es/components/flyout/flyout_menu.js +2 -2
  52. package/es/components/flyout/manager/flyout_child.js +1 -1
  53. package/es/components/flyout/manager/flyout_managed.js +1 -1
  54. package/es/components/form/field_number/field_number.js +2 -2
  55. package/es/components/form/field_password/field_password.js +6 -3
  56. package/es/components/form/field_text/field_text.js +2 -2
  57. package/es/components/form/form_control_button/form_control_button.js +1 -1
  58. package/es/components/form/form_control_layout/append_prepend/form_append_prepend.js +2 -2
  59. package/es/components/form/form_control_layout/form_control_layout.js +2 -2
  60. package/es/components/form/form_control_layout/form_control_layout_custom_icon.js +1 -1
  61. package/es/components/form/form_control_layout/form_control_layout_icons.js +2 -2
  62. package/es/components/form/text_area/text_area.js +2 -2
  63. package/es/components/header/header.a11y.js +1 -1
  64. package/es/components/header/header_links/header_link.js +1 -1
  65. package/es/components/header/header_links/header_links.js +1 -1
  66. package/es/components/header/header_logo/header_logo.js +1 -1
  67. package/es/components/header/header_section/header_section_item_button.js +1 -1
  68. package/es/components/icon/assets/significant_events.js +39 -0
  69. package/es/components/icon/icon.js +1 -1
  70. package/es/components/icon/icon_glyphs.a11y.js +1 -1
  71. package/es/components/icon/icon_map.js +3 -0
  72. package/es/components/index.js +1 -0
  73. package/es/components/key_pad_menu/key_pad_menu_item.js +1 -1
  74. package/es/components/list_group/list_group.js +2 -2
  75. package/es/components/list_group/list_group_item.js +2 -2
  76. package/es/components/list_group/list_group_item_extra_action.js +1 -1
  77. package/es/components/list_group/pinnable_list_group/pinnable_list_group.js +4 -4
  78. package/es/components/list_item_layout/_list_item_layout.styles.js +1 -1
  79. package/es/components/loading/loading_logo.js +1 -1
  80. package/es/components/markdown_editor/markdown_editor.js +1 -1
  81. package/es/components/markdown_editor/markdown_editor_drop_zone.js +1 -1
  82. package/es/components/markdown_editor/markdown_editor_footer.js +1 -1
  83. package/es/components/markdown_editor/markdown_editor_help_button.js +7 -4
  84. package/es/components/markdown_editor/markdown_editor_toolbar.js +1 -1
  85. package/es/components/outside_click_detector/outside_click_detector.js +71 -108
  86. package/es/components/page/page_header/page_header_content.js +1 -1
  87. package/es/components/pagination/pagination_button.js +1 -1
  88. package/es/components/pagination/pagination_button_arrow.js +6 -2
  89. package/es/components/search_bar/search_bar.js +20 -16
  90. package/es/components/search_bar/search_box.js +4 -2
  91. package/es/components/selectable/selectable_list/selectable_list.js +2 -2
  92. package/es/components/selectable/selectable_list/selectable_list.styles.js +1 -1
  93. package/es/components/selectable/selectable_list/selectable_list_item.js +1 -1
  94. package/es/components/selectable/selectable_templates/selectable_template_sitewide.js +3 -2
  95. package/es/components/table/sticky_header/context.js +32 -0
  96. package/es/components/table/sticky_header/index.js +10 -0
  97. package/es/components/table/sticky_header/sticky_header.js +151 -0
  98. package/es/components/table/sticky_header/sticky_header.styles.js +43 -0
  99. package/es/components/table/sticky_scrollbar/index.js +9 -0
  100. package/es/components/table/sticky_scrollbar/sticky_scrollbar.js +141 -0
  101. package/es/components/table/sticky_scrollbar/sticky_scrollbar.styles.js +27 -0
  102. package/es/components/table/store/provider.js +37 -0
  103. package/es/components/table/store/store.js +75 -0
  104. package/es/components/table/table.js +43 -6
  105. package/es/components/table/table.styles.js +4 -4
  106. package/es/components/table/table_header_cell.js +117 -49
  107. package/es/components/table/table_header_cell_checkbox.js +59 -25
  108. package/es/components/text_truncate/text_truncate.js +8 -3
  109. package/es/components/timeline/timeline_item_icon.js +1 -1
  110. package/es/components/toast/global_toast_list.js +1 -1
  111. package/es/components/toast/toast.js +1 -1
  112. package/es/components/tool_tip/icon_tip.js +1 -1
  113. package/es/components/tool_tip/tool_tip.js +1 -1
  114. package/es/components/tool_tip/tool_tip.styles.js +14 -5
  115. package/es/utils/publisher.js +53 -0
  116. package/eui.d.ts +1300 -989
  117. package/i18ntokens.json +2390 -2372
  118. package/lib/components/avatar/avatar.js +15 -6
  119. package/lib/components/badge/badge.js +1 -1
  120. package/lib/components/badge/beta_badge/beta_badge.js +1 -1
  121. package/lib/components/banner/banner.js +211 -0
  122. package/lib/components/banner/banner.styles.js +80 -0
  123. package/lib/components/banner/index.js +12 -0
  124. package/lib/components/basic_table/basic_table.js +28 -14
  125. package/lib/components/basic_table/collapsed_item_actions.js +5 -4
  126. package/lib/components/basic_table/default_item_action.js +3 -5
  127. package/lib/components/basic_table/in_memory_table.js +4 -4
  128. package/lib/components/breadcrumbs/_breadcrumb_content.js +29 -19
  129. package/lib/components/button/button_display/_button_display_content.js +1 -1
  130. package/lib/components/button/button_empty/button_empty.js +1 -1
  131. package/lib/components/button/button_icon/button_icon.js +1 -1
  132. package/lib/components/call_out/call_out.js +1 -1
  133. package/lib/components/card/card.js +1 -1
  134. package/lib/components/collapsible_nav/collapsible_nav_group/collapsible_nav_group.js +1 -1
  135. package/lib/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +1 -1
  136. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +1 -1
  137. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +2 -2
  138. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +2 -2
  139. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +4 -4
  140. package/lib/components/combo_box/combo_box_options_list/combo_box_options_list.js +2 -1
  141. package/lib/components/comment_list/comment.js +2 -2
  142. package/lib/components/comment_list/comment_event.js +1 -1
  143. package/lib/components/comment_list/comment_list.js +2 -2
  144. package/lib/components/comment_list/comment_timeline.js +1 -1
  145. package/lib/components/context_menu/context_menu_item.js +1 -1
  146. package/lib/components/context_menu/context_menu_panel_title.js +0 -12
  147. package/lib/components/datagrid/body/cell/data_grid_cell.js +12 -12
  148. package/lib/components/datagrid/body/cell/data_grid_cell_actions.js +11 -7
  149. package/lib/components/datagrid/body/cell/data_grid_cell_actions.styles.js +1 -1
  150. package/lib/components/datagrid/body/data_grid_body.js +7 -7
  151. package/lib/components/datagrid/body/data_grid_body_custom.js +7 -7
  152. package/lib/components/datagrid/body/data_grid_body_virtualized.js +7 -7
  153. package/lib/components/datagrid/body/header/data_grid_header_cell.js +6 -6
  154. package/lib/components/datagrid/controls/column_sorting.js +7 -7
  155. package/lib/components/datagrid/controls/column_sorting_draggable.js +1 -1
  156. package/lib/components/datagrid/controls/data_grid_toolbar_control.js +1 -1
  157. package/lib/components/datagrid/controls/display_selector.js +2 -1
  158. package/lib/components/datagrid/controls/keyboard_shortcuts.js +2 -1
  159. package/lib/components/datagrid/utils/in_memory.js +6 -6
  160. package/lib/components/date_picker/auto_refresh/auto_refresh.js +7 -4
  161. package/lib/components/date_picker/date_picker.js +2 -2
  162. package/lib/components/date_picker/date_picker_range.js +1 -1
  163. package/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +6 -3
  164. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +10 -2
  165. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.styles.js +2 -1
  166. package/lib/components/date_picker/super_date_picker/quick_select_popover/quick_select_popover.js +8 -5
  167. package/lib/components/empty_prompt/empty_prompt.js +1 -1
  168. package/lib/components/flyout/flyout_menu.js +2 -2
  169. package/lib/components/flyout/manager/flyout_child.js +1 -1
  170. package/lib/components/form/field_number/field_number.js +2 -2
  171. package/lib/components/form/field_password/field_password.js +6 -3
  172. package/lib/components/form/field_text/field_text.js +2 -2
  173. package/lib/components/form/form_control_button/form_control_button.js +1 -1
  174. package/lib/components/form/form_control_layout/append_prepend/form_append_prepend.js +2 -2
  175. package/lib/components/form/form_control_layout/form_control_layout.js +2 -2
  176. package/lib/components/form/form_control_layout/form_control_layout_custom_icon.js +1 -1
  177. package/lib/components/form/form_control_layout/form_control_layout_icons.js +2 -2
  178. package/lib/components/form/text_area/text_area.js +2 -2
  179. package/lib/components/header/header.a11y.js +1 -1
  180. package/lib/components/header/header_links/header_link.js +1 -1
  181. package/lib/components/header/header_links/header_links.js +1 -1
  182. package/lib/components/header/header_logo/header_logo.js +1 -1
  183. package/lib/components/header/header_section/header_section_item_button.js +1 -1
  184. package/lib/components/icon/assets/significant_events.js +46 -0
  185. package/lib/components/icon/icon.js +1 -1
  186. package/lib/components/icon/icon_glyphs.a11y.js +1 -1
  187. package/lib/components/icon/icon_map.js +5 -0
  188. package/lib/components/icon/svgs/significant_events.svg +11 -0
  189. package/lib/components/index.js +11 -0
  190. package/lib/components/key_pad_menu/key_pad_menu_item.js +1 -1
  191. package/lib/components/list_group/list_group.js +2 -2
  192. package/lib/components/list_group/list_group_item.js +2 -2
  193. package/lib/components/list_group/list_group_item_extra_action.js +1 -1
  194. package/lib/components/list_group/pinnable_list_group/pinnable_list_group.js +4 -4
  195. package/lib/components/list_item_layout/_list_item_layout.styles.js +1 -1
  196. package/lib/components/loading/loading_logo.js +1 -1
  197. package/lib/components/markdown_editor/markdown_editor.js +1 -1
  198. package/lib/components/markdown_editor/markdown_editor_drop_zone.js +1 -1
  199. package/lib/components/markdown_editor/markdown_editor_footer.js +1 -1
  200. package/lib/components/markdown_editor/markdown_editor_help_button.js +7 -4
  201. package/lib/components/markdown_editor/markdown_editor_toolbar.js +1 -1
  202. package/lib/components/outside_click_detector/outside_click_detector.js +69 -106
  203. package/lib/components/page/page_header/page_header_content.js +1 -1
  204. package/lib/components/pagination/pagination_button.js +1 -1
  205. package/lib/components/pagination/pagination_button_arrow.js +6 -2
  206. package/lib/components/search_bar/search_bar.js +20 -16
  207. package/lib/components/search_bar/search_box.js +4 -2
  208. package/lib/components/selectable/selectable_list/selectable_list.js +2 -2
  209. package/lib/components/selectable/selectable_list/selectable_list.styles.js +1 -1
  210. package/lib/components/selectable/selectable_list/selectable_list_item.js +1 -1
  211. package/lib/components/selectable/selectable_templates/selectable_template_sitewide.js +3 -2
  212. package/lib/components/table/sticky_header/context.js +41 -0
  213. package/lib/components/table/sticky_header/index.js +19 -0
  214. package/lib/components/table/sticky_header/sticky_header.js +156 -0
  215. package/lib/components/table/sticky_header/sticky_header.styles.js +47 -0
  216. package/lib/components/table/sticky_scrollbar/index.js +12 -0
  217. package/lib/components/table/sticky_scrollbar/sticky_scrollbar.js +148 -0
  218. package/lib/components/table/sticky_scrollbar/sticky_scrollbar.styles.js +31 -0
  219. package/lib/components/table/store/provider.js +46 -0
  220. package/lib/components/table/store/store.js +80 -0
  221. package/lib/components/table/table.js +46 -6
  222. package/lib/components/table/table.styles.js +4 -4
  223. package/lib/components/table/table_header_cell.js +119 -49
  224. package/lib/components/table/table_header_cell_checkbox.js +62 -25
  225. package/lib/components/text_truncate/text_truncate.js +8 -3
  226. package/lib/components/timeline/timeline_item_icon.js +1 -1
  227. package/lib/components/toast/global_toast_list.js +1 -1
  228. package/lib/components/toast/toast.js +1 -1
  229. package/lib/components/tool_tip/icon_tip.js +1 -1
  230. package/lib/components/tool_tip/tool_tip.js +1 -1
  231. package/lib/components/tool_tip/tool_tip.styles.js +14 -5
  232. package/lib/utils/publisher.js +59 -0
  233. package/optimize/es/components/avatar/avatar.js +12 -4
  234. package/optimize/es/components/banner/banner.js +112 -0
  235. package/optimize/es/components/banner/banner.styles.js +76 -0
  236. package/optimize/es/components/banner/index.js +9 -0
  237. package/optimize/es/components/basic_table/basic_table.js +24 -10
  238. package/optimize/es/components/basic_table/collapsed_item_actions.js +5 -4
  239. package/optimize/es/components/basic_table/default_item_action.js +3 -5
  240. package/optimize/es/components/breadcrumbs/_breadcrumb_content.js +27 -18
  241. package/optimize/es/components/combo_box/combo_box_options_list/combo_box_options_list.js +2 -1
  242. package/optimize/es/components/datagrid/body/cell/data_grid_cell_actions.js +11 -7
  243. package/optimize/es/components/datagrid/body/cell/data_grid_cell_actions.styles.js +2 -2
  244. package/optimize/es/components/datagrid/controls/display_selector.js +2 -1
  245. package/optimize/es/components/datagrid/controls/keyboard_shortcuts.js +2 -1
  246. package/optimize/es/components/date_picker/auto_refresh/auto_refresh.js +7 -4
  247. package/optimize/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +6 -3
  248. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +10 -2
  249. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_button.styles.js +2 -1
  250. package/optimize/es/components/date_picker/super_date_picker/quick_select_popover/quick_select_popover.js +8 -5
  251. package/optimize/es/components/form/field_password/field_password.js +6 -3
  252. package/optimize/es/components/header/header.a11y.js +1 -1
  253. package/optimize/es/components/icon/assets/significant_events.js +38 -0
  254. package/optimize/es/components/icon/icon_glyphs.a11y.js +1 -1
  255. package/optimize/es/components/icon/icon_map.js +3 -0
  256. package/optimize/es/components/index.js +1 -0
  257. package/optimize/es/components/list_item_layout/_list_item_layout.styles.js +1 -1
  258. package/optimize/es/components/markdown_editor/markdown_editor_help_button.js +7 -4
  259. package/optimize/es/components/outside_click_detector/outside_click_detector.js +70 -104
  260. package/optimize/es/components/pagination/pagination_button_arrow.js +6 -2
  261. package/optimize/es/components/search_bar/search_bar.js +20 -16
  262. package/optimize/es/components/search_bar/search_box.js +4 -2
  263. package/optimize/es/components/selectable/selectable_list/selectable_list.js +1 -1
  264. package/optimize/es/components/selectable/selectable_list/selectable_list.styles.js +1 -1
  265. package/optimize/es/components/table/sticky_header/context.js +32 -0
  266. package/optimize/es/components/table/sticky_header/index.js +10 -0
  267. package/optimize/es/components/table/sticky_header/sticky_header.js +146 -0
  268. package/optimize/es/components/table/sticky_header/sticky_header.styles.js +43 -0
  269. package/optimize/es/components/table/sticky_scrollbar/index.js +9 -0
  270. package/optimize/es/components/table/sticky_scrollbar/sticky_scrollbar.js +136 -0
  271. package/optimize/es/components/table/sticky_scrollbar/sticky_scrollbar.styles.js +27 -0
  272. package/optimize/es/components/table/store/provider.js +37 -0
  273. package/optimize/es/components/table/store/store.js +75 -0
  274. package/optimize/es/components/table/table.js +25 -6
  275. package/optimize/es/components/table/table.styles.js +4 -4
  276. package/optimize/es/components/table/table_header_cell.js +116 -48
  277. package/optimize/es/components/table/table_header_cell_checkbox.js +59 -25
  278. package/optimize/es/components/text_truncate/text_truncate.js +8 -3
  279. package/optimize/es/components/tool_tip/tool_tip.js +1 -1
  280. package/optimize/es/components/tool_tip/tool_tip.styles.js +14 -5
  281. package/optimize/es/utils/publisher.js +53 -0
  282. package/optimize/lib/components/avatar/avatar.js +12 -4
  283. package/optimize/lib/components/banner/banner.js +121 -0
  284. package/optimize/lib/components/banner/banner.styles.js +80 -0
  285. package/optimize/lib/components/banner/index.js +12 -0
  286. package/optimize/lib/components/basic_table/basic_table.js +24 -10
  287. package/optimize/lib/components/basic_table/collapsed_item_actions.js +5 -4
  288. package/optimize/lib/components/basic_table/default_item_action.js +3 -5
  289. package/optimize/lib/components/breadcrumbs/_breadcrumb_content.js +27 -18
  290. package/optimize/lib/components/combo_box/combo_box_options_list/combo_box_options_list.js +2 -1
  291. package/optimize/lib/components/datagrid/body/cell/data_grid_cell_actions.js +11 -7
  292. package/optimize/lib/components/datagrid/body/cell/data_grid_cell_actions.styles.js +1 -1
  293. package/optimize/lib/components/datagrid/controls/display_selector.js +2 -1
  294. package/optimize/lib/components/datagrid/controls/keyboard_shortcuts.js +2 -1
  295. package/optimize/lib/components/date_picker/auto_refresh/auto_refresh.js +7 -4
  296. package/optimize/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +6 -3
  297. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +10 -2
  298. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.styles.js +2 -1
  299. package/optimize/lib/components/date_picker/super_date_picker/quick_select_popover/quick_select_popover.js +8 -5
  300. package/optimize/lib/components/form/field_password/field_password.js +6 -3
  301. package/optimize/lib/components/header/header.a11y.js +1 -1
  302. package/optimize/lib/components/icon/assets/significant_events.js +46 -0
  303. package/optimize/lib/components/icon/icon_glyphs.a11y.js +1 -1
  304. package/optimize/lib/components/icon/icon_map.js +5 -0
  305. package/optimize/lib/components/icon/svgs/significant_events.svg +11 -0
  306. package/optimize/lib/components/index.js +11 -0
  307. package/optimize/lib/components/list_item_layout/_list_item_layout.styles.js +1 -1
  308. package/optimize/lib/components/markdown_editor/markdown_editor_help_button.js +7 -4
  309. package/optimize/lib/components/outside_click_detector/outside_click_detector.js +69 -103
  310. package/optimize/lib/components/pagination/pagination_button_arrow.js +6 -2
  311. package/optimize/lib/components/search_bar/search_bar.js +20 -16
  312. package/optimize/lib/components/search_bar/search_box.js +4 -2
  313. package/optimize/lib/components/selectable/selectable_list/selectable_list.js +1 -1
  314. package/optimize/lib/components/selectable/selectable_list/selectable_list.styles.js +1 -1
  315. package/optimize/lib/components/table/sticky_header/context.js +41 -0
  316. package/optimize/lib/components/table/sticky_header/index.js +19 -0
  317. package/optimize/lib/components/table/sticky_header/sticky_header.js +156 -0
  318. package/optimize/lib/components/table/sticky_header/sticky_header.styles.js +47 -0
  319. package/optimize/lib/components/table/sticky_scrollbar/index.js +12 -0
  320. package/optimize/lib/components/table/sticky_scrollbar/sticky_scrollbar.js +146 -0
  321. package/optimize/lib/components/table/sticky_scrollbar/sticky_scrollbar.styles.js +31 -0
  322. package/optimize/lib/components/table/store/provider.js +46 -0
  323. package/optimize/lib/components/table/store/store.js +80 -0
  324. package/optimize/lib/components/table/table.js +28 -6
  325. package/optimize/lib/components/table/table.styles.js +4 -4
  326. package/optimize/lib/components/table/table_header_cell.js +119 -48
  327. package/optimize/lib/components/table/table_header_cell_checkbox.js +62 -25
  328. package/optimize/lib/components/text_truncate/text_truncate.js +8 -3
  329. package/optimize/lib/components/tool_tip/tool_tip.js +1 -1
  330. package/optimize/lib/components/tool_tip/tool_tip.styles.js +14 -5
  331. package/optimize/lib/utils/publisher.js +59 -0
  332. package/package.json +4 -4
  333. package/test-env/components/avatar/avatar.js +15 -6
  334. package/test-env/components/badge/badge.js +1 -1
  335. package/test-env/components/badge/beta_badge/beta_badge.js +1 -1
  336. package/test-env/components/banner/banner.js +210 -0
  337. package/test-env/components/banner/banner.styles.js +80 -0
  338. package/test-env/components/banner/index.js +12 -0
  339. package/test-env/components/basic_table/basic_table.js +28 -14
  340. package/test-env/components/basic_table/collapsed_item_actions.js +5 -4
  341. package/test-env/components/basic_table/default_item_action.js +3 -5
  342. package/test-env/components/basic_table/in_memory_table.js +4 -4
  343. package/test-env/components/breadcrumbs/_breadcrumb_content.js +29 -19
  344. package/test-env/components/button/button_display/_button_display_content.js +1 -1
  345. package/test-env/components/button/button_empty/button_empty.js +1 -1
  346. package/test-env/components/button/button_icon/button_icon.js +1 -1
  347. package/test-env/components/call_out/call_out.js +1 -1
  348. package/test-env/components/card/card.js +1 -1
  349. package/test-env/components/collapsible_nav/collapsible_nav_group/collapsible_nav_group.js +1 -1
  350. package/test-env/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +1 -1
  351. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +1 -1
  352. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +2 -2
  353. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +2 -2
  354. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +4 -4
  355. package/test-env/components/combo_box/combo_box_options_list/combo_box_options_list.js +2 -1
  356. package/test-env/components/comment_list/comment.js +2 -2
  357. package/test-env/components/comment_list/comment_event.js +1 -1
  358. package/test-env/components/comment_list/comment_list.js +2 -2
  359. package/test-env/components/comment_list/comment_timeline.js +1 -1
  360. package/test-env/components/context_menu/context_menu_item.js +1 -1
  361. package/test-env/components/context_menu/context_menu_panel_title.js +0 -12
  362. package/test-env/components/datagrid/body/cell/data_grid_cell.js +12 -12
  363. package/test-env/components/datagrid/body/cell/data_grid_cell_actions.js +11 -7
  364. package/test-env/components/datagrid/body/cell/data_grid_cell_actions.styles.js +1 -1
  365. package/test-env/components/datagrid/body/data_grid_body.js +7 -7
  366. package/test-env/components/datagrid/body/data_grid_body_custom.js +7 -7
  367. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +7 -7
  368. package/test-env/components/datagrid/body/header/data_grid_header_cell.js +6 -6
  369. package/test-env/components/datagrid/controls/column_sorting.js +7 -7
  370. package/test-env/components/datagrid/controls/column_sorting_draggable.js +1 -1
  371. package/test-env/components/datagrid/controls/data_grid_toolbar_control.js +1 -1
  372. package/test-env/components/datagrid/controls/display_selector.js +2 -1
  373. package/test-env/components/datagrid/controls/keyboard_shortcuts.js +2 -1
  374. package/test-env/components/datagrid/utils/in_memory.js +6 -6
  375. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +7 -4
  376. package/test-env/components/date_picker/date_picker.js +2 -2
  377. package/test-env/components/date_picker/date_picker_range.js +1 -1
  378. package/test-env/components/date_picker/super_date_picker/date_popover/absolute_tab.js +6 -3
  379. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_button.js +10 -2
  380. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_button.styles.js +2 -1
  381. package/test-env/components/date_picker/super_date_picker/quick_select_popover/quick_select_popover.js +8 -5
  382. package/test-env/components/empty_prompt/empty_prompt.js +1 -1
  383. package/test-env/components/flyout/flyout_menu.js +2 -2
  384. package/test-env/components/flyout/manager/flyout_child.js +1 -1
  385. package/test-env/components/form/field_number/field_number.js +2 -2
  386. package/test-env/components/form/field_password/field_password.js +6 -3
  387. package/test-env/components/form/field_text/field_text.js +2 -2
  388. package/test-env/components/form/form_control_button/form_control_button.js +1 -1
  389. package/test-env/components/form/form_control_layout/append_prepend/form_append_prepend.js +2 -2
  390. package/test-env/components/form/form_control_layout/form_control_layout.js +2 -2
  391. package/test-env/components/form/form_control_layout/form_control_layout_custom_icon.js +1 -1
  392. package/test-env/components/form/form_control_layout/form_control_layout_icons.js +2 -2
  393. package/test-env/components/form/text_area/text_area.js +2 -2
  394. package/test-env/components/header/header.a11y.js +1 -1
  395. package/test-env/components/header/header_links/header_link.js +1 -1
  396. package/test-env/components/header/header_links/header_links.js +1 -1
  397. package/test-env/components/header/header_logo/header_logo.js +1 -1
  398. package/test-env/components/header/header_section/header_section_item_button.js +1 -1
  399. package/test-env/components/icon/assets/significant_events.js +46 -0
  400. package/test-env/components/icon/icon_glyphs.a11y.js +1 -1
  401. package/test-env/components/icon/icon_map.js +5 -0
  402. package/test-env/components/index.js +11 -0
  403. package/test-env/components/key_pad_menu/key_pad_menu_item.js +1 -1
  404. package/test-env/components/list_group/list_group.js +2 -2
  405. package/test-env/components/list_group/list_group_item.js +2 -2
  406. package/test-env/components/list_group/list_group_item_extra_action.js +1 -1
  407. package/test-env/components/list_group/pinnable_list_group/pinnable_list_group.js +4 -4
  408. package/test-env/components/list_item_layout/_list_item_layout.styles.js +1 -1
  409. package/test-env/components/loading/loading_logo.js +1 -1
  410. package/test-env/components/markdown_editor/markdown_editor.js +1 -1
  411. package/test-env/components/markdown_editor/markdown_editor_drop_zone.js +1 -1
  412. package/test-env/components/markdown_editor/markdown_editor_footer.js +1 -1
  413. package/test-env/components/markdown_editor/markdown_editor_help_button.js +7 -4
  414. package/test-env/components/markdown_editor/markdown_editor_toolbar.js +1 -1
  415. package/test-env/components/outside_click_detector/outside_click_detector.js +70 -104
  416. package/test-env/components/page/page_header/page_header_content.js +1 -1
  417. package/test-env/components/pagination/pagination_button.js +1 -1
  418. package/test-env/components/pagination/pagination_button_arrow.js +6 -2
  419. package/test-env/components/search_bar/search_bar.js +20 -16
  420. package/test-env/components/search_bar/search_box.js +4 -2
  421. package/test-env/components/selectable/selectable_list/selectable_list.js +2 -2
  422. package/test-env/components/selectable/selectable_list/selectable_list.styles.js +1 -1
  423. package/test-env/components/selectable/selectable_list/selectable_list_item.js +1 -1
  424. package/test-env/components/selectable/selectable_templates/selectable_template_sitewide.js +3 -2
  425. package/test-env/components/table/sticky_header/context.js +41 -0
  426. package/test-env/components/table/sticky_header/index.js +19 -0
  427. package/test-env/components/table/sticky_header/sticky_header.js +156 -0
  428. package/test-env/components/table/sticky_header/sticky_header.styles.js +47 -0
  429. package/test-env/components/table/sticky_scrollbar/index.js +12 -0
  430. package/test-env/components/table/sticky_scrollbar/sticky_scrollbar.js +146 -0
  431. package/test-env/components/table/sticky_scrollbar/sticky_scrollbar.styles.js +31 -0
  432. package/test-env/components/table/store/provider.js +46 -0
  433. package/test-env/components/table/store/store.js +80 -0
  434. package/test-env/components/table/table.js +46 -6
  435. package/test-env/components/table/table.styles.js +4 -4
  436. package/test-env/components/table/table_header_cell.js +120 -49
  437. package/test-env/components/table/table_header_cell_checkbox.js +62 -25
  438. package/test-env/components/text_truncate/text_truncate.js +8 -3
  439. package/test-env/components/timeline/timeline_item_icon.js +1 -1
  440. package/test-env/components/toast/global_toast_list.js +1 -1
  441. package/test-env/components/toast/toast.js +1 -1
  442. package/test-env/components/tool_tip/icon_tip.js +1 -1
  443. package/test-env/components/tool_tip/tool_tip.js +1 -1
  444. package/test-env/components/tool_tip/tool_tip.styles.js +14 -5
  445. package/test-env/utils/publisher.js +59 -0
@@ -0,0 +1,136 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
6
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
7
+ * Side Public License, v 1.
8
+ */
9
+
10
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
11
+ import { useEuiMemoizedStyles } from '../../../services';
12
+ import { euiTableStickyScrollbarStyles } from './sticky_scrollbar.styles';
13
+ import { jsx as ___EmotionJSX } from "@emotion/react";
14
+ export var EuiTableStickyScrollbar = function EuiTableStickyScrollbar(_ref) {
15
+ var tableWrapperRef = _ref.tableWrapperRef;
16
+ var styles = useEuiMemoizedStyles(euiTableStickyScrollbarStyles);
17
+ var trackElementRef = useRef(null);
18
+ var dragStartRef = useRef(null);
19
+ var requestAnimationFramePendingRef = useRef(false);
20
+ var _useState = useState(false),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ isActive = _useState2[0],
23
+ setIsActive = _useState2[1];
24
+ var _useState3 = useState(false),
25
+ _useState4 = _slicedToArray(_useState3, 2),
26
+ isHidden = _useState4[0],
27
+ setIsHidden = _useState4[1];
28
+ var updateTrack = useCallback(function (element) {
29
+ var clientWidth = element.clientWidth,
30
+ scrollWidth = element.scrollWidth,
31
+ scrollLeft = element.scrollLeft;
32
+ if (!requestAnimationFramePendingRef.current) {
33
+ requestAnimationFramePendingRef.current = true;
34
+ requestAnimationFrame(function () {
35
+ var el = trackElementRef.current;
36
+ if (el) {
37
+ el.style.inlineSize = "".concat(clientWidth / scrollWidth * 100, "%");
38
+ el.style.marginInlineStart = "".concat(scrollLeft / scrollWidth * 100, "%");
39
+ }
40
+ requestAnimationFramePendingRef.current = false;
41
+ });
42
+ }
43
+ }, []);
44
+ var handleScroll = useCallback(function (event) {
45
+ if (event.target) {
46
+ updateTrack(event.target);
47
+ }
48
+ }, [updateTrack]);
49
+ var handleResize = useCallback(function (entries) {
50
+ var element = entries[0].target;
51
+ if (!element) {
52
+ return;
53
+ }
54
+ updateTrack(element);
55
+ setIsActive(element.clientWidth < element.scrollWidth);
56
+ }, [updateTrack]);
57
+ var handleBottomCornerIntersection = useCallback(function (entries) {
58
+ var entry = entries[0];
59
+ var element = entry.target;
60
+ if (!element) {
61
+ return;
62
+ }
63
+ setIsHidden(!entry.isIntersecting);
64
+ }, []);
65
+ var handlePointerDown = useCallback(function (event) {
66
+ var _el$scrollLeft;
67
+ var el = tableWrapperRef.current;
68
+ dragStartRef.current = {
69
+ x: event.clientX,
70
+ scrollLeft: (_el$scrollLeft = el === null || el === void 0 ? void 0 : el.scrollLeft) !== null && _el$scrollLeft !== void 0 ? _el$scrollLeft : 0
71
+ };
72
+ event.currentTarget.setPointerCapture(event.pointerId);
73
+ }, [tableWrapperRef]);
74
+ var handlePointerUp = useCallback(function () {
75
+ dragStartRef.current = null;
76
+ }, [dragStartRef]);
77
+ var handlePointerMove = useCallback(function (event) {
78
+ var el = tableWrapperRef.current;
79
+ if (!dragStartRef.current || !el) {
80
+ return;
81
+ }
82
+ var diff = event.clientX - dragStartRef.current.x;
83
+ var ratio = el.scrollWidth / el.clientWidth;
84
+ el.scrollLeft = dragStartRef.current.scrollLeft + diff * ratio;
85
+ }, [tableWrapperRef]);
86
+ useEffect(function () {
87
+ var element = tableWrapperRef.current;
88
+ if (!element) {
89
+ return;
90
+ }
91
+ updateTrack(element);
92
+ element.addEventListener('scroll', handleScroll, {
93
+ passive: true
94
+ });
95
+
96
+ // ResizeObserver is available in all supported browsers,
97
+ // but jsdom and jest don't provide a polyfill for it.
98
+ var resizeObserver;
99
+ if (typeof window.ResizeObserver !== 'undefined') {
100
+ resizeObserver = new ResizeObserver(handleResize);
101
+ resizeObserver.observe(element);
102
+ }
103
+
104
+ // IntersectionOserver is available in all supported browsers,
105
+ // but jsdom and jest don't provide a polyfill for it.
106
+ var intersectionObserver;
107
+ if (typeof window.IntersectionObserver !== 'undefined') {
108
+ intersectionObserver = new IntersectionObserver(handleBottomCornerIntersection, {
109
+ threshold: 0,
110
+ rootMargin: '-100% 0px 0px 0px'
111
+ });
112
+ intersectionObserver.observe(element);
113
+ }
114
+ return function () {
115
+ var _resizeObserver, _intersectionObserver;
116
+ element.removeEventListener('scroll', handleScroll);
117
+ (_resizeObserver = resizeObserver) === null || _resizeObserver === void 0 || _resizeObserver.disconnect();
118
+ (_intersectionObserver = intersectionObserver) === null || _intersectionObserver === void 0 || _intersectionObserver.disconnect();
119
+ };
120
+ }, [tableWrapperRef, updateTrack, handleResize, handleScroll, handleBottomCornerIntersection]);
121
+ if (!isActive) {
122
+ return null;
123
+ }
124
+ return ___EmotionJSX("div", {
125
+ css: [styles.wrapper, isHidden && styles.wrapperHidden, ";label:EuiTableStickyScrollbar;"],
126
+ "data-test-subj": "euiTableStickyScrollbar",
127
+ "aria-hidden": true
128
+ }, ___EmotionJSX("div", {
129
+ css: styles.track,
130
+ ref: trackElementRef,
131
+ onPointerDown: handlePointerDown,
132
+ onPointerMove: handlePointerMove,
133
+ onPointerUp: handlePointerUp,
134
+ "data-test-subj": "euiTableStickyScrollbarTrack"
135
+ }));
136
+ };
@@ -0,0 +1,27 @@
1
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
6
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
7
+ * Side Public License, v 1.
8
+ */
9
+
10
+ import { css } from '@emotion/react';
11
+ import { transparentize } from '../../../services';
12
+ var _ref = process.env.NODE_ENV === "production" ? {
13
+ name: "j6fg69-wrapperHidden",
14
+ styles: "display:none;label:wrapperHidden;"
15
+ } : {
16
+ name: "j6fg69-wrapperHidden",
17
+ styles: "display:none;label:wrapperHidden;",
18
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
19
+ };
20
+ export var euiTableStickyScrollbarStyles = function euiTableStickyScrollbarStyles(_ref2) {
21
+ var euiTheme = _ref2.euiTheme;
22
+ return {
23
+ wrapper: /*#__PURE__*/css("block-size:", euiTheme.size.base, ";padding:", euiTheme.size.xs, ";position:sticky;background:", euiTheme.components.scrollbarTrackColor, ";inset-block-end:var(--euiTableStickyScrollbarOffsetBottom, 0);z-index:var(--euiTableStickyScrollbarZIndex, 0);;label:wrapper;"),
24
+ wrapperHidden: _ref,
25
+ track: /*#__PURE__*/css("block-size:100%;background:", transparentize(euiTheme.colors.darkShade, 0.5), ";border-radius:", euiTheme.border.radius.small, ";;label:track;")
26
+ };
27
+ };
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import React, { createContext, useRef, useContext } from 'react';
10
+ import { createEuiTableStore } from './store';
11
+ import { jsx as ___EmotionJSX } from "@emotion/react";
12
+ var EuiTableStoreContext = /*#__PURE__*/createContext(null);
13
+
14
+ /**
15
+ * @internal
16
+ */
17
+ export var EuiTableStoreProvider = function EuiTableStoreProvider(_ref) {
18
+ var children = _ref.children;
19
+ var store = useRef(null);
20
+ if (!store.current) {
21
+ store.current = createEuiTableStore();
22
+ }
23
+ return ___EmotionJSX(EuiTableStoreContext.Provider, {
24
+ value: store.current
25
+ }, children);
26
+ };
27
+
28
+ /**
29
+ * @internal
30
+ */
31
+ export var useEuiTableColumnDataStore = function useEuiTableColumnDataStore() {
32
+ var store = useContext(EuiTableStoreContext);
33
+ if (!store) {
34
+ throw new Error('[useEuiTableColumnDataStore] Store context not found. This hook must be used within EuiTable!');
35
+ }
36
+ return store;
37
+ };
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { createPublisher } from '../../../utils/publisher';
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+
19
+ /**
20
+ * @internal
21
+ */
22
+
23
+ export var createEuiTableStore = function createEuiTableStore() {
24
+ var columns = new Map();
25
+ var columnsPublisher = createPublisher();
26
+ var columnWidths = new Map();
27
+ var columnWidthsPublisher = createPublisher();
28
+ var registerColumn = function registerColumn(id, data) {
29
+ var _data$currentWidth;
30
+ if (columns.has(id)) {
31
+ throw new Error("[EuiTableStore] Column '".concat(id, "' already registered"));
32
+ }
33
+ columns.set(id, data);
34
+ // Initialize column in the columnWidths map to keep both maps in sync
35
+ columnWidths.set(id, (_data$currentWidth = data.currentWidth) !== null && _data$currentWidth !== void 0 ? _data$currentWidth : 0);
36
+ columnsPublisher.notify(columns);
37
+ return function () {
38
+ columns.delete(id);
39
+ columnWidths.delete(id);
40
+ columnsPublisher.notify(columns);
41
+ };
42
+ };
43
+ var updateColumn = function updateColumn(id, data) {
44
+ var currentData = columns.get(id);
45
+ if (!currentData) {
46
+ throw new Error("[EuiTableStore] Column '".concat(id, "' not found"));
47
+ }
48
+ columns.set(id, data);
49
+ columnsPublisher.notify(columns);
50
+ };
51
+ var updateColumnWidth = function updateColumnWidth(id, width) {
52
+ var currentWidth = columnWidths.get(id);
53
+ if (currentWidth === undefined) {
54
+ throw new Error("[EuiTableStore] No width stored for column '".concat(id, "'"));
55
+ }
56
+ if (currentWidth === width) {
57
+ return;
58
+ }
59
+ columnWidths.set(id, width);
60
+ columnWidthsPublisher.notify(columnWidths);
61
+ };
62
+ return {
63
+ registerColumn: registerColumn,
64
+ updateColumn: updateColumn,
65
+ updateColumnWidth: updateColumnWidth,
66
+ subscribe: columnsPublisher.subscribe,
67
+ subscribeToColumnWidths: columnWidthsPublisher.subscribe,
68
+ getColumns: function getColumns() {
69
+ return columns;
70
+ },
71
+ getColumnWidths: function getColumnWidths() {
72
+ return columnWidths;
73
+ }
74
+ };
75
+ };
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["children", "className", "compressed", "tableLayout", "hasBackground", "responsiveBreakpoint", "scrollableInline"];
3
+ var _excluded = ["children", "className", "compressed", "tableLayout", "hasBackground", "responsiveBreakpoint", "scrollableInline", "stickyScrollbar", "stickyHeader"];
4
4
  /*
5
5
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
6
6
  * or more contributor license agreements. Licensed under the Elastic License
@@ -9,7 +9,7 @@ var _excluded = ["children", "className", "compressed", "tableLayout", "hasBackg
9
9
  * Side Public License, v 1.
10
10
  */
11
11
 
12
- import React from 'react';
12
+ import React, { useRef } from 'react';
13
13
  import classNames from 'classnames';
14
14
  import { useEuiMemoizedStyles } from '../../services';
15
15
  import { useIsEuiTableResponsive, EuiTableIsResponsiveContext } from './mobile/responsive_context';
@@ -18,6 +18,9 @@ import { euiTableStyles } from './table.styles';
18
18
  import { usePropsWithComponentDefaults } from '../provider/component_defaults';
19
19
  import { euiContainerCSS } from '../../global_styling';
20
20
  import { EUI_TABLE_CSS_CONTAINER_NAME } from './const';
21
+ import { EuiTableStickyScrollbar } from './sticky_scrollbar';
22
+ import { EuiTableStickyHeader } from './sticky_header/sticky_header';
23
+ import { EuiTableStoreProvider } from './store/provider';
21
24
  import { jsx as ___EmotionJSX } from "@emotion/react";
22
25
  /**
23
26
  * EuiTable is a low-level building block component used to render tabular data
@@ -41,23 +44,39 @@ export var EuiTable = function EuiTable(originalProps) {
41
44
  responsiveBreakpoint = _usePropsWithComponen.responsiveBreakpoint,
42
45
  _usePropsWithComponen4 = _usePropsWithComponen.scrollableInline,
43
46
  scrollableInline = _usePropsWithComponen4 === void 0 ? false : _usePropsWithComponen4,
47
+ _usePropsWithComponen5 = _usePropsWithComponen.stickyScrollbar,
48
+ stickyScrollbar = _usePropsWithComponen5 === void 0 ? false : _usePropsWithComponen5,
49
+ _usePropsWithComponen6 = _usePropsWithComponen.stickyHeader,
50
+ stickyHeader = _usePropsWithComponen6 === void 0 ? false : _usePropsWithComponen6,
44
51
  rest = _objectWithoutProperties(_usePropsWithComponen, _excluded);
52
+ var tableWrapperRef = useRef(null);
53
+ var tableRef = useRef(null);
45
54
  var isResponsive = useIsEuiTableResponsive(responsiveBreakpoint);
46
55
  var classes = classNames('euiTable', className);
47
56
  var styles = useEuiMemoizedStyles(euiTableStyles);
48
57
  var tableStyles = [styles.euiTable, scrollableInline && styles.euiTableScrollableInline, styles.layout[tableLayout], (!compressed || isResponsive) && styles.uncompressed, compressed && !isResponsive && styles.compressed, hasBackground && styles.hasBackground, isResponsive ? styles.mobile : styles.desktop];
49
58
  var cssStyles = [euiContainerCSS('normal', EUI_TABLE_CSS_CONTAINER_NAME, true), scrollableInline && styles.scrollableWrapper];
50
- return ___EmotionJSX("div", {
51
- css: cssStyles
59
+ return ___EmotionJSX(EuiTableStoreProvider, null, stickyHeader && ___EmotionJSX(EuiTableStickyHeader, {
60
+ scrollableInline: scrollableInline,
61
+ tableRef: tableRef,
62
+ tableWrapperRef: tableWrapperRef,
63
+ compressed: compressed,
64
+ isResponsive: isResponsive
65
+ }), ___EmotionJSX("div", {
66
+ css: cssStyles,
67
+ ref: tableWrapperRef
52
68
  }, ___EmotionJSX("table", _extends({
53
69
  tabIndex: -1,
54
70
  css: tableStyles,
55
- className: classes
71
+ className: classes,
72
+ ref: tableRef
56
73
  }, rest), ___EmotionJSX(EuiTableIsResponsiveContext.Provider, {
57
74
  value: isResponsive
58
75
  }, ___EmotionJSX(EuiTableVariantContext.Provider, {
59
76
  value: {
60
77
  hasBackground: hasBackground
61
78
  }
62
- }, children))));
79
+ }, children)))), scrollableInline && stickyScrollbar && ___EmotionJSX(EuiTableStickyScrollbar, {
80
+ tableWrapperRef: tableWrapperRef
81
+ }));
63
82
  };
@@ -38,11 +38,11 @@ export var euiTableVariables = function euiTableVariables(_ref6) {
38
38
  };
39
39
  };
40
40
  var _ref = process.env.NODE_ENV === "production" ? {
41
- name: "mqw298-scrollableWrapper",
42
- styles: "overflow-inline:auto;label:scrollableWrapper;"
41
+ name: "l8gzfy-scrollableWrapper",
42
+ styles: "overflow-inline:auto;overscroll-behavior-inline:none;label:scrollableWrapper;"
43
43
  } : {
44
- name: "mqw298-scrollableWrapper",
45
- styles: "overflow-inline:auto;label:scrollableWrapper;",
44
+ name: "l8gzfy-scrollableWrapper",
45
+ styles: "overflow-inline:auto;overscroll-behavior-inline:none;label:scrollableWrapper;",
46
46
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
47
47
  };
48
48
  var _ref2 = process.env.NODE_ENV === "production" ? {
@@ -12,9 +12,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
12
12
  * Side Public License, v 1.
13
13
  */
14
14
 
15
- import React from 'react';
15
+ import React, { useEffect, useCallback, useRef } from 'react';
16
16
  import classNames from 'classnames';
17
17
  import { useEuiMemoizedStyles, LEFT_ALIGNMENT } from '../../services';
18
+ import { useGeneratedHtmlId } from '../../services/accessibility/html_id_generator';
18
19
  import { EuiI18n } from '../i18n';
19
20
  import { EuiScreenReaderOnly } from '../accessibility';
20
21
  import { EuiIcon } from '../icon';
@@ -24,6 +25,8 @@ import { resolveWidthPropsAsStyle } from './utils';
24
25
  import { useEuiTableIsResponsive } from './mobile/responsive_context';
25
26
  import { EuiTableCellContent } from './_table_cell_content';
26
27
  import { euiTableHeaderFooterCellStyles, _useEuiTableStickyCellStyles } from './table_cells_shared.styles';
28
+ import { useEuiTableColumnDataStore } from './store/provider';
29
+ import { useEuiTableWithinStickyHeader } from './sticky_header';
27
30
  import { jsx as ___EmotionJSX } from "@emotion/react";
28
31
  var CellContents = function CellContents(_ref) {
29
32
  var className = _ref.className,
@@ -100,58 +103,123 @@ export var EuiTableHeaderCell = function EuiTableHeaderCell(_ref2) {
100
103
  append = _ref2.append,
101
104
  sticky = _ref2.sticky,
102
105
  rest = _objectWithoutProperties(_ref2, _excluded);
106
+ var selfRef = useRef(null);
107
+ var internalCellId = useGeneratedHtmlId();
108
+ var store = useEuiTableColumnDataStore();
109
+ var isWithinStickyHeader = useEuiTableWithinStickyHeader();
103
110
  var styles = useEuiMemoizedStyles(euiTableHeaderFooterCellStyles);
104
111
  var stickyStyles = _useEuiTableStickyCellStyles(sticky);
105
112
  var isResponsive = useEuiTableIsResponsive();
106
113
  var hideForDesktop = !isResponsive && (mobileOptions === null || mobileOptions === void 0 ? void 0 : mobileOptions.only);
107
114
  var hideForMobile = isResponsive && (mobileOptions === null || mobileOptions === void 0 ? void 0 : mobileOptions.show) === false;
108
- if (hideForDesktop || hideForMobile) return null;
109
- var classes = classNames('euiTableHeaderCell', className);
110
- var cssStyles = [styles.euiTableHeaderCell, !isResponsive && stickyStyles];
111
- var inlineWidthStyles = resolveWidthPropsAsStyle(_style, {
112
- width: width,
113
- minWidth: minWidth,
114
- maxWidth: maxWidth
115
- });
116
- var CellComponent = children ? 'th' : 'td';
117
- var cellScope = CellComponent === 'th' ? scope !== null && scope !== void 0 ? scope : 'col' : undefined; // `scope` is only valid on `th` elements
115
+ var renderHeaderCellRef = useRef();
116
+ renderHeaderCellRef.current = function (extraProps) {
117
+ if (hideForDesktop || hideForMobile) return null;
118
+ var classes = classNames('euiTableHeaderCell', className);
119
+ var cssStyles = [styles.euiTableHeaderCell, !isResponsive && stickyStyles];
120
+ var inlineWidthStyles = resolveWidthPropsAsStyle(_style, {
121
+ width: width,
122
+ minWidth: minWidth,
123
+ maxWidth: maxWidth
124
+ });
125
+ var CellComponent = children ? 'th' : 'td';
126
+ var cellScope = CellComponent === 'th' ? scope !== null && scope !== void 0 ? scope : 'col' : undefined; // `scope` is only valid on `th` elements
118
127
 
119
- var canSort = !!(onSort && !readOnly);
120
- var ariaSortValue;
121
- if (isSorted) {
122
- ariaSortValue = isSortAscending ? 'ascending' : 'descending';
123
- } else if (canSort) {
124
- ariaSortValue = 'none';
125
- }
126
- var cellContentsProps = {
127
- css: styles.euiTableHeaderCell__content,
128
- align: align,
129
- tooltipProps: tooltipProps,
130
- description: description,
131
- canSort: canSort,
132
- isSorted: isSorted,
133
- isSortAscending: isSortAscending,
134
- children: children
128
+ var canSort = !!(onSort && !readOnly);
129
+ var ariaSortValue;
130
+ if (isSorted) {
131
+ ariaSortValue = isSortAscending ? 'ascending' : 'descending';
132
+ } else if (canSort) {
133
+ ariaSortValue = 'none';
134
+ }
135
+ var cellContentsProps = {
136
+ css: styles.euiTableHeaderCell__content,
137
+ align: align,
138
+ tooltipProps: tooltipProps,
139
+ description: description,
140
+ canSort: canSort,
141
+ isSorted: isSorted,
142
+ isSortAscending: isSortAscending,
143
+ children: children
144
+ };
145
+ return ___EmotionJSX(CellComponent, _extends({
146
+ css: cssStyles,
147
+ className: classes,
148
+ scope: cellScope,
149
+ role: "columnheader",
150
+ "aria-sort": ariaSortValue,
151
+ "data-sticky": !isResponsive && (sticky === null || sticky === void 0 ? void 0 : sticky.side) || undefined,
152
+ style: _objectSpread(_objectSpread({}, _style), inlineWidthStyles)
153
+ }, rest, extraProps), canSort ? ___EmotionJSX(EuiToolTip, _extends({
154
+ content: tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.content
155
+ }, tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.tooltipProps, {
156
+ display: "block"
157
+ }), ___EmotionJSX("button", {
158
+ type: "button",
159
+ css: styles.euiTableHeaderCell__button,
160
+ className: classNames('euiTableHeaderButton', {
161
+ 'euiTableHeaderButton-isSorted': isSorted
162
+ }),
163
+ onClick: onSort,
164
+ "data-test-subj": "tableHeaderSortButton"
165
+ }, ___EmotionJSX(CellContents, cellContentsProps))) : ___EmotionJSX(CellContents, cellContentsProps), append);
135
166
  };
136
- return ___EmotionJSX(CellComponent, _extends({
137
- css: cssStyles,
138
- className: classes,
139
- scope: cellScope,
140
- role: "columnheader",
141
- "aria-sort": ariaSortValue,
142
- "data-sticky": !isResponsive && (sticky === null || sticky === void 0 ? void 0 : sticky.side) || undefined,
143
- style: _objectSpread(_objectSpread({}, _style), inlineWidthStyles)
144
- }, rest), canSort ? ___EmotionJSX(EuiToolTip, _extends({
145
- content: tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.content
146
- }, tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.tooltipProps, {
147
- display: "block"
148
- }), ___EmotionJSX("button", {
149
- type: "button",
150
- css: styles.euiTableHeaderCell__button,
151
- className: classNames('euiTableHeaderButton', {
152
- 'euiTableHeaderButton-isSorted': isSorted
153
- }),
154
- onClick: onSort,
155
- "data-test-subj": "tableHeaderSortButton"
156
- }, ___EmotionJSX(CellContents, cellContentsProps))) : ___EmotionJSX(CellContents, cellContentsProps), append);
167
+ var handleResize = useCallback(function (entries) {
168
+ var entry = entries[0];
169
+ if (!entry) {
170
+ return;
171
+ }
172
+ store.updateColumnWidth(internalCellId, entry.contentRect.width);
173
+ }, [store, internalCellId]);
174
+ useEffect(function () {
175
+ // Don't register the column inside the sticky header as the original
176
+ // column is already registered. This would cause an infinite loop.
177
+ if (isWithinStickyHeader || !selfRef.current || !renderHeaderCellRef.current) {
178
+ return;
179
+ }
180
+ var unregisterColumn = store.registerColumn(internalCellId, {
181
+ renderHeaderCellRef: renderHeaderCellRef,
182
+ // getBoundingClientRect is not the cheapest, but we call it only once
183
+ currentWidth: selfRef.current.getBoundingClientRect().width
184
+ });
185
+
186
+ // ResizeObserver is available in all supported browsers,
187
+ // but jsdom and jest don't provide a polyfill for it.
188
+ var resizeObserver;
189
+ if (typeof window.ResizeObserver !== 'undefined') {
190
+ resizeObserver = new ResizeObserver(handleResize);
191
+
192
+ // Note: This _could_ be optimized by using a single ResizeObserver
193
+ // for the whole EuiTable, but it would need to be changed back to this
194
+ // if/when we implement resizable columns
195
+ resizeObserver.observe(selfRef.current);
196
+ }
197
+ return function () {
198
+ var _resizeObserver;
199
+ unregisterColumn();
200
+ (_resizeObserver = resizeObserver) === null || _resizeObserver === void 0 || _resizeObserver.disconnect();
201
+ };
202
+ // eslint-disable-next-line react-hooks/exhaustive-deps
203
+ }, [store, internalCellId, isWithinStickyHeader]);
204
+
205
+ // Notify the store on every render so the sticky header stays in sync.
206
+ // React's reconciliation will efficiently handle any duplicate renders.
207
+ useEffect(function () {
208
+ // Don't update the store if the component is rendered within EuiTableStickyHeader
209
+ if (isWithinStickyHeader) {
210
+ return;
211
+ }
212
+
213
+ // Don't update the store if the element doesn't exist. The render function
214
+ // in `renderHeaderCellRef` sometimes renders null - e.g., in mobile layout
215
+ if (!selfRef.current) {
216
+ return;
217
+ }
218
+ store.updateColumn(internalCellId, {
219
+ renderHeaderCellRef: renderHeaderCellRef
220
+ });
221
+ });
222
+ return renderHeaderCellRef.current({
223
+ ref: selfRef
224
+ });
157
225
  };
@@ -9,36 +9,70 @@ var _excluded = ["children", "className", "scope", "style", "width", "minWidth",
9
9
  * Side Public License, v 1.
10
10
  */
11
11
 
12
- import React from 'react';
12
+ import React, { useEffect, useRef } from 'react';
13
13
  import classNames from 'classnames';
14
14
  import { useEuiMemoizedStyles } from '../../services';
15
+ import { useGeneratedHtmlId } from '../../services/accessibility/html_id_generator';
15
16
  import { resolveWidthPropsAsStyle } from './utils';
16
17
  import { euiTableCellCheckboxStyles } from './table_cells_shared.styles';
18
+ import { useEuiTableColumnDataStore } from './store/provider';
19
+ import { useEuiTableWithinStickyHeader } from './sticky_header';
17
20
  import { jsx as ___EmotionJSX } from "@emotion/react";
18
- export var EuiTableHeaderCellCheckbox = function EuiTableHeaderCellCheckbox(_ref) {
19
- var children = _ref.children,
20
- className = _ref.className,
21
- _ref$scope = _ref.scope,
22
- scope = _ref$scope === void 0 ? 'col' : _ref$scope,
23
- _style = _ref.style,
24
- width = _ref.width,
25
- minWidth = _ref.minWidth,
26
- maxWidth = _ref.maxWidth,
27
- append = _ref.append,
28
- rest = _objectWithoutProperties(_ref, _excluded);
29
- var classes = classNames('euiTableHeaderCellCheckbox', className);
21
+ export var EuiTableHeaderCellCheckbox = function EuiTableHeaderCellCheckbox(props) {
22
+ var children = props.children,
23
+ className = props.className,
24
+ _props$scope = props.scope,
25
+ scope = _props$scope === void 0 ? 'col' : _props$scope,
26
+ _style = props.style,
27
+ width = props.width,
28
+ minWidth = props.minWidth,
29
+ maxWidth = props.maxWidth,
30
+ append = props.append,
31
+ rest = _objectWithoutProperties(props, _excluded);
32
+ var internalCellId = useGeneratedHtmlId();
33
+ var store = useEuiTableColumnDataStore();
34
+ var isWithinStickyHeader = useEuiTableWithinStickyHeader();
30
35
  var styles = useEuiMemoizedStyles(euiTableCellCheckboxStyles);
31
- var style = resolveWidthPropsAsStyle(_style, {
32
- width: width,
33
- minWidth: minWidth,
34
- maxWidth: maxWidth
36
+ var renderHeaderCellRef = useRef();
37
+ renderHeaderCellRef.current = function (extraProps) {
38
+ var classes = classNames('euiTableHeaderCellCheckbox', className);
39
+ var style = resolveWidthPropsAsStyle(_style, {
40
+ width: width,
41
+ minWidth: minWidth,
42
+ maxWidth: maxWidth
43
+ });
44
+ return ___EmotionJSX("th", _extends({
45
+ css: styles.euiTableHeaderCellCheckbox,
46
+ className: classes,
47
+ scope: scope,
48
+ style: style
49
+ }, rest, extraProps), ___EmotionJSX("div", {
50
+ className: "euiTableCellContent"
51
+ }, children), append);
52
+ };
53
+ useEffect(function () {
54
+ // Don't register the column inside the sticky header as the original
55
+ // column is already registered. This would cause an infinite loop.
56
+ if (isWithinStickyHeader) {
57
+ return;
58
+ }
59
+ var unregisterColumn = store.registerColumn(internalCellId, {
60
+ renderHeaderCellRef: renderHeaderCellRef
61
+ });
62
+ return function () {
63
+ unregisterColumn();
64
+ };
65
+ // eslint-disable-next-line react-hooks/exhaustive-deps
66
+ }, [store, internalCellId, isWithinStickyHeader]);
67
+ useEffect(function () {
68
+ // Notify the store on every render so the sticky header stays in sync.
69
+ // React's reconciliation will efficiently handle any duplicate renders.
70
+ if (isWithinStickyHeader) {
71
+ return;
72
+ }
73
+ store.updateColumn(internalCellId, {
74
+ renderHeaderCellRef: renderHeaderCellRef
75
+ });
35
76
  });
36
- return ___EmotionJSX("th", _extends({
37
- css: styles.euiTableHeaderCellCheckbox,
38
- className: classes,
39
- scope: scope,
40
- style: style
41
- }, rest), ___EmotionJSX("div", {
42
- className: "euiTableCellContent"
43
- }, children), append);
77
+ return renderHeaderCellRef.current({});
44
78
  };