@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
@@ -18,10 +18,12 @@ var _popover = require("../../../popover");
18
18
  var _spacer = require("../../../spacer");
19
19
  var _date_modes = require("../date_modes");
20
20
  var _relative_utils = require("../relative_utils");
21
+ var _timezone_display = require("./timezone_display");
21
22
  var _react2 = require("@emotion/react");
22
23
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
24
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
25
27
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
26
28
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
29
  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; } }
@@ -43,7 +45,9 @@ var EuiRelativeTab = exports.EuiRelativeTab = function EuiRelativeTab(_ref) {
43
45
  value = _ref.value,
44
46
  onChange = _ref.onChange,
45
47
  roundUp = _ref.roundUp,
46
- labelPrefix = _ref.labelPrefix;
48
+ labelPrefix = _ref.labelPrefix,
49
+ _ref$timeZoneDisplayP = _ref.timeZoneDisplayProps,
50
+ timeZoneDisplayProps = _ref$timeZoneDisplayP === void 0 ? {} : _ref$timeZoneDisplayP;
47
51
  var initialRelativeParts = (0, _react.useRef)((0, _relative_utils.parseRelativeParts)(value));
48
52
  var roundUnit = initialRelativeParts.current.roundUnit;
49
53
  var _useState = (0, _react.useState)(initialRelativeParts.current.unit),
@@ -91,6 +95,7 @@ var EuiRelativeTab = exports.EuiRelativeTab = function EuiRelativeTab(_ref) {
91
95
  return parsedValue.locale(locale || 'en').format(dateFormat);
92
96
  }, [isInvalid, value, roundUp, locale, dateFormat]);
93
97
  var relativeDateInputNumberDescriptionId = (0, _services.useGeneratedHtmlId)();
98
+ var timeZomeDescriptionId = (0, _services.useGeneratedHtmlId)();
94
99
  var numberAriaLabel = (0, _i18n.useEuiI18n)('euiRelativeTab.numberInputLabel', 'Time span amount');
95
100
  var numberInputError = (0, _i18n.useEuiI18n)('euiRelativeTab.numberInputError', 'Must be >= 0');
96
101
  var dateInputError = (0, _i18n.useEuiI18n)('euiRelativeTab.dateInputError', 'Must be a valid range');
@@ -124,6 +129,7 @@ var EuiRelativeTab = exports.EuiRelativeTab = function EuiRelativeTab(_ref) {
124
129
  compressed: true,
125
130
  value: formattedValue,
126
131
  readOnly: true,
132
+ "aria-describedby": timeZomeDescriptionId,
127
133
  prepend: (0, _react2.jsx)(_form.EuiFormLabel, null, labelPrefix)
128
134
  }), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
129
135
  id: relativeDateInputNumberDescriptionId
