@elastic/eui 91.0.0 → 91.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 (382) hide show
  1. package/dist/eui_theme_dark.css +191 -124
  2. package/dist/eui_theme_dark.min.css +1 -1
  3. package/dist/eui_theme_light.css +191 -124
  4. package/dist/eui_theme_light.min.css +1 -1
  5. package/es/components/accordion/accordion.a11y.js +1 -3
  6. package/es/components/basic_table/action_types.js +5 -0
  7. package/es/components/basic_table/basic_table.a11y.js +1 -2
  8. package/es/components/basic_table/basic_table.js +8 -8
  9. package/es/components/basic_table/collapsed_item_actions.js +120 -249
  10. package/es/components/basic_table/custom_item_action.js +9 -95
  11. package/es/components/basic_table/default_item_action.js +23 -14
  12. package/es/components/basic_table/in_memory_table.a11y.js +13 -11
  13. package/es/components/basic_table/in_memory_table.js +8 -8
  14. package/es/components/breadcrumbs/breadcrumb.js +11 -7
  15. package/es/components/breadcrumbs/breadcrumb.styles.js +5 -0
  16. package/es/components/button/button_display/_button_display.js +5 -3
  17. package/es/components/button/button_display/_button_display_content.js +8 -4
  18. package/es/components/button/button_empty/button_empty.js +9 -7
  19. package/es/components/button/button_group/button_group.js +5 -3
  20. package/es/components/button/button_group/button_group_button.js +5 -3
  21. package/es/components/card/card.a11y.js +5 -18
  22. package/es/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +2 -2
  23. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +4 -1
  24. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +12 -9
  25. package/es/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +1 -101
  26. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +20 -58
  27. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +89 -37
  28. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +67 -81
  29. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.styles.js +1 -19
  30. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +7 -102
  31. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +4 -4
  32. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_group.js +7 -90
  33. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +150 -130
  34. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_link.js +0 -10
  35. package/es/components/combo_box/combo_box.js +1 -1
  36. package/es/components/context_menu/context_menu_item.js +16 -8
  37. package/es/components/context_menu/context_menu_item.styles.js +1 -1
  38. package/es/components/datagrid/body/data_grid_body.js +16 -6
  39. package/es/components/datagrid/body/data_grid_body_custom.js +16 -6
  40. package/es/components/datagrid/body/data_grid_body_virtualized.js +16 -6
  41. package/es/components/datagrid/body/data_grid_cell.js +67 -44
  42. package/es/components/datagrid/body/data_grid_cell_actions.js +12 -12
  43. package/es/components/datagrid/body/data_grid_cell_popover.js +43 -10
  44. package/es/components/datagrid/body/header/data_grid_header_cell.js +65 -34
  45. package/es/components/datagrid/body/header/data_grid_header_row.js +16 -6
  46. package/es/components/datagrid/controls/column_selector.js +19 -39
  47. package/es/components/datagrid/controls/column_sorting.js +18 -29
  48. package/es/components/datagrid/controls/data_grid_toolbar_control.js +154 -0
  49. package/es/components/datagrid/controls/display_selector.js +0 -1
  50. package/es/components/datagrid/controls/fullscreen_selector.js +2 -6
  51. package/es/components/datagrid/controls/index.js +2 -1
  52. package/es/components/datagrid/index.js +1 -1
  53. package/es/components/datagrid/utils/in_memory.js +16 -6
  54. package/es/components/datagrid/utils/row_heights.js +1 -1
  55. package/es/components/date_picker/auto_refresh/auto_refresh.js +6 -4
  56. package/es/components/date_picker/super_date_picker/super_update_button.js +1 -1
  57. package/es/components/error_boundary/error_boundary.a11y.js +1 -1
  58. package/es/components/expression/expression.a11y.js +2 -4
  59. package/es/components/facet/facet_button.js +5 -3
  60. package/es/components/filter_group/filter_button.js +2 -2
  61. package/es/components/focus_trap/focus_trap.a11y.js +3 -3
  62. package/es/components/form/range/range.a11y.js +5 -10
  63. package/es/components/form/super_select/super_select.js +3 -2
  64. package/es/components/form/super_select/super_select_control.js +13 -20
  65. package/es/components/header/header.a11y.js +1 -1
  66. package/es/components/header/header_links/header_link.js +7 -5
  67. package/es/components/header/header_section/header_section_item_button.js +7 -5
  68. package/es/components/image/image.a11y.js +1 -2
  69. package/es/components/key_pad_menu/key_pad_menu.a11y.js +5 -5
  70. package/es/components/link/external_link_icon.js +51 -0
  71. package/es/components/link/link.js +6 -20
  72. package/es/components/link/link.styles.js +2 -5
  73. package/es/components/list_group/list_group.js +6 -1
  74. package/es/components/list_group/list_group_item.js +14 -4
  75. package/es/components/list_group/list_group_item.styles.js +2 -1
  76. package/es/components/list_group/pinnable_list_group/pinnable_list_group.js +12 -2
  77. package/es/components/notification/notification_event.a11y.js +1 -2
  78. package/es/components/notification/notification_event.js +7 -5
  79. package/es/components/pagination/pagination_button.js +7 -5
  80. package/es/components/popover/popover.js +4 -1
  81. package/es/components/resizable_container/resizable_container.a11y.js +4 -8
  82. package/es/components/search_bar/search_bar.a11y.js +3 -6
  83. package/es/components/selectable/selectable.js +16 -1
  84. package/es/components/selectable/selectable_list/selectable_list.js +227 -78
  85. package/es/components/selectable/selectable_templates/selectable_template_sitewide.js +16 -1
  86. package/es/components/text/text.styles.js +2 -2
  87. package/es/components/text_truncate/text_truncate.js +33 -10
  88. package/eui.d.ts +466 -136
  89. package/i18ntokens.json +224 -260
  90. package/lib/components/accordion/accordion.a11y.js +1 -3
  91. package/lib/components/basic_table/action_types.js +8 -2
  92. package/lib/components/basic_table/basic_table.a11y.js +1 -2
  93. package/lib/components/basic_table/basic_table.js +8 -8
  94. package/lib/components/basic_table/collapsed_item_actions.js +128 -257
  95. package/lib/components/basic_table/custom_item_action.js +18 -104
  96. package/lib/components/basic_table/default_item_action.js +23 -14
  97. package/lib/components/basic_table/in_memory_table.a11y.js +13 -11
  98. package/lib/components/basic_table/in_memory_table.js +8 -8
  99. package/lib/components/breadcrumbs/breadcrumb.js +11 -7
  100. package/lib/components/breadcrumbs/breadcrumb.styles.js +5 -0
  101. package/lib/components/button/button_display/_button_display.js +5 -3
  102. package/lib/components/button/button_display/_button_display_content.js +8 -4
  103. package/lib/components/button/button_empty/button_empty.js +9 -7
  104. package/lib/components/button/button_group/button_group.js +5 -3
  105. package/lib/components/button/button_group/button_group_button.js +5 -3
  106. package/lib/components/card/card.a11y.js +5 -18
  107. package/lib/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +1 -1
  108. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +4 -1
  109. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +12 -9
  110. package/lib/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +1 -101
  111. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +20 -58
  112. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +89 -37
  113. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +66 -80
  114. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.styles.js +11 -28
  115. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +7 -104
  116. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +4 -4
  117. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_group.js +7 -90
  118. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +150 -130
  119. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_link.js +0 -10
  120. package/lib/components/combo_box/combo_box.js +1 -1
  121. package/lib/components/context_menu/context_menu_item.js +16 -8
  122. package/lib/components/context_menu/context_menu_item.styles.js +1 -1
  123. package/lib/components/datagrid/body/data_grid_body.js +16 -6
  124. package/lib/components/datagrid/body/data_grid_body_custom.js +16 -6
  125. package/lib/components/datagrid/body/data_grid_body_virtualized.js +16 -6
  126. package/lib/components/datagrid/body/data_grid_cell.js +67 -44
  127. package/lib/components/datagrid/body/data_grid_cell_actions.js +12 -13
  128. package/lib/components/datagrid/body/data_grid_cell_popover.js +43 -10
  129. package/lib/components/datagrid/body/header/data_grid_header_cell.js +65 -34
  130. package/lib/components/datagrid/body/header/data_grid_header_row.js +16 -6
  131. package/lib/components/datagrid/controls/column_selector.js +19 -39
  132. package/lib/components/datagrid/controls/column_sorting.js +18 -30
  133. package/lib/components/datagrid/controls/data_grid_toolbar_control.js +159 -0
  134. package/lib/components/datagrid/controls/display_selector.js +0 -1
  135. package/lib/components/datagrid/controls/fullscreen_selector.js +2 -7
  136. package/lib/components/datagrid/controls/index.js +8 -1
  137. package/lib/components/datagrid/index.js +8 -1
  138. package/lib/components/datagrid/utils/in_memory.js +16 -6
  139. package/lib/components/datagrid/utils/row_heights.js +1 -1
  140. package/lib/components/date_picker/auto_refresh/auto_refresh.js +6 -4
  141. package/lib/components/date_picker/super_date_picker/super_update_button.js +1 -1
  142. package/lib/components/error_boundary/error_boundary.a11y.js +1 -1
  143. package/lib/components/expression/expression.a11y.js +2 -4
  144. package/lib/components/facet/facet_button.js +5 -3
  145. package/lib/components/filter_group/filter_button.js +2 -2
  146. package/lib/components/focus_trap/focus_trap.a11y.js +3 -3
  147. package/lib/components/form/range/range.a11y.js +5 -10
  148. package/lib/components/form/super_select/super_select.js +3 -2
  149. package/lib/components/form/super_select/super_select_control.js +12 -19
  150. package/lib/components/header/header.a11y.js +1 -1
  151. package/lib/components/header/header_links/header_link.js +7 -5
  152. package/lib/components/header/header_section/header_section_item_button.js +7 -5
  153. package/lib/components/image/image.a11y.js +1 -2
  154. package/lib/components/key_pad_menu/key_pad_menu.a11y.js +5 -5
  155. package/lib/components/link/external_link_icon.js +57 -0
  156. package/lib/components/link/link.js +6 -20
  157. package/lib/components/link/link.styles.js +1 -4
  158. package/lib/components/list_group/list_group.js +6 -1
  159. package/lib/components/list_group/list_group_item.js +14 -4
  160. package/lib/components/list_group/list_group_item.styles.js +2 -1
  161. package/lib/components/list_group/pinnable_list_group/pinnable_list_group.js +12 -2
  162. package/lib/components/notification/notification_event.a11y.js +1 -2
  163. package/lib/components/notification/notification_event.js +7 -5
  164. package/lib/components/popover/popover.js +4 -1
  165. package/lib/components/resizable_container/resizable_container.a11y.js +4 -8
  166. package/lib/components/search_bar/search_bar.a11y.js +3 -6
  167. package/lib/components/selectable/selectable.js +16 -1
  168. package/lib/components/selectable/selectable_list/selectable_list.js +227 -78
  169. package/lib/components/selectable/selectable_templates/selectable_template_sitewide.js +16 -1
  170. package/lib/components/text/text.styles.js +2 -2
  171. package/lib/components/text_truncate/text_truncate.js +32 -9
  172. package/optimize/es/components/accordion/accordion.a11y.js +1 -3
  173. package/optimize/es/components/basic_table/action_types.js +5 -0
  174. package/optimize/es/components/basic_table/basic_table.a11y.js +1 -2
  175. package/optimize/es/components/basic_table/collapsed_item_actions.js +116 -169
  176. package/optimize/es/components/basic_table/custom_item_action.js +10 -83
  177. package/optimize/es/components/basic_table/default_item_action.js +23 -14
  178. package/optimize/es/components/basic_table/in_memory_table.a11y.js +13 -11
  179. package/optimize/es/components/breadcrumbs/breadcrumb.js +11 -7
  180. package/optimize/es/components/breadcrumbs/breadcrumb.styles.js +5 -0
  181. package/optimize/es/components/button/button_display/_button_display_content.js +3 -1
  182. package/optimize/es/components/button/button_empty/button_empty.js +2 -2
  183. package/optimize/es/components/card/card.a11y.js +5 -18
  184. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +2 -2
  185. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +4 -1
  186. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +12 -9
  187. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +1 -3
  188. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +10 -5
  189. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +8 -36
  190. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.styles.js +1 -19
  191. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +6 -23
  192. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +4 -4
  193. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_group.js +6 -10
  194. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +9 -5
  195. package/optimize/es/components/context_menu/context_menu_item.js +9 -6
  196. package/optimize/es/components/context_menu/context_menu_item.styles.js +1 -1
  197. package/optimize/es/components/datagrid/body/data_grid_cell.js +38 -30
  198. package/optimize/es/components/datagrid/body/data_grid_cell_actions.js +12 -12
  199. package/optimize/es/components/datagrid/body/data_grid_cell_popover.js +43 -10
  200. package/optimize/es/components/datagrid/body/header/data_grid_header_cell.js +49 -28
  201. package/optimize/es/components/datagrid/controls/column_selector.js +19 -39
  202. package/optimize/es/components/datagrid/controls/column_sorting.js +18 -29
  203. package/optimize/es/components/datagrid/controls/data_grid_toolbar_control.js +70 -0
  204. package/optimize/es/components/datagrid/controls/display_selector.js +0 -1
  205. package/optimize/es/components/datagrid/controls/fullscreen_selector.js +2 -6
  206. package/optimize/es/components/datagrid/controls/index.js +2 -1
  207. package/optimize/es/components/datagrid/index.js +1 -1
  208. package/optimize/es/components/datagrid/utils/row_heights.js +1 -1
  209. package/optimize/es/components/date_picker/super_date_picker/super_update_button.js +1 -1
  210. package/optimize/es/components/error_boundary/error_boundary.a11y.js +1 -1
  211. package/optimize/es/components/expression/expression.a11y.js +2 -4
  212. package/optimize/es/components/filter_group/filter_button.js +2 -2
  213. package/optimize/es/components/focus_trap/focus_trap.a11y.js +3 -3
  214. package/optimize/es/components/form/range/range.a11y.js +5 -10
  215. package/optimize/es/components/form/super_select/super_select.js +3 -2
  216. package/optimize/es/components/form/super_select/super_select_control.js +13 -20
  217. package/optimize/es/components/header/header.a11y.js +1 -1
  218. package/optimize/es/components/image/image.a11y.js +1 -2
  219. package/optimize/es/components/key_pad_menu/key_pad_menu.a11y.js +5 -5
  220. package/optimize/es/components/link/external_link_icon.js +41 -0
  221. package/optimize/es/components/link/link.js +6 -20
  222. package/optimize/es/components/link/link.styles.js +2 -5
  223. package/optimize/es/components/list_group/list_group_item.js +8 -3
  224. package/optimize/es/components/list_group/list_group_item.styles.js +2 -1
  225. package/optimize/es/components/notification/notification_event.a11y.js +1 -2
  226. package/optimize/es/components/popover/popover.js +4 -1
  227. package/optimize/es/components/resizable_container/resizable_container.a11y.js +4 -8
  228. package/optimize/es/components/search_bar/search_bar.a11y.js +3 -6
  229. package/optimize/es/components/selectable/selectable_list/selectable_list.js +199 -76
  230. package/optimize/es/components/text/text.styles.js +2 -2
  231. package/optimize/es/components/text_truncate/text_truncate.js +26 -9
  232. package/optimize/lib/components/accordion/accordion.a11y.js +1 -3
  233. package/optimize/lib/components/basic_table/action_types.js +8 -2
  234. package/optimize/lib/components/basic_table/basic_table.a11y.js +1 -2
  235. package/optimize/lib/components/basic_table/collapsed_item_actions.js +123 -174
  236. package/optimize/lib/components/basic_table/custom_item_action.js +17 -91
  237. package/optimize/lib/components/basic_table/default_item_action.js +23 -14
  238. package/optimize/lib/components/basic_table/in_memory_table.a11y.js +13 -11
  239. package/optimize/lib/components/breadcrumbs/breadcrumb.js +11 -7
  240. package/optimize/lib/components/breadcrumbs/breadcrumb.styles.js +5 -0
  241. package/optimize/lib/components/button/button_display/_button_display_content.js +3 -1
  242. package/optimize/lib/components/button/button_empty/button_empty.js +2 -2
  243. package/optimize/lib/components/card/card.a11y.js +5 -18
  244. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +1 -1
  245. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +4 -1
  246. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +12 -9
  247. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +1 -3
  248. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +10 -5
  249. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +8 -36
  250. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.styles.js +11 -28
  251. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +6 -26
  252. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +4 -4
  253. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_group.js +6 -10
  254. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +9 -5
  255. package/optimize/lib/components/context_menu/context_menu_item.js +9 -6
  256. package/optimize/lib/components/context_menu/context_menu_item.styles.js +1 -1
  257. package/optimize/lib/components/datagrid/body/data_grid_cell.js +38 -30
  258. package/optimize/lib/components/datagrid/body/data_grid_cell_actions.js +12 -12
  259. package/optimize/lib/components/datagrid/body/data_grid_cell_popover.js +43 -10
  260. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell.js +55 -36
  261. package/optimize/lib/components/datagrid/controls/column_selector.js +19 -39
  262. package/optimize/lib/components/datagrid/controls/column_sorting.js +18 -29
  263. package/optimize/lib/components/datagrid/controls/data_grid_toolbar_control.js +75 -0
  264. package/optimize/lib/components/datagrid/controls/display_selector.js +0 -1
  265. package/optimize/lib/components/datagrid/controls/fullscreen_selector.js +2 -6
  266. package/optimize/lib/components/datagrid/controls/index.js +8 -1
  267. package/optimize/lib/components/datagrid/index.js +8 -1
  268. package/optimize/lib/components/datagrid/utils/row_heights.js +1 -1
  269. package/optimize/lib/components/date_picker/super_date_picker/super_update_button.js +1 -1
  270. package/optimize/lib/components/error_boundary/error_boundary.a11y.js +1 -1
  271. package/optimize/lib/components/expression/expression.a11y.js +2 -4
  272. package/optimize/lib/components/filter_group/filter_button.js +2 -2
  273. package/optimize/lib/components/focus_trap/focus_trap.a11y.js +3 -3
  274. package/optimize/lib/components/form/range/range.a11y.js +5 -10
  275. package/optimize/lib/components/form/super_select/super_select.js +3 -2
  276. package/optimize/lib/components/form/super_select/super_select_control.js +12 -19
  277. package/optimize/lib/components/header/header.a11y.js +1 -1
  278. package/optimize/lib/components/image/image.a11y.js +1 -2
  279. package/optimize/lib/components/key_pad_menu/key_pad_menu.a11y.js +5 -5
  280. package/optimize/lib/components/link/external_link_icon.js +47 -0
  281. package/optimize/lib/components/link/link.js +6 -20
  282. package/optimize/lib/components/link/link.styles.js +1 -4
  283. package/optimize/lib/components/list_group/list_group_item.js +8 -3
  284. package/optimize/lib/components/list_group/list_group_item.styles.js +2 -1
  285. package/optimize/lib/components/notification/notification_event.a11y.js +1 -2
  286. package/optimize/lib/components/popover/popover.js +4 -1
  287. package/optimize/lib/components/resizable_container/resizable_container.a11y.js +4 -8
  288. package/optimize/lib/components/search_bar/search_bar.a11y.js +3 -6
  289. package/optimize/lib/components/selectable/selectable_list/selectable_list.js +199 -76
  290. package/optimize/lib/components/text/text.styles.js +2 -2
  291. package/optimize/lib/components/text_truncate/text_truncate.js +25 -8
  292. package/package.json +4 -4
  293. package/src/components/datagrid/_data_grid_data_row.scss +139 -100
  294. package/src/components/datagrid/_mixins.scss +2 -2
  295. package/src/components/datagrid/body/header/_data_grid_header_row.scss +36 -28
  296. package/src/components/datagrid/controls/_data_grid_toolbar.scss +0 -5
  297. package/src/components/form/form_row/_form_row.scss +1 -1
  298. package/src/components/table/_responsive.scss +19 -0
  299. package/src/components/table/_table.scss +4 -9
  300. package/test-env/components/accordion/accordion.a11y.js +1 -3
  301. package/test-env/components/auto_sizer/auto_sizer.js +10 -3
  302. package/test-env/components/basic_table/action_types.js +8 -2
  303. package/test-env/components/basic_table/basic_table.a11y.js +1 -2
  304. package/test-env/components/basic_table/basic_table.js +8 -8
  305. package/test-env/components/basic_table/collapsed_item_actions.js +124 -251
  306. package/test-env/components/basic_table/custom_item_action.js +18 -100
  307. package/test-env/components/basic_table/default_item_action.js +23 -14
  308. package/test-env/components/basic_table/in_memory_table.a11y.js +13 -11
  309. package/test-env/components/basic_table/in_memory_table.js +8 -8
  310. package/test-env/components/breadcrumbs/breadcrumb.js +11 -7
  311. package/test-env/components/breadcrumbs/breadcrumb.styles.js +5 -0
  312. package/test-env/components/button/button_display/_button_display.js +5 -3
  313. package/test-env/components/button/button_display/_button_display_content.js +8 -4
  314. package/test-env/components/button/button_empty/button_empty.js +9 -7
  315. package/test-env/components/button/button_group/button_group.js +5 -3
  316. package/test-env/components/button/button_group/button_group_button.js +5 -3
  317. package/test-env/components/card/card.a11y.js +5 -18
  318. package/test-env/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +1 -1
  319. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.js +4 -1
  320. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +12 -9
  321. package/test-env/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +1 -101
  322. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +20 -58
  323. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +89 -37
  324. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +66 -80
  325. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.styles.js +11 -28
  326. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +7 -105
  327. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +4 -4
  328. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_group.js +7 -90
  329. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +150 -130
  330. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_link.js +0 -10
  331. package/test-env/components/combo_box/combo_box.js +1 -1
  332. package/test-env/components/context_menu/context_menu_item.js +16 -8
  333. package/test-env/components/context_menu/context_menu_item.styles.js +1 -1
  334. package/test-env/components/datagrid/body/data_grid_body.js +16 -6
  335. package/test-env/components/datagrid/body/data_grid_body_custom.js +16 -6
  336. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +16 -6
  337. package/test-env/components/datagrid/body/data_grid_cell.js +67 -44
  338. package/test-env/components/datagrid/body/data_grid_cell_actions.js +12 -12
  339. package/test-env/components/datagrid/body/data_grid_cell_popover.js +43 -10
  340. package/test-env/components/datagrid/body/header/data_grid_header_cell.js +71 -42
  341. package/test-env/components/datagrid/body/header/data_grid_header_row.js +16 -6
  342. package/test-env/components/datagrid/controls/column_selector.js +19 -39
  343. package/test-env/components/datagrid/controls/column_sorting.js +18 -29
  344. package/test-env/components/datagrid/controls/data_grid_toolbar_control.js +158 -0
  345. package/test-env/components/datagrid/controls/display_selector.js +0 -1
  346. package/test-env/components/datagrid/controls/fullscreen_selector.js +2 -6
  347. package/test-env/components/datagrid/controls/index.js +8 -1
  348. package/test-env/components/datagrid/index.js +8 -1
  349. package/test-env/components/datagrid/utils/in_memory.js +16 -6
  350. package/test-env/components/datagrid/utils/row_heights.js +1 -1
  351. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +6 -4
  352. package/test-env/components/date_picker/super_date_picker/super_update_button.js +1 -1
  353. package/test-env/components/error_boundary/error_boundary.a11y.js +1 -1
  354. package/test-env/components/expression/expression.a11y.js +2 -4
  355. package/test-env/components/facet/facet_button.js +5 -3
  356. package/test-env/components/filter_group/filter_button.js +2 -2
  357. package/test-env/components/focus_trap/focus_trap.a11y.js +3 -3
  358. package/test-env/components/form/range/range.a11y.js +5 -10
  359. package/test-env/components/form/super_select/super_select.js +3 -2
  360. package/test-env/components/form/super_select/super_select_control.js +12 -19
  361. package/test-env/components/header/header.a11y.js +1 -1
  362. package/test-env/components/header/header_links/header_link.js +7 -5
  363. package/test-env/components/header/header_section/header_section_item_button.js +7 -5
  364. package/test-env/components/image/image.a11y.js +1 -2
  365. package/test-env/components/key_pad_menu/key_pad_menu.a11y.js +5 -5
  366. package/test-env/components/link/external_link_icon.js +56 -0
  367. package/test-env/components/link/link.js +6 -20
  368. package/test-env/components/link/link.styles.js +1 -4
  369. package/test-env/components/list_group/list_group.js +6 -1
  370. package/test-env/components/list_group/list_group_item.js +14 -4
  371. package/test-env/components/list_group/list_group_item.styles.js +2 -1
  372. package/test-env/components/list_group/pinnable_list_group/pinnable_list_group.js +12 -2
  373. package/test-env/components/notification/notification_event.a11y.js +1 -2
  374. package/test-env/components/notification/notification_event.js +7 -5
  375. package/test-env/components/popover/popover.js +4 -1
  376. package/test-env/components/resizable_container/resizable_container.a11y.js +4 -8
  377. package/test-env/components/search_bar/search_bar.a11y.js +3 -6
  378. package/test-env/components/selectable/selectable.js +16 -1
  379. package/test-env/components/selectable/selectable_list/selectable_list.js +227 -78
  380. package/test-env/components/selectable/selectable_templates/selectable_template_sitewide.js +16 -1
  381. package/test-env/components/text/text.styles.js +2 -2
  382. package/test-env/components/text_truncate/text_truncate.js +32 -9
