@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
@@ -20,9 +20,11 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
20
20
  import React, { Component } from 'react';
21
21
  import classNames from 'classnames';
22
22
  import { findPopoverPosition, htmlIdGenerator, keys } from '../../services';
23
+ import { createRepositionOnScroll } from '../../services/popover/reposition_on_scroll';
23
24
  import { enqueueStateChange } from '../../services/react';
24
25
  import { EuiResizeObserver } from '../observer/resize_observer';
25
26
  import { EuiPortal } from '../portal';
27
+ import { EuiComponentDefaultsContext } from '../provider/component_defaults';
26
28
  import { EuiToolTipPopover } from './tool_tip_popover';
27
29
  import { EuiToolTipAnchor } from './tool_tip_anchor';
28
30
  import { EuiToolTipArrow } from './tool_tip_arrow';
@@ -48,25 +50,15 @@ var DEFAULT_TOOLTIP_STYLES = {
48
50
  visibility: 'hidden'
49
51
  };
50
52
  export var EuiToolTip = /*#__PURE__*/function (_Component) {
51
- function EuiToolTip() {
53
+ function EuiToolTip(props) {
52
54
  var _this;
53
55
  _classCallCheck(this, EuiToolTip);
54
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
55
- args[_key] = arguments[_key];
56
- }
57
- _this = _callSuper(this, EuiToolTip, [].concat(args));
56
+ _this = _callSuper(this, EuiToolTip, [props]);
57
+ _defineProperty(_this, "repositionOnScroll", void 0);
58
58
  _defineProperty(_this, "_isMounted", false);
59
59
  _defineProperty(_this, "anchor", null);
60
60
  _defineProperty(_this, "popover", null);
61
61
  _defineProperty(_this, "timeoutId", void 0);
62
- _defineProperty(_this, "state", {
63
- visible: false,
64
- hasFocus: false,
65
- calculatedPosition: _this.props.position,
66
- toolTipStyles: DEFAULT_TOOLTIP_STYLES,
67
- arrowStyles: undefined,
68
- id: _this.props.id || htmlIdGenerator()()
69
- });
70
62
  _defineProperty(_this, "clearAnimationTimeout", function () {
71
63
  if (_this.timeoutId) {
72
64
  _this.timeoutId = clearTimeout(_this.timeoutId);
@@ -195,6 +187,21 @@ export var EuiToolTip = /*#__PURE__*/function (_Component) {
195
187
  _this.props.onMouseOut(event);
196
188
  }
197
189
  });
190
+ _this.state = {
191
+ visible: false,
192
+ hasFocus: false,
193
+ calculatedPosition: _this.props.position,
194
+ toolTipStyles: DEFAULT_TOOLTIP_STYLES,
195
+ arrowStyles: undefined,
196
+ id: _this.props.id || htmlIdGenerator()()
197
+ };
198
+ _this.repositionOnScroll = createRepositionOnScroll(function () {
199
+ return {
200
+ repositionOnScroll: _this.props.repositionOnScroll,
201
+ componentDefaults: _this.context.EuiToolTip,
202
+ repositionFn: _this.positionToolTip
203
+ };
204
+ });
198
205
  return _this;
199
206
  }
200
207
  _inherits(EuiToolTip, _Component);
@@ -202,16 +209,14 @@ export var EuiToolTip = /*#__PURE__*/function (_Component) {
202
209
  key: "componentDidMount",
203
210
  value: function componentDidMount() {
204
211
  this._isMounted = true;
205
- if (this.props.repositionOnScroll) {
206
- window.addEventListener('scroll', this.positionToolTip, true);
207
- }
212
+ this.repositionOnScroll.subscribe();
208
213
  }
209
214
  }, {
210
215
  key: "componentWillUnmount",
211
216
  value: function componentWillUnmount() {
212
217
  this.clearAnimationTimeout();
213
218
  this._isMounted = false;
214
- window.removeEventListener('scroll', this.positionToolTip, true);
219
+ this.repositionOnScroll.cleanup();
215
220
  }
216
221
  }, {
217
222
  key: "componentDidUpdate",
@@ -221,13 +226,7 @@ export var EuiToolTip = /*#__PURE__*/function (_Component) {
221
226
  }
222
227
 
223
228
  // update scroll listener
224
- if (prevProps.repositionOnScroll !== this.props.repositionOnScroll) {
225
- if (this.props.repositionOnScroll) {
226
- window.addEventListener('scroll', this.positionToolTip, true);
227
- } else {
228
- window.removeEventListener('scroll', this.positionToolTip, true);
229
- }
230
- }
229
+ this.repositionOnScroll.update();
231
230
  }
232
231
  }, {
233
232
  key: "render",
@@ -289,6 +288,7 @@ export var EuiToolTip = /*#__PURE__*/function (_Component) {
289
288
  }
290
289
  }]);