@@ -133,7 +139,9 @@ var EuiRelativeTab = exports.EuiRelativeTab = function EuiRelativeTab(_ref) {
133
139
  values: {
134
140
  unit: unit
135
141
  }
136
- })))), (0, _react2.jsx)(_popover.EuiPopoverFooter, {
142
+ })))), (0, _react2.jsx)(_timezone_display.EuiTimeZoneDisplay, _extends({
143
+ id: timeZomeDescriptionId
144
+ }, timeZoneDisplayProps)), (0, _react2.jsx)(_popover.EuiPopoverFooter, {
137
145
  paddingSize: "s"
138
146
  }, (0, _react2.jsx)(_form.EuiSwitch, {
139
147
  "data-test-subj": "superDatePickerRelativeDateRoundSwitch",
@@ -163,5 +171,23 @@ EuiRelativeTab.propTypes = {
163
171
  label: _propTypes.default.string,
164
172
  start: _propTypes.default.oneOfType([_propTypes.default.oneOf(["now"]), _propTypes.default.string.isRequired]).isRequired
165
173
  }).isRequired).isRequired
166
- }).isRequired
174
+ }).isRequired,
175
+ timeZoneDisplayProps: _propTypes.default.shape({
176
+ /**
177
+ * A valid time zone name, from the IANA database, e.g. "America/Los_Angeles".
178
+ *
179
+ * @link https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
180
+ */
181
+ timeZone: _propTypes.default.string,
182
+ /**
183
+ * Render prop function to add additional content to the time zone display.
184
+ * Useful for e.g. adding links to documentation or setting pages.
185
+ */
186
+ customRender: _propTypes.default.func,
187
+ /**
188
+ * Reference date to be used while resolving the UTC offset.
189
+ * Only useful for edge cases involving daylight saving time.
190
+ */
191
+ date: _propTypes.default.any
192
+ })
167
193
  };
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EuiTimeZoneDisplay = void 0;
7
+ exports.useEuiUTCOffsetDisplay = useEuiUTCOffsetDisplay;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _timezone_display = require("./timezone_display.styles");
10
+ var _services = require("../../../../services");
11
+ var _flex = require("../../../flex");
12
+ var _icon = require("../../../icon");
13
+ var _text = require("../../../text");
14
+ var _react2 = require("@emotion/react");
15
+ var _excluded = ["timeZone", "customRender", "date"];
16
+ /*
17
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
18
+ * or more contributor license agreements. Licensed under the Elastic License
19
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
20
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
21
+ * Side Public License, v 1.
22
+ */
23
+ /**
24
+ * Available elements to render passed to the
25
+ * `customRender` render function.
26
+ */
27
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
28
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
29
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
30
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
31
+ /**
32
+ * Display time zone information.
33
+ */
34
+ var EuiTimeZoneDisplay = exports.EuiTimeZoneDisplay = function EuiTimeZoneDisplay(_ref) {
35
+ var timeZone = _ref.timeZone,
36
+ customRender = _ref.customRender,
37
+ date = _ref.date,
38
+ rest = _objectWithoutProperties(_ref, _excluded);
39
+ var color = 'subdued';
40
+ var styles = (0, _services.useEuiMemoizedStyles)(_timezone_display.euiTimeZoneDisplayStyles);
41
+ var referenceDate = date ? date.toDate() : undefined;
42
+ var _useEuiUTCOffsetDispl = useEuiUTCOffsetDisplay(timeZone !== null && timeZone !== void 0 ? timeZone : 'Browser', referenceDate),
43
+ utc = _useEuiUTCOffsetDispl.utc,
44
+ name = _useEuiUTCOffsetDispl.name,
45
+ isInvalid = _useEuiUTCOffsetDispl.isInvalid;
46
+ if (!timeZone || isInvalid) return null;
47
+ var label = !name ? utc : "".concat(utc, " (").concat(name, ")");
48
+ var nameDisplay = (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_icon.EuiIcon, {
49
+ type: "globe",
50
+ color: color
51
+ }), (0, _react2.jsx)(_text.EuiText, {
52
+ component: "span",
53
+ color: color,
54
+ size: "s"
55
+ }, label));
56
+ return (0, _react2.jsx)(_flex.EuiFlexGroup, _extends({
57
+ css: styles.euiTimeZoneDisplay,
58
+ alignItems: "center",
59
+ gutterSize: "xs",
60
+ "data-test-subj": "euiTimeZoneDisplay",
61
+ "aria-label": label
62
+ }, rest), typeof customRender === 'function' ? customRender({
63
+ nameDisplay: nameDisplay
64
+ }) : nameDisplay);
65
+ };
66
+
67
+ /**
68
+ * Get the UTC offset display in hours e.g. "UTC+2" from time zone name.
69
+ *
70
+ * @param timeZoneName IANA time zone name
71
+ * @param [date] Reference date to get offset with Intl.DateTimeFormat
72
+ */
73
+ function useEuiUTCOffsetDisplay(timeZoneName, date) {
74
+ try {
75
+ var _formattedParts$find;
76
+ if (timeZoneName === 'UTC') {
77
+ return {
78
+ utc: 'UTC',
79
+ name: '',
80
+ isInvalid: false
81
+ };
82
+ }
83
+ var ianaName = timeZoneName === 'Browser' ? new Intl.DateTimeFormat().resolvedOptions().timeZone : timeZoneName;
84
+ var formatter = new Intl.DateTimeFormat(undefined, {
85
+ timeZone: ianaName,
86
+ timeZoneName: 'shortOffset'
87
+ });
88
+ var formattedParts = formatter.formatToParts(date !== null && date !== void 0 ? date : new Date());
89
+ var timeZoneNamePart = ((_formattedParts$find = formattedParts.find(function (part) {
90
+ return part.type === 'timeZoneName';
91
+ })) === null || _formattedParts$find === void 0 ? void 0 : _formattedParts$find.value) || '';
92
+ return {
93
+ utc: timeZoneNamePart.replace('GMT', 'UTC'),
94
+ name: ianaName,
95
+ isInvalid: false
96
+ };
97
+ } catch (err) {
98
+ return {
99
+ utc: '',
100
+ name: timeZoneName,
101
+ isInvalid: true
102
+ };
103
+ }
104
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.euiTimeZoneDisplayStyles = void 0;
7
+ var _react = require("@emotion/react");
8
+ var _global_styling = require("../../../../global_styling");
9
+ /*
10
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
11
+ * or more contributor license agreements. Licensed under the Elastic License
12
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
13
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
14
+ * Side Public License, v 1.
15
+ */
16
+
17
+ var euiTimeZoneDisplayStyles = exports.euiTimeZoneDisplayStyles = function euiTimeZoneDisplayStyles(euiThemeContext) {
18
+ var euiTheme = euiThemeContext.euiTheme;
19
+
20
+ // This padding should probably not be part of this component to make it really reusable
21
+
22
+ return {
23
+ euiTimeZoneDisplay: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('padding-horizontal', euiTheme.size.s), " ", (0, _global_styling.logicalCSS)('padding-bottom', euiTheme.size.s), ";;label:euiTimeZoneDisplay;")
24
+ };
25
+ };
@@ -224,7 +224,7 @@ var usePrettyDuration = exports.usePrettyDuration = function usePrettyDuration(_
224
224
  */
225
225
  var relativeDuration = 0;
226
226
  var relativeParts = {};
227
- if (isRelativeToNow(timeFrom, timeTo)) {
227
+ if ((0, _relative_utils.isRelativeToNow)(timeFrom, timeTo)) {
228
228
  if ((0, _date_modes.getDateMode)(timeTo) === _date_modes.DATE_MODES.NOW) {
229
229
  relativeParts = (0, _relative_utils.parseRelativeParts)(timeFrom);
230
230
  } else {
@@ -281,16 +281,9 @@ var hasRangeMatch = function hasRangeMatch(timeFrom, timeTo, ranges) {
281
281
  return timeFrom === start && timeTo === end;
282
282
  });
283
283
  };
284
- var isRelativeToNow = function isRelativeToNow(timeFrom, timeTo) {
285
- var fromDateMode = (0, _date_modes.getDateMode)(timeFrom);
286
- var toDateMode = (0, _date_modes.getDateMode)(timeTo);
287
- var isLast = fromDateMode === _date_modes.DATE_MODES.RELATIVE && toDateMode === _date_modes.DATE_MODES.NOW;
288
- var isNext = fromDateMode === _date_modes.DATE_MODES.NOW && toDateMode === _date_modes.DATE_MODES.RELATIVE;
289
- return isLast || isNext;
290
- };
291
284
  var showPrettyDuration = exports.showPrettyDuration = function showPrettyDuration(timeFrom, timeTo, quickRanges) {
292
285
  if (hasRangeMatch(timeFrom, timeTo, quickRanges)) {
293
286
  return true;
294
287
  }
295
- return isRelativeToNow(timeFrom, timeTo);
288
+ return (0, _relative_utils.isRelativeToNow)(timeFrom, timeTo);
296
289
  };
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.isRelativeToNow = void 0;
6
7
  exports.parseRelativeParts = parseRelativeParts;
7
8
  exports.toRelativeStringFromParts = exports.relativeUnitsFromLargestToSmallest = void 0;
8
9
  var _datemath = _interopRequireDefault(require("@elastic/datemath"));
9
10
  var _moment = _interopRequireDefault(require("moment"));
10
11
  var _objects = require("../../../services/objects");
11
12
  var _predicate = require("../../../services/predicate");
13
+ var _date_modes = require("./date_modes");
12
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
15
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
16
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -71,4 +73,11 @@ var toRelativeStringFromParts = exports.toRelativeStringFromParts = function toR
71
73
  var operator = matches && matches[2] ? matches[2] : '-';
72
74
  var round = isRounded ? "".concat(ROUND_DELIMETER).concat(unit) : '';
73
75
  return "now".concat(operator).concat(count).concat(unit).concat(round);
76
+ };
77
+ var isRelativeToNow = exports.isRelativeToNow = function isRelativeToNow(timeFrom, timeTo) {
78
+ var fromDateMode = (0, _date_modes.getDateMode)(timeFrom);
79
+ var toDateMode = (0, _date_modes.getDateMode)(timeTo);
80
+ var isLast = fromDateMode === _date_modes.DATE_MODES.RELATIVE && toDateMode === _date_modes.DATE_MODES.NOW;
81
+ var isNext = fromDateMode === _date_modes.DATE_MODES.NOW && toDateMode === _date_modes.DATE_MODES.RELATIVE;
82
+ return isLast || isNext;
74
83
  };
@@ -16,6 +16,7 @@ var _date_picker_range = require("../date_picker_range");
16
16
  var _form = require("../../form");
17
17
  var _time_options = require("./time_options");
18
18
  var _pretty_duration = require("./pretty_duration");
19
+ var _time_window_buttons = require("./time_window_buttons");
19
20
  var _async_interval = require("./async_interval");
20
21
  var _super_update_button = require("./super_update_button");
21
22
  var _quick_select_popover = require("./quick_select_popover/quick_select_popover");
@@ -283,7 +284,9 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
283
284
  maxDate = _this$props3.maxDate,
284
285
  compressed = _this$props3.compressed,
285
286
  onFocus = _this$props3.onFocus,
286
- styles = _this$props3.memoizedStyles;
287
+ styles = _this$props3.memoizedStyles,
288
+ _this$props3$timeZone = _this$props3.timeZoneDisplayProps,
289
+ timeZoneDisplayProps = _this$props3$timeZone === void 0 ? {} : _this$props3$timeZone;
287
290
  var autoRefreshAppend = !isPaused ? (0, _react2.jsx)(_auto_refresh.EuiAutoRefreshButton, {
288
291
  refreshInterval: refreshInterval,
289
292
  minInterval: refreshMinInterval,
@@ -360,7 +363,8 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
360
363
  timeOptions: timeOptions,
361
364
  buttonProps: {
362
365
  onFocus: onFocus
363
- }
366
+ },
367
+ timeZoneDisplayProps: timeZoneDisplayProps
364
368
  }),
