@elastic/eui 109.0.0 → 109.1.0

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 (356) hide show
  1. package/es/components/accessibility/skip_link/skip_link.js +10 -1
  2. package/es/components/bottom_bar/bottom_bar.js +12 -2
  3. package/es/components/button/button.js +20 -25
  4. package/es/components/button/button_display/_button_display.js +32 -30
  5. package/es/components/button/button_display/_button_display.styles.js +4 -4
  6. package/es/components/button/button_empty/button_empty.js +32 -14
  7. package/es/components/button/button_group/button_group.js +49 -31
  8. package/es/components/button/button_group/button_group_button.js +14 -2
  9. package/es/components/button/button_group/button_group_button.styles.js +12 -8
  10. package/es/components/button/button_icon/button_icon.js +30 -6
  11. package/es/components/card/card.js +20 -25
  12. package/es/components/card/card_select/card_select.js +20 -25
  13. package/es/components/code/code_block_virtualized.js +9 -7
  14. package/es/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  15. package/es/components/datagrid/body/cell/data_grid_cell.js +35 -12
  16. package/es/components/datagrid/body/data_grid_body.js +23 -6
  17. package/es/components/datagrid/body/data_grid_body_custom.js +23 -6
  18. package/es/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  19. package/es/components/datagrid/body/header/data_grid_header_cell.js +23 -6
  20. package/es/components/datagrid/controls/column_selector.js +36 -19
  21. package/es/components/datagrid/controls/column_sorting.js +23 -6
  22. package/es/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  23. package/es/components/datagrid/data_grid.js +5 -1
  24. package/es/components/datagrid/utils/in_memory.js +25 -7
  25. package/es/components/date_picker/auto_refresh/auto_refresh.js +11 -2
  26. package/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +31 -5
  27. package/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  28. package/es/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  29. package/es/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  30. package/es/components/date_picker/super_date_picker/date_popover/timezone_display.js +98 -0
  31. package/es/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +19 -0
  32. package/es/components/date_picker/super_date_picker/pretty_duration.js +1 -8
  33. package/es/components/date_picker/super_date_picker/relative_utils.js +8 -0
  34. package/es/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  35. package/es/components/date_picker/super_date_picker/time_window_buttons.js +185 -0
  36. package/es/components/facet/facet_button.js +9 -19
  37. package/es/components/filter_group/filter_button.js +14 -1
  38. package/es/components/flyout/flyout.js +27 -10
  39. package/es/components/form/form_control_button/form_control_button.js +13 -7
  40. package/es/components/header/header_links/header_link.js +13 -7
  41. package/es/components/header/header_section/header_section_item_button.js +13 -7
  42. package/es/components/icon/assets/boxes_vertical.js +1 -1
  43. package/es/components/icon/assets/checkInCircleFilled.js +1 -2
  44. package/es/components/icon/assets/errorFilled.js +1 -2
  45. package/es/components/icon/assets/warningFilled.js +1 -2
  46. package/es/components/icon/icon_map.js +3 -6
  47. package/es/components/list_group/list_group.js +13 -1
  48. package/es/components/list_group/list_group_item.js +13 -1
  49. package/es/components/list_group/list_group_item_extra_action.js +13 -1
  50. package/es/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  51. package/es/components/overlay_mask/overlay_mask.styles.js +1 -1
  52. package/es/components/pagination/pagination_button.js +13 -7
  53. package/es/components/popover/popover.js +22 -16
  54. package/es/components/provider/component_defaults/component_defaults.js +22 -2
  55. package/es/components/table/table_row.styles.js +1 -1
  56. package/es/components/tool_tip/tool_tip.js +24 -24
  57. package/es/global_styling/index.js +2 -1
  58. package/es/global_styling/mixins/_button.js +1 -1
  59. package/es/global_styling/utility/selectors.js +9 -0
  60. package/es/services/focus_trap/focus_trap_pub_sub.js +74 -0
  61. package/es/services/focus_trap/index.js +9 -0
  62. package/es/services/hooks/index.js +2 -1
  63. package/es/services/hooks/useEuiDisabledElement.js +195 -0
  64. package/es/services/index.js +1 -0
  65. package/es/services/popover/reposition_on_scroll.js +61 -0
  66. package/es/test/cypress/index.d.ts +12 -0
  67. package/es/test/cypress/index.js +9 -0
  68. package/es/test/cypress/matchers.d.ts +20 -0
  69. package/es/test/cypress/matchers.js +54 -0
  70. package/es/test/cypress/test_reposition_on_scroll.js +66 -0
  71. package/es/test/enzyme/enzyme_matchers.d.ts +36 -0
  72. package/es/test/enzyme/enzyme_matchers.js +43 -0
  73. package/es/test/enzyme/index.d.ts +14 -0
  74. package/es/test/enzyme/index.js +10 -0
  75. package/es/test/rtl/index.d.ts +9 -1
  76. package/es/test/rtl/index.js +2 -1
  77. package/es/test/rtl/matchers.d.ts +36 -0
  78. package/es/test/rtl/matchers.js +82 -0
  79. package/es/utils/element_can_be_disabled.js +16 -0
  80. package/es/utils/index.js +2 -1
  81. package/eui.d.ts +588 -180
  82. package/i18ntokens.json +1357 -1231
  83. package/lib/components/accessibility/skip_link/skip_link.js +10 -1
  84. package/lib/components/bottom_bar/bottom_bar.js +11 -1
  85. package/lib/components/button/button.js +21 -26
  86. package/lib/components/button/button_display/_button_display.js +31 -29
  87. package/lib/components/button/button_display/_button_display.styles.js +4 -4
  88. package/lib/components/button/button_empty/button_empty.js +31 -13
  89. package/lib/components/button/button_group/button_group.js +49 -31
  90. package/lib/components/button/button_group/button_group_button.js +14 -2
  91. package/lib/components/button/button_group/button_group_button.styles.js +10 -6
  92. package/lib/components/button/button_icon/button_icon.js +29 -5
  93. package/lib/components/card/card.js +21 -26
  94. package/lib/components/card/card_select/card_select.js +21 -26
  95. package/lib/components/code/code_block_virtualized.js +9 -7
  96. package/lib/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  97. package/lib/components/datagrid/body/cell/data_grid_cell.js +35 -12
  98. package/lib/components/datagrid/body/data_grid_body.js +23 -6
  99. package/lib/components/datagrid/body/data_grid_body_custom.js +23 -6
  100. package/lib/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  101. package/lib/components/datagrid/body/header/data_grid_header_cell.js +23 -6
  102. package/lib/components/datagrid/controls/column_selector.js +36 -19
  103. package/lib/components/datagrid/controls/column_sorting.js +23 -6
  104. package/lib/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  105. package/lib/components/datagrid/data_grid.js +5 -1
  106. package/lib/components/datagrid/utils/in_memory.js +25 -7
  107. package/lib/components/date_picker/auto_refresh/auto_refresh.js +12 -3
  108. package/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +30 -4
  109. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  110. package/lib/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  111. package/lib/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  112. package/lib/components/date_picker/super_date_picker/date_popover/timezone_display.js +104 -0
  113. package/lib/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  114. package/lib/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  115. package/lib/components/date_picker/super_date_picker/relative_utils.js +9 -0
  116. package/lib/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  117. package/lib/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  118. package/lib/components/facet/facet_button.js +9 -19
  119. package/lib/components/filter_group/filter_button.js +14 -1
  120. package/lib/components/flyout/flyout.js +26 -9
  121. package/lib/components/form/form_control_button/form_control_button.js +13 -7
  122. package/lib/components/header/header_links/header_link.js +13 -7
  123. package/lib/components/header/header_section/header_section_item_button.js +13 -7
  124. package/lib/components/icon/assets/boxes_vertical.js +1 -1
  125. package/lib/components/icon/assets/checkInCircleFilled.js +1 -2
  126. package/lib/components/icon/assets/errorFilled.js +1 -2
  127. package/lib/components/icon/assets/warningFilled.js +1 -2
  128. package/lib/components/icon/icon_map.js +3 -6
  129. package/lib/components/icon/svgs/boxes_vertical.svg +1 -1
  130. package/lib/components/icon/svgs/checkInCircleFilled.svg +1 -1
  131. package/lib/components/icon/svgs/errorFilled.svg +1 -1
  132. package/lib/components/icon/svgs/warningFilled.svg +1 -1
  133. package/lib/components/list_group/list_group.js +13 -1
  134. package/lib/components/list_group/list_group_item.js +13 -1
  135. package/lib/components/list_group/list_group_item_extra_action.js +13 -1
  136. package/lib/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  137. package/lib/components/overlay_mask/overlay_mask.styles.js +1 -1
  138. package/lib/components/pagination/pagination_button.js +13 -7
  139. package/lib/components/popover/popover.js +21 -15
  140. package/lib/components/provider/component_defaults/component_defaults.js +22 -2
  141. package/lib/components/table/table_row.styles.js +1 -1
  142. package/lib/components/tool_tip/tool_tip.js +24 -24
  143. package/lib/global_styling/index.js +16 -1
  144. package/lib/global_styling/mixins/_button.js +1 -1
  145. package/lib/global_styling/utility/selectors.js +15 -0
  146. package/lib/services/focus_trap/focus_trap_pub_sub.js +80 -0
  147. package/lib/services/focus_trap/index.js +12 -0
  148. package/lib/services/hooks/index.js +18 -1
  149. package/lib/services/hooks/useEuiDisabledElement.js +199 -0
  150. package/lib/services/index.js +8 -0
  151. package/lib/services/popover/reposition_on_scroll.js +67 -0
  152. package/lib/test/cypress/index.d.ts +12 -0
  153. package/lib/test/cypress/index.js +18 -0
  154. package/lib/test/cypress/matchers.d.ts +20 -0
  155. package/lib/test/cypress/matchers.js +61 -0
  156. package/lib/test/cypress/test_reposition_on_scroll.js +69 -0
  157. package/lib/test/enzyme/enzyme_matchers.d.ts +36 -0
  158. package/lib/test/enzyme/enzyme_matchers.js +49 -0
  159. package/lib/test/enzyme/index.d.ts +14 -0
  160. package/lib/test/enzyme/index.js +24 -0
  161. package/lib/test/rtl/index.d.ts +9 -1
  162. package/lib/test/rtl/index.js +24 -2
  163. package/lib/test/rtl/matchers.d.ts +36 -0
  164. package/lib/test/rtl/matchers.js +86 -0
  165. package/lib/utils/element_can_be_disabled.js +22 -0
  166. package/lib/utils/index.js +14 -1
  167. package/optimize/es/components/bottom_bar/bottom_bar.js +12 -2
  168. package/optimize/es/components/button/button_display/_button_display.js +24 -12
  169. package/optimize/es/components/button/button_display/_button_display.styles.js +4 -4
  170. package/optimize/es/components/button/button_empty/button_empty.js +18 -6
  171. package/optimize/es/components/button/button_group/button_group.js +10 -5
  172. package/optimize/es/components/button/button_group/button_group_button.js +1 -1
  173. package/optimize/es/components/button/button_group/button_group_button.styles.js +12 -8
  174. package/optimize/es/components/button/button_icon/button_icon.js +17 -5
  175. package/optimize/es/components/code/code_block_virtualized.js +9 -7
  176. package/optimize/es/components/datagrid/controls/column_selector.js +36 -19
  177. package/optimize/es/components/datagrid/data_grid.js +5 -1
  178. package/optimize/es/components/datagrid/utils/in_memory.js +2 -1
  179. package/optimize/es/components/date_picker/super_date_picker/date_popover/absolute_tab.js +12 -4
  180. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_button.js +5 -2
  181. package/optimize/es/components/date_picker/super_date_picker/date_popover/date_popover_content.js +7 -3
  182. package/optimize/es/components/date_picker/super_date_picker/date_popover/relative_tab.js +10 -2
  183. package/optimize/es/components/date_picker/super_date_picker/date_popover/timezone_display.js +97 -0
  184. package/optimize/es/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +19 -0
  185. package/optimize/es/components/date_picker/super_date_picker/pretty_duration.js +1 -8
  186. package/optimize/es/components/date_picker/super_date_picker/relative_utils.js +8 -0
  187. package/optimize/es/components/date_picker/super_date_picker/super_date_picker.js +49 -25
  188. package/optimize/es/components/date_picker/super_date_picker/time_window_buttons.js +185 -0
  189. package/optimize/es/components/flyout/flyout.js +27 -10
  190. package/optimize/es/components/icon/assets/boxes_vertical.js +1 -1
  191. package/optimize/es/components/icon/assets/checkInCircleFilled.js +1 -2
  192. package/optimize/es/components/icon/assets/errorFilled.js +1 -2
  193. package/optimize/es/components/icon/assets/warningFilled.js +1 -2
  194. package/optimize/es/components/icon/icon_map.js +3 -6
  195. package/optimize/es/components/overlay_mask/overlay_mask.styles.js +1 -1
  196. package/optimize/es/components/popover/popover.js +22 -16
  197. package/optimize/es/components/table/table_row.styles.js +1 -1
  198. package/optimize/es/components/tool_tip/tool_tip.js +24 -24
  199. package/optimize/es/global_styling/index.js +2 -1
  200. package/optimize/es/global_styling/mixins/_button.js +1 -1
  201. package/optimize/es/global_styling/utility/selectors.js +9 -0
  202. package/optimize/es/services/focus_trap/focus_trap_pub_sub.js +74 -0
  203. package/optimize/es/services/focus_trap/index.js +9 -0
  204. package/optimize/es/services/hooks/index.js +2 -1
  205. package/optimize/es/services/hooks/useEuiDisabledElement.js +192 -0
  206. package/optimize/es/services/index.js +1 -0
  207. package/optimize/es/services/popover/reposition_on_scroll.js +61 -0
  208. package/optimize/es/test/cypress/index.d.ts +12 -0
  209. package/optimize/es/test/cypress/index.js +9 -0
  210. package/optimize/es/test/cypress/matchers.d.ts +20 -0
  211. package/optimize/es/test/cypress/matchers.js +54 -0
  212. package/optimize/es/test/cypress/test_reposition_on_scroll.js +63 -0
  213. package/optimize/es/test/enzyme/enzyme_matchers.d.ts +36 -0
  214. package/optimize/es/test/enzyme/enzyme_matchers.js +43 -0
  215. package/optimize/es/test/enzyme/index.d.ts +14 -0
  216. package/optimize/es/test/enzyme/index.js +10 -0
  217. package/optimize/es/test/rtl/index.d.ts +9 -1
  218. package/optimize/es/test/rtl/index.js +2 -1
  219. package/optimize/es/test/rtl/matchers.d.ts +36 -0
  220. package/optimize/es/test/rtl/matchers.js +82 -0
  221. package/optimize/es/utils/element_can_be_disabled.js +16 -0
  222. package/optimize/es/utils/index.js +2 -1
  223. package/optimize/lib/components/bottom_bar/bottom_bar.js +11 -1
  224. package/optimize/lib/components/button/button_display/_button_display.js +23 -11
  225. package/optimize/lib/components/button/button_display/_button_display.styles.js +4 -4
  226. package/optimize/lib/components/button/button_empty/button_empty.js +17 -5
  227. package/optimize/lib/components/button/button_group/button_group.js +10 -5
  228. package/optimize/lib/components/button/button_group/button_group_button.js +1 -1
  229. package/optimize/lib/components/button/button_group/button_group_button.styles.js +10 -6
  230. package/optimize/lib/components/button/button_icon/button_icon.js +16 -4
  231. package/optimize/lib/components/code/code_block_virtualized.js +9 -7
  232. package/optimize/lib/components/datagrid/controls/column_selector.js +36 -19
  233. package/optimize/lib/components/datagrid/data_grid.js +5 -1
  234. package/optimize/lib/components/datagrid/utils/in_memory.js +2 -1
  235. package/optimize/lib/components/date_picker/super_date_picker/date_popover/absolute_tab.js +11 -3
  236. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_button.js +5 -2
  237. package/optimize/lib/components/date_picker/super_date_picker/date_popover/date_popover_content.js +7 -3
  238. package/optimize/lib/components/date_picker/super_date_picker/date_popover/relative_tab.js +10 -2
  239. package/optimize/lib/components/date_picker/super_date_picker/date_popover/timezone_display.js +103 -0
  240. package/optimize/lib/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  241. package/optimize/lib/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  242. package/optimize/lib/components/date_picker/super_date_picker/relative_utils.js +9 -0
  243. package/optimize/lib/components/date_picker/super_date_picker/super_date_picker.js +49 -25
  244. package/optimize/lib/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  245. package/optimize/lib/components/flyout/flyout.js +26 -9
  246. package/optimize/lib/components/icon/assets/boxes_vertical.js +1 -1
  247. package/optimize/lib/components/icon/assets/checkInCircleFilled.js +1 -2
  248. package/optimize/lib/components/icon/assets/errorFilled.js +1 -2
  249. package/optimize/lib/components/icon/assets/warningFilled.js +1 -2
  250. package/optimize/lib/components/icon/icon_map.js +3 -6
  251. package/optimize/lib/components/icon/svgs/boxes_vertical.svg +1 -1
  252. package/optimize/lib/components/icon/svgs/checkInCircleFilled.svg +1 -1
  253. package/optimize/lib/components/icon/svgs/errorFilled.svg +1 -1
  254. package/optimize/lib/components/icon/svgs/warningFilled.svg +1 -1
  255. package/optimize/lib/components/overlay_mask/overlay_mask.styles.js +1 -1
  256. package/optimize/lib/components/popover/popover.js +21 -15
  257. package/optimize/lib/components/table/table_row.styles.js +1 -1
  258. package/optimize/lib/components/tool_tip/tool_tip.js +24 -24
  259. package/optimize/lib/global_styling/index.js +16 -1
  260. package/optimize/lib/global_styling/mixins/_button.js +1 -1
  261. package/optimize/lib/global_styling/utility/selectors.js +15 -0
  262. package/optimize/lib/services/focus_trap/focus_trap_pub_sub.js +80 -0
  263. package/optimize/lib/services/focus_trap/index.js +12 -0
  264. package/optimize/lib/services/hooks/index.js +18 -1
  265. package/optimize/lib/services/hooks/useEuiDisabledElement.js +197 -0
  266. package/optimize/lib/services/index.js +8 -0
  267. package/optimize/lib/services/popover/reposition_on_scroll.js +67 -0
  268. package/optimize/lib/test/cypress/index.d.ts +12 -0
  269. package/optimize/lib/test/cypress/index.js +18 -0
  270. package/optimize/lib/test/cypress/matchers.d.ts +20 -0
  271. package/optimize/lib/test/cypress/matchers.js +61 -0
  272. package/optimize/lib/test/cypress/test_reposition_on_scroll.js +70 -0
  273. package/optimize/lib/test/enzyme/enzyme_matchers.d.ts +36 -0
  274. package/optimize/lib/test/enzyme/enzyme_matchers.js +50 -0
  275. package/optimize/lib/test/enzyme/index.d.ts +14 -0
  276. package/optimize/lib/test/enzyme/index.js +24 -0
  277. package/optimize/lib/test/rtl/index.d.ts +9 -1
  278. package/optimize/lib/test/rtl/index.js +24 -2
  279. package/optimize/lib/test/rtl/matchers.d.ts +36 -0
  280. package/optimize/lib/test/rtl/matchers.js +86 -0
  281. package/optimize/lib/utils/element_can_be_disabled.js +22 -0
  282. package/optimize/lib/utils/index.js +14 -1
  283. package/package.json +1 -1
  284. package/test-env/components/accessibility/skip_link/skip_link.js +10 -1
  285. package/test-env/components/bottom_bar/bottom_bar.js +11 -1
  286. package/test-env/components/button/button.js +21 -26
  287. package/test-env/components/button/button_display/_button_display.js +31 -29
  288. package/test-env/components/button/button_display/_button_display.styles.js +4 -4
  289. package/test-env/components/button/button_empty/button_empty.js +31 -13
  290. package/test-env/components/button/button_group/button_group.js +49 -31
  291. package/test-env/components/button/button_group/button_group_button.js +14 -2
  292. package/test-env/components/button/button_group/button_group_button.styles.js +10 -6
  293. package/test-env/components/button/button_icon/button_icon.js +29 -5
  294. package/test-env/components/card/card.js +21 -26
  295. package/test-env/components/card/card_select/card_select.js +21 -26
  296. package/test-env/components/code/code_block_virtualized.js +9 -7
  297. package/test-env/components/collapsible_nav_beta/_kibana_solution/collapsible_nav_kibana_solution.js +13 -1
  298. package/test-env/components/datagrid/body/cell/data_grid_cell.js +35 -12
  299. package/test-env/components/datagrid/body/data_grid_body.js +23 -6
  300. package/test-env/components/datagrid/body/data_grid_body_custom.js +23 -6
  301. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +23 -6
  302. package/test-env/components/datagrid/body/header/data_grid_header_cell.js +23 -6
  303. package/test-env/components/datagrid/controls/column_selector.js +36 -19
  304. package/test-env/components/datagrid/controls/column_sorting.js +23 -6
  305. package/test-env/components/datagrid/controls/data_grid_toolbar_control.js +13 -7
  306. package/test-env/components/datagrid/data_grid.js +5 -1
  307. package/test-env/components/datagrid/utils/in_memory.js +25 -7
  308. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +12 -3
  309. package/test-env/components/date_picker/super_date_picker/date_popover/absolute_tab.js +30 -4
  310. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_button.js +24 -3
  311. package/test-env/components/date_picker/super_date_picker/date_popover/date_popover_content.js +26 -4
  312. package/test-env/components/date_picker/super_date_picker/date_popover/relative_tab.js +29 -3
  313. package/test-env/components/date_picker/super_date_picker/date_popover/timezone_display.js +103 -0
  314. package/test-env/components/date_picker/super_date_picker/date_popover/timezone_display.styles.js +25 -0
  315. package/test-env/components/date_picker/super_date_picker/pretty_duration.js +2 -9
  316. package/test-env/components/date_picker/super_date_picker/relative_utils.js +9 -0
  317. package/test-env/components/date_picker/super_date_picker/super_date_picker.js +118 -26
  318. package/test-env/components/date_picker/super_date_picker/time_window_buttons.js +193 -0
  319. package/test-env/components/facet/facet_button.js +9 -19
  320. package/test-env/components/filter_group/filter_button.js +14 -1
  321. package/test-env/components/form/form_control_button/form_control_button.js +13 -7
  322. package/test-env/components/header/header_links/header_link.js +13 -7
  323. package/test-env/components/header/header_section/header_section_item_button.js +13 -7
  324. package/test-env/components/icon/assets/boxes_vertical.js +1 -1
  325. package/test-env/components/icon/assets/checkInCircleFilled.js +1 -2
  326. package/test-env/components/icon/assets/errorFilled.js +1 -2
  327. package/test-env/components/icon/assets/warningFilled.js +1 -2
  328. package/test-env/components/icon/icon_map.js +3 -6
  329. package/test-env/components/list_group/list_group.js +13 -1
  330. package/test-env/components/list_group/list_group_item.js +13 -1
  331. package/test-env/components/list_group/list_group_item_extra_action.js +13 -1
  332. package/test-env/components/list_group/pinnable_list_group/pinnable_list_group.js +15 -2
  333. package/test-env/components/overlay_mask/overlay_mask.styles.js +1 -1
  334. package/test-env/components/pagination/pagination_button.js +13 -7
  335. package/test-env/components/popover/popover.js +21 -15
  336. package/test-env/components/provider/component_defaults/component_defaults.js +22 -2
  337. package/test-env/components/table/table_row.styles.js +1 -1
  338. package/test-env/components/tool_tip/tool_tip.js +24 -24
  339. package/test-env/global_styling/index.js +16 -1
  340. package/test-env/global_styling/mixins/_button.js +1 -1
  341. package/test-env/global_styling/utility/selectors.js +15 -0
  342. package/test-env/services/focus_trap/focus_trap_pub_sub.js +80 -0
  343. package/test-env/services/focus_trap/index.js +12 -0
  344. package/test-env/services/hooks/index.js +18 -1
  345. package/test-env/services/hooks/useEuiDisabledElement.js +197 -0
  346. package/test-env/services/index.js +8 -0
  347. package/test-env/services/popover/reposition_on_scroll.js +67 -0
  348. package/test-env/test/cypress/index.js +18 -0
  349. package/test-env/test/cypress/matchers.js +61 -0
  350. package/test-env/test/cypress/test_reposition_on_scroll.js +70 -0
  351. package/test-env/test/enzyme/enzyme_matchers.js +50 -0
  352. package/test-env/test/enzyme/index.js +24 -0
  353. package/test-env/test/rtl/index.js +24 -2
  354. package/test-env/test/rtl/matchers.js +86 -0
  355. package/test-env/utils/element_can_be_disabled.js +22 -0
  356. package/test-env/utils/index.js +14 -1
