@elastic/eui 108.0.0 → 109.1.0-snapshot.1763390960850

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 (405) hide show
  1. package/es/components/accessibility/skip_link/skip_link.js +10 -1
  2. package/es/components/basic_table/collapsed_item_actions.js +3 -1
  3. package/es/components/basic_table/default_item_action.js +7 -4
  4. package/es/components/bottom_bar/bottom_bar.js +12 -2
  5. package/es/components/button/button.js +20 -25
  6. package/es/components/button/button_display/_button_display.js +32 -30
  7. package/es/components/button/button_display/_button_display.styles.js +4 -4
  8. package/es/components/button/button_empty/button_empty.js +32 -14
  9. package/es/components/button/button_group/button_group.js +49 -31
  10. package/es/components/button/button_group/button_group_button.js +16 -5
  11. package/es/components/button/button_group/button_group_button.styles.js +12 -8
  12. package/es/components/button/button_icon/button_icon.js +30 -6
  13. package/es/components/card/card.js +20 -25
  14. package/es/components/card/card_select/card_select.js +20 -25
  15. package/es/components/code/code_block_virtualized.js +9 -7
  16. package/es/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  17. package/es/components/datagrid/body/cell/data_grid_cell.js +35 -12
  18. package/es/components/datagrid/body/data_grid_body.js +23 -6
  19. package/es/components/datagrid/body/data_grid_body_custom.js +23 -6
  20. package/es/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  21. package/es/components/datagrid/body/header/column_actions.js +5 -21
  22. package/es/components/datagrid/body/header/data_grid_header_cell.js +29 -10
  23. package/es/components/datagrid/body/header/data_grid_header_cell.styles.js +8 -2
  24. package/es/components/datagrid/body/header/data_grid_header_cell_wrapper.js +5 -2
  25. package/es/components/datagrid/controls/column_selector.js +36 -19
  26. package/es/components/datagrid/controls/column_sorting.js +23 -6
  27. package/es/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  28. package/es/components/datagrid/data_grid.js +5 -1
  29. package/es/components/datagrid/utils/in_memory.js +25 -7
  30. package/es/components/date_picker/auto_refresh/auto_refresh.js +11 -2
  31. package/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +31 -5
  32. package/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  33. package/es/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  34. package/es/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  35. package/es/components/date_picker/super_date_picker/date_popover/timezone_display.js +98 -0
  36. package/es/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +19 -0
  37. package/es/components/date_picker/super_date_picker/pretty_duration.js +1 -8
  38. package/es/components/date_picker/super_date_picker/relative_utils.js +8 -0
  39. package/es/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  40. package/es/components/date_picker/super_date_picker/time_window_buttons.js +185 -0
  41. package/es/components/facet/facet_button.js +9 -19
  42. package/es/components/filter_group/filter_button.js +14 -1
  43. package/es/components/flyout/flyout.js +27 -10
  44. package/es/components/form/file_picker/file_picker.styles.js +3 -3
  45. package/es/components/form/form_control_button/form_control_button.js +13 -7
  46. package/es/components/header/header_links/header_link.js +13 -7
  47. package/es/components/header/header_section/header_section_item_button.js +13 -7
  48. package/es/components/icon/assets/boxes_vertical.js +1 -1
  49. package/es/components/icon/assets/checkInCircleFilled.js +1 -2
  50. package/es/components/icon/assets/errorFilled.js +1 -2
  51. package/es/components/icon/assets/paper_clip.js +1 -1
  52. package/es/components/icon/assets/streams_wired.js +3 -2
  53. package/es/components/icon/assets/warningFilled.js +1 -2
  54. package/es/components/icon/icon_map.js +3 -6
  55. package/es/components/list_group/list_group.js +13 -1
  56. package/es/components/list_group/list_group_item.js +13 -1
  57. package/es/components/list_group/list_group_item_extra_action.js +13 -1
  58. package/es/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  59. package/es/components/overlay_mask/overlay_mask.styles.js +1 -1
  60. package/es/components/pagination/pagination_button.js +13 -7
  61. package/es/components/popover/popover.js +22 -16
  62. package/es/components/provider/component_defaults/component_defaults.js +22 -2
  63. package/es/components/table/table_row.styles.js +1 -1
  64. package/es/components/tool_tip/tool_tip.js +24 -24
  65. package/es/global_styling/index.js +2 -1
  66. package/es/global_styling/mixins/_button.js +1 -1
  67. package/es/global_styling/utility/selectors.js +9 -0
  68. package/es/services/focus_trap/focus_trap_pub_sub.js +74 -0
  69. package/es/services/focus_trap/index.js +9 -0
  70. package/es/services/hooks/index.js +2 -1
  71. package/es/services/hooks/useEuiDisabledElement.js +195 -0
  72. package/es/services/index.js +1 -0
  73. package/es/services/popover/reposition_on_scroll.js +61 -0
  74. package/es/services/theme/high_contrast_overrides.js +5 -1
  75. package/es/test/cypress/index.d.ts +12 -0
  76. package/es/test/cypress/index.js +9 -0
  77. package/es/test/cypress/matchers.d.ts +20 -0
  78. package/es/test/cypress/matchers.js +54 -0
  79. package/es/test/cypress/test_reposition_on_scroll.js +66 -0
  80. package/es/test/enzyme/enzyme_matchers.d.ts +36 -0
  81. package/es/test/enzyme/enzyme_matchers.js +43 -0
  82. package/es/test/enzyme/index.d.ts +14 -0
  83. package/es/test/enzyme/index.js +10 -0
  84. package/es/test/rtl/index.d.ts +9 -1
  85. package/es/test/rtl/index.js +2 -1
  86. package/es/test/rtl/matchers.d.ts +36 -0
  87. package/es/test/rtl/matchers.js +82 -0
  88. package/es/utils/element_can_be_disabled.js +16 -0
  89. package/es/utils/index.js +2 -1
  90. package/eui.d.ts +604 -183
  91. package/i18ntokens.json +1357 -1231
  92. package/lib/components/accessibility/skip_link/skip_link.js +10 -1
  93. package/lib/components/basic_table/collapsed_item_actions.js +3 -1
  94. package/lib/components/basic_table/default_item_action.js +7 -4
  95. package/lib/components/bottom_bar/bottom_bar.js +11 -1
  96. package/lib/components/button/button.js +21 -26
  97. package/lib/components/button/button_display/_button_display.js +31 -29
  98. package/lib/components/button/button_display/_button_display.styles.js +4 -4
  99. package/lib/components/button/button_empty/button_empty.js +31 -13
  100. package/lib/components/button/button_group/button_group.js +49 -31
  101. package/lib/components/button/button_group/button_group_button.js +16 -5
  102. package/lib/components/button/button_group/button_group_button.styles.js +10 -6
  103. package/lib/components/button/button_icon/button_icon.js +29 -5
  104. package/lib/components/card/card.js +21 -26
  105. package/lib/components/card/card_select/card_select.js +21 -26
  106. package/lib/components/code/code_block_virtualized.js +9 -7
  107. package/lib/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  108. package/lib/components/datagrid/body/cell/data_grid_cell.js +35 -12
  109. package/lib/components/datagrid/body/data_grid_body.js +23 -6
  110. package/lib/components/datagrid/body/data_grid_body_custom.js +23 -6
  111. package/lib/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  112. package/lib/components/datagrid/body/header/column_actions.js +5 -21
  113. package/lib/components/datagrid/body/header/data_grid_header_cell.js +29 -10
  114. package/lib/components/datagrid/body/header/data_grid_header_cell.styles.js +8 -1
  115. package/lib/components/datagrid/body/header/data_grid_header_cell_wrapper.js +5 -2
  116. package/lib/components/datagrid/controls/column_selector.js +36 -19
  117. package/lib/components/datagrid/controls/column_sorting.js +23 -6
  118. package/lib/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  119. package/lib/components/datagrid/data_grid.js +5 -1
  120. package/lib/components/datagrid/utils/in_memory.js +25 -7
  121. package/lib/components/date_picker/auto_refresh/auto_refresh.js +12 -3
  122. package/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +30 -4
  123. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  124. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  125. package/lib/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  126. package/lib/components/date_picker/super_date_picker/date_popover/timezone_display.js +104 -0
  127. package/lib/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  128. package/lib/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  129. package/lib/components/date_picker/super_date_picker/relative_utils.js +9 -0
  130. package/lib/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  131. package/lib/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  132. package/lib/components/facet/facet_button.js +9 -19
  133. package/lib/components/filter_group/filter_button.js +14 -1
  134. package/lib/components/flyout/flyout.js +26 -9
  135. package/lib/components/form/file_picker/file_picker.styles.js +3 -3
  136. package/lib/components/form/form_control_button/form_control_button.js +13 -7
  137. package/lib/components/header/header_links/header_link.js +13 -7
  138. package/lib/components/header/header_section/header_section_item_button.js +13 -7
  139. package/lib/components/icon/assets/boxes_vertical.js +1 -1
  140. package/lib/components/icon/assets/checkInCircleFilled.js +1 -2
  141. package/lib/components/icon/assets/errorFilled.js +1 -2
  142. package/lib/components/icon/assets/paper_clip.js +1 -1
  143. package/lib/components/icon/assets/streams_wired.js +3 -2
  144. package/lib/components/icon/assets/warningFilled.js +1 -2
  145. package/lib/components/icon/icon_map.js +3 -6
  146. package/lib/components/icon/svgs/boxes_vertical.svg +1 -1
  147. package/lib/components/icon/svgs/checkInCircleFilled.svg +1 -1
  148. package/lib/components/icon/svgs/errorFilled.svg +1 -1
  149. package/lib/components/icon/svgs/paper_clip.svg +3 -3
  150. package/lib/components/icon/svgs/warningFilled.svg +1 -1
  151. package/lib/components/list_group/list_group.js +13 -1
  152. package/lib/components/list_group/list_group_item.js +13 -1
  153. package/lib/components/list_group/list_group_item_extra_action.js +13 -1
  154. package/lib/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  155. package/lib/components/overlay_mask/overlay_mask.styles.js +1 -1
  156. package/lib/components/pagination/pagination_button.js +13 -7
  157. package/lib/components/popover/popover.js +21 -15
  158. package/lib/components/provider/component_defaults/component_defaults.js +22 -2
  159. package/lib/components/table/table_row.styles.js +1 -1
  160. package/lib/components/tool_tip/tool_tip.js +24 -24
  161. package/lib/global_styling/index.js +16 -1
  162. package/lib/global_styling/mixins/_button.js +1 -1
  163. package/lib/global_styling/utility/selectors.js +15 -0
  164. package/lib/services/focus_trap/focus_trap_pub_sub.js +80 -0
  165. package/lib/services/focus_trap/index.js +12 -0
  166. package/lib/services/hooks/index.js +18 -1
  167. package/lib/services/hooks/useEuiDisabledElement.js +199 -0
  168. package/lib/services/index.js +8 -0
  169. package/lib/services/popover/reposition_on_scroll.js +67 -0
  170. package/lib/services/theme/high_contrast_overrides.js +5 -1
  171. package/lib/test/cypress/index.d.ts +12 -0
  172. package/lib/test/cypress/index.js +18 -0
  173. package/lib/test/cypress/matchers.d.ts +20 -0
  174. package/lib/test/cypress/matchers.js +61 -0
  175. package/lib/test/cypress/test_reposition_on_scroll.js +69 -0
  176. package/lib/test/enzyme/enzyme_matchers.d.ts +36 -0
  177. package/lib/test/enzyme/enzyme_matchers.js +49 -0
  178. package/lib/test/enzyme/index.d.ts +14 -0
  179. package/lib/test/enzyme/index.js +24 -0
  180. package/lib/test/rtl/index.d.ts +9 -1
  181. package/lib/test/rtl/index.js +24 -2
  182. package/lib/test/rtl/matchers.d.ts +36 -0
  183. package/lib/test/rtl/matchers.js +86 -0
  184. package/lib/utils/element_can_be_disabled.js +22 -0
  185. package/lib/utils/index.js +14 -1
  186. package/optimize/es/components/basic_table/collapsed_item_actions.js +3 -1
  187. package/optimize/es/components/basic_table/default_item_action.js +7 -4
  188. package/optimize/es/components/bottom_bar/bottom_bar.js +12 -2
  189. package/optimize/es/components/button/button_display/_button_display.js +24 -12
  190. package/optimize/es/components/button/button_display/_button_display.styles.js +4 -4
  191. package/optimize/es/components/button/button_empty/button_empty.js +18 -6
  192. package/optimize/es/components/button/button_group/button_group.js +10 -5
  193. package/optimize/es/components/button/button_group/button_group_button.js +2 -3
  194. package/optimize/es/components/button/button_group/button_group_button.styles.js +12 -8
  195. package/optimize/es/components/button/button_icon/button_icon.js +17 -5
  196. package/optimize/es/components/code/code_block_virtualized.js +9 -7
  197. package/optimize/es/components/datagrid/body/header/column_actions.js +5 -21
  198. package/optimize/es/components/datagrid/body/header/data_grid_header_cell.js +6 -4
  199. package/optimize/es/components/datagrid/body/header/data_grid_header_cell.styles.js +8 -2
  200. package/optimize/es/components/datagrid/body/header/data_grid_header_cell_wrapper.js +4 -2
  201. package/optimize/es/components/datagrid/controls/column_selector.js +36 -19
  202. package/optimize/es/components/datagrid/data_grid.js +5 -1
  203. package/optimize/es/components/datagrid/utils/in_memory.js +2 -1
  204. package/optimize/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +12 -4
  205. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +5 -2
  206. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_content.js +7 -3
  207. package/optimize/es/components/date_picker/super_date_picker/date_popover/relative_tab.js +10 -2
  208. package/optimize/es/components/date_picker/super_date_picker/date_popover/timezone_display.js +97 -0
  209. package/optimize/es/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +19 -0
  210. package/optimize/es/components/date_picker/super_date_picker/pretty_duration.js +1 -8
  211. package/optimize/es/components/date_picker/super_date_picker/relative_utils.js +8 -0
  212. package/optimize/es/components/date_picker/super_date_picker/super_date_picker.js +49 -25
  213. package/optimize/es/components/date_picker/super_date_picker/time_window_buttons.js +185 -0
  214. package/optimize/es/components/flyout/flyout.js +27 -10
  215. package/optimize/es/components/form/file_picker/file_picker.styles.js +3 -3
  216. package/optimize/es/components/icon/assets/boxes_vertical.js +1 -1
  217. package/optimize/es/components/icon/assets/checkInCircleFilled.js +1 -2
  218. package/optimize/es/components/icon/assets/errorFilled.js +1 -2
  219. package/optimize/es/components/icon/assets/paper_clip.js +1 -1
  220. package/optimize/es/components/icon/assets/streams_wired.js +3 -2
  221. package/optimize/es/components/icon/assets/warningFilled.js +1 -2
  222. package/optimize/es/components/icon/icon_map.js +3 -6
  223. package/optimize/es/components/overlay_mask/overlay_mask.styles.js +1 -1
  224. package/optimize/es/components/popover/popover.js +22 -16
  225. package/optimize/es/components/table/table_row.styles.js +1 -1
  226. package/optimize/es/components/tool_tip/tool_tip.js +24 -24
  227. package/optimize/es/global_styling/index.js +2 -1
  228. package/optimize/es/global_styling/mixins/_button.js +1 -1
  229. package/optimize/es/global_styling/utility/selectors.js +9 -0
  230. package/optimize/es/services/focus_trap/focus_trap_pub_sub.js +74 -0
  231. package/optimize/es/services/focus_trap/index.js +9 -0
  232. package/optimize/es/services/hooks/index.js +2 -1
  233. package/optimize/es/services/hooks/useEuiDisabledElement.js +192 -0
  234. package/optimize/es/services/index.js +1 -0
  235. package/optimize/es/services/popover/reposition_on_scroll.js +61 -0
  236. package/optimize/es/services/theme/high_contrast_overrides.js +5 -1
  237. package/optimize/es/test/cypress/index.d.ts +12 -0
  238. package/optimize/es/test/cypress/index.js +9 -0
  239. package/optimize/es/test/cypress/matchers.d.ts +20 -0
  240. package/optimize/es/test/cypress/matchers.js +54 -0
  241. package/optimize/es/test/cypress/test_reposition_on_scroll.js +63 -0
  242. package/optimize/es/test/enzyme/enzyme_matchers.d.ts +36 -0
  243. package/optimize/es/test/enzyme/enzyme_matchers.js +43 -0
  244. package/optimize/es/test/enzyme/index.d.ts +14 -0
  245. package/optimize/es/test/enzyme/index.js +10 -0
  246. package/optimize/es/test/rtl/index.d.ts +9 -1
  247. package/optimize/es/test/rtl/index.js +2 -1
  248. package/optimize/es/test/rtl/matchers.d.ts +36 -0
  249. package/optimize/es/test/rtl/matchers.js +82 -0
  250. package/optimize/es/utils/element_can_be_disabled.js +16 -0
  251. package/optimize/es/utils/index.js +2 -1
  252. package/optimize/lib/components/basic_table/collapsed_item_actions.js +3 -1
  253. package/optimize/lib/components/basic_table/default_item_action.js +7 -4
  254. package/optimize/lib/components/bottom_bar/bottom_bar.js +11 -1
  255. package/optimize/lib/components/button/button_display/_button_display.js +23 -11
  256. package/optimize/lib/components/button/button_display/_button_display.styles.js +4 -4
  257. package/optimize/lib/components/button/button_empty/button_empty.js +17 -5
  258. package/optimize/lib/components/button/button_group/button_group.js +10 -5
  259. package/optimize/lib/components/button/button_group/button_group_button.js +2 -3
  260. package/optimize/lib/components/button/button_group/button_group_button.styles.js +10 -6
  261. package/optimize/lib/components/button/button_icon/button_icon.js +16 -4
  262. package/optimize/lib/components/code/code_block_virtualized.js +9 -7
  263. package/optimize/lib/components/datagrid/body/header/column_actions.js +5 -21
  264. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell.js +6 -4
  265. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell.styles.js +8 -1
  266. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell_wrapper.js +4 -2
  267. package/optimize/lib/components/datagrid/controls/column_selector.js +36 -19
  268. package/optimize/lib/components/datagrid/data_grid.js +5 -1
  269. package/optimize/lib/components/datagrid/utils/in_memory.js +2 -1
  270. package/optimize/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +11 -3
  271. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +5 -2
  272. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_content.js +7 -3
  273. package/optimize/lib/components/date_picker/super_date_picker/date_popover/relative_tab.js +10 -2
  274. package/optimize/lib/components/date_picker/super_date_picker/date_popover/timezone_display.js +103 -0
  275. package/optimize/lib/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  276. package/optimize/lib/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  277. package/optimize/lib/components/date_picker/super_date_picker/relative_utils.js +9 -0
  278. package/optimize/lib/components/date_picker/super_date_picker/super_date_picker.js +49 -25
  279. package/optimize/lib/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  280. package/optimize/lib/components/flyout/flyout.js +26 -9
  281. package/optimize/lib/components/form/file_picker/file_picker.styles.js +3 -3
  282. package/optimize/lib/components/icon/assets/boxes_vertical.js +1 -1
  283. package/optimize/lib/components/icon/assets/checkInCircleFilled.js +1 -2
  284. package/optimize/lib/components/icon/assets/errorFilled.js +1 -2
  285. package/optimize/lib/components/icon/assets/paper_clip.js +1 -1
  286. package/optimize/lib/components/icon/assets/streams_wired.js +3 -2
  287. package/optimize/lib/components/icon/assets/warningFilled.js +1 -2
  288. package/optimize/lib/components/icon/icon_map.js +3 -6
  289. package/optimize/lib/components/icon/svgs/boxes_vertical.svg +1 -1
  290. package/optimize/lib/components/icon/svgs/checkInCircleFilled.svg +1 -1
  291. package/optimize/lib/components/icon/svgs/errorFilled.svg +1 -1
  292. package/optimize/lib/components/icon/svgs/paper_clip.svg +3 -3
  293. package/optimize/lib/components/icon/svgs/warningFilled.svg +1 -1
  294. package/optimize/lib/components/overlay_mask/overlay_mask.styles.js +1 -1
  295. package/optimize/lib/components/popover/popover.js +21 -15
  296. package/optimize/lib/components/table/table_row.styles.js +1 -1
  297. package/optimize/lib/components/tool_tip/tool_tip.js +24 -24
  298. package/optimize/lib/global_styling/index.js +16 -1
  299. package/optimize/lib/global_styling/mixins/_button.js +1 -1
  300. package/optimize/lib/global_styling/utility/selectors.js +15 -0
  301. package/optimize/lib/services/focus_trap/focus_trap_pub_sub.js +80 -0
  302. package/optimize/lib/services/focus_trap/index.js +12 -0
  303. package/optimize/lib/services/hooks/index.js +18 -1
  304. package/optimize/lib/services/hooks/useEuiDisabledElement.js +197 -0
  305. package/optimize/lib/services/index.js +8 -0
  306. package/optimize/lib/services/popover/reposition_on_scroll.js +67 -0
  307. package/optimize/lib/services/theme/high_contrast_overrides.js +5 -1
  308. package/optimize/lib/test/cypress/index.d.ts +12 -0
  309. package/optimize/lib/test/cypress/index.js +18 -0
  310. package/optimize/lib/test/cypress/matchers.d.ts +20 -0
  311. package/optimize/lib/test/cypress/matchers.js +61 -0
  312. package/optimize/lib/test/cypress/test_reposition_on_scroll.js +70 -0
  313. package/optimize/lib/test/enzyme/enzyme_matchers.d.ts +36 -0
  314. package/optimize/lib/test/enzyme/enzyme_matchers.js +50 -0
  315. package/optimize/lib/test/enzyme/index.d.ts +14 -0
  316. package/optimize/lib/test/enzyme/index.js +24 -0
  317. package/optimize/lib/test/rtl/index.d.ts +9 -1
  318. package/optimize/lib/test/rtl/index.js +24 -2
  319. package/optimize/lib/test/rtl/matchers.d.ts +36 -0
  320. package/optimize/lib/test/rtl/matchers.js +86 -0
  321. package/optimize/lib/utils/element_can_be_disabled.js +22 -0
  322. package/optimize/lib/utils/index.js +14 -1
  323. package/package.json +6 -5
  324. package/test-env/components/accessibility/skip_link/skip_link.js +10 -1
  325. package/test-env/components/basic_table/collapsed_item_actions.js +3 -1
  326. package/test-env/components/basic_table/default_item_action.js +7 -4
  327. package/test-env/components/bottom_bar/bottom_bar.js +11 -1
  328. package/test-env/components/button/button.js +21 -26
  329. package/test-env/components/button/button_display/_button_display.js +31 -29
  330. package/test-env/components/button/button_display/_button_display.styles.js +4 -4
  331. package/test-env/components/button/button_empty/button_empty.js +31 -13
  332. package/test-env/components/button/button_group/button_group.js +49 -31
  333. package/test-env/components/button/button_group/button_group_button.js +16 -5
  334. package/test-env/components/button/button_group/button_group_button.styles.js +10 -6
  335. package/test-env/components/button/button_icon/button_icon.js +29 -5
  336. package/test-env/components/card/card.js +21 -26
  337. package/test-env/components/card/card_select/card_select.js +21 -26
  338. package/test-env/components/code/code_block_virtualized.js +9 -7
  339. package/test-env/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  340. package/test-env/components/datagrid/body/cell/data_grid_cell.js +35 -12
  341. package/test-env/components/datagrid/body/data_grid_body.js +23 -6
  342. package/test-env/components/datagrid/body/data_grid_body_custom.js +23 -6
  343. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  344. package/test-env/components/datagrid/body/header/column_actions.js +5 -21
  345. package/test-env/components/datagrid/body/header/data_grid_header_cell.js +29 -10
  346. package/test-env/components/datagrid/body/header/data_grid_header_cell.styles.js +8 -1
  347. package/test-env/components/datagrid/body/header/data_grid_header_cell_wrapper.js +5 -2
  348. package/test-env/components/datagrid/controls/column_selector.js +36 -19
  349. package/test-env/components/datagrid/controls/column_sorting.js +23 -6
  350. package/test-env/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  351. package/test-env/components/datagrid/data_grid.js +5 -1
  352. package/test-env/components/datagrid/utils/in_memory.js +25 -7
  353. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +12 -3
  354. package/test-env/components/date_picker/super_date_picker/date_popover/absolute_tab.js +30 -4
  355. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  356. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  357. package/test-env/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  358. package/test-env/components/date_picker/super_date_picker/date_popover/timezone_display.js +103 -0
  359. package/test-env/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  360. package/test-env/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  361. package/test-env/components/date_picker/super_date_picker/relative_utils.js +9 -0
  362. package/test-env/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  363. package/test-env/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  364. package/test-env/components/facet/facet_button.js +9 -19
  365. package/test-env/components/filter_group/filter_button.js +14 -1
  366. package/test-env/components/form/file_picker/file_picker.styles.js +3 -3
  367. package/test-env/components/form/form_control_button/form_control_button.js +13 -7
  368. package/test-env/components/header/header_links/header_link.js +13 -7
  369. package/test-env/components/header/header_section/header_section_item_button.js +13 -7
  370. package/test-env/components/icon/assets/boxes_vertical.js +1 -1
  371. package/test-env/components/icon/assets/checkInCircleFilled.js +1 -2
  372. package/test-env/components/icon/assets/errorFilled.js +1 -2
  373. package/test-env/components/icon/assets/paper_clip.js +1 -1
  374. package/test-env/components/icon/assets/streams_wired.js +3 -2
  375. package/test-env/components/icon/assets/warningFilled.js +1 -2
  376. package/test-env/components/icon/icon_map.js +3 -6
  377. package/test-env/components/list_group/list_group.js +13 -1
  378. package/test-env/components/list_group/list_group_item.js +13 -1
  379. package/test-env/components/list_group/list_group_item_extra_action.js +13 -1
  380. package/test-env/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  381. package/test-env/components/overlay_mask/overlay_mask.styles.js +1 -1
  382. package/test-env/components/pagination/pagination_button.js +13 -7
  383. package/test-env/components/popover/popover.js +21 -15
  384. package/test-env/components/provider/component_defaults/component_defaults.js +22 -2
  385. package/test-env/components/table/table_row.styles.js +1 -1
  386. package/test-env/components/tool_tip/tool_tip.js +24 -24
  387. package/test-env/global_styling/index.js +16 -1
  388. package/test-env/global_styling/mixins/_button.js +1 -1
  389. package/test-env/global_styling/utility/selectors.js +15 -0
  390. package/test-env/services/focus_trap/focus_trap_pub_sub.js +80 -0
  391. package/test-env/services/focus_trap/index.js +12 -0
  392. package/test-env/services/hooks/index.js +18 -1
  393. package/test-env/services/hooks/useEuiDisabledElement.js +197 -0
  394. package/test-env/services/index.js +8 -0
  395. package/test-env/services/popover/reposition_on_scroll.js +67 -0
  396. package/test-env/services/theme/high_contrast_overrides.js +5 -1
  397. package/test-env/test/cypress/index.js +18 -0
  398. package/test-env/test/cypress/matchers.js +61 -0
  399. package/test-env/test/cypress/test_reposition_on_scroll.js +70 -0
  400. package/test-env/test/enzyme/enzyme_matchers.js +50 -0
  401. package/test-env/test/enzyme/index.js +24 -0
  402. package/test-env/test/rtl/index.js +24 -2
  403. package/test-env/test/rtl/matchers.js +86 -0
  404. package/test-env/utils/element_can_be_disabled.js +22 -0
  405. package/test-env/utils/index.js +14 -1
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["className", "iconType", "iconSize", "color", "isDisabled", "disabled", "href", "type", "display", "target", "rel", "size", "buttonRef", "isSelected", "isLoading"];
3
+ var _excluded = ["className", "iconType", "iconSize", "color", "isDisabled", "disabled", "hasAriaDisabled", "href", "type", "display", "target", "rel", "size", "buttonRef", "isSelected", "isLoading"],
4
+ _excluded2 = ["ref"];
4
5
  /*
5
6
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
6
7
  * or more contributor license agreements. Licensed under the Elastic License
@@ -11,7 +12,8 @@ var _excluded = ["className", "iconType", "iconSize", "color", "isDisabled", "di
11
12
 
12
13
  import React from 'react';
13
14
  import classNames from 'classnames';
14
- import { getSecureRelForTarget, useEuiMemoizedStyles } from '../../../services';
15
+ import { getSecureRelForTarget, useCombinedRefs, useEuiMemoizedStyles } from '../../../services';
16
+ import { useEuiDisabledElement } from '../../../services/hooks/useEuiDisabledElement';
15
17
  import { EuiIcon } from '../../icon';
16
18
  import { EuiLoadingSpinner } from '../../loading';
17
19
  import { useEuiButtonColorCSS, useEuiButtonFocusCSS } from '../../../global_styling/mixins/_button';
@@ -29,6 +31,8 @@ export var EuiButtonIcon = function EuiButtonIcon(_ref) {
29
31
  color = _ref$color === void 0 ? 'primary' : _ref$color,
30
32
  _isDisabled = _ref.isDisabled,
31
33
  disabled = _ref.disabled,
34
+ _ref$hasAriaDisabled = _ref.hasAriaDisabled,
35
+ hasAriaDisabled = _ref$hasAriaDisabled === void 0 ? false : _ref$hasAriaDisabled,
32
36
  href = _ref.href,
33
37
  _ref$type = _ref.type,
34
38
  type = _ref$type === void 0 ? 'button' : _ref$type,
@@ -47,6 +51,14 @@ export var EuiButtonIcon = function EuiButtonIcon(_ref) {
47
51
  href: href,
48
52
  isLoading: isLoading
49
53
  });
54
+ var _useEuiDisabledElemen = useEuiDisabledElement({
55
+ isDisabled: isDisabled,
56
+ hasAriaDisabled: hasAriaDisabled,
57
+ onKeyDown: rest.onKeyDown
58
+ }),
59
+ disabledRef = _useEuiDisabledElemen.ref,
60
+ disabledButtonProps = _objectWithoutProperties(_useEuiDisabledElemen, _excluded2);
61
+ var setCombinedRef = useCombinedRefs([disabledRef, buttonRef]);
50
62
  var ariaHidden = rest['aria-hidden'];
51
63
  var isAriaHidden = ariaHidden === 'true' || ariaHidden === true;
52
64
  if (!rest['aria-label'] && !rest['aria-labelledby'] && !isAriaHidden) {
@@ -106,7 +118,7 @@ export var EuiButtonIcon = function EuiButtonIcon(_ref) {
106
118
  href: href,
107
119
  target: target,
108
120
  rel: secureRel,
109
- ref: buttonRef
121
+ ref: setCombinedRef
110
122
  }, rest), buttonIcon);
111
123
  }
112
124
  var buttonType;
@@ -117,6 +129,6 @@ export var EuiButtonIcon = function EuiButtonIcon(_ref) {
117
129
  className: classes,
118
130
  "aria-pressed": isSelected,
119
131
  type: type,
120
- ref: buttonRef
121
- }, rest), buttonIcon);
132
+ ref: setCombinedRef
133
+ }, rest, disabledButtonProps), buttonIcon);
122
134
  };
@@ -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 = ["style", "children"],
3
+ var _excluded = ["style"],
4
4
  _excluded2 = ["style"];
5
5
  /*
6
6
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
@@ -23,29 +23,31 @@ export var EuiCodeBlockVirtualized = function EuiCodeBlockVirtualized(_ref) {
23
23
  overflowHeight = _ref.overflowHeight,
24
24
  preProps = _ref.preProps,
25
25
  codeProps = _ref.codeProps;
26
+ // NOTE: Don't inject other content (e.g. a label) inside this outer virtualized
27
+ // container as react-window requires this to be stable for scroll calculations.
28
+ // Instead, inject it into the inner virtualized element.
26
29
  var VirtualizedOuterElement = useMemo(function () {
27
30
  return /*#__PURE__*/forwardRef(function (_ref2, ref) {
28
31
  var style = _ref2.style,
29
- children = _ref2.children,
30
32
  props = _objectWithoutProperties(_ref2, _excluded);
31
33
  return ___EmotionJSX("pre", _extends({
32
34
  style: logicalStyles(style)
33
35
  }, props, {
34
36
  ref: ref
35
- }, preProps), label, children);
37
+ }, preProps));
36
38
  });