365
369
  endDateControl: isQuickSelectOnly ? undefined : (0, _react2.jsx)(_date_popover_button.EuiDatePopoverButton, {
366
370
  css: styles.euiSuperDatePicker__rangeInput,
@@ -385,7 +389,8 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
385
389
  timeOptions: timeOptions,
386
390
  buttonProps: {
387
391
  onFocus: onFocus
388
- }
392
+ },
393
+ timeZoneDisplayProps: timeZoneDisplayProps
389
394
  })
390
395
  }));
391
396
  });
@@ -405,13 +410,32 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
405
410
  _this.applyTime();
406
411
  }
407
412
  });
408
- _defineProperty(_this, "renderUpdateButton", function () {
413
+ _defineProperty(_this, "renderTimeWindowButtons", function () {
414
+ if (!_this.props.showTimeWindowButtons || _this.props.isAutoRefreshOnly) {
415
+ return null;
416
+ }
409
417
  var _this$props5 = _this.props,
410
- isLoading = _this$props5.isLoading,
411
- isDisabled = _this$props5.isDisabled,
412
- updateButtonProps = _this$props5.updateButtonProps,
413
- showUpdateButton = _this$props5.showUpdateButton,
414
- compressed = _this$props5.compressed;
418
+ start = _this$props5.start,
419
+ end = _this$props5.end,
420
+ showTimeWindowButtons = _this$props5.showTimeWindowButtons,
421
+ compressed = _this$props5.compressed,
422
+ isDisabled = _this$props5.isDisabled;
423
+ var config = typeof showTimeWindowButtons === 'boolean' ? {} : showTimeWindowButtons;
424
+ return (0, _react2.jsx)(_time_window_buttons.EuiTimeWindowButtons, _extends({
425
+ applyTime: _this.applyQuickTime,
426
+ start: start,
427
+ end: end,
428
+ compressed: compressed,
429
+ isDisabled: !!isDisabled || _this.state.isInvalid
430
+ }, config));
431
+ });
432
+ _defineProperty(_this, "renderUpdateButton", function () {
433
+ var _this$props6 = _this.props,
434
+ isLoading = _this$props6.isLoading,
435
+ isDisabled = _this$props6.isDisabled,
436
+ updateButtonProps = _this$props6.updateButtonProps,
437
+ showUpdateButton = _this$props6.showUpdateButton,
438
+ compressed = _this$props6.compressed;
415
439
  if (!showUpdateButton) return null;
416
440
  return (0, _react2.jsx)(_super_update_button.EuiSuperUpdateButton, _extends({
417
441
  needsUpdate: _this.state.hasChanged,
@@ -430,21 +454,21 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
430
454
  return _createClass(EuiSuperDatePickerInternal, [{
431
455
  key: "render",
432
456
  value: function render() {
433
- var _this$props6 = this.props,
434
- isAutoRefreshOnly = _this$props6.isAutoRefreshOnly,
435
- isDisabled = _this$props6.isDisabled,
436
- isPaused = _this$props6.isPaused,
437
- onRefreshChange = _this$props6.onRefreshChange,
438
- refreshInterval = _this$props6.refreshInterval,
439
- refreshMinInterval = _this$props6.refreshMinInterval,
440
- refreshIntervalUnits = _this$props6.refreshIntervalUnits,
441
- showUpdateButton = _this$props6.showUpdateButton,
442
- dataTestSubj = _this$props6['data-test-subj'],
443
- _width = _this$props6.width,
444
- isQuickSelectOnly = _this$props6.isQuickSelectOnly,
445
- compressed = _this$props6.compressed,
446
- className = _this$props6.className,
447
- styles = _this$props6.memoizedStyles;
457
+ var _this$props7 = this.props,
458
+ isAutoRefreshOnly = _this$props7.isAutoRefreshOnly,
459
+ isDisabled = _this$props7.isDisabled,
460
+ isPaused = _this$props7.isPaused,
461
+ onRefreshChange = _this$props7.onRefreshChange,
462
+ refreshInterval = _this$props7.refreshInterval,
463
+ refreshMinInterval = _this$props7.refreshMinInterval,
464
+ refreshIntervalUnits = _this$props7.refreshIntervalUnits,
465
+ showUpdateButton = _this$props7.showUpdateButton,
466
+ dataTestSubj = _this$props7['data-test-subj'],
467
+ _width = _this$props7.width,
468
+ isQuickSelectOnly = _this$props7.isQuickSelectOnly,
469
+ compressed = _this$props7.compressed,
470
+ className = _this$props7.className,
471
+ styles = _this$props7.memoizedStyles;
448
472
  var _this$state2 = this.state,
449
473
  hasChanged = _this$state2.hasChanged,
450
474
  isInvalid = _this$state2.isInvalid;
@@ -469,7 +493,7 @@ var EuiSuperDatePickerInternal = exports.EuiSuperDatePickerInternal = /*#__PURE_
469
493
  compressed: compressed,
470
494
  isDisabled: !!isDisabled,
471
495
  className: className
472
- }) : (0, _react2.jsx)(_react.default.Fragment, null, this.renderDatePickerRange(), this.renderUpdateButton()));
496
+ }) : (0, _react2.jsx)(_react.default.Fragment, null, this.renderDatePickerRange(), this.renderTimeWindowButtons(), this.renderUpdateButton()));
473
497
  }
474
498
  }], [{
475
499
  key: "getDerivedStateFromProps",
@@ -632,6 +656,28 @@ EuiSuperDatePickerInternal.propTypes = {
632
656
  * @default true
633
657
  */
634
658
  showUpdateButton: _propTypes.default.oneOfType([_propTypes.default.bool.isRequired, _propTypes.default.oneOf(["iconOnly"])]),
659
+ /**
660
+ * Set to true to display buttons for time shifting and zooming out,
661
+ * next to the top-level control.
662
+ */
663
+ showTimeWindowButtons: _propTypes.default.oneOfType([_propTypes.default.bool.isRequired, _propTypes.default.shape({
664
+ /**
665
+ * Show button for zooming out
666
+ * @default true
667
+ */
668
+ showZoomOut: _propTypes.default.bool,
669
+ /**
670
+ * Show buttons for shifting the time window forward and backward
671
+ * @default true
672
+ */
673
+ showShiftArrows: _propTypes.default.bool,
674
+ /**
675
+ * How much the time window is increased when zooming.
676
+ * A number between 0 and 1 e.g. 0.25, or a string representing a percentage e.g. 25%
677
+ * @default 0.5
678
+ * */
679
+ zoomFactor: _propTypes.default.oneOfType([_propTypes.default.number.isRequired, _propTypes.default.string.isRequired])
680
+ }).isRequired]),
635
681
  /**
636
682
  * Hides the actual input reducing to just the quick select button.
637
683
  */
@@ -678,6 +724,31 @@ EuiSuperDatePickerInternal.propTypes = {
678
724
  * input by the user, set this flag to `false`.
679
725
  */
680
726
  canRoundRelativeUnits: _propTypes.default.bool,
727
+ /**
728
+ * Props passed to the time zone display in the popovers {@link EuiTimeZoneDisplayProps}
729
+ *
730
+ * Setting `timeZoneDisplayProps.timeZone` with a valid time zone name will make
731
+ * the time zone information be visible below the start and end input fields.
732
+ * This is informational only, it will not affect how date/times are handled.
733
+ */
734
+ timeZoneDisplayProps: _propTypes.default.shape({
735
+ /**
736
+ * A valid time zone name, from the IANA database, e.g. "America/Los_Angeles".
737
+ *
738
+ * @link https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
739
+ */
740
+ timeZone: _propTypes.default.string,
741
+ /**
742
+ * Render prop function to add additional content to the time zone display.
743
+ * Useful for e.g. adding links to documentation or setting pages.
744
+ */
745
+ customRender: _propTypes.default.func,
746
+ /**
747
+ * Reference date to be used while resolving the UTC offset.
748
+ * Only useful for edge cases involving daylight saving time.
749
+ */
750
+ date: _propTypes.default.any
751
+ }),
681
752
  memoizedStyles: _propTypes.default.any.isRequired,
682
753
  timeOptions: _propTypes.default.shape({
683
754
  timeTenseOptions: _propTypes.default.arrayOf(_propTypes.default.any.isRequired).isRequired,
@@ -827,6 +898,15 @@ EuiSuperDatePicker.propTypes = {
827
898
  * @default true
828
899
  */
829
900
  showUpdateButton: _propTypes.default.oneOfType([_propTypes.default.bool.isRequired, _propTypes.default.oneOf(["iconOnly"])]),
901
+ /**
902
+ * Set to true to display buttons for time shifting and zooming out,
903
+ * next to the top-level control.
904
+ */
905
+ showTimeWindowButtons: _propTypes.default.oneOfType([_propTypes.default.bool.isRequired, _propTypes.default.shape({
906
+ showZoomOut: _propTypes.default.bool,
907
+ showShiftArrows: _propTypes.default.bool,
908
+ zoomFactor: _propTypes.default.oneOfType([_propTypes.default.number.isRequired, _propTypes.default.string.isRequired])
909
+ }).isRequired]),
830
910
  /**
831
911
  * Hides the actual input reducing to just the quick select button.
832
912
  */
@@ -852,5 +932,17 @@ EuiSuperDatePicker.propTypes = {
852
932
  * If you do not want this behavior and instead wish to keep the exact units
853
933
  * input by the user, set this flag to `false`.
854
934
  */
855
- canRoundRelativeUnits: _propTypes.default.bool
935
+ canRoundRelativeUnits: _propTypes.default.bool,
936
+ /**
937
+ * Props passed to the time zone display in the popovers {@link EuiTimeZoneDisplayProps}
938
+ *
939
+ * Setting `timeZoneDisplayProps.timeZone` with a valid time zone name will make
940
+ * the time zone information be visible below the start and end input fields.
941
+ * This is informational only, it will not affect how date/times are handled.
942
+ */
943
+ timeZoneDisplayProps: _propTypes.default.shape({
944
+ timeZone: _propTypes.default.string,
945
+ customRender: _propTypes.default.func,
946
+ date: _propTypes.default.any
947
+ })
856
948
  };
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ZOOM_FACTOR_DEFAULT = exports.EuiTimeWindowButtons = void 0;
7
+ exports.useEuiTimeWindow = useEuiTimeWindow;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _datemath = _interopRequireDefault(require("@elastic/datemath"));
10
+ var _moment = _interopRequireDefault(require("moment"));
11
+ var _pretty_interval = require("./pretty_interval");
12
+ var _relative_utils = require("./relative_utils");
13
+ var _button_group_button = require("../../button/button_group/button_group_button");
14
+ var _button_group = require("../../button/button_group/button_group.styles");
15
+ var _services = require("../../../services");
16
+ var _i18n = require("../../i18n");
17
+ var _react2 = require("@emotion/react");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ /*
20
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
21
+ * or more contributor license agreements. Licensed under the Elastic License
22
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
23
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
24
+ * Side Public License, v 1.
25
+ */
26
+
27
+ var ZOOM_FACTOR_DEFAULT = exports.ZOOM_FACTOR_DEFAULT = 0.5;
28
+ /**
29
+ * Button group with time window controls for shifting the time window
30
+ * forwards and backwards, and zooming out.
31
+ */
32
+ var EuiTimeWindowButtons = exports.EuiTimeWindowButtons = function EuiTimeWindowButtons(_ref) {
33
+ var applyTime = _ref.applyTime,
34
+ start = _ref.start,
35
+ end = _ref.end,
36
+ compressed = _ref.compressed,
37
+ isDisabled = _ref.isDisabled,
38
+ _ref$showZoomOut = _ref.showZoomOut,
39
+ showZoomOut = _ref$showZoomOut === void 0 ? true : _ref$showZoomOut,
40
+ _ref$showShiftArrows = _ref.showShiftArrows,
41
+ showShiftArrows = _ref$showShiftArrows === void 0 ? true : _ref$showShiftArrows,
42
+ _ref$zoomFactor = _ref.zoomFactor,
43
+ zoomFactor = _ref$zoomFactor === void 0 ? ZOOM_FACTOR_DEFAULT : _ref$zoomFactor;
44
+ var buttonColor = 'text';
45
+ var buttonSize = compressed ? 's' : 'm';
46
+ var iconSize = compressed ? 's' : 'm';
47
+ var styles = (0, _services.useEuiMemoizedStyles)(_button_group.euiButtonGroupButtonsStyles);
48
+ var _useEuiTimeWindow = useEuiTimeWindow(start, end, applyTime, {
49
+ zoomFactor: zoomFactor
50
+ }),
51
+ displayInterval = _useEuiTimeWindow.displayInterval,
52
+ isInvalid = _useEuiTimeWindow.isInvalid,
53
+ stepForward = _useEuiTimeWindow.stepForward,
54
+ stepBackward = _useEuiTimeWindow.stepBackward,
55
+ expandWindow = _useEuiTimeWindow.expandWindow;
56
+ var invalidShiftDescription = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.invalidShiftLabel', 'Cannot shift invalid time window');
57
+ var invalidZoomOutDescription = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.invalidZoomOutLabel', 'Cannot zoom out invalid time window');
58
+ var previousId = (0, _services.useGeneratedHtmlId)({
59
+ prefix: 'previous'
60
+ });
61
+ var previousLabel = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.previousLabel', 'Previous');
62
+ var previousTooltipContent = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.previousDescription', 'Previous {displayInterval}', {
63
+ displayInterval: displayInterval
64
+ });
65
+ var zoomOutId = (0, _services.useGeneratedHtmlId)({
66
+ prefix: 'zoom_out'
67
+ });
68
+ var zoomOutLabel = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.zoomOutLabel', 'Zoom out');
69
+ var zoomOutTooltipContent = isInvalid ? invalidZoomOutDescription : zoomOutLabel;
70
+ var nextId = (0, _services.useGeneratedHtmlId)({
71
+ prefix: 'next'
72
+ });
73
+ var nextLabel = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.nextLabel', 'Next');
74
+ var nextTooltipContent = (0, _i18n.useEuiI18n)('euiTimeWindowButtons.nextDescription', 'Next {displayInterval}', {
75
+ displayInterval: displayInterval
76
+ });
77
+ if (!showZoomOut && !showShiftArrows) return null;
78
+ return (0, _react2.jsx)("div", {
79
+ className: "euiSuperDatePicker__timeWindowButtons",
80
+ css: [styles.euiButtonGroup__buttons, styles[buttonSize], ";label:EuiTimeWindowButtons;"],
81
+ "data-test-subj": "timeWindowButtons"
82
+ }, showShiftArrows && (0, _react2.jsx)(_button_group_button.EuiButtonGroupButton, {
83
+ id: previousId,
84
+ "data-test-subj": "timeWindowButtonsPrevious",
85
+ label: previousLabel,
86
+ title: "",
87
+ toolTipContent: !isDisabled && (isInvalid ? invalidShiftDescription : previousTooltipContent),
88
+ color: buttonColor,
89
+ size: buttonSize,
90
+ iconType: "arrowLeft",
91
+ iconSize: iconSize,
92
+ isIconOnly: true,
93
+ isSelected: false,
94
+ isDisabled: isDisabled,
95
+ onClick: stepBackward
96
+ }), showZoomOut && (0, _react2.jsx)(_button_group_button.EuiButtonGroupButton, {
97
+ id: zoomOutId,
98
+ "data-test-subj": "timeWindowButtonsZoomOut",
99
+ label: zoomOutLabel,
100
+ title: "",
101
+ toolTipContent: !isDisabled && zoomOutTooltipContent,
102
+ toolTipProps: {
103
+ disableScreenReaderOutput: zoomOutLabel === zoomOutTooltipContent
104
+ },
105
+ color: buttonColor,
106
+ size: buttonSize,
107
+ iconType: "magnifyWithMinus",
108
+ iconSize: iconSize,
109
+ isIconOnly: true,
110
+ isSelected: false,
111
+ isDisabled: isDisabled,
112
+ onClick: expandWindow
113
+ }), showShiftArrows && (0, _react2.jsx)(_button_group_button.EuiButtonGroupButton, {
114
+ id: nextId,
115
+ "data-test-subj": "timeWindowButtonsNext",
116
+ label: nextLabel,
117
+ title: "",
118
+ toolTipContent: !isDisabled && (isInvalid ? invalidShiftDescription : nextTooltipContent),
119
+ color: buttonColor,
120
+ size: buttonSize,
121
+ iconType: "arrowRight",
122
+ iconSize: iconSize,
123
+ isIconOnly: true,
124
+ isSelected: false,
125
+ isDisabled: isDisabled,
126
+ onClick: stepForward
127
+ }));
128
+ };
129
+
130
+ /**
131
+ * Partly adapted from date_picker/super_date_picker/quick_select_popover/quick_select.tsx
132
+ */
133
+ function useEuiTimeWindow(start, end, apply, options) {
134
+ var _options$zoomFactor;
135
+ var min = _datemath.default.parse(start);
136
+ var max = _datemath.default.parse(end, {
137
+ roundUp: true
138
+ });
139
+ var isInvalid = !min || !min.isValid() || !max || !max.isValid();
140
+ var windowDuration = isInvalid ? 1 : max.diff(min);
141
+ var zoomFactor = getPercentageMultiplier((_options$zoomFactor = options === null || options === void 0 ? void 0 : options.zoomFactor) !== null && _options$zoomFactor !== void 0 ? _options$zoomFactor : ZOOM_FACTOR_DEFAULT);
142
+ var zoomAddition = windowDuration * (zoomFactor / 2); // Gets added to each end, that's why it's split in half
143
+ var prettyInterval = (0, _pretty_interval.usePrettyInterval)(false, windowDuration);
144
+ var displayInterval = isInvalid ? '' : prettyInterval;
145
+ if (!isInvalid && !(0, _relative_utils.isRelativeToNow)(start, end) && !isExactMinuteRange(windowDuration)) {
146
+ displayInterval = "~".concat(displayInterval);
147
+ }
148
+ return {
149
+ displayInterval: displayInterval,
150
+ isInvalid: isInvalid,
151
+ stepForward: stepForward,
152
+ stepBackward: stepBackward,
153
+ expandWindow: expandWindow
154
+ };
155
+ function stepForward() {
156
+ if (isInvalid) return;
157
+ apply({
158
+ start: (0, _moment.default)(max).toISOString(),
159
+ end: (0, _moment.default)(max).add(windowDuration, 'ms').toISOString()
160
+ });
161
+ }
162
+ function stepBackward() {
163
+ if (isInvalid) return;
164
+ apply({
165
+ start: (0, _moment.default)(min).subtract(windowDuration, 'ms').toISOString(),
166
+ end: (0, _moment.default)(min).toISOString()
167
+ });
168
+ }
169
+ function expandWindow() {
170
+ if (isInvalid) return;
171
+ apply({
172
+ start: (0, _moment.default)(min).subtract(zoomAddition, 'ms').toISOString(),
173
+ end: (0, _moment.default)(max).add(zoomAddition, 'ms').toISOString()
174
+ });
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Get a number out of either 0.2 or "20%"
180
+ */
181
+ function getPercentageMultiplier(value) {
182
+ var result = typeof value === 'number' ? value : parseFloat(String(value).replace('%', '').trim());
183
+ if (isNaN(result)) throw new TypeError('Please provide a valid number or percentage string e.g. "25%"');
184
+ return result > 1 ? result / 100 : result;
185
+ }
186
+
187
+ /**
188
+ * Useful to determine whether to show the tilde in the display
189
+ */
190
+ function isExactMinuteRange(diffMs) {
191
+ // 60 * 1000 = ms per minute
192
+ return diffMs % (60 * 1000) === 0;
193
+ }