@@ -1,6 +1,6 @@
1
1
  var _excluded = ["data"],
2
- _excluded2 = ["label", "isGroupLabel", "checked", "disabled", "prepend", "append", "ref", "key", "searchableLabel", "data"],
3
- _excluded3 = ["className", "options", "searchValue", "onOptionClick", "renderOption", "height", "windowProps", "rowHeight", "activeOptionIndex", "makeOptionId", "showIcons", "singleSelection", "visibleOptions", "allowExclusions", "bordered", "paddingSize", "searchable", "onFocusBadge", "listId", "setActiveOptionIndex", "aria-label", "aria-labelledby", "aria-describedby", "role", "isVirtualized", "textWrap"];
2
+ _excluded2 = ["label", "isGroupLabel", "checked", "disabled", "prepend", "append", "ref", "key", "searchableLabel", "data", "truncationProps"],
3
+ _excluded3 = ["className", "options", "searchValue", "onOptionClick", "renderOption", "height", "windowProps", "rowHeight", "activeOptionIndex", "makeOptionId", "showIcons", "singleSelection", "visibleOptions", "allowExclusions", "bordered", "paddingSize", "searchable", "onFocusBadge", "listId", "setActiveOptionIndex", "aria-label", "aria-labelledby", "aria-describedby", "role", "isVirtualized", "textWrap", "truncationProps"];
4
4
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -34,6 +34,8 @@ import classNames from 'classnames';
34
34
  import { FixedSizeList, areEqual } from 'react-window';