291
290
  }(Component);
291
+ _defineProperty(EuiToolTip, "contextType", EuiComponentDefaultsContext);
292
292
  _defineProperty(EuiToolTip, "defaultProps", {
293
293
  position: 'top',
294
294
  delay: 'regular',
@@ -10,4 +10,5 @@ export * from './reset/global_styles';
10
10
  export * from './functions';
11
11
  export * from './variables';
12
12
  export * from './mixins';
13
- export * from './utility/animations';
13
+ export * from './utility/animations';
14
+ export { euiDisabledSelector } from './utility/selectors';
@@ -130,7 +130,7 @@ var euiButtonDisplaysColors = function euiButtonDisplaysColors(euiThemeContext)
130
130
  case 'fill':
131
131
  {
132
132
  var _buttonColors = getButtonVariantTokenValues(euiThemeContext, color, 'filled');
133
- displaysColorsMap[display][color] = /*#__PURE__*/css(euiButtonFillColor(euiThemeContext, color), "outline-color:", euiThemeContext.colorMode === 'DARK' && color === 'text' ? 'currentColor' : euiThemeContext.euiTheme.colors.fullShade, ";", _interactionStyles(euiThemeContext, _buttonColors), ";;label:displaysColorsMap-display-color;");
133
+ displaysColorsMap[display][color] = /*#__PURE__*/css(euiButtonFillColor(euiThemeContext, color), "outline-color:", euiThemeContext.colorMode === 'DARK' && color === 'text' ? 'currentColor' : color !== 'disabled' ? euiThemeContext.euiTheme.colors.fullShade : '', ";", _interactionStyles(euiThemeContext, _buttonColors), ";;label:displaysColorsMap-display-color;");
134
134
  break;
135
135
  }
136
136
  case 'empty':
@@ -0,0 +1,9 @@
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
+ export var euiDisabledSelector = ":disabled, [aria-disabled=\"true\"]";
@@ -0,0 +1,74 @@
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
+ var listeners = new Set();
10
+
11
+ /**
12
+ * Subscribes a listener function to be called whenever focus trap updates are published.
13
+ *
14
+ * @param listener The function to be called on updates.
15
+ * @returns A function that, when called, will unsubscribe the listener. Please remember
16
+ * to call this function for proper cleanup.
17
+ * @example
18
+ * ```tsx
19
+ * useEffect(() => {
20
+ * const unsubscribe = focusTrapPubSub.subscribe(() => {
21
+ * console.log('focus trap updated');
22
+ * });
23
+ *
24
+ * return () => unsubscribe();
25
+ * }, []);
26
+ * ```
27
+ */
28
+ var subscribe = function subscribe(listener) {
29
+ listeners.add(listener);
30
+ return function () {
31
+ return unsubscribe(listener);
32
+ };
33
+ };
34
+
35
+ /**
36
+ * Unsubscribes a listener from the focus trap PubSub service.
37
+ *
38
+ * @param listener The function to unsubscribe.
39
+ */
40
+ var unsubscribe = function unsubscribe(listener) {
41
+ listeners.delete(listener);
42
+ };
43
+
44
+ /**
45
+ * Publishes an event to all subscribed listeners, signaling that
46
+ * components managing focus traps should re-evaluate their tracked elements.
47
+ */
48
+ var publish = function publish() {
49
+ listeners.forEach(function (listener) {
50
+ return listener();
51
+ });
52
+ };
53
+
54
+ /**
55
+ * A lightweight, global PubSub service for loose coupling of components
56
+ * that need to interact with the same focus trap.
57
+ *
58
+ * This allows a component (like `EuiPopover`) to be rendered in a React Portal
59
+ * and still be included in the focus trap of another component (like `EuiFlyout`)
60
+ * without either component needing a direct reference to the other.
61
+ *
62
+ * How it works:
63
+ *
64
+ * 1. A container component (e.g., `EuiFlyout`) `subscribe`s to this service on mount.
65
+ * 2. An ephemeral component (e.g., `EuiPopover`) calls `publish` when its state
66
+ * changes in a way that affects the DOM (e.g., opening, closing, unmounting).
67
+ * 3. The container component's subscribed callback fires, causing it to re-query
68
+ * the DOM for any elements it should include in its focus trap.
69
+ */
70
+ export var focusTrapPubSub = {
71
+ subscribe: subscribe,
72
+ unsubscribe: unsubscribe,
73
+ publish: publish
74
+ };
@@ -0,0 +1,9 @@
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
+ export { focusTrapPubSub } from './focus_trap_pub_sub';
@@ -12,4 +12,5 @@ export * from './useForceRender';
12
12
  export * from './useLatest';
13
13
  export * from './useDeepEqual';
14
14
  export * from './useMouseMove';
15
- export * from './useUpdateEffect';
15
+ export * from './useUpdateEffect';
16
+ export { useEuiDisabledElement } from './useEuiDisabledElement';
@@ -0,0 +1,192 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ 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; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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 { useCallback, useEffect, useRef } from 'react';
13
+ import { keys } from '../../services/keys';
14
+ var DISABLED_ELEMENT_EVENTS = {
15
+ click: 'onClick',
16
+ mousedown: 'onMouseDown',
17
+ mouseup: 'onMouseUp',
18
+ mouseenter: 'onMouseEnter',
19
+ mouseleave: 'onMouseLeave',
20
+ mouseout: 'onMouseOut',
21
+ mousemove: 'onMouseMove',
22
+ mouseover: 'onMouseOver',
23
+ pointerdown: 'onPointerDown',
24
+ pointerup: 'onPointerUp',
25
+ pointerenter: 'onPointerEnter',
26
+ pointerleave: 'onPointerLeave',
27
+ pointermove: 'onPointerMove',
28
+ pointerover: 'onPointerOver',
29
+ touchstart: 'onTouchStart',
30
+ touchend: 'onTouchEnd',
31
+ touchmove: 'onTouchMove',
32
+ keydown: 'onKeyDown',
33
+ keyup: 'onKeyUp',
34
+ keypress: 'onKeyPress',
35
+ submit: 'onSubmit'
36
+ };
37
+ var ALLOWED_KEY_EVENTS = [keys.TAB, keys.ESCAPE];
38
+ var getReactEventHandlers = function getReactEventHandlers() {
39
+ return Object.values(DISABLED_ELEMENT_EVENTS).reduce(function (acc, curr) {
40
+ acc[curr] = undefined;
41
+ return acc;
42
+ }, {});
43
+ };
44
+ var UNSET_REACT_EVENT_HANDLERS = getReactEventHandlers();
45
+ var useCustomDisabledEvents = function useCustomDisabledEvents() {
46
+ var elementMethodsRef = useRef(null);
47
+ var isAllowedKeyEvent = function isAllowedKeyEvent(event) {
48
+ return event instanceof KeyboardEvent && ALLOWED_KEY_EVENTS.includes(event.key);
49
+ };
50
+ var preventEvent = useCallback(function (event) {
51
+ if (isAllowedKeyEvent(event)) {
52
+ return;
53
+ }
54
+ event.stopImmediatePropagation();
55
+ event.preventDefault();
56
+ event.stopPropagation();
57
+ }, []);
58
+ var preventElementEvents = useCallback(function (element) {
59
+ if (elementMethodsRef.current) return;
60
+ var originalEvents = {
61
+ click: 'click' in element ? element.click : undefined,
62
+ dispatchEvent: element.dispatchEvent
63
+ };
64
+ try {
65
+ elementMethodsRef.current = originalEvents;
66
+
67
+ // Add prevention listeners
68
+ Object.keys(DISABLED_ELEMENT_EVENTS).forEach(function (eventType) {
69
+ element.addEventListener(eventType, preventEvent, {
70
+ capture: true
71
+ });
72
+ });
73
+ if ('click' in element && typeof element.click === 'function') {
74
+ element.click = function () {};
75
+ }
76
+ element.dispatchEvent = function (event) {
77
+ if (Object.keys(DISABLED_ELEMENT_EVENTS).includes(event.type)) {
78
+ if (isAllowedKeyEvent(event)) {
79
+ return originalEvents.dispatchEvent.call(element, event);
80
+ }
81
+ return false;
82
+ }
83
+ return originalEvents.dispatchEvent.call(element, event);
84
+ };
85
+ } catch (error) {
86
+ elementMethodsRef.current = null;
87
+ }
88
+ }, [preventEvent]);
89
+ var resetElementEvents = useCallback(function (element) {
90
+ if (!elementMethodsRef.current) return;
91
+ var _elementMethodsRef$cu = elementMethodsRef.current,
92
+ click = _elementMethodsRef$cu.click,
93
+ dispatchEvent = _elementMethodsRef$cu.dispatchEvent;
94
+ try {
95
+ // remove prevention listeners
96
+ Object.keys(DISABLED_ELEMENT_EVENTS).forEach(function (eventType) {
97
+ element.removeEventListener(eventType, preventEvent, {
98
+ capture: true
99
+ });
100
+ });
101
+
102
+ // restore click method
103
+ if (click && 'click' in element) {
104
+ element.click = click;
105
+ }
106
+
107
+ // restore dispatchEvent
108
+ element.dispatchEvent = dispatchEvent;
109
+ } catch (error) {}
110
+ elementMethodsRef.current = null;
111
+ }, [preventEvent]);
112
+ return {
113
+ preventElementEvents: preventElementEvents,
114
+ resetElementEvents: resetElementEvents
115
+ };
116
+ };
117
+
118
+ /**
119
+ * NOTE: Beta feature, may be changed or removed in the future
120
+ *
121
+ * Utility to apply either the native or a custom semantic disabled state.
122
+ *
123
+ * It applies `aria-disabled` instead of `disabled` when `hasAriaDisabled=true`
124
+ * to ensure the element is semantically disabled while still focusable.
125
+ *
126
+ * It mimics the native `disabled` behavior by removing any programmatic mouse, pointer, touch
127
+ * or keyboard event handler but it differs to the native `disabled` behavior in that it preserves
128
+ * the focus, blur and tabIndex behavior.
129
+ */
130
+ export var useEuiDisabledElement = function useEuiDisabledElement(_ref) {
131
+ var _ref$isDisabled = _ref.isDisabled,
132
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
133
+ _ref$hasAriaDisabled = _ref.hasAriaDisabled,
134
+ hasAriaDisabled = _ref$hasAriaDisabled === void 0 ? false : _ref$hasAriaDisabled,
135
+ onKeyDown = _ref.onKeyDown,
136
+ onKeyUp = _ref.onKeyUp,
137
+ onKeyPress = _ref.onKeyPress;
138
+ var elementRef = useRef(null);
139
+ var _useCustomDisabledEve = useCustomDisabledEvents(),
140
+ preventElementEvents = _useCustomDisabledEve.preventElementEvents,
141
+ resetElementEvents = _useCustomDisabledEve.resetElementEvents;
142
+ var shouldBeDisabled = hasAriaDisabled && isDisabled;
143
+ var setRef = useCallback(function (node) {
144
+ if (elementRef.current) {
145
+ resetElementEvents(elementRef.current);
146
+ }
147
+ elementRef.current = node;
148
+ if (node && shouldBeDisabled) {
149
+ preventElementEvents(node);
150
+ }
151
+ }, [shouldBeDisabled, preventElementEvents, resetElementEvents]);
152
+ useEffect(function () {
153
+ if (!elementRef.current) return;
154
+ if (shouldBeDisabled) {
155
+ preventElementEvents(elementRef.current);
156
+ } else {
157
+ resetElementEvents(elementRef.current);
158
+ }
159
+ return function () {
160
+ if (elementRef.current) {
161
+ resetElementEvents(elementRef.current);
162
+ }
163
+ };
164
+ }, [shouldBeDisabled, preventElementEvents, resetElementEvents]);
165
+ if (!hasAriaDisabled) {
166
+ return {
167
+ ref: setRef,
168
+ disabled: isDisabled
169
+ };
170
+ }
171
+ var onKeyboardEvent = function onKeyboardEvent(e, callback) {
172
+ if (ALLOWED_KEY_EVENTS.includes(e.key)) {
173
+ callback === null || callback === void 0 || callback(e);
174
+ }
175
+ };
176
+ var eventHandlers = shouldBeDisabled && _objectSpread(_objectSpread({}, UNSET_REACT_EVENT_HANDLERS), {}, {
177
+ onKeyDown: onKeyDown ? function (e) {
178
+ return onKeyboardEvent(e, onKeyDown);
179
+ } : undefined,
180
+ onKeyUp: onKeyUp ? function (e) {
181
+ return onKeyboardEvent(e, onKeyUp);
182
+ } : undefined,
183
+ onKeyPress: onKeyPress ? function (e) {
184
+ return onKeyboardEvent(e, onKeyPress);
185
+ } : undefined
186
+ });
187
+ return _objectSpread({
188
+ ref: setRef,
189
+ 'aria-disabled': isDisabled ? true : undefined,
190
+ disabled: isDisabled ? undefined : false
191
+ }, eventHandlers);
192
+ };
@@ -19,6 +19,7 @@ export * from './console';
19
19
  export * from './copy';
20
20
  export * from './emotion';
21
21
  export * from './findElement';
22
+ export { focusTrapPubSub } from './focus_trap';
22
23
  export { dateFormatAliases, formatAuto, formatBoolean, formatDate, formatNumber, formatText } from './format';
23
24
  export * from './hooks';
24
25
  export { isEvenlyDivisibleBy, isWithinRange } from './number';
@@ -0,0 +1,61 @@
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
+ /**
10
+ * Returns the value of the `repositionOnScroll` from the props, component's defaults context
11
+ * or default to `false`.
12
+ *
13
+ * @param args The arguments for `getRepositionOnScroll`. See {@link RepositionOnScrollArgs}.
14
+ * @returns The value of the `repositionOnScroll`.
15
+ */
16
+ export var getRepositionOnScroll = function getRepositionOnScroll(args) {
17
+ var repositionOnScroll = args.repositionOnScroll,
18
+ componentDefaults = args.componentDefaults;
19
+ if (repositionOnScroll !== undefined) return repositionOnScroll;
20
+ if (componentDefaults && 'repositionOnScroll' in componentDefaults && typeof componentDefaults.repositionOnScroll === 'boolean') {
21
+ var contextValue = componentDefaults.repositionOnScroll;
22
+ return contextValue !== null && contextValue !== void 0 ? contextValue : false;
23
+ }
24
+ return false;
25
+ };
26
+ /**
27
+ * Creates a manager for handling `repositionOnScroll` logic in overlay components.
28
+ * This utility abstracts the adding, updating, and removing of window scroll event listeners.
29
+ *
30
+ * @param getArgs A function that returns the arguments for `getRepositionOnScroll`. See {@link RepositionOnScrollArgs}.
31
+ * @returns An object with `subscribe`, `update`, and `cleanup` methods to manage the scroll listener.
32
+ */
33
+ export var createRepositionOnScroll = function createRepositionOnScroll(getArgs) {
34
+ var lastResolvedRepositionOnScroll;
35
+ var subscribe = function subscribe() {
36
+ var repositionOnScroll = getRepositionOnScroll(getArgs());
37
+ lastResolvedRepositionOnScroll = repositionOnScroll;
38
+ if (repositionOnScroll) {
39
+ window.addEventListener('scroll', getArgs().repositionFn, true);
40
+ }
41
+ };
42
+ var update = function update() {
43
+ var repositionOnScroll = getRepositionOnScroll(getArgs());
44
+ if (lastResolvedRepositionOnScroll !== repositionOnScroll) {
45
+ if (repositionOnScroll) {
46
+ window.addEventListener('scroll', getArgs().repositionFn, true);
47
+ } else {
48
+ window.removeEventListener('scroll', getArgs().repositionFn, true);
49
+ }
50
+ lastResolvedRepositionOnScroll = repositionOnScroll;
51
+ }
52
+ };
53
+ var cleanup = function cleanup() {
54
+ window.removeEventListener('scroll', getArgs().repositionFn, true);
55
+ };
56
+ return {
57
+ subscribe: subscribe,
58
+ update: update,
59
+ cleanup: cleanup
60
+ };
61
+ };
@@ -0,0 +1,12 @@
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
+ export {
10
+ registerEuiCypressMatchers,
11
+ setupEuiCypressMatchers,
12
+ } from './matchers';
@@ -0,0 +1,9 @@
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
+ export { registerEuiCypressMatchers, setupEuiCypressMatchers } from './matchers';
@@ -0,0 +1,20 @@
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", the "GNU Affero General Public License v3.0 only", and the "Server Side
5
+ * Public License v 1"; you may not use this file except in compliance with, at
6
+ * your election, the "Elastic License 2.0", the "GNU Affero General Public
7
+ * License v3.0 only", or the "Server Side Public License, v 1".
8
+ */
9
+
10
+ declare global {
11
+ namespace Chai {
12
+ interface Assertion {
13
+ euiDisabled: Assertion;
14
+ euiEnabled: Assertion;
15
+ }
16
+ }
17
+ }
18
+
19
+ export declare const registerEuiCypressMatchers: () => void;
20
+ export declare const setupEuiCypressMatchers: () => void;
@@ -0,0 +1,54 @@
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
+ /// <reference types="cypress" />
10
+
11
+ export function registerEuiCypressMatchers() {
12
+ var chai = window.chai;
13
+ if (chai && !chai.__euiMatchersRegistered) {
14
+ chai.use(function (_chai) {
15
+ _chai.Assertion.addProperty('euiDisabled', function () {
16
+ var element = this._obj[0] || this._obj;
17
+ var hasDisabledAttribute = element.hasAttribute('disabled');
18
+ var hasAriaDisabled = element.getAttribute('aria-disabled') === 'true';
19
+ var isDisabled = hasDisabledAttribute || hasAriaDisabled;
20
+ this.assert(isDisabled, 'expected element to be EUI disabled (= have `disabled` attribute or `aria-disabled="true"`)', 'expected element not to be EUI disabled (= not have `disabled` attribute or `aria-disabled="true"`)', true, isDisabled);
21
+ });
22
+ _chai.Assertion.addProperty('euiEnabled', function () {
23
+ var element = this._obj[0] || this._obj;
24
+ var hasDisabledAttribute = element.hasAttribute('disabled');
25
+ var hasAriaDisabled = element.getAttribute('aria-disabled') === 'true';
26
+ var isDisabled = hasDisabledAttribute || hasAriaDisabled;
27
+ this.assert(!isDisabled, 'expected element to be EUI enabled (= not have `disabled` attribute or `aria-disabled="true"`)', 'expected element not to be EUI enabled (= have `disabled` attribute or `aria-disabled="true"`)', false, isDisabled);
28
+ });
29
+ });
30
+
31
+ // Mark as registered to prevent double registration
32
+ chai.__euiMatchersRegistered = true;
33
+ }
34
+ }
35
+
36
+ // Register matchers when support file loads
37
+ export var setupEuiCypressMatchers = function setupEuiCypressMatchers() {
38
+ if (typeof window !== 'undefined') {
39
+ // Try to register immediately
40
+ if (window.chai) {
41
+ registerEuiCypressMatchers();
42
+ } else {
43
+ // Wait for chai to be available
44
+ var pollForChai = function pollForChai() {
45
+ if (window.chai) {
46
+ registerEuiCypressMatchers();
47
+ } else {
48
+ setTimeout(pollForChai, 10);
49
+ }
50
+ };
51
+ pollForChai();
52
+ }
53
+ }
54
+ };
@@ -0,0 +1,63 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
6
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
7
+ * Side Public License, v 1.
8
+ */
9
+
10
+ /// <reference types="cypress" />
11
+ /// <reference types="cypress-real-events" />
12
+ /// <reference types="../../../cypress/support" />
13
+
14
+ import React from 'react';
15
+ import { jsx as ___EmotionJSX } from "@emotion/react";
16
+ export var testRepositionOnScroll = function testRepositionOnScroll(_ref) {
17
+ var shouldReposition = _ref.shouldReposition,
18
+ propValue = _ref.propValue,
19
+ componentDefaultValue = _ref.componentDefaultValue,
20
+ componentName = _ref.componentName,
21
+ triggerSelector = _ref.triggerSelector,
22
+ panelSelector = _ref.panelSelector,
23
+ renderComponent = _ref.renderComponent;
24
+ var repositionProps = {
25
+ repositionOnScroll: typeof propValue === 'boolean' ? propValue : undefined
26
+ };
27
+ var providerProps = typeof componentDefaultValue === 'boolean' ? {
28
+ providerProps: {
29
+ componentDefaults: _defineProperty({}, componentName, {
30
+ repositionOnScroll: componentDefaultValue
31
+ })
32
+ }
33
+ } : undefined;
34
+ cy.mount(___EmotionJSX(React.Fragment, null, ___EmotionJSX("div", {
35
+ style: {
36
+ height: '200vh'
37
+ }
38
+ }), ___EmotionJSX("div", {
39
+ style: {
40
+ position: 'fixed',
41
+ bottom: '16px',
42
+ right: '16px'
43
+ }
44
+ }, renderComponent(repositionProps))), providerProps);
45
+ cy.get(triggerSelector).click();
46
+
47
+ // Wait for positioning to finish
48
+ cy.get(panelSelector).as('panel').should('exist').waitForPositionToSettle();
49
+ cy.get('@panel').then(function ($panel) {
50
+ var initialRect = $panel[0].getBoundingClientRect();
51
+ cy.scrollTo(0, 500);
52
+
53
+ // Wait for re-positioning to finish
54
+ cy.get('@panel').waitForPositionToSettle().then(function ($repositionedPanel) {
55
+ var finalRect = $repositionedPanel[0].getBoundingClientRect();
56
+ if (shouldReposition) {
57
+ expect(finalRect.top).to.equal(initialRect.top);
58
+ } else {
59
+ expect(finalRect.top).to.not.equal(initialRect.top);
60
+ }
61
+ });
62
+ });
63
+ };