@@ -12,10 +12,9 @@ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringif
12
12
  */
13
13
 
14
14
  import { css } from '@emotion/react';
15
- import { mathWithUnits, logicalCSS, logicalShorthandCSS, euiTextShift, euiOutline, euiCanAnimate, preventForcedColors, highContrastModeStyles } from '../../../global_styling';
16
- import { BUTTON_COLORS } from '../../../global_styling/mixins/_button';
15
+ import { mathWithUnits, logicalCSS, logicalShorthandCSS, euiTextShift, euiOutline, euiCanAnimate, preventForcedColors, highContrastModeStyles, euiDisabledSelector } from '../../../global_styling';
16
+ import { BUTTON_COLORS, euiButtonSizeMap } from '../../../global_styling/mixins/_button';
17
17
  import { euiScreenReaderOnly } from '../../accessibility';
18
- import { euiFormVariables } from '../../form/form.styles';
19
18
  var _ref = process.env.NODE_ENV === "production" ? {
20
19
  name: "m6ysua-tooltipWrapper",
21
20
  styles: "overflow:hidden;&:has(:focus-visible){z-index:1;};label:tooltipWrapper;"
@@ -35,9 +34,8 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
35
34
  export var euiButtonGroupButtonStyles = function euiButtonGroupButtonStyles(euiThemeContext) {
36
35
  var euiTheme = euiThemeContext.euiTheme,
37
36
  highContrastMode = euiThemeContext.highContrastMode;
38
- var _euiFormVariables = euiFormVariables(euiThemeContext),
39
- controlCompressedHeight = _euiFormVariables.controlCompressedHeight;
40
- var compressedButtonHeight = mathWithUnits([controlCompressedHeight, euiTheme.border.width.thin], function (x, y) {
37
+ var buttonSizes = euiButtonSizeMap(euiThemeContext);
38
+ var compressedButtonHeight = mathWithUnits([buttonSizes.s.height, euiTheme.border.width.thin], function (x, y) {
41
39
  return x - y * 6;
42
40
  });
43
41
  var selectedSelectors = '.euiButtonGroupButton-isSelected, .euiButtonGroup__tooltipWrapper-isSelected';
@@ -49,10 +47,16 @@ export var euiButtonGroupButtonStyles = function euiButtonGroupButtonStyles(euiT
49
47
  euiButtonGroupButton: /*#__PURE__*/css(logicalCSS('min-width', 0), " flex-shrink:1;flex-grow:0;z-index:0;&:focus-visible{z-index:2;}", euiCanAnimate, "{transition:background-color ", euiTheme.animation.normal, " ease-in-out,color ", euiTheme.animation.normal, " ease-in-out;}&:is(", selectedSelectors, "){", highContrastModeStyles(euiThemeContext, {
50
48
  forced: "\n --highContrastHoverIndicatorColor: ".concat(euiTheme.colors.textInverse, ";\n border: none;\n\n /* styles the content manually instead of the button itself to preserve the system\n focus style, as otherwise preventForcedColors() would require manual styling */\n > [class*=\"euiButtonDisplayContent\"] {\n ").concat(preventForcedColors(euiThemeContext), "\n color: ").concat(euiTheme.colors.emptyShade, ";\n border: none;\n }\n ")
51
49
  }), ";};label:euiButtonGroupButton;"),
52
- iconOnly: /*#__PURE__*/css("padding-inline:", euiTheme.size.s, ";;label:iconOnly;"),
50
+ iconOnly: {
51
+ // used only as classname, sizes are added separately
52
+ iconOnly: /*#__PURE__*/css(";label:iconOnly;"),
53
+ s: "\n ".concat(logicalCSS('width', buttonSizes.s.height), "\n "),
54
+ m: "\n ".concat(logicalCSS('width', buttonSizes.m.height), "\n "),
55
+ compressed: "\n ".concat(logicalCSS('width', compressedButtonHeight), "\n ")
56
+ },
53
57
  // Sizes
54
58
  uncompressed: {
55
- uncompressed: /*#__PURE__*/css("&:focus-visible{", euiOutline(euiThemeContext, 'inset', euiTheme.components.buttonGroupFocusColor), ";}&:is(", selectedSelectors, "):not(:disabled){z-index:1;border:", euiTheme.border.width.thin, " solid transparent;", highContrastModeStyles(euiThemeContext, {
59
+ uncompressed: /*#__PURE__*/css("&:focus-visible{", euiOutline(euiThemeContext, 'inset', euiTheme.components.buttonGroupFocusColor), ";}&:is(", selectedSelectors, "):not(", euiDisabledSelector, "){z-index:1;border:", euiTheme.border.width.thin, " solid transparent;", highContrastModeStyles(euiThemeContext, {
56
60
  forced: "\n /* use inset focus outline to ensure visibility, same as custom hover.\n NOTE: temp solution - this will be revisited once we handle global focus styles */\n &:focus-visible {\n outline-color: ".concat(euiTheme.colors.textInverse, ";\n /* has to be inset due to overflow: hidden */\n outline-offset: -").concat(mathWithUnits(euiTheme.border.width.thin, function (x) {
57
61
  return x * 4;
58
62
  }), ";\n }\n ")
@@ -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,
@@ -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
+ };
@@ -11,7 +11,7 @@ import dateMath from '@elastic/datemath';
11
11
  import moment from 'moment'; // eslint-disable-line import/named
12
12
  import { useEuiI18n } from '../../i18n';
13
13
  import { getDateMode, DATE_MODES } from './date_modes';
14
- import { parseRelativeParts } from './relative_utils';
14
+ import { parseRelativeParts, isRelativeToNow } from './relative_utils';
15
15
  import { useI18nTimeOptions } from './time_options';
16
16
  import { jsx as ___EmotionJSX } from "@emotion/react";
17
17
  /**
@@ -272,13 +272,6 @@ var hasRangeMatch = function hasRangeMatch(timeFrom, timeTo, ranges) {
272
272
  return timeFrom === start && timeTo === end;
273
273
  });
274
274
  };
275
- var isRelativeToNow = function isRelativeToNow(timeFrom, timeTo) {
276
- var fromDateMode = getDateMode(timeFrom);
277
- var toDateMode = getDateMode(timeTo);
278
- var isLast = fromDateMode === DATE_MODES.RELATIVE && toDateMode === DATE_MODES.NOW;
279
- var isNext = fromDateMode === DATE_MODES.NOW && toDateMode === DATE_MODES.RELATIVE;
280
- return isLast || isNext;
281
- };
282
275
  export var showPrettyDuration = function showPrettyDuration(timeFrom, timeTo, quickRanges) {
283
276
  if (hasRangeMatch(timeFrom, timeTo, quickRanges)) {
284
277
  return true;
@@ -13,6 +13,7 @@ import dateMath from '@elastic/datemath';
13
13
  import moment from 'moment';
14
14
  import { get } from '../../../services/objects';
15
15
  import { isString } from '../../../services/predicate';
16
+ import { getDateMode, DATE_MODES } from './date_modes';
16
17
  var ROUND_DELIMETER = '/';
17
18
  export var relativeUnitsFromLargestToSmallest = ['y', 'M', 'w', 'd', 'h', 'm', 's'];
18
19
  export function parseRelativeParts(value) {
@@ -62,4 +63,11 @@ export var toRelativeStringFromParts = function toRelativeStringFromParts(relati
62
63
  var operator = matches && matches[2] ? matches[2] : '-';
63
64
  var round = isRounded ? "".concat(ROUND_DELIMETER).concat(unit) : '';
64
65
  return "now".concat(operator).concat(count).concat(unit).concat(round);
66
+ };
67
+ export var isRelativeToNow = function isRelativeToNow(timeFrom, timeTo) {
68
+ var fromDateMode = getDateMode(timeFrom);
69
+ var toDateMode = getDateMode(timeTo);
70
+ var isLast = fromDateMode === DATE_MODES.RELATIVE && toDateMode === DATE_MODES.NOW;
71
+ var isNext = fromDateMode === DATE_MODES.NOW && toDateMode === DATE_MODES.RELATIVE;
72
+ return isLast || isNext;
65
73
  };