35
35
  import { EuiAutoSizer } from '../../auto_sizer';
36
36
  import { EuiHighlight } from '../../highlight';
37
+ import { EuiMark } from '../../mark';
38
+ import { EuiTextTruncate } from '../../text_truncate';
37
39
  import { EuiSelectableListItem } from './selectable_list_item';
38
40
 
39
41
  // Consumer Configurable Props via `EuiSelectable.listProps`
@@ -88,20 +90,23 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
88
90
  }
89
91
  }
90
92
  });
91
- _defineProperty(_assertThisInitialized(_this), "ariaSetSize", 0);
92
- _defineProperty(_assertThisInitialized(_this), "ariaPosInSetMap", {});
93
+ // This utility is necessary to exclude group labels from the aria set count
93
94
  _defineProperty(_assertThisInitialized(_this), "calculateAriaSetAttrs", function (optionArray) {
94
- _this.ariaPosInSetMap = {};
95
+ var ariaPosInSetMap = {};
95
96
  var latestAriaPosIndex = 0;
96
97
  optionArray.forEach(function (option, index) {
97
98
  if (!option.isGroupLabel) {
98
99
  latestAriaPosIndex++;
99
- _this.ariaPosInSetMap[index] = latestAriaPosIndex;
100
+ ariaPosInSetMap[index] = latestAriaPosIndex;
100
101
  }
101
102
  });
102
- _this.ariaSetSize = latestAriaPosIndex;
103
+ return {
104
+ ariaPosInSetMap: ariaPosInSetMap,
105
+ ariaSetSize: latestAriaPosIndex
106
+ };
103
107
  });