37
- }, [preProps, label]);
39
+ }, [preProps]);
38
40
  var VirtualizedInnerElement = useMemo(function () {
39
41
  return /*#__PURE__*/forwardRef(function (_ref3, ref) {
40
42
  var style = _ref3.style,
41
43
  props = _objectWithoutProperties(_ref3, _excluded2);
42
- return ___EmotionJSX("code", _extends({
44
+ return ___EmotionJSX(React.Fragment, null, label, ___EmotionJSX("code", _extends({
43
45
  style: logicalStyles(style)
44
46
  }, props, {
45
47
  ref: ref
46
- }, codeProps));
48
+ }, codeProps)));
47
49
  });
48
- }, [codeProps]);
50
+ }, [codeProps, label]);
49
51
  var virtualizationProps = {
50
52
  itemData: data,
51
53
  itemSize: rowHeight,
@@ -72,16 +72,6 @@ export var ColumnActions = /*#__PURE__*/memo(function (_ref) {
72
72
  var closePopover = useCallback(function () {
73
73
  setIsPopoverOpen(false);
74
74
  }, []);
75
- var _useState3 = useState(false),
76
- _useState4 = _slicedToArray(_useState3, 2),
77
- isActionsButtonFocused = _useState4[0],
78
- setIsActionsButtonFocused = _useState4[1];
79
- var onFocus = useCallback(function () {
80
- return setIsActionsButtonFocused(true);
81
- }, []);
82
- var onBlur = useCallback(function () {
83
- return setIsActionsButtonFocused(false);
84
- }, []);
85
75
  var actionsButtonAriaLabel = useEuiI18n('euiDataGridHeaderCell.actionsButtonAriaLabel', '{title}. Click to view column header actions.', {
86
76
  title: title
87
77
  });
@@ -96,10 +86,10 @@ export var ColumnActions = /*#__PURE__*/memo(function (_ref) {
96
86
  /**
97
87
  * Props to set on parent EuiDataGridHeaderCell
98
88
  */
99
- var _useState5 = useState(false),
100
- _useState6 = _slicedToArray(_useState5, 2),
101
- isColumnMoving = _useState6[0],
102
- setIsColumnMoving = _useState6[1];
89
+ var _useState3 = useState(false),
90
+ _useState4 = _slicedToArray(_useState3, 2),
91
+ isColumnMoving = _useState4[0],
92
+ setIsColumnMoving = _useState4[1];
103
93
  useEffect(function () {
104
94
  setPropsFromColumnActions({
105
95
  className: isPopoverOpen ? 'euiDataGridHeaderCell--isActionsPopoverOpen' : '',
@@ -145,17 +135,11 @@ export var ColumnActions = /*#__PURE__*/memo(function (_ref) {
145
135
  iconType: "boxesVertical",
146
136
  iconSize: "s",
147
137
  color: "text",
148
- css: styles.euiDataGridHeaderCell__actions,
149
138
  className: "euiDataGridHeaderCell__button",
150
139
  onClick: togglePopover,
151
140
  buttonRef: actionsButtonRef,
152
- onFocus: onFocus,
153
- onBlur: onBlur,
154
- tabIndex: 0 // Override EuiButtonIcon's conditional tabindex based on aria-hidden
155
- ,
156
- "aria-hidden": hasFocusTrap && !isActionsButtonFocused ? 'true' // prevent the actions button from being read on cell focus
157
- : undefined,
158
141
  "aria-label": hasFocusTrap ? actionsButtonAriaLabel : actionsEnterKeyInstructions,
142
+ css: [styles.euiDataGridHeaderCell__actions.action, styles.euiDataGridHeaderCell__actions.end, ";label:ColumnActions;"],
159
143
  "data-test-subj": "dataGridHeaderCellActionButton-".concat(id)
160
144
  }),
161
145
  isOpen: isPopoverOpen,
@@ -45,6 +45,7 @@ export var EuiDataGridHeaderCell = /*#__PURE__*/memo(function (_ref) {
45
45
  var width = columnWidths[id] || defaultColumnWidth;
46
46
  var columnType = schema[id] ? schema[id].columnType : null;
47
47
  var hasColumnActions = useHasColumnActions(actions);
48
+ var cellContentId = "dataGridHeaderCellContent-".concat(id);
48
49
  var classes = classnames(_defineProperty(_defineProperty({}, "euiDataGridHeaderCell--".concat(columnType), columnType), 'euiDataGridHeaderCell--hasColumnActions', hasColumnActions), displayHeaderCellProps === null || displayHeaderCellProps === void 0 ? void 0 : displayHeaderCellProps.className);
49
50
  var styles = useEuiMemoizedStyles(euiDataGridHeaderCellStyles);
50
51
  var contentStyles = [styles.euiDataGridHeaderCell__content, (columnType === 'numeric' || columnType === 'currency') && styles.right];
@@ -88,8 +89,7 @@ export var EuiDataGridHeaderCell = /*#__PURE__*/memo(function (_ref) {
88
89
  isLastColumn: isLastColumn,
89
90
  width: width,
90
91
  "aria-sort": ariaSort,
91
- "aria-label": displayAsText && "".concat(displayAsText, ", ") // ensure cell text content is read first, if available
92
- ,
92
+ "aria-labelledby": cellContentId,
93
93
  "aria-describedby": classnames(sortingAriaId, dragProps === null || dragProps === void 0 ? void 0 : dragProps['aria-describedby']),
94
94
  "data-column-moving": propsFromColumnActions['data-column-moving'] || (dragProps === null || dragProps === void 0 ? void 0 : dragProps['data-column-moving']) || undefined
95
95
  }), function (hasFocusTrap) {
@@ -98,11 +98,13 @@ export var EuiDataGridHeaderCell = /*#__PURE__*/memo(function (_ref) {
98
98
  }, ___EmotionJSX(EuiIcon, {
99
99
  type: "grabOmnidirectional",
100
100
  size: "s",
101
- css: styles.euiDataGridHeaderCell__actions
101
+ css: [styles.euiDataGridHeaderCell__actions.action, styles.euiDataGridHeaderCell__actions.start, ";label:EuiDataGridHeaderCell;"]
102
102
  })), ___EmotionJSX("div", {
103
103
  css: contentStyles,
104
104
  className: "euiDataGridHeaderCell__content",
105
- title: title
105
+ title: title,
106
+ id: cellContentId,
107
+ "aria-label": displayAsText ? displayAsText : typeof children === 'string' ? children : undefined
106
108
  }, children), sortingArrow, sortingScreenReaderText, hasColumnActions && ___EmotionJSX(ColumnActions, {
107
109
  index: index,
108
110
  id: id,
@@ -9,7 +9,6 @@
9
9
  import { css } from '@emotion/react';
10
10
  import { euiCanAnimate, euiTextTruncate, logicalCSS, logicalTextAlignCSS } from '../../../../global_styling';
11
11
  import { euiDataGridCellOutlineSelectors } from '../cell/data_grid_cell.styles';
12
-
13
12
  /**
14
13
  * Styles only applied to data header cell content, not control header cells
15
14
  */
@@ -17,11 +16,18 @@ export var euiDataGridHeaderCellStyles = function euiDataGridHeaderCellStyles(eu
17
16
  var euiTheme = euiThemeContext.euiTheme;
18
17
  var _euiDataGridCellOutli = euiDataGridCellOutlineSelectors('.euiDataGridHeaderCell'),
19
18
  header = _euiDataGridCellOutli.header;
19
+ var hideAnimation = function hideAnimation(margin, translateX) {
20
+ return "\n ".concat(header.hideActions, " & {\n ").concat(logicalCSS('margin-left', margin), "\n transform: translateX(").concat(translateX, ") scale(0.01);\n opacity: 0;\n }\n ");
21
+ };
20
22
  return {
21
23
  euiDataGridHeaderCell__content: /*#__PURE__*/css("flex-grow:1;", euiTextTruncate(), ";;label:euiDataGridHeaderCell__content;"),
22
24
  // Numeric and currency schemas are aligned to the right
23
25
  right: /*#__PURE__*/css(logicalTextAlignCSS('right'), ";;label:right;"),
24
26
  euiDataGridHeaderCell__popover: /*#__PURE__*/css(logicalCSS('margin-left', 'auto'), "line-height:0;;label:euiDataGridHeaderCell__popover;"),
25
- euiDataGridHeaderCell__actions: /*#__PURE__*/css("overflow:hidden;display:flex;", header.hideActions, " &{", logicalCSS('width', 0), " opacity:0;}", euiCanAnimate, "{transition:inline-size ", euiTheme.animation.fast, " ease-in,opacity ", euiTheme.animation.slow, " ease-in;transform:none!important;animation:none!important;};label:euiDataGridHeaderCell__actions;")
27
+ euiDataGridHeaderCell__actions: {
28
+ action: /*#__PURE__*/css("overflow:hidden;display:flex;max-inline-size:24px;", euiCanAnimate, "{transition:transform ", euiTheme.animation.fast, " ease-in,opacity ", euiTheme.animation.slow, " ease-in,margin-left ", euiTheme.animation.fast, " ease-in;animation:none!important;};label:action;"),
29
+ start: /*#__PURE__*/css(hideAnimation("-".concat(euiTheme.size.m), '0%'), ";;label:start;"),
30
+ end: /*#__PURE__*/css(hideAnimation("-".concat(euiTheme.size.l), '50%'), ";;label:end;")
31
+ }
26
32
  };
27
33
  };
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["id", "index", "isLastColumn", "width", "className", "children", "hasColumnActions", "isDragging", "onKeyDown", "aria-label"];
4
+ var _excluded = ["id", "index", "isLastColumn", "width", "className", "children", "hasColumnActions", "isDragging", "onKeyDown", "aria-label", "aria-labelledby"];
5
5
  /*
6
6
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
7
7
  * or more contributor license agreements. Licensed under the Elastic License
@@ -34,6 +34,7 @@ export var EuiDataGridHeaderCellWrapper = function EuiDataGridHeaderCellWrapper(
34
34
  isDragging = _ref.isDragging,
35
35
  _onKeyDown = _ref.onKeyDown,
36
36
  ariaLabel = _ref['aria-label'],
37
+ ariaLabelledby = _ref['aria-labelledby'],
37
38
  rest = _objectWithoutProperties(_ref, _excluded);
38
39
  var classes = classnames('euiDataGridHeaderCell', className);
39
40
  var styles = useEuiMemoizedStyles(euiDataGridHeaderCellWrapperStyles);
@@ -99,7 +100,8 @@ export var EuiDataGridHeaderCellWrapper = function EuiDataGridHeaderCellWrapper(
99
100
  style: width != null ? {
100
101
  width: "".concat(width, "px")
101
102
  } : {},
102
- "aria-label": renderFocusTrap ? ariaLabel : undefined
103
+ "aria-label": renderFocusTrap ? ariaLabel : undefined,
104
+ "aria-labelledby": renderFocusTrap ? ariaLabelledby : undefined
103
105
  }, rest), ___EmotionJSX(HandleInteractiveChildren, {
104
106
  cellEl: isDragging ? null : headerEl,
105
107
  renderFocusTrap: isDragging ? false : renderFocusTrap,
@@ -1,5 +1,5 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
5
5
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
@@ -37,31 +37,48 @@ export var useDataGridColumnSelector = function useDataGridColumnSelector(availa
37
37
  var id = _ref.id;
38
38
  return id;
39
39
  });
40
- var availableSet = new Set(availableColumnIds);
41
- // Filter visibleColumns to only include existing columns
40
+ // remove duplicate columns to ensure unique columns
41
+ var availableColumnIdsSet = new Set(availableColumnIds);
42
+ if (process.env.NODE_ENV === 'development') {
43
+ if (availableColumnIds.length > availableColumnIdsSet.size) {
44
+ var duplicateIds = [];
45
+ var _iterator = _createForOfIteratorHelper(availableColumnIds),
46
+ _step;
47
+ try {
48
+ var _loop = function _loop() {
49
+ var id = _step.value;
50
+ if (!duplicateIds.includes(id) && availableColumnIds.filter(function (_id) {
51
+ return _id === id;
52
+ }).length > 1) {
53
+ duplicateIds.push(id);
54
+ }
55
+ };
56
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
57
+ _loop();
58
+ }
59
+ } catch (err) {
60
+ _iterator.e(err);
61
+ } finally {
62
+ _iterator.f();
63
+ }
64
+ console.warn("\u26A0\uFE0F EuiDataGrid: Duplicate column IDs detected and removed: ".concat(duplicateIds.join(', '), "."), '\n Column IDs must be unique. Only the first occurrence of each duplicate will be used.');
65
+ }
66
+ }
42
67
  var validVisibleColumns = visibleColumns.filter(function (id) {
43
- return availableSet.has(id);
68
+ return availableColumnIdsSet.has(id);
44
69
  });
45
70
  var visibleSet = new Set(validVisibleColumns);
46
71
  var result = [];
47
72
  var visibleIndex = 0;
48
- var _iterator = _createForOfIteratorHelper(availableColumnIds),
49
- _step;
50
- try {
51
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
52
- var columnId = _step.value;
53
- if (visibleSet.has(columnId)) {
54
- // Replace with next visible column in order
73
+ for (var _i = 0, _arr = _toConsumableArray(availableColumnIdsSet); _i < _arr.length; _i++) {
74
+ var columnId = _arr[_i];
75
+ if (visibleSet.has(columnId)) {
76
+ if (visibleIndex < validVisibleColumns.length) {
55
77
  result.push(validVisibleColumns[visibleIndex++]);
56
- } else {
57
- // Keep hidden column in original position
58
- result.push(columnId);
59
78
  }
79
+ } else {
80
+ result.push(columnId);
60
81
  }
61
- } catch (err) {
62
- _iterator.e(err);
63
- } finally {
64
- _iterator.f();
65
82
  }
66
83
  return result;
67
84
  // doesn't depend on visibleColumns on purpose to keep it an initial state
@@ -126,7 +143,7 @@ export var useDataGridColumnSelector = function useDataGridColumnSelector(availa
126
143
  anchorPosition: "downLeft",
127
144
  panelPaddingSize: "none",
128
145
  button: ___EmotionJSX(EuiDataGridToolbarControl, {
129
- badgeContent: numberOfHiddenFields > 0 ? "".concat(orderedVisibleColumns.length, "/").concat(availableColumns.length) : availableColumns.length,
146
+ badgeContent: numberOfHiddenFields > 0 ? "".concat(orderedVisibleColumns.length, "/").concat(sortedColumns.length) : sortedColumns.length,
130
147
  iconType: "tableDensityNormal",
131
148
  "data-test-subj": "dataGridColumnSelectorButton",
132
149
  onClick: function onClick() {
@@ -156,7 +156,11 @@ export var EuiDataGrid = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (pr
156
156
  */
157
157
  var displayValues = useMemo(function () {
158
158
  return columns.reduce(function (acc, column) {
159
- return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, column.id, column.displayAsText || column.id));
159
+ // prevent duplicate values
160
+ if (!acc[column.id]) {
161
+ return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, column.id, column.displayAsText || column.id));
162
+ }
163
+ return acc;
160
164
  }, {});
161
165
  }, [columns]);
162
166
  var _useDataGridDisplaySe = useDataGridDisplaySelector(checkOrDefaultToolBarDisplayOptions(toolbarVisibility, 'showDisplaySelector'), gridStyleWithDefaults, _rowHeightsOptions),
@@ -87,13 +87,14 @@ export var EuiDataGridInMemoryRenderer = function EuiDataGridInMemoryRenderer(_r
87
87
  var cells = [];
88
88
  var _loop = function _loop(i) {
89
89
  cells.push(columns.map(function (column, j) {
90
+ var key = "".concat(i, "-").concat(j, "-").concat(column.id);
90
91
  var skipThisColumn = inMemory.skipColumns && inMemory.skipColumns.indexOf(column.id) !== -1;
91
92
  if (skipThisColumn) {
92
93
  return null;
93
94
  }
94
95
  var isExpandable = column.isExpandable !== undefined ? column.isExpandable : true;
95
96
  return ___EmotionJSX("div", {
96
- key: "".concat(i, "-").concat(column.id),
97
+ key: key,
97
98
  "data-dg-row": i,
98
99
  "data-dg-column": column.id
99
100
  }, ___EmotionJSX(CellElement, {
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  /*
3
4
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
@@ -10,13 +11,14 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
10
11
  import React, { useState, useEffect, useCallback } from 'react';
11
12
  import moment from 'moment';
12
13
  import dateMath from '@elastic/datemath';
13
- import { useUpdateEffect, useEuiMemoizedStyles } from '../../../../services';
14
+ import { useUpdateEffect, useEuiMemoizedStyles, useGeneratedHtmlId } from '../../../../services';
14
15
  import { useEuiI18n } from '../../../i18n';
15
16
  import { EuiFormRow, EuiFieldText, EuiFormLabel } from '../../../form';
16
17
  import { EuiFlexGroup } from '../../../flex';
17
18
  import { EuiButtonIcon } from '../../../button';
18
19
  import { EuiCode } from '../../../code';
19
20
  import { EuiDatePicker } from '../../date_picker';
21
+ import { EuiTimeZoneDisplay } from './timezone_display';
20
22
  import { euiAbsoluteTabDateFormStyles } from './absolute_tab.styles';
21
23
 
22
24
  // Allow users to paste in and have the datepicker parse multiple common date formats,
@@ -34,7 +36,9 @@ export var EuiAbsoluteTab = function EuiAbsoluteTab(_ref) {
34
36
  utcOffset = _ref.utcOffset,
35
37
  minDate = _ref.minDate,
36
38
  maxDate = _ref.maxDate,
37
- labelPrefix = _ref.labelPrefix;
39
+ labelPrefix = _ref.labelPrefix,
40
+ _ref$timeZoneDisplayP = _ref.timeZoneDisplayProps,
41
+ timeZoneDisplayProps = _ref$timeZoneDisplayP === void 0 ? {} : _ref$timeZoneDisplayP;
38
42
  var styles = useEuiMemoizedStyles(euiAbsoluteTabDateFormStyles);
39
43
  var _useState = useState(function () {
40
44
  var parsedValue = dateMath.parse(value, {
@@ -53,6 +57,7 @@ export var EuiAbsoluteTab = function EuiAbsoluteTab(_ref) {
53
57
  setHasUnparsedText(false);
54
58
  setIsTextInvalid(false);
55
59
  }, [dateFormat]);
60
+ var timeZomeDescriptionId = useGeneratedHtmlId();
56
61
  var submitButtonLabel = useEuiI18n('euiAbsoluteTab.dateFormatButtonLabel', 'Parse date');
57
62
  var dateFormatError = useEuiI18n('euiAbsoluteTab.dateFormatError', 'Allowed formats: {dateFormat}, ISO 8601, RFC 2822, or Unix timestamp.', {
58
63
  dateFormat: ___EmotionJSX(EuiCode, null, dateFormat)
@@ -143,7 +148,8 @@ export var EuiAbsoluteTab = function EuiAbsoluteTab(_ref) {
143
148
  css: styles.euiAbsoluteTabDateForm__row,
144
149
  isInvalid: isTextInvalid,
145
150
  error: isTextInvalid ? dateFormatError : undefined,
146
- helpText: hasUnparsedText && !isTextInvalid ? dateFormatError : undefined
151
+ helpText: hasUnparsedText && !isTextInvalid ? dateFormatError : undefined,
152
+ describedByIds: [timeZomeDescriptionId]
147
153
  }, ___EmotionJSX(EuiFieldText, {
148
154
  compressed: true,
149
155
  isInvalid: isTextInvalid,
@@ -167,5 +173,7 @@ export var EuiAbsoluteTab = function EuiAbsoluteTab(_ref) {
167
173
  "aria-label": submitButtonLabel,
168
174
  title: submitButtonLabel,
169
175
  "data-test-subj": "parseAbsoluteDateFormat"
170
- })));
176
+ })), ___EmotionJSX(EuiTimeZoneDisplay, _extends({
177
+ id: timeZomeDescriptionId
178
+ }, timeZoneDisplayProps)));
171
179
  };
@@ -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 = ["position", "isDisabled", "isInvalid", "needsUpdating", "value", "buttonProps", "canRoundRelativeUnits", "roundUp", "onChange", "locale", "dateFormat", "utcOffset", "minDate", "maxDate", "timeFormat", "isOpen", "onPopoverToggle", "onPopoverClose", "compressed", "timeOptions"];
3
+ var _excluded = ["position", "isDisabled", "isInvalid", "needsUpdating", "value", "buttonProps", "canRoundRelativeUnits", "roundUp", "onChange", "locale", "dateFormat", "utcOffset", "minDate", "maxDate", "timeFormat", "isOpen", "onPopoverToggle", "onPopoverClose", "compressed", "timeOptions", "timeZoneDisplayProps"];
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
@@ -41,6 +41,8 @@ export var EuiDatePopoverButton = function EuiDatePopoverButton(props) {
41
41
  onPopoverClose = props.onPopoverClose,
42
42
  compressed = props.compressed,
43
43
  timeOptions = props.timeOptions,
44
+ _props$timeZoneDispla = props.timeZoneDisplayProps,
45
+ timeZoneDisplayProps = _props$timeZoneDispla === void 0 ? {} : _props$timeZoneDispla,
44
46
  rest = _objectWithoutProperties(props, _excluded);
45
47
  var classes = classNames(['euiDatePopoverButton', "euiDatePopoverButton--".concat(position), {
46
48
  'euiDatePopoverButton--compressed': compressed,
@@ -99,7 +101,8 @@ export var EuiDatePopoverButton = function EuiDatePopoverButton(props) {
99
101
  utcOffset: utcOffset,
100
102
  timeOptions: timeOptions,
101
103
  minDate: minDate,
102
- maxDate: maxDate
104
+ maxDate: maxDate,
105
+ timeZoneDisplayProps: timeZoneDisplayProps
103
106
  }));
104
107
  };
105
108
  EuiDatePopoverButton.displayName = 'EuiDatePopoverButton';
@@ -32,7 +32,9 @@ export var EuiDatePopoverContent = function EuiDatePopoverContent(_ref) {
32
32
  utcOffset = _ref.utcOffset,
33
33
  timeOptions = _ref.timeOptions,
34
34
  minDate = _ref.minDate,
35
- maxDate = _ref.maxDate;
35
+ maxDate = _ref.maxDate,
36
+ _ref$timeZoneDisplayP = _ref.timeZoneDisplayProps,
37
+ timeZoneDisplayProps = _ref$timeZoneDisplayP === void 0 ? {} : _ref$timeZoneDisplayP;
36
38
  var styles = useEuiMemoizedStyles(euiDatePopoverContentStyles);
37
39
  var onTabClick = function onTabClick(selectedTab) {
38
40
  switch (selectedTab.id) {
@@ -63,7 +65,8 @@ export var EuiDatePopoverContent = function EuiDatePopoverContent(_ref) {
63
65
  labelPrefix: labelPrefix,
64
66
  utcOffset: utcOffset,
65
67
  minDate: minDate,
66
- maxDate: maxDate
68
+ maxDate: maxDate,
69
+ timeZoneDisplayProps: timeZoneDisplayProps
67
70
  }),
68
71
  'data-test-subj': 'superDatePickerAbsoluteTab',
69
72
  'aria-label': "".concat(labelPrefix, ": ").concat(absoluteLabel)
@@ -77,7 +80,8 @@ export var EuiDatePopoverContent = function EuiDatePopoverContent(_ref) {
77
80
  onChange: onChange,
78
81
  roundUp: roundUp,
79
82
  labelPrefix: labelPrefix,
80
- timeOptions: timeOptions
83
+ timeOptions: timeOptions,
84
+ timeZoneDisplayProps: timeZoneDisplayProps
81
85
  }),
82
86
  'data-test-subj': 'superDatePickerRelativeTab',
83
87
  'aria-label': "".concat(labelPrefix, ": ").concat(relativeLabel)
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  /*
3
4
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
@@ -19,6 +20,7 @@ import { EuiPopoverFooter } from '../../../popover';
19
20
  import { EuiSpacer } from '../../../spacer';
20
21
  import { INVALID_DATE } from '../date_modes';
21
22
  import { parseRelativeParts, toRelativeStringFromParts } from '../relative_utils';
23
+ import { EuiTimeZoneDisplay } from './timezone_display';
22
24
  import { jsx as ___EmotionJSX } from "@emotion/react";
23
25
  export var EuiRelativeTab = function EuiRelativeTab(_ref) {
24
26
  var _ref$timeOptions = _ref.timeOptions,
@@ -29,7 +31,9 @@ export var EuiRelativeTab = function EuiRelativeTab(_ref) {
29
31
  value = _ref.value,
30
32
  onChange = _ref.onChange,
31
33
  roundUp = _ref.roundUp,
32
- labelPrefix = _ref.labelPrefix;
34
+ labelPrefix = _ref.labelPrefix,
35
+ _ref$timeZoneDisplayP = _ref.timeZoneDisplayProps,
36
+ timeZoneDisplayProps = _ref$timeZoneDisplayP === void 0 ? {} : _ref$timeZoneDisplayP;
33
37
  var initialRelativeParts = useRef(parseRelativeParts(value));
34
38
  var roundUnit = initialRelativeParts.current.roundUnit;
35
39
  var _useState = useState(initialRelativeParts.current.unit),
@@ -77,6 +81,7 @@ export var EuiRelativeTab = function EuiRelativeTab(_ref) {
77
81
  return parsedValue.locale(locale || 'en').format(dateFormat);
78
82
  }, [isInvalid, value, roundUp, locale, dateFormat]);
79
83
  var relativeDateInputNumberDescriptionId = useGeneratedHtmlId();
84
+ var timeZomeDescriptionId = useGeneratedHtmlId();
80
85
  var numberAriaLabel = useEuiI18n('euiRelativeTab.numberInputLabel', 'Time span amount');
81
86
  var numberInputError = useEuiI18n('euiRelativeTab.numberInputError', 'Must be >= 0');
82
87
  var dateInputError = useEuiI18n('euiRelativeTab.dateInputError', 'Must be a valid range');
@@ -110,6 +115,7 @@ export var EuiRelativeTab = function EuiRelativeTab(_ref) {
110
115
  compressed: true,
111
116
  value: formattedValue,
112
117
  readOnly: true,
118
+ "aria-describedby": timeZomeDescriptionId,
113
119
  prepend: ___EmotionJSX(EuiFormLabel, null, labelPrefix)
114
120
  }), ___EmotionJSX(EuiScreenReaderOnly, null, ___EmotionJSX("p", {
115
121
  id: relativeDateInputNumberDescriptionId
@@ -119,7 +125,9 @@ export var EuiRelativeTab = function EuiRelativeTab(_ref) {
119
125
  values: {
120
126
  unit: unit
121
127
  }
122
- })))), ___EmotionJSX(EuiPopoverFooter, {
128
+ })))), ___EmotionJSX(EuiTimeZoneDisplay, _extends({
129
+ id: timeZomeDescriptionId
130
+ }, timeZoneDisplayProps)), ___EmotionJSX(EuiPopoverFooter, {
123
131
  paddingSize: "s"
124
132
  }, ___EmotionJSX(EuiSwitch, {
125
133
  "data-test-subj": "superDatePickerRelativeDateRoundSwitch",
@@ -0,0 +1,97 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["timeZone", "customRender", "date"];
4
+ /*
5
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
6
+ * or more contributor license agreements. Licensed under the Elastic License
7
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
8
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
9
+ * Side Public License, v 1.
10
+ */
11
+
12
+ import React from 'react';
13
+ import { euiTimeZoneDisplayStyles } from './timezone_display.styles';
14
+ import { useEuiMemoizedStyles } from '../../../../services';
15
+ import { EuiFlexGroup } from '../../../flex';
16
+ import { EuiIcon } from '../../../icon';
17
+ import { EuiText } from '../../../text';
18
+
19
+ /**
20
+ * Available elements to render passed to the
21
+ * `customRender` render function.
22
+ */
23
+ import { jsx as ___EmotionJSX } from "@emotion/react";
24
+ /**
25
+ * Display time zone information.
26
+ */
27
+ export var EuiTimeZoneDisplay = function EuiTimeZoneDisplay(_ref) {
28
+ var timeZone = _ref.timeZone,
29
+ customRender = _ref.customRender,
30
+ date = _ref.date,
31
+ rest = _objectWithoutProperties(_ref, _excluded);
32
+ var color = 'subdued';
33
+ var styles = useEuiMemoizedStyles(euiTimeZoneDisplayStyles);
34
+ var referenceDate = date ? date.toDate() : undefined;
35
+ var _useEuiUTCOffsetDispl = useEuiUTCOffsetDisplay(timeZone !== null && timeZone !== void 0 ? timeZone : 'Browser', referenceDate),
36
+ utc = _useEuiUTCOffsetDispl.utc,
37
+ name = _useEuiUTCOffsetDispl.name,
38
+ isInvalid = _useEuiUTCOffsetDispl.isInvalid;
39
+ if (!timeZone || isInvalid) return null;
40
+ var label = !name ? utc : "".concat(utc, " (").concat(name, ")");
41
+ var nameDisplay = ___EmotionJSX(React.Fragment, null, ___EmotionJSX(EuiIcon, {
42
+ type: "globe",
43
+ color: color
44
+ }), ___EmotionJSX(EuiText, {
45
+ component: "span",
46
+ color: color,
47
+ size: "s"
48
+ }, label));
49
+ return ___EmotionJSX(EuiFlexGroup, _extends({
50
+ css: styles.euiTimeZoneDisplay,
51
+ alignItems: "center",
52
+ gutterSize: "xs",
53
+ "data-test-subj": "euiTimeZoneDisplay",
54
+ "aria-label": label
55
+ }, rest), typeof customRender === 'function' ? customRender({
56
+ nameDisplay: nameDisplay
57
+ }) : nameDisplay);
58
+ };
59
+
60
+ /**
61
+ * Get the UTC offset display in hours e.g. "UTC+2" from time zone name.
62
+ *
63
+ * @param timeZoneName IANA time zone name
64
+ * @param [date] Reference date to get offset with Intl.DateTimeFormat
65
+ */
66
+ export function useEuiUTCOffsetDisplay(timeZoneName, date) {
67
+ try {
68
+ var _formattedParts$find;
69
+ if (timeZoneName === 'UTC') {
70
+ return {
71
+ utc: 'UTC',
72
+ name: '',
73
+ isInvalid: false
74
+ };
75
+ }
76
+ var ianaName = timeZoneName === 'Browser' ? new Intl.DateTimeFormat().resolvedOptions().timeZone : timeZoneName;
77
+ var formatter = new Intl.DateTimeFormat(undefined, {
78
+ timeZone: ianaName,
79
+ timeZoneName: 'shortOffset'
80
+ });
81
+ var formattedParts = formatter.formatToParts(date !== null && date !== void 0 ? date : new Date());
82
+ var timeZoneNamePart = ((_formattedParts$find = formattedParts.find(function (part) {
83
+ return part.type === 'timeZoneName';
84
+ })) === null || _formattedParts$find === void 0 ? void 0 : _formattedParts$find.value) || '';
85
+ return {
86
+ utc: timeZoneNamePart.replace('GMT', 'UTC'),
87
+ name: ianaName,
88
+ isInvalid: false
89
+ };
90
+ } catch (err) {
91
+ return {
92
+ utc: '',
93
+ name: timeZoneName,
94
+ isInvalid: true
95
+ };
96
+ }
97
+ }
@@ -0,0 +1,19 @@
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 { css } from '@emotion/react';
10
+ import { logicalCSS } from '../../../../global_styling';
11
+ export var euiTimeZoneDisplayStyles = function euiTimeZoneDisplayStyles(euiThemeContext) {
12
+ var euiTheme = euiThemeContext.euiTheme;
13
+
14
+ // This padding should probably not be part of this component to make it really reusable
15
+
16
+ return {
17
+ euiTimeZoneDisplay: /*#__PURE__*/css(logicalCSS('padding-horizontal', euiTheme.size.s), " ", logicalCSS('padding-bottom', euiTheme.size.s), ";;label:euiTimeZoneDisplay;")
18
+ };
19
+ };