104
108
  _defineProperty(_assertThisInitialized(_this), "ListRow", /*#__PURE__*/memo(function (_ref) {
109
+ var _option$textWrap;
105
110
  var data = _ref.data,
106
111
  index = _ref.index,
107
112
  style = _ref.style;
@@ -118,19 +123,20 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
118
123
  key = option.key,
119
124
  searchableLabel = option.searchableLabel,
120
125
  _data = option.data,
126
+ _truncationProps = option.truncationProps,
121
127
  optionRest = _objectWithoutProperties(option, _excluded2);
122
128
  var _this$props2 = _this.props,
123
129
  activeOptionIndex = _this$props2.activeOptionIndex,
124
130
  allowExclusions = _this$props2.allowExclusions,
125
131
  onFocusBadge = _this$props2.onFocusBadge,
126
132
  paddingSize = _this$props2.paddingSize,
127
- searchValue = _this$props2.searchValue,
128
133
  showIcons = _this$props2.showIcons,
129
134
  makeOptionId = _this$props2.makeOptionId,
130
135
  renderOption = _this$props2.renderOption,
131
136
  setActiveOptionIndex = _this$props2.setActiveOptionIndex,
132
137
  searchable = _this$props2.searchable,
133
- textWrap = _this$props2.textWrap;
138
+ searchValue = _this$props2.searchValue,
139
+ isVirtualized = _this$props2.isVirtualized;
134
140
  if (isGroupLabel) {
135
141
  return ___EmotionJSX("li", _extends({
136
142
  role: "presentation",
@@ -140,6 +146,15 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
140
146
  }, optionRest), prepend, label, append);
141
147
  }
142
148
  var id = makeOptionId(index);
149
+ var isFocused = activeOptionIndex === index;
150
+
151
+ // Text wrapping
152
+ var canWrap = !isVirtualized;
153
+ var _textWrap = (_option$textWrap = option.textWrap) !== null && _option$textWrap !== void 0 ? _option$textWrap : _this.props.textWrap;
154
+ var textWrap = canWrap ? _textWrap : 'truncate';
155
+
156
+ // Truncation config (if any). If none, CSS truncation is used
157
+ var truncationProps = textWrap === 'truncate' ? _this.getTruncationProps(option, isFocused) : undefined;
143
158
  return ___EmotionJSX(EuiSelectableListItem, _extends({
144
159
  key: id,
145
160
  id: id,
@@ -152,14 +167,14 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
152
167
  _this.onAddOrRemoveOption(option, event);
153
168
  },
154
169
  ref: ref ? ref.bind(null, index) : undefined,
155
- isFocused: activeOptionIndex === index,
170
+ isFocused: isFocused,
156
171
  title: searchableLabel || label,
157
172
  checked: checked,
158
173
  disabled: disabled,
159
174
  prepend: prepend,
160
175
  append: append,
161
- "aria-posinset": _this.ariaPosInSetMap[index],
162
- "aria-setsize": _this.ariaSetSize,
176
+ "aria-posinset": _this.state.ariaPosInSetMap[index],
177
+ "aria-setsize": _this.state.ariaSetSize,
163
178
  onFocusBadge: onFocusBadge,
164
179
  allowExclusions: allowExclusions,
165
180
  showIcons: showIcons,
@@ -167,16 +182,18 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
167
182
  searchable: searchable,
168
183
  textWrap: textWrap
169
184
  }, optionRest), renderOption ? renderOption( // @ts-ignore complex
170
- _objectSpread(_objectSpread({}, _option), optionData), _this.props.searchValue) : ___EmotionJSX(EuiHighlight, {
171
- search: searchValue
172
- }, label));
185
+ _objectSpread(_objectSpread({}, _option), optionData), searchValue) : searchValue ? _this.renderSearchedText(label, truncationProps) : truncationProps ? _this.renderTruncatedText(label, truncationProps) : label);
173
186
  }, areEqual));
174
- _defineProperty(_assertThisInitialized(_this), "renderVirtualizedList", function (heightIsFull, optionArray) {
187
+ _defineProperty(_assertThisInitialized(_this), "renderVirtualizedList", function () {
175
188
  if (!_this.props.isVirtualized) return null;
189
+ var _this$state = _this.state,
190
+ optionArray = _this$state.optionArray,
191
+ itemData = _this$state.itemData;
176
192
  var _this$props3 = _this.props,
177
193
  windowProps = _this$props3.windowProps,
178
194
  forcedHeight = _this$props3.height,
179
195
  rowHeight = _this$props3.rowHeight;
196
+ var heightIsFull = forcedHeight === 'full';
180
197
  var virtualizationProps = _objectSpread({
181
198
  className: 'euiSelectableList__list',
182
199
  ref: _this.setListRef,
@@ -184,7 +201,7 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
184
201
  innerRef: _this.setListBoxRef,
185
202
  innerElementType: 'ul',
186
203
  itemCount: optionArray.length,
187
- itemData: optionArray,
204
+ itemData: itemData,
188
205
  itemSize: rowHeight,
189
206
  'data-skip-axe': 'scrollable-region-focusable'
190
207
  }, windowProps);
@@ -204,7 +221,9 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
204
221
  calculatedHeight = numVisibleOptions * rowHeight;
205
222
  }
206
223
  }
207
- return heightIsFull ? ___EmotionJSX(EuiAutoSizer, null, function (_ref2) {
224
+ return heightIsFull ? ___EmotionJSX(EuiAutoSizer, {
225
+ onResize: _this.calculateDefaultOptionWidth
226
+ }, function (_ref2) {
208
227
  var width = _ref2.width,
209
228
  height = _ref2.height;
210
229
  return ___EmotionJSX(FixedSizeList, _extends({
@@ -212,7 +231,8 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
212
231
  height: height
213
232
  }, virtualizationProps), _this.ListRow);
214
233
  }) : ___EmotionJSX(EuiAutoSizer, {
215
- disableHeight: true
234
+ disableHeight: true,
235
+ onResize: _this.calculateDefaultOptionWidth
216
236
  }, function (_ref3) {
217
237
  var width = _ref3.width;
218
238
  return ___EmotionJSX(FixedSizeList, _extends({
@@ -221,17 +241,106 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
221
241
  }, virtualizationProps), _this.ListRow);
222
242
  });
223
243
  });
244
+ _defineProperty(_assertThisInitialized(_this), "forceVirtualizedListRowRerender", function () {
245
+ _this.setState({
246
+ itemData: _objectSpread({}, _this.state.optionArray)
247
+ });
248
+ });
249
+ // EuiTextTruncate is expensive perf-wise - we use several utilities here to
250
+ // offset its performance cost
251
+ // and creates a resize observer for
252
+ // each individual item. This logic tries to offset this performance hit by
253
+ // guesstimating a default width for each option
254
+ _defineProperty(_assertThisInitialized(_this), "focusBadgeOffset", 0);
255
+ _defineProperty(_assertThisInitialized(_this), "calculateDefaultOptionWidth", function (_ref4) {
256
+ var containerWidth = _ref4.width;
257
+ var _this$props4 = _this.props,
258
+ truncationProps = _this$props4.truncationProps,
259
+ searchable = _this$props4.searchable,
260
+ searchValue = _this$props4.searchValue;
261
+
262
+ // If it's not likely we'll need to use EuiTextTruncate, don't set state/rerender on every panel resize
263
+ var mayTruncate = searchable || truncationProps;
264
+ if (!mayTruncate) return;
265
+ var paddingOffset = _this.props.paddingSize === 'none' ? 0 : 24; // Defaults to 's'
266
+ var checkedIconOffset = _this.props.showIcons === false ? 0 : 28; // Defaults to true
267
+ _this.focusBadgeOffset = _this.props.onFocusBadge === false ? 0 : 46;
268
+ _this.setState({
269
+ defaultOptionWidth: containerWidth - paddingOffset - checkedIconOffset
270
+ });
271
+
272
+ // Potentially force list rows to rerender on dynamic resize as well,
273
+ // but try to do it as lightly as possible
274
+ if (truncationProps || searchable && searchValue) {
275
+ _this.forceVirtualizedListRowRerender();
276
+ }
277
+ });
278
+ _defineProperty(_assertThisInitialized(_this), "getTruncationProps", function (option, isFocused) {
279
+ // Individual truncation settings should override component-wide settings
280
+ var truncationProps = _objectSpread(_objectSpread({}, _this.props.truncationProps), option.truncationProps);
281
+
282
+ // If we're not actually using EuiTextTruncate, no need to continue
283
+ var hasComplexTruncation = _this.props.searchValue || Object.keys(truncationProps).length > 0;
284
+ if (!hasComplexTruncation) return undefined;
285
+
286
+ // Determine whether we can use the optimized default option width
287
+ var defaultOptionWidth = _this.state.defaultOptionWidth;
288
+ var useDefaultWidth = !option.append && !option.prepend;
289
+ var defaultWidth = useDefaultWidth && defaultOptionWidth ? isFocused ? defaultOptionWidth - _this.focusBadgeOffset : defaultOptionWidth : undefined;
290
+ return _objectSpread({
291
+ width: defaultWidth
292
+ }, truncationProps);
293
+ });
294
+ _defineProperty(_assertThisInitialized(_this), "renderSearchedText", function (text, truncationProps) {
295
+ var searchValue = _this.props.searchValue;
296
+
297
+ // If truncationProps is undefined, we're using non-virtualized text wrapping
298
+ if (!truncationProps) {
299
+ return ___EmotionJSX(EuiHighlight, {
300
+ search: searchValue
301
+ }, text);
302
+ }
303
+ var searchPositionStart = text.toLowerCase().indexOf(searchValue.toLowerCase());
304
+ var searchPositionCenter = searchPositionStart + Math.floor(searchValue.length / 2);
305
+ return ___EmotionJSX(EuiTextTruncate, _extends({}, truncationProps, {
306
+ // When searching, don't allow overriding the truncation settings
307
+ truncation: "startEnd",
308
+ truncationPosition: searchPositionCenter,
309
+ text: text
310
+ }), function (text) {
311
+ return ___EmotionJSX(React.Fragment, null, text.length >= searchValue.length ? ___EmotionJSX(EuiHighlight, {
312
+ search: searchValue
313
+ }, text) :
314
+ // If the available truncated text is shorter than the full search string,
315
+ // just highlight the entire truncated text
316
+ ___EmotionJSX(EuiMark, null, text));
317
+ });
318
+ });
319
+ _defineProperty(_assertThisInitialized(_this), "renderTruncatedText", function (text, truncationProps) {
320
+ return (
321
+ // For some bizarre reason, truncation in EuiSelectable is off on initial mount
322
+ // (but not on rerender) for Safari and _some_ truncation types in Firefox :|
323
+ // Waiting a tick before calculating truncation seems to smooth over the issue
324
+ ___EmotionJSX(EuiTextTruncate, _extends({
325
+ calculationDelayMs: 2
326
+ }, truncationProps, {
327
+ text: text
328
+ }), function (text) {
329
+ return text;
330
+ })
331
+ );
332
+ });
224
333
  _defineProperty(_assertThisInitialized(_this), "onAddOrRemoveOption", function (option, event) {
225
334
  if (option.disabled) {
226
335
  return;
227
336
  }
228
- var _this$props4 = _this.props,
229
- allowExclusions = _this$props4.allowExclusions,
230
- options = _this$props4.options,
231
- _this$props4$visibleO = _this$props4.visibleOptions,
232
- visibleOptions = _this$props4$visibleO === void 0 ? options : _this$props4$visibleO;
233
- _this.props.setActiveOptionIndex(visibleOptions.findIndex(function (_ref4) {
234
- var label = _ref4.label;
337
+ var _this$props5 = _this.props,
338
+ allowExclusions = _this$props5.allowExclusions,
339
+ options = _this$props5.options,
340
+ _this$props5$visibleO = _this$props5.visibleOptions,
341
+ visibleOptions = _this$props5$visibleO === void 0 ? options : _this$props5$visibleO;
342
+ _this.props.setActiveOptionIndex(visibleOptions.findIndex(function (_ref5) {
343
+ var label = _ref5.label;
235
344
  return label === option.label;
236
345
  }), function () {
237
346
  if (option.checked === 'on' && allowExclusions) {
@@ -244,10 +353,10 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
244
353
  });
245
354
  });
246
355
  _defineProperty(_assertThisInitialized(_this), "onAddOption", function (addedOption, event) {
247
- var _this$props5 = _this.props,
248
- onOptionClick = _this$props5.onOptionClick,
249
- options = _this$props5.options,
250
- singleSelection = _this$props5.singleSelection;
356
+ var _this$props6 = _this.props,
357
+ onOptionClick = _this$props6.onOptionClick,
358
+ options = _this$props6.options,
359
+ singleSelection = _this$props6.singleSelection;
251
360
  var changedOption = _objectSpread({}, addedOption);
252
361
  var updatedOptions = options.map(function (option) {
253
362
  // if singleSelection is enabled, uncheck any selected option(s)
@@ -266,10 +375,10 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
266
375
  onOptionClick(updatedOptions, event, changedOption);
267
376
  });
268
377
  _defineProperty(_assertThisInitialized(_this), "onRemoveOption", function (removedOption, event) {
269
- var _this$props6 = _this.props,
270
- onOptionClick = _this$props6.onOptionClick,
271
- singleSelection = _this$props6.singleSelection,
272
- options = _this$props6.options;
378
+ var _this$props7 = _this.props,
379
+ onOptionClick = _this$props7.onOptionClick,
380
+ singleSelection = _this$props7.singleSelection,
381
+ options = _this$props7.options;
273
382
  var changedOption = _objectSpread({}, removedOption);
274
383
  var updatedOptions = options.map(function (option) {
275
384
  var updatedOption = _objectSpread({}, option);
@@ -282,9 +391,9 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
282
391
  onOptionClick(updatedOptions, event, changedOption);
283
392
  });
284
393
  _defineProperty(_assertThisInitialized(_this), "onExcludeOption", function (excludedOption, event) {
285
- var _this$props7 = _this.props,
286
- onOptionClick = _this$props7.onOptionClick,
287
- options = _this$props7.options;
394
+ var _this$props8 = _this.props,
395
+ onOptionClick = _this$props8.onOptionClick,
396
+ options = _this$props8.options;
288
397
  var changedOption = _objectSpread({}, excludedOption);
289
398
  var updatedOptions = options.map(function (option) {
290
399
  var updatedOption = _objectSpread({}, option);
@@ -296,69 +405,83 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
296
405
  });
297
406
  onOptionClick(updatedOptions, event, changedOption);
298
407
  });
408
+ var _optionArray = props.visibleOptions || props.options;
409
+ _this.state = _objectSpread({
410
+ defaultOptionWidth: 0,
411
+ optionArray: _optionArray,
412
+ itemData: _objectSpread({}, _optionArray)
413
+ }, _this.calculateAriaSetAttrs(_optionArray));
299
414
  return _this;
300
415
  }
301
416
  _createClass(EuiSelectableList, [{
302
417
  key: "componentDidUpdate",
303
- value: function componentDidUpdate() {
304
- var activeOptionIndex = this.props.activeOptionIndex;
418
+ value: function componentDidUpdate(prevProps) {
419
+ var _this$props9 = this.props,
420
+ activeOptionIndex = _this$props9.activeOptionIndex,
421
+ visibleOptions = _this$props9.visibleOptions,
422
+ options = _this$props9.options;
305
423
  if (this.listBoxRef && this.props.searchable !== true) {
306
424
  this.listBoxRef.setAttribute('aria-activedescendant', "".concat(this.props.makeOptionId(activeOptionIndex)));
307
425
  }
308
- if (this.listRef && typeof this.props.activeOptionIndex !== 'undefined') {
309
- this.listRef.scrollToItem(this.props.activeOptionIndex, 'auto');
426
+ if (this.listRef && typeof activeOptionIndex !== 'undefined') {
427
+ this.listRef.scrollToItem(activeOptionIndex, 'auto');
428
+ }
429
+ if (prevProps.visibleOptions !== visibleOptions || prevProps.options !== options) {
430
+ var optionArray = visibleOptions || options;
431
+ this.setState(_objectSpread({
432
+ optionArray: optionArray,
433
+ itemData: _objectSpread({}, optionArray)
434
+ }, this.calculateAriaSetAttrs(optionArray)));
310
435
  }
311
436
  }
312
437
  }, {
313
438
  key: "render",
314
439
  value: function render() {
315
440
  var _this2 = this;
316
- var _this$props8 = this.props,
317
- className = _this$props8.className,
318
- options = _this$props8.options,
319
- searchValue = _this$props8.searchValue,
320
- onOptionClick = _this$props8.onOptionClick,
321
- renderOption = _this$props8.renderOption,
322
- forcedHeight = _this$props8.height,
323
- windowProps = _this$props8.windowProps,
324
- rowHeight = _this$props8.rowHeight,
325
- activeOptionIndex = _this$props8.activeOptionIndex,
326
- makeOptionId = _this$props8.makeOptionId,
327
- showIcons = _this$props8.showIcons,
328
- singleSelection = _this$props8.singleSelection,
329
- visibleOptions = _this$props8.visibleOptions,
330
- allowExclusions = _this$props8.allowExclusions,
331
- bordered = _this$props8.bordered,
332
- paddingSize = _this$props8.paddingSize,
333
- searchable = _this$props8.searchable,
334
- onFocusBadge = _this$props8.onFocusBadge,
335
- listId = _this$props8.listId,
336
- setActiveOptionIndex = _this$props8.setActiveOptionIndex,
337
- ariaLabel = _this$props8['aria-label'],
338
- ariaLabelledby = _this$props8['aria-labelledby'],
339
- ariaDescribedby = _this$props8['aria-describedby'],
340
- role = _this$props8.role,
341
- isVirtualized = _this$props8.isVirtualized,
342
- textWrap = _this$props8.textWrap,
343
- rest = _objectWithoutProperties(_this$props8, _excluded3);
344
- var optionArray = visibleOptions || options;
345
- this.calculateAriaSetAttrs(optionArray);
346
- var heightIsFull = forcedHeight === 'full';
441
+ var _this$props10 = this.props,
442
+ className = _this$props10.className,
443
+ options = _this$props10.options,
444
+ searchValue = _this$props10.searchValue,
445
+ onOptionClick = _this$props10.onOptionClick,
446
+ renderOption = _this$props10.renderOption,
447
+ forcedHeight = _this$props10.height,
448
+ windowProps = _this$props10.windowProps,
449
+ rowHeight = _this$props10.rowHeight,
450
+ activeOptionIndex = _this$props10.activeOptionIndex,
451
+ makeOptionId = _this$props10.makeOptionId,
452
+ showIcons = _this$props10.showIcons,
453
+ singleSelection = _this$props10.singleSelection,
454
+ visibleOptions = _this$props10.visibleOptions,
455
+ allowExclusions = _this$props10.allowExclusions,
456
+ bordered = _this$props10.bordered,
457
+ paddingSize = _this$props10.paddingSize,
458
+ searchable = _this$props10.searchable,
459
+ onFocusBadge = _this$props10.onFocusBadge,
460
+ listId = _this$props10.listId,
461
+ setActiveOptionIndex = _this$props10.setActiveOptionIndex,
462
+ ariaLabel = _this$props10['aria-label'],
463
+ ariaLabelledby = _this$props10['aria-labelledby'],
464
+ ariaDescribedby = _this$props10['aria-describedby'],
465
+ role = _this$props10.role,
466
+ isVirtualized = _this$props10.isVirtualized,
467
+ textWrap = _this$props10.textWrap,
468
+ truncationProps = _this$props10.truncationProps,
469
+ rest = _objectWithoutProperties(_this$props10, _excluded3);
347
470
  var classes = classNames('euiSelectableList', {
348
- 'euiSelectableList-fullHeight': heightIsFull,
471
+ 'euiSelectableList-fullHeight': forcedHeight === 'full',
349
472
  'euiSelectableList-bordered': bordered
350
473
  }, className);
351
474
  return ___EmotionJSX("div", _extends({
352
475
  className: classes
353
- }, rest), isVirtualized ? this.renderVirtualizedList(heightIsFull, optionArray) : ___EmotionJSX("div", {
476
+ }, rest), isVirtualized ? this.renderVirtualizedList() : ___EmotionJSX("div", {
354
477
  className: "euiSelectableList__list",
355
478
  ref: this.removeScrollableTabStop
356
479
  }, ___EmotionJSX("ul", {
357
480
  ref: this.setListBoxRef
358
- }, optionArray.map(function (_, index) {
481
+ }, this.state.optionArray.map(function (_, index) {
359
482
  return /*#__PURE__*/React.createElement(_this2.ListRow, {
360
483
  key: index,
361
- data: optionArray,
484
+ data: _this2.state.optionArray,
362
485
  index: index
363
486
  }, null);
364
487
  }))));
@@ -455,6 +578,15 @@ EuiSelectableList.propTypes = {
455
578
  * Wrapping only works if virtualization is off.
456
579
  */
457
580
  textWrap: PropTypes.oneOf(["truncate", "wrap"]),
581
+ /**
582
+ * If textWrap is set to `truncate`, you can pass a custom truncation configuration
583
+ * that accepts any [EuiTextTruncate](/#/utilities/text-truncation) prop except for
584
+ * `text` and `children`.
585
+ *
586
+ * Note: when searching, custom truncation props are ignored. The highlighted search
587
+ * text will always take precedence.
588
+ */
589
+ truncationProps: PropTypes.any,
458
590
  /**
459
591
  * Use virtualized rendering for list items with `react-window`.
460
592
  * Sets each row's height to the value of `rowHeight`.
@@ -513,7 +645,22 @@ EuiSelectableList.propTypes = {
513
645
  * Option data to pass through to the `renderOptions` element.
514
646
  * Bypass `EuiSelectableItem` and avoid DOM attribute warnings.
515
647
  */
516
- data: PropTypes.shape({})
648
+ data: PropTypes.shape({}),
649
+ /**
650
+ * How to handle long text within the item.
651
+ * Wrapping only works if `isVirtualization` is false.
652
+ * @default 'truncate'
653
+ */
654
+ textWrap: PropTypes.oneOf(["truncate", "wrap"]),
655
+ /**
656
+ * If textWrap is set to `truncate`, you can pass a custom truncation configuration
657
+ * that accepts any [EuiTextTruncate](/#/utilities/text-truncation) prop except for
658
+ * `text` and `children`.
659
+ *
660
+ * Note: when searching, custom truncation props are ignored. The highlighted search
661
+ * text will always take precedence.
662
+ */
663
+ truncationProps: PropTypes.any
517
664
  }).isRequired).isRequired,
518
665
  /**
519
666
  * Filtered options list (if applicable)
@@ -532,7 +679,9 @@ EuiSelectableList.propTypes = {
532
679
  prepend: PropTypes.node,
533
680
  append: PropTypes.node,
534
681
  ref: PropTypes.func,
535
- data: PropTypes.shape({})
682
+ data: PropTypes.shape({}),
683
+ textWrap: PropTypes.oneOf(["truncate", "wrap"]),
684
+ truncationProps: PropTypes.any
536
685
  }).isRequired),
537
686
  /**
538
687
  * Search value to highlight on the option render
@@ -385,7 +385,22 @@ EuiSelectableTemplateSitewide.propTypes = {
385
385
  * Option data to pass through to the `renderOptions` element.
386
386
  * Bypass `EuiSelectableItem` and avoid DOM attribute warnings.
387
387
  */
388
- data: PropTypes.shape({})
388
+ data: PropTypes.shape({}),
389
+ /**
390
+ * How to handle long text within the item.
391
+ * Wrapping only works if `isVirtualization` is false.
392
+ * @default 'truncate'
393
+ */
394
+ textWrap: PropTypes.oneOf(["truncate", "wrap"]),
395
+ /**
396
+ * If textWrap is set to `truncate`, you can pass a custom truncation configuration
397
+ * that accepts any [EuiTextTruncate](/#/utilities/text-truncation) prop except for
398
+ * `text` and `children`.
399
+ *
400
+ * Note: when searching, custom truncation props are ignored. The highlighted search
401
+ * text will always take precedence.
402
+ */
403
+ truncationProps: PropTypes.any
389
404
  }).isRequired).isRequired,
390
405
  /**
391
406
  * Override some of the EuiPopover props housing the list.
@@ -54,7 +54,7 @@ var euiScaleText = function euiScaleText(euiThemeContext, options) {
54
54
  var blockQuoteBorderWidth = mathWithUnits(fontSize, function (x) {
55
55
  return x / 4;
56
56
  });
57
- return "\n font-size: ".concat(fontSize, ";\n line-height: ").concat(lineHeight, ";\n\n h1 {\n font-size: ").concat(headings.h1.fontSize, ";\n line-height: ").concat(headings.h1.lineHeight, ";\n }\n h1:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n\n h2 {\n font-size: ").concat(headings.h2.fontSize, ";\n line-height: ").concat(headings.h2.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h3 {\n font-size: ").concat(headings.h3.fontSize, ";\n line-height: ").concat(headings.h3.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h4 {\n font-size: ").concat(headings.h4.fontSize, ";\n line-height: ").concat(headings.h4.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h5 {\n font-size: ").concat(headings.h5.fontSize, ";\n line-height: ").concat(headings.h5.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h6 {\n font-size: ").concat(headings.h6.fontSize, ";\n line-height: ").concat(headings.h6.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n p,\n dl,\n blockquote,\n img,\n pre,\n > ul,\n > ol {\n ").concat(logicalCSS('margin-bottom', lineHeightSize), "\n }\n\n ul,\n ol {\n ").concat(logicalCSS('margin-left', lineHeightSize), "\n }\n\n /* The styles of the nested ordered lists follow the style of GitHub\n which is commonly used in Markdown or MDX formatting. */\n ol ol,\n ul ol {\n list-style-type: lower-roman;\n }\n\n ul ul ol,\n ul ol ol,\n ol ul ol,\n ol ol ol {\n list-style-type: lower-alpha;\n }\n \n blockquote {\n font-size: ").concat(fontSize, ";\n ").concat(logicalShorthandCSS('padding', "0 ".concat(fontSize)), "\n ").concat(logicalCSS('border-left-width', blockQuoteBorderWidth), "\n ").concat(logicalCSS('margin-bottom', fontSize), "\n }\n\n dd + dt {\n ").concat(logicalCSS('margin-top', fontSize), "\n }\n\n dt,\n .eui-definitionListReverse dd {\n font-size: ").concat(fontSize, ";\n line-height: ").concat(lineHeight, ";\n }\n\n .eui-definitionListReverse dt {\n font-size: ").concat(euiFontSize(euiThemeContext, 'xs', options).fontSize, ";\n color: ").concat(euiTheme.colors.text, ";\n }\n\n small {\n font-size: ").concat(euiFontSize(euiThemeContext, 's', options).fontSize, ";\n }\n\n pre:not(.euiCodeBlock__pre) {\n padding: ").concat(lineHeightSize, ";\n }\n\n code:not(.euiCode):not(.euiCodeBlock__code) {\n font-size: .9em; /* 90% of parent font size */\n }\n ").concat(
57
+ return "\n font-size: ".concat(fontSize, ";\n line-height: ").concat(lineHeight, ";\n\n h1 {\n font-size: ").concat(headings.h1.fontSize, ";\n line-height: ").concat(headings.h1.lineHeight, ";\n }\n h1:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n\n h2 {\n font-size: ").concat(headings.h2.fontSize, ";\n line-height: ").concat(headings.h2.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h3 {\n font-size: ").concat(headings.h3.fontSize, ";\n line-height: ").concat(headings.h3.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h4 {\n font-size: ").concat(headings.h4.fontSize, ";\n line-height: ").concat(headings.h4.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h5 {\n font-size: ").concat(headings.h5.fontSize, ";\n line-height: ").concat(headings.h5.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n h6 {\n font-size: ").concat(headings.h6.fontSize, ";\n line-height: ").concat(headings.h6.lineHeight, ";\n\n &:not(:first-child) {\n ").concat(logicalCSS('margin-top', headingMarginTop), "\n }\n\n &:not(:last-child) {\n ").concat(logicalCSS('margin-bottom', headingMarginBottom), "\n }\n }\n\n p,\n dl,\n blockquote,\n pre,\n > ul,\n > ol {\n ").concat(logicalCSS('margin-bottom', lineHeightSize), "\n }\n\n ul,\n ol {\n ").concat(logicalCSS('margin-left', lineHeightSize), "\n }\n\n /* The styles of the nested ordered lists follow the style of GitHub\n which is commonly used in Markdown or MDX formatting. */\n ol ol,\n ul ol {\n list-style-type: lower-roman;\n }\n\n ul ul ol,\n ul ol ol,\n ol ul ol,\n ol ol ol {\n list-style-type: lower-alpha;\n }\n \n blockquote {\n font-size: ").concat(fontSize, ";\n ").concat(logicalShorthandCSS('padding', "0 ".concat(fontSize)), "\n ").concat(logicalCSS('border-left-width', blockQuoteBorderWidth), "\n ").concat(logicalCSS('margin-bottom', fontSize), "\n }\n\n dd + dt {\n ").concat(logicalCSS('margin-top', fontSize), "\n }\n\n dt,\n .eui-definitionListReverse dd {\n font-size: ").concat(fontSize, ";\n line-height: ").concat(lineHeight, ";\n }\n\n .eui-definitionListReverse dt {\n font-size: ").concat(euiFontSize(euiThemeContext, 'xs', options).fontSize, ";\n color: ").concat(euiTheme.colors.text, ";\n }\n\n small {\n font-size: ").concat(euiFontSize(euiThemeContext, 's', options).fontSize, ";\n }\n\n pre:not(.euiCodeBlock__pre) {\n padding: ").concat(lineHeightSize, ";\n }\n\n code:not(.euiCode):not(.euiCodeBlock__code) {\n font-size: .9em; /* 90% of parent font size */\n }\n ").concat(
58
58
  // when textSize is 'm', the 'kbd' element gets a line between the text and the border-bottom
59
59
  _customScale === 'm' ? "\n kbd {\n ".concat(logicalCSS('padding-bottom', euiTheme.size.xs), "\n /* Ensures the shape still looks like a square when only one character */\n ").concat(logicalCSS('min-width', euiTheme.size.l), "\n ").concat(logicalTextAlignCSS('center'), "\n }\n \n kbd::after {\n content: '';\n ").concat(logicalCSS('border-bottom', "".concat(euiTheme.border.width.thin, " solid ").concat(euiTheme.colors.text)), "\n position: absolute;\n ").concat(logicalCSS('bottom', euiTheme.size.xxs), "\n ").concat(logicalCSS('left', 0), "\n ").concat(logicalCSS('width', '100%'), "\n }") : '', "\n ");
60
60
  };
@@ -65,7 +65,7 @@ var euiScaleText = function euiScaleText(euiThemeContext, options) {
65
65
  export var euiTextStyles = function euiTextStyles(euiThemeContext) {
66
66
  var euiTheme = euiThemeContext.euiTheme;
67
67
  return {
68
- euiText: /*#__PURE__*/css(euiText(euiTheme, true), "clear:both;a:not([class]){", euiLinkCSS(euiThemeContext), ";}img{display:block;", logicalCSS('max-width', '100%'), ";}ul{list-style:disc;}ol{list-style:decimal;}blockquote{border-inline-start-color:", euiTheme.border.color, ";border-inline-start-style:solid;}blockquote:not(.euiMarkdownFormat__blockquote){color:", euiTheme.colors.subduedText, ";}h1{", euiTitle(euiThemeContext, 'l'), ";}h2{", euiTitle(euiThemeContext, 'm'), ";}h3{", euiTitle(euiThemeContext, 's'), ";}h4,dt{", euiTitle(euiThemeContext, 'xs'), ";}h5{", euiTitle(euiThemeContext, 'xxs'), ";}h6{", euiTitle(euiThemeContext, 'xxxs'), " text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:", euiBackgroundColor(euiThemeContext, 'subdued'), ";color:", euiTheme.colors.text, ";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{", logicalCSS('margin-bottom', '0 !important'), ";}kbd{position:relative;display:inline-block;", logicalCSS('padding-vertical', euiTheme.size.xxs), " ", logicalCSS('padding-horizontal', euiTheme.size.xs), " line-height:1;border:", euiTheme.border.width.thin, " solid ", euiTheme.colors.text, ";border-radius:", mathWithUnits(euiTheme.border.radius.small, function (x) {
68
+ euiText: /*#__PURE__*/css(euiText(euiTheme, true), "clear:both;a:not([class]){", euiLinkCSS(euiThemeContext), ";}ul{list-style:disc;}ol{list-style:decimal;}blockquote{border-inline-start-color:", euiTheme.border.color, ";border-inline-start-style:solid;}blockquote:not(.euiMarkdownFormat__blockquote){color:", euiTheme.colors.subduedText, ";}h1{", euiTitle(euiThemeContext, 'l'), ";}h2{", euiTitle(euiThemeContext, 'm'), ";}h3{", euiTitle(euiThemeContext, 's'), ";}h4,dt{", euiTitle(euiThemeContext, 'xs'), ";}h5{", euiTitle(euiThemeContext, 'xxs'), ";}h6{", euiTitle(euiThemeContext, 'xxxs'), " text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:", euiBackgroundColor(euiThemeContext, 'subdued'), ";color:", euiTheme.colors.text, ";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{", logicalCSS('margin-bottom', '0 !important'), ";}kbd{position:relative;display:inline-block;", logicalCSS('padding-vertical', euiTheme.size.xxs), " ", logicalCSS('padding-horizontal', euiTheme.size.xs), " line-height:1;border:", euiTheme.border.width.thin, " solid ", euiTheme.colors.text, ";border-radius:", mathWithUnits(euiTheme.border.radius.small, function (x) {
69
69
  return x / 2;
70
70
  }), ";};label:euiText;"),
71
71
  constrainedWidth: /*#__PURE__*/css(logicalCSS('max-width', euiTextConstrainedMaxWidth), ";;label:constrainedWidth;"),
@@ -1,5 +1,5 @@
1
1
  var _excluded = ["width", "onResize"],
2
- _excluded2 = ["width", "children", "text", "truncation", "truncationOffset", "truncationPosition", "ellipsis", "containerRef", "className"],
2
+ _excluded2 = ["width", "children", "text", "truncation", "truncationOffset", "truncationPosition", "ellipsis", "calculationDelayMs", "containerRef", "className"],
3
3
  _excluded3 = ["onResize"];
4
4
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5
5
  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."); }
@@ -18,7 +18,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
18
18
  * Side Public License, v 1.
19
19
  */
20
20
 
21
- import React, { useState, useMemo, useCallback } from 'react';
21
+ import React, { useState, useMemo, useCallback, useEffect } from 'react';
22
22
  import PropTypes from "prop-types";
23
23
  import classNames from 'classnames';
24
24
  import { useCombinedRefs } from '../../services';
@@ -98,7 +98,13 @@ EuiTextTruncate.propTypes = {
98
98
  * allows for more flexible text rendering, e.g. adding custom markup
99
99
  * or highlighting
100
100
  */
101
- children: PropTypes.func
101
+ children: PropTypes.func,
102
+ /**
103
+ * For some edge case scenarios, EuiTextTruncate's calculations may be off until
104
+ * fonts are done loading or layout is done shifting or settling. Adding a delay
105
+ * may help resolve any rendering issues.
106
+ */
107
+ calculationDelayMs: PropTypes.number
102
108
  };
103
109
  var EuiTextTruncateWithWidth = function EuiTextTruncateWithWidth(_ref2) {
104
110
  var width = _ref2.width,
@@ -111,6 +117,7 @@ var EuiTextTruncateWithWidth = function EuiTextTruncateWithWidth(_ref2) {
111
117
  truncationPosition = _ref2.truncationPosition,
112
118
  _ref2$ellipsis = _ref2.ellipsis,
113
119
  ellipsis = _ref2$ellipsis === void 0 ? '…' : _ref2$ellipsis,
120
+ calculationDelayMs = _ref2.calculationDelayMs,
114
121
  containerRef = _ref2.containerRef,
115
122
  className = _ref2.className,
116
123
  rest = _objectWithoutProperties(_ref2, _excluded2);
@@ -121,6 +128,19 @@ var EuiTextTruncateWithWidth = function EuiTextTruncateWithWidth(_ref2) {
121
128
  setContainerEl = _useState2[1];
122
129
  var refs = useCombinedRefs([setContainerEl, containerRef]);
123
130
 
131
+ // If necessary, wait a tick on mount before truncating
132
+ var _useState3 = useState(!calculationDelayMs),
133
+ _useState4 = _slicedToArray(_useState3, 2),
134
+ ready = _useState4[0],
135
+ setReady = _useState4[1];
136
+ useEffect(function () {
137
+ if (calculationDelayMs) {
138
+ setTimeout(function () {
139
+ return setReady(true);
140
+ }, calculationDelayMs);
141
+ }
142
+ }, [calculationDelayMs]);
143
+
124
144
  // Handle exceptions where we need to override the passed props
125
145
  var _useMemo = useMemo(function () {
126
146
  var truncation = _truncation;
@@ -145,7 +165,8 @@ var EuiTextTruncateWithWidth = function EuiTextTruncateWithWidth(_ref2) {
145
165
  truncationOffset = _useMemo.truncationOffset;
146
166
  var truncatedText = useMemo(function () {
147
167
  var truncatedText = '';
148
- if (!containerEl || !width) return truncatedText;
168
+ if (!ready || !containerEl) return text;
169
+ if (!width) return truncatedText;
149
170
  var utils = new TruncationUtils({
150
171
  fullText: text,
151
172
  ellipsis: ellipsis,
@@ -177,7 +198,7 @@ var EuiTextTruncateWithWidth = function EuiTextTruncateWithWidth(_ref2) {
177
198
  }
178
199
  }
179
200
  return truncatedText;
180
- }, [width, text, truncation, truncationOffset, truncationPosition, ellipsis, containerEl]);
201
+ }, [ready, width, text, truncation, truncationOffset, truncationPosition, ellipsis, containerEl]);
181
202
  var isTruncating = truncatedText !== text;
182
203
  return ___EmotionJSX("div", _extends({
183
204
  className: classNames('euiTextTruncate', className),
@@ -205,10 +226,10 @@ EuiTextTruncateWithWidth.propTypes = {
205
226
  var EuiTextTruncateWithResizeObserver = function EuiTextTruncateWithResizeObserver(_ref3) {
206
227
  var _onResize = _ref3.onResize,
207
228
  props = _objectWithoutProperties(_ref3, _excluded3);
208
- var _useState3 = useState(0),
209
- _useState4 = _slicedToArray(_useState3, 2),
210
- width = _useState4[0],
211
- setWidth = _useState4[1];
229
+ var _useState5 = useState(0),
230
+ _useState6 = _slicedToArray(_useState5, 2),
231
+ width = _useState6[0],
232
+ setWidth = _useState6[1];
212
233
  var onResize = useCallback(function (_ref4) {
213
234
  var width = _ref4.width;
214
235
  setWidth(width);
@@ -220,6 +241,8 @@ var EuiTextTruncateWithResizeObserver = function EuiTextTruncateWithResizeObserv
220
241
  return ___EmotionJSX(EuiTextTruncateWithWidth, _extends({
221
242
  width: width,
222
243
  containerRef: ref
223
- }, props));
244
+ }, props, {
245
+ "data-resize-observer": "true"
246
+ }));
224
247
  });
225
248
  };