@tcn/ui 0.2.0 → 0.3.1

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 (341) hide show
  1. package/dist/Color-ASIRERSW-B4GaVKuQ.js +990 -0
  2. package/dist/Color-ASIRERSW-B4GaVKuQ.js.map +1 -0
  3. package/dist/WithTooltip-IO6J4KBT-B1oq93K5.js +1485 -0
  4. package/dist/WithTooltip-IO6J4KBT-B1oq93K5.js.map +1 -0
  5. package/dist/actions/__docs__/components/gallery.d.ts +8 -0
  6. package/dist/actions/__docs__/components/gallery.d.ts.map +1 -0
  7. package/dist/actions/__docs__/components/gallery.js +20 -0
  8. package/dist/actions/__docs__/components/gallery.js.map +1 -0
  9. package/dist/actions/__docs__/components/showcase.d.ts +27 -0
  10. package/dist/actions/__docs__/components/showcase.d.ts.map +1 -0
  11. package/dist/actions/__docs__/components/showcase.js +15 -0
  12. package/dist/actions/__docs__/components/showcase.js.map +1 -0
  13. package/dist/actions/button/base_button/base_button.d.ts +2 -0
  14. package/dist/actions/button/base_button/base_button.d.ts.map +1 -1
  15. package/dist/actions/button/base_button/base_button.js +18 -16
  16. package/dist/actions/button/base_button/base_button.js.map +1 -1
  17. package/dist/actions/button/button/button.js +6 -6
  18. package/dist/actions/button/button_group/button_group.js +1 -1
  19. package/dist/actions/button/select_group/select_group.js +13 -13
  20. package/dist/actions/button/select_group/single_select_group.js +6 -6
  21. package/dist/actions/button/slim_button/slim_button.js +2 -2
  22. package/dist/actions/types.d.ts +2 -0
  23. package/dist/actions/types.d.ts.map +1 -0
  24. package/dist/actions/types.js +2 -0
  25. package/dist/actions/types.js.map +1 -0
  26. package/dist/divider.module-FptFV0PX.js +5 -0
  27. package/dist/divider.module-FptFV0PX.js.map +1 -0
  28. package/dist/feedback/loading/loading.js +12 -12
  29. package/dist/feedback/loading/loading.js.map +1 -1
  30. package/dist/feedback/progress/progress_bar.js +1 -1
  31. package/dist/form/field/common/field_control/field_control.js +8 -8
  32. package/dist/form/field/common/status_input/status_input.js +6 -6
  33. package/dist/form/field/field.js +6 -6
  34. package/dist/form/field/h_field/h_field.js +11 -11
  35. package/dist/form/field/v_field/v_field.js +10 -10
  36. package/dist/form/field_set/field_set.js +3 -3
  37. package/dist/formatter-QJ4M4OGQ-DaIl2Wi_.js +6 -0
  38. package/dist/formatter-QJ4M4OGQ-DaIl2Wi_.js.map +1 -0
  39. package/dist/frame.css +1 -0
  40. package/dist/gallery.css +1 -0
  41. package/dist/inputs/checkbox/checkbox.js +11 -11
  42. package/dist/inputs/color_input/color_input.js +1 -1
  43. package/dist/inputs/color_input/color_input.js.map +1 -1
  44. package/dist/inputs/color_input/color_picker.js +6 -6
  45. package/dist/inputs/combo_box/combo_box.js +17 -17
  46. package/dist/inputs/date_picker/date_picker.js +19 -19
  47. package/dist/inputs/date_picker/date_picker_body.js +2 -2
  48. package/dist/inputs/date_picker/date_picker_input.js +20 -20
  49. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  50. package/dist/inputs/date_picker/date_picker_year_input.js +1 -1
  51. package/dist/inputs/date_picker/date_picker_year_input.js.map +1 -1
  52. package/dist/inputs/date_picker/date_picker_year_selector.js +1 -1
  53. package/dist/inputs/input/input.js +5 -5
  54. package/dist/inputs/mask_input/key_capture_input.js +8 -8
  55. package/dist/inputs/mask_input/mask_input.js +5 -5
  56. package/dist/inputs/multi_combo_box/multi_combo_box.js +17 -17
  57. package/dist/inputs/multiselect/multiselect.js +14 -14
  58. package/dist/inputs/multiselect/multiselect_row.js +8 -8
  59. package/dist/inputs/phone_number_input/phone_number_input.js +12 -12
  60. package/dist/inputs/radio/radio.js +10 -10
  61. package/dist/inputs/radio/radio_row.js +3 -3
  62. package/dist/inputs/select/select.js +15 -15
  63. package/dist/inputs/slider/slider.js +11 -11
  64. package/dist/inputs/suggestions/suggestion_list.js +2 -2
  65. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  66. package/dist/inputs/switch/switch.js +5 -5
  67. package/dist/inputs/textarea/textarea.js +7 -7
  68. package/dist/inputs/unit_input/unit_input.js +5 -5
  69. package/dist/layouts/body/h_body.js +7 -7
  70. package/dist/layouts/body/v_body.js +6 -6
  71. package/dist/layouts/column/column.js +17 -17
  72. package/dist/layouts/divider/divider.js +24 -23
  73. package/dist/layouts/divider/divider.js.map +1 -1
  74. package/dist/layouts/footer/footer.js +7 -7
  75. package/dist/layouts/grid/grid.js +24 -24
  76. package/dist/layouts/header/header.js +2 -2
  77. package/dist/layouts/index.d.ts +6 -5
  78. package/dist/layouts/index.d.ts.map +1 -1
  79. package/dist/layouts/index.js +28 -26
  80. package/dist/layouts/index.js.map +1 -1
  81. package/dist/layouts/list/item.js +2 -2
  82. package/dist/layouts/list/list.js +7 -7
  83. package/dist/layouts/list/section_header.js +6 -6
  84. package/dist/layouts/scaffold/scaffold.d.ts +9 -0
  85. package/dist/layouts/scaffold/scaffold.d.ts.map +1 -0
  86. package/dist/layouts/scaffold/scaffold.js +55 -0
  87. package/dist/layouts/scaffold/scaffold.js.map +1 -0
  88. package/dist/layouts/sidebar_end/sidebar_end.js +14 -14
  89. package/dist/layouts/sidebar_start/sidebar_start.js +10 -10
  90. package/dist/layouts/utility_bar/utility_bar.js +10 -10
  91. package/dist/modal.css +1 -1
  92. package/dist/overlay/frame/frame.d.ts.map +1 -1
  93. package/dist/overlay/frame/frame.js +22 -5
  94. package/dist/overlay/frame/frame.js.map +1 -1
  95. package/dist/overlay/index.d.ts +9 -2
  96. package/dist/overlay/index.d.ts.map +1 -1
  97. package/dist/overlay/index.js +22 -10
  98. package/dist/overlay/index.js.map +1 -1
  99. package/dist/overlay/menu/menu.d.ts +1 -1
  100. package/dist/overlay/menu/menu.d.ts.map +1 -1
  101. package/dist/overlay/menu/menu.js +36 -36
  102. package/dist/overlay/menu/menu.js.map +1 -1
  103. package/dist/overlay/popper/base/base_popper.d.ts +11 -0
  104. package/dist/overlay/popper/base/base_popper.d.ts.map +1 -0
  105. package/dist/overlay/popper/base/base_popper.js +27 -0
  106. package/dist/overlay/popper/base/base_popper.js.map +1 -0
  107. package/dist/overlay/popper/base/dismissal_decorator.d.ts +16 -0
  108. package/dist/overlay/popper/base/dismissal_decorator.d.ts.map +1 -0
  109. package/dist/overlay/popper/base/dismissal_decorator.js +69 -0
  110. package/dist/overlay/popper/base/dismissal_decorator.js.map +1 -0
  111. package/dist/overlay/popper/context_popper.d.ts +11 -0
  112. package/dist/overlay/popper/context_popper.d.ts.map +1 -0
  113. package/dist/overlay/popper/context_popper.js +33 -0
  114. package/dist/overlay/popper/context_popper.js.map +1 -0
  115. package/dist/overlay/popper/element_popper.d.ts +7 -0
  116. package/dist/overlay/popper/element_popper.d.ts.map +1 -0
  117. package/dist/overlay/popper/element_popper.js +33 -0
  118. package/dist/overlay/popper/element_popper.js.map +1 -0
  119. package/dist/overlay/popper/hooks/use_context_trigger.d.ts +7 -0
  120. package/dist/overlay/popper/hooks/use_context_trigger.d.ts.map +1 -0
  121. package/dist/overlay/popper/hooks/use_context_trigger.js +31 -0
  122. package/dist/overlay/popper/hooks/use_context_trigger.js.map +1 -0
  123. package/dist/overlay/popper/hooks/use_hover_trigger.d.ts +6 -0
  124. package/dist/overlay/popper/hooks/use_hover_trigger.d.ts.map +1 -0
  125. package/dist/overlay/popper/hooks/use_hover_trigger.js +17 -0
  126. package/dist/overlay/popper/hooks/use_hover_trigger.js.map +1 -0
  127. package/dist/overlay/popper/hooks/use_restore_focus.d.ts +2 -0
  128. package/dist/overlay/popper/hooks/use_restore_focus.d.ts.map +1 -0
  129. package/dist/overlay/popper/hooks/use_restore_focus.js +18 -0
  130. package/dist/overlay/popper/hooks/use_restore_focus.js.map +1 -0
  131. package/dist/overlay/popper/legacy/popper.d.ts.map +1 -0
  132. package/dist/overlay/popper/{popper.js → legacy/popper.js} +6 -6
  133. package/dist/overlay/popper/legacy/popper.js.map +1 -0
  134. package/dist/overlay/popper/preview_popper.d.ts +7 -0
  135. package/dist/overlay/popper/preview_popper.d.ts.map +1 -0
  136. package/dist/overlay/popper/preview_popper.js +46 -0
  137. package/dist/overlay/popper/preview_popper.js.map +1 -0
  138. package/dist/overlay/portal/portal_platform_context.js +4 -4
  139. package/dist/overlay/tethered/element_tethered.d.ts +8 -0
  140. package/dist/overlay/tethered/element_tethered.d.ts.map +1 -0
  141. package/dist/overlay/tethered/element_tethered.js +33 -0
  142. package/dist/overlay/tethered/element_tethered.js.map +1 -0
  143. package/dist/overlay/tethered/hooks/calculate_position.d.ts +19 -0
  144. package/dist/overlay/tethered/hooks/calculate_position.d.ts.map +1 -0
  145. package/dist/overlay/tethered/hooks/calculate_position.js +43 -0
  146. package/dist/overlay/tethered/hooks/calculate_position.js.map +1 -0
  147. package/dist/overlay/tethered/hooks/useTether.d.ts +19 -0
  148. package/dist/overlay/tethered/hooks/useTether.d.ts.map +1 -0
  149. package/dist/overlay/tethered/hooks/useTether.js +61 -0
  150. package/dist/overlay/tethered/hooks/useTether.js.map +1 -0
  151. package/dist/overlay/tethered/tethered.d.ts +20 -0
  152. package/dist/overlay/tethered/tethered.d.ts.map +1 -0
  153. package/dist/overlay/tethered/tethered.js +59 -0
  154. package/dist/overlay/tethered/tethered.js.map +1 -0
  155. package/dist/overlay/tethered/types.d.ts +3 -0
  156. package/dist/overlay/tethered/types.d.ts.map +1 -0
  157. package/dist/overlay/tethered/types.js +2 -0
  158. package/dist/overlay/tethered/types.js.map +1 -0
  159. package/dist/popper.css +1 -1
  160. package/dist/scaffold.css +1 -0
  161. package/dist/showcase-WfP6kBEb.js +58401 -0
  162. package/dist/showcase-WfP6kBEb.js.map +1 -0
  163. package/dist/showcase.css +1 -0
  164. package/dist/stacks/box/box.js +24 -24
  165. package/dist/stacks/h_collapsible_box.js +3 -3
  166. package/dist/stacks/h_stack.js +41 -41
  167. package/dist/stacks/spacer.js +11 -11
  168. package/dist/stacks/story_components/circle.js +10 -10
  169. package/dist/stacks/story_components/picture_placeholder.js +9 -9
  170. package/dist/stacks/story_components/rect.js +7 -7
  171. package/dist/stacks/story_components/style_box.js +4 -4
  172. package/dist/stacks/utils/use_is_collapsed.js +6 -6
  173. package/dist/stacks/v_collapsible_box.js +3 -3
  174. package/dist/stacks/v_stack.js +42 -42
  175. package/dist/stacks/z_stack.js +39 -39
  176. package/dist/surfaces/alert/alert.js +4 -4
  177. package/dist/surfaces/card/card.d.ts +2 -2
  178. package/dist/surfaces/card/card.d.ts.map +1 -1
  179. package/dist/surfaces/card/card.js +7 -7
  180. package/dist/surfaces/card/card.js.map +1 -1
  181. package/dist/surfaces/confirm/confirm.js +9 -9
  182. package/dist/surfaces/drawers/drawer_start/drawer_start.js +2 -2
  183. package/dist/surfaces/drawers/drawer_top/drawer_top.js +2 -2
  184. package/dist/surfaces/index.d.ts +2 -0
  185. package/dist/surfaces/index.d.ts.map +1 -1
  186. package/dist/surfaces/index.js +22 -18
  187. package/dist/surfaces/index.js.map +1 -1
  188. package/dist/surfaces/modal/modal.d.ts +3 -3
  189. package/dist/surfaces/modal/modal.d.ts.map +1 -1
  190. package/dist/surfaces/modal/modal.js +14 -14
  191. package/dist/surfaces/modal/modal.js.map +1 -1
  192. package/dist/surfaces/page/h_page.js +7 -7
  193. package/dist/surfaces/page/v_page.js +5 -5
  194. package/dist/surfaces/panel/h_panel.js +29 -30
  195. package/dist/surfaces/panel/h_panel.js.map +1 -1
  196. package/dist/surfaces/panel/v_panel.d.ts +3 -7
  197. package/dist/surfaces/panel/v_panel.d.ts.map +1 -1
  198. package/dist/surfaces/panel/v_panel.js +12 -54
  199. package/dist/surfaces/panel/v_panel.js.map +1 -1
  200. package/dist/surfaces/pop_confirm/pop_confirm.d.ts +5 -0
  201. package/dist/surfaces/pop_confirm/pop_confirm.d.ts.map +1 -0
  202. package/dist/surfaces/pop_confirm/pop_confirm.js +37 -0
  203. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -0
  204. package/dist/surfaces/popconfirm/pop_confirm.d.ts +5 -0
  205. package/dist/surfaces/popconfirm/pop_confirm.d.ts.map +1 -0
  206. package/dist/surfaces/popconfirm/pop_confirm.js +13 -0
  207. package/dist/surfaces/popconfirm/pop_confirm.js.map +1 -0
  208. package/dist/surfaces/popover/popover.d.ts +1 -1
  209. package/dist/surfaces/popover/popover.d.ts.map +1 -1
  210. package/dist/surfaces/popover/popover.js +1 -1
  211. package/dist/surfaces/popover/popover.js.map +1 -1
  212. package/dist/surfaces/tooltip/tooltip.d.ts +10 -0
  213. package/dist/surfaces/tooltip/tooltip.d.ts.map +1 -0
  214. package/dist/surfaces/tooltip/tooltip.js +38 -0
  215. package/dist/surfaces/tooltip/tooltip.js.map +1 -0
  216. package/dist/surfaces/window/window.d.ts +3 -3
  217. package/dist/surfaces/window/window.d.ts.map +1 -1
  218. package/dist/surfaces/window/window.js +15 -13
  219. package/dist/surfaces/window/window.js.map +1 -1
  220. package/dist/syntaxhighlighter-IQDEPFLK-BX_eF8__.js +3777 -0
  221. package/dist/syntaxhighlighter-IQDEPFLK-BX_eF8__.js.map +1 -0
  222. package/dist/tethered.css +1 -0
  223. package/dist/themes/themes/ergo/ergo_theme.js +177 -206
  224. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  225. package/dist/tokens/badge/badge.js +9 -9
  226. package/dist/tokens/bubble/bubble.js +8 -8
  227. package/dist/tokens/chip/chip.js +3 -3
  228. package/dist/tooltip.css +1 -1
  229. package/dist/utility_bar.css +1 -1
  230. package/dist/utils/click_away_listener.d.ts +1 -0
  231. package/dist/utils/click_away_listener.d.ts.map +1 -1
  232. package/dist/utils/click_away_listener.js +12 -11
  233. package/dist/utils/click_away_listener.js.map +1 -1
  234. package/dist/utils/dnd/draggable/draggable.js +4 -4
  235. package/dist/utils/dnd/handle.js +8 -8
  236. package/dist/utils/focus_redirect.js +5 -5
  237. package/dist/utils/hooks/make_context_hook.js +4 -4
  238. package/dist/utils/hooks/use_media_query.js +2 -2
  239. package/dist/utils/hooks/use_media_query.js.map +1 -1
  240. package/dist/utils/index.d.ts +6 -5
  241. package/dist/utils/index.d.ts.map +1 -1
  242. package/dist/utils/index.js +26 -23
  243. package/dist/utils/index.js.map +1 -1
  244. package/dist/utils/mouse_leave_region.d.ts +8 -0
  245. package/dist/utils/mouse_leave_region.d.ts.map +1 -0
  246. package/dist/utils/mouse_leave_region.js +26 -0
  247. package/dist/utils/mouse_leave_region.js.map +1 -0
  248. package/dist/utils/types/dimensions.d.ts +11 -1
  249. package/dist/utils/types/dimensions.d.ts.map +1 -1
  250. package/package.json +3 -3
  251. package/src/actions/__docs__/actions.mdx +131 -0
  252. package/src/actions/__docs__/actions.stories.tsx +309 -0
  253. package/src/actions/__docs__/components/gallery.module.css +6 -0
  254. package/src/actions/__docs__/components/gallery.tsx +28 -0
  255. package/src/actions/__docs__/components/showcase.module.css +55 -0
  256. package/src/actions/__docs__/components/showcase.tsx +121 -0
  257. package/src/actions/button/base_button/base_button.tsx +5 -1
  258. package/src/actions/types.ts +6 -0
  259. package/src/inputs/color_input/color_input.tsx +1 -1
  260. package/src/inputs/date_picker/date_picker_input.tsx +1 -1
  261. package/src/inputs/date_picker/date_picker_year_input.tsx +1 -1
  262. package/src/inputs/suggestions/suggestion_list.tsx +1 -1
  263. package/src/layouts/index.ts +7 -5
  264. package/src/layouts/scaffold/scaffold.module.css +5 -0
  265. package/src/layouts/scaffold/scaffold.tsx +60 -0
  266. package/src/layouts/utility_bar/utility_bar.module.css +0 -3
  267. package/src/overlay/frame/frame.module.css +5 -0
  268. package/src/overlay/frame/frame.stories.tsx +1 -1
  269. package/src/overlay/frame/frame.tsx +19 -3
  270. package/src/overlay/index.ts +29 -2
  271. package/src/overlay/menu/menu.tsx +1 -1
  272. package/src/overlay/popper/__stories__/base_args.ts +75 -0
  273. package/src/overlay/popper/__stories__/context_popper.stories.tsx +77 -0
  274. package/src/overlay/popper/__stories__/element_popper.stories.tsx +80 -0
  275. package/src/overlay/popper/__stories__/preview_popper.stories.tsx +73 -0
  276. package/src/overlay/popper/base/base_popper.tsx +55 -0
  277. package/src/overlay/popper/base/dismissal_decorator.tsx +80 -0
  278. package/src/overlay/popper/context_popper.tsx +43 -0
  279. package/src/overlay/popper/element_popper.tsx +42 -0
  280. package/src/overlay/popper/hooks/use_context_trigger.ts +50 -0
  281. package/src/overlay/popper/hooks/use_hover_trigger.ts +24 -0
  282. package/src/overlay/popper/hooks/use_restore_focus.ts +16 -0
  283. package/src/overlay/popper/{popper.stories.tsx → legacy/popper.stories.tsx} +11 -5
  284. package/src/overlay/popper/{popper.tsx → legacy/popper.tsx} +3 -2
  285. package/src/overlay/popper/preview_popper.tsx +54 -0
  286. package/src/overlay/tethered/__stories__/element/element_tethered.stories.tsx +57 -0
  287. package/src/overlay/tethered/__stories__/element/element_tethered_stories.module.css +14 -0
  288. package/src/overlay/tethered/__stories__/shared/base_story_config.ts +52 -0
  289. package/src/overlay/tethered/__stories__/shared/components/sb_point.module.css +20 -0
  290. package/src/overlay/tethered/__stories__/shared/components/sb_point.tsx +34 -0
  291. package/src/overlay/tethered/__stories__/shared/components/sb_reference_points.tsx +54 -0
  292. package/src/overlay/tethered/__stories__/tethered/tethered.stories.tsx +90 -0
  293. package/src/overlay/tethered/__stories__/tethered/tethered_stories.module.css +25 -0
  294. package/src/overlay/tethered/element_tethered.tsx +62 -0
  295. package/src/overlay/tethered/hooks/calculate_position.ts +110 -0
  296. package/src/overlay/tethered/hooks/useTether.ts +85 -0
  297. package/src/overlay/tethered/tethered.module.css +8 -0
  298. package/src/overlay/tethered/tethered.tsx +72 -0
  299. package/src/overlay/tethered/types.ts +2 -0
  300. package/src/stacks/h_stack.stories.tsx +2 -2
  301. package/src/stacks/v_stack.stories.tsx +2 -2
  302. package/src/surfaces/card/card.stories.tsx +64 -0
  303. package/src/surfaces/card/card.tsx +4 -4
  304. package/src/surfaces/card/card_stories.module.css +13 -0
  305. package/src/surfaces/index.ts +2 -0
  306. package/src/surfaces/modal/__stories__/modal.stories.tsx +12 -1
  307. package/src/surfaces/modal/modal.module.css +2 -2
  308. package/src/surfaces/modal/modal.tsx +14 -12
  309. package/src/surfaces/panel/__stories__/panel.stories.tsx +1 -1
  310. package/src/surfaces/panel/v_panel.tsx +8 -53
  311. package/src/surfaces/pop_confirm/pop_confirm.stories.tsx +70 -0
  312. package/src/surfaces/pop_confirm/pop_confirm.tsx +30 -0
  313. package/src/surfaces/popconfirm/pop_confirm.tsx +18 -0
  314. package/src/surfaces/popover/popover.tsx +1 -1
  315. package/src/surfaces/tooltip/tooltip.stories.tsx +54 -0
  316. package/src/surfaces/tooltip/tooltip.tsx +59 -0
  317. package/src/surfaces/window/window.stories.tsx +15 -1
  318. package/src/surfaces/window/window.tsx +16 -12
  319. package/src/themes/themes/ergo/__stories__/components/tone_picker/sb_tone_picker.tsx +7 -9
  320. package/src/themes/themes/ergo/__stories__/material.stories.tsx +2 -6
  321. package/src/themes/themes/ergo/__stories__/sb_materials.module.css +29 -21
  322. package/src/themes/themes/ergo/ergo_theme.css +177 -206
  323. package/src/utils/click_away_listener.tsx +1 -1
  324. package/src/utils/index.ts +7 -5
  325. package/src/utils/mouse_leave_region.tsx +38 -0
  326. package/src/utils/types/dimensions.ts +13 -1
  327. package/tsconfig.json +3 -0
  328. package/dist/overlay/popper/popper.d.ts.map +0 -1
  329. package/dist/overlay/popper/popper.js.map +0 -1
  330. package/dist/overlay/tooltip/tooltip.d.ts +0 -7
  331. package/dist/overlay/tooltip/tooltip.d.ts.map +0 -1
  332. package/dist/overlay/tooltip/tooltip.js +0 -20
  333. package/dist/overlay/tooltip/tooltip.js.map +0 -1
  334. package/dist/panel.module-DwGKncon.js +0 -5
  335. package/dist/panel.module-DwGKncon.js.map +0 -1
  336. package/src/overlay/tooltip/tooltip.stories.tsx +0 -22
  337. package/src/overlay/tooltip/tooltip.tsx +0 -24
  338. /package/dist/{panel.css → h_panel.css} +0 -0
  339. /package/dist/overlay/popper/{popper.d.ts → legacy/popper.d.ts} +0 -0
  340. /package/src/overlay/popper/{popper.module.css → legacy/popper.module.css} +0 -0
  341. /package/src/{overlay → surfaces}/tooltip/tooltip.module.css +0 -0
@@ -1,7 +1,4 @@
1
1
  .utility-bar {
2
2
  width: 100%;
3
3
  min-height: 0;
4
- border-bottom: 1px solid rgb(221, 221, 221);
5
- padding: var(--padding-medium);
6
- gap: var(--gap-medium);
7
4
  }
@@ -0,0 +1,5 @@
1
+ .frame {
2
+ padding: 0;
3
+ border: none;
4
+ background: none;
5
+ }
@@ -6,7 +6,7 @@ import { BodyText } from '../../typography/index.js';
6
6
  import { Header } from '../../layouts/index.js';
7
7
  import styles from './frame_stories.module.css';
8
8
  export default {
9
- title: 'Overlay/Floating/Frame',
9
+ title: 'Overlays/Floating/Frame',
10
10
  component: Frame,
11
11
  tags: ['autodocs'],
12
12
 
@@ -3,6 +3,10 @@ import { ZStack, type ZStackProps } from '../../stacks/index.js';
3
3
  import { Portal } from '../portal/portal.js';
4
4
  import { Draggable } from '../../utils/dnd/draggable/draggable.js';
5
5
 
6
+ // Styles
7
+ import styles from './frame.module.css';
8
+ import { clsx } from 'clsx';
9
+
6
10
  export interface FrameOwnProps {
7
11
  isOpen?: boolean;
8
12
  children?: React.ReactNode;
@@ -13,7 +17,14 @@ export interface FrameOwnProps {
13
17
  export type FrameProps = ZStackProps & FrameOwnProps;
14
18
 
15
19
  export const Frame = React.forwardRef<HTMLDialogElement, FrameProps>(function Frame(
16
- { children, isOpen = false, draggable = true, veil = false, ...rest }: FrameProps,
20
+ {
21
+ children,
22
+ isOpen = false,
23
+ draggable = true,
24
+ veil = false,
25
+ className,
26
+ ...rest
27
+ }: FrameProps,
17
28
  ref
18
29
  ) {
19
30
  if (!isOpen) {
@@ -22,9 +33,14 @@ export const Frame = React.forwardRef<HTMLDialogElement, FrameProps>(function Fr
22
33
 
23
34
  return (
24
35
  <Portal>
25
- <ZStack width="100%" height="100%" data-is-veil={veil} className="tcn-frame">
36
+ <ZStack width="100%" height="100%" data-is-veil={veil} className="tcn-frame-veil">
26
37
  <Draggable draggable={draggable}>
27
- <ZStack ref={ref} {...rest}>
38
+ <ZStack
39
+ as="dialog"
40
+ ref={ref}
41
+ className={clsx(styles['frame'], 'tcn-frame', className)}
42
+ {...rest}
43
+ >
28
44
  {children}
29
45
  </ZStack>
30
46
  </Draggable>
@@ -1,6 +1,33 @@
1
1
  export * from './portal/portal.js';
2
2
  export * from './context_menu/context_menu.js';
3
3
  export * from './menu/menu.js';
4
- export * from './tooltip/tooltip.js';
5
- export * from './popper/popper.js';
4
+
6
5
  export { Frame, type FrameOwnProps, type FrameProps } from './frame/frame.js';
6
+ export {
7
+ ElementTethered,
8
+ type ElementTetheredProps,
9
+ } from './tethered/element_tethered.js';
10
+ export { Tethered, type TetheredProps } from './tethered/tethered.js';
11
+ export { type HorizontalTether, type VerticalTether } from './tethered/types.js';
12
+ export * from './popper/legacy/popper.js';
13
+ export {
14
+ PopperDismissal,
15
+ type PopperDismissalDecoratorProps,
16
+ } from './popper/base/dismissal_decorator.js';
17
+ export {
18
+ PreviewPopper,
19
+ type PreviewPopperProps,
20
+ } from './popper/preview_popper.js';
21
+ export {
22
+ ContextPopper,
23
+ type ContextPopperProps,
24
+ } from './popper/context_popper.js';
25
+ export {
26
+ ElementPopper,
27
+ type ElementPopperProps,
28
+ } from './popper/element_popper.js';
29
+ export {
30
+ type BasePopperOwnProps,
31
+ type BasePopperProps,
32
+ BasePopper,
33
+ } from './popper/base/base_popper.js';
@@ -4,7 +4,7 @@ import { HStack } from '../../stacks/h_stack.js';
4
4
  import { VStack } from '../../stacks/v_stack.js';
5
5
  import type { HStackProps } from '../../stacks/h_stack.js';
6
6
  import type { VStackProps } from '../../stacks/v_stack.js';
7
- import { Popper, type PopperProps } from '../../overlay/popper/popper.js';
7
+ import { Popper, type PopperProps } from '../popper/legacy/popper.js';
8
8
  import React, { useLayoutEffect, useRef, useState } from 'react';
9
9
  import styles from './menu.module.css';
10
10
  import { clsx } from 'clsx';
@@ -0,0 +1,75 @@
1
+ import { type ArgTypes } from '@storybook/react-vite';
2
+ import { PopperDismissal } from '../base/dismissal_decorator.js';
3
+ import type { BasePopperProps } from '../base/base_popper.js';
4
+ import type { BaseTetheredOwnProps } from '../../tethered/tethered.js';
5
+
6
+ export type SB_PopoverStoryProps = Pick<
7
+ BasePopperProps,
8
+ 'restoreFocus' | 'dismissals' | 'veil'
9
+ > &
10
+ BaseTetheredOwnProps;
11
+
12
+ export const SBPopperInitialArgs: SB_PopoverStoryProps = {
13
+ verticalAnchor: 'top',
14
+ horizontalAnchor: 'center',
15
+ verticalOrigin: 'bottom',
16
+ horizontalOrigin: 'center',
17
+ verticalOffset: 0,
18
+ horizontalOffset: 0,
19
+ restoreFocus: false,
20
+ veil: false,
21
+ };
22
+
23
+ export const SBPopperBaseArgs: ArgTypes<SB_PopoverStoryProps> = {
24
+ verticalAnchor: {
25
+ options: ['top', 'center', 'bottom'],
26
+ control: { type: 'radio' },
27
+ description: 'The anchor to position the popper vertically.',
28
+ },
29
+ horizontalAnchor: {
30
+ options: ['start', 'center', 'end'],
31
+ control: { type: 'radio' },
32
+ description: 'The anchor to position the popper horizontally.',
33
+ },
34
+ verticalOrigin: {
35
+ options: ['top', 'center', 'bottom'],
36
+ control: { type: 'radio' },
37
+ description: 'The origin to position the popper vertically.',
38
+ },
39
+ horizontalOrigin: {
40
+ options: ['start', 'center', 'end'],
41
+ control: { type: 'radio' },
42
+ description: 'The origin to position the popper horizontally.',
43
+ },
44
+ verticalOffset: {
45
+ control: { type: 'number' },
46
+ defaultValue: 0,
47
+ description: 'The offset to position the popper vertically.',
48
+ },
49
+ horizontalOffset: {
50
+ control: { type: 'number' },
51
+ defaultValue: 0,
52
+ description: 'The offset to position the popper horizontally.',
53
+ },
54
+ restoreFocus: {
55
+ control: { type: 'boolean' },
56
+ defaultValue: false,
57
+ description: 'Whether to restore focus when the popper is closed.',
58
+ },
59
+ dismissals: {
60
+ options: [
61
+ PopperDismissal.SCROLL_AWAY,
62
+ PopperDismissal.CLICK_AWAY,
63
+ PopperDismissal.MOUSE_LEAVE,
64
+ PopperDismissal.VEIL_CLICK,
65
+ ],
66
+ control: { type: 'multi-select' },
67
+ defaultValue: [PopperDismissal.SCROLL_AWAY, PopperDismissal.CLICK_AWAY],
68
+ description: 'The dismissals to apply to the popper.',
69
+ },
70
+ veil: {
71
+ control: { type: 'boolean' },
72
+ defaultValue: false,
73
+ description: 'Whether to display a veil when the popper is open.',
74
+ },
75
+ };
@@ -0,0 +1,77 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import React, { useRef } from 'react';
3
+ import {
4
+ ContextPopper as ContextPopperComponent,
5
+ ContextPopperProps,
6
+ } from '../context_popper.js';
7
+ import { StyleBox } from '../../../stacks/story_components/style_box.js';
8
+ import { VStack } from '../../../stacks/v_stack.js';
9
+ import { BodyText } from '../../../typography/index.js';
10
+ import { HStack } from '../../../stacks/h_stack.js';
11
+ import { SBPopperBaseArgs, SBPopperInitialArgs } from './base_args.js';
12
+ import { PopperDismissal } from '../base/dismissal_decorator.js';
13
+
14
+ type ElementPopoverStoryProps = Omit<ContextPopperProps, 'anchorElement'> & {
15
+ clickAwayRefs?: React.RefObject<HTMLElement | null>[];
16
+ };
17
+
18
+ const meta: Meta<typeof ContextPopperComponent> = {
19
+ title: 'Overlays/Popper/Context Popper',
20
+ component: ContextPopperComponent,
21
+ tags: ['autodocs'],
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: 'A popper component that displays a content in a portal.',
26
+ },
27
+ },
28
+ },
29
+ argTypes: SBPopperBaseArgs,
30
+ args: {
31
+ ...SBPopperInitialArgs,
32
+ dismissals: [PopperDismissal.CLICK_AWAY, PopperDismissal.SCROLL_AWAY],
33
+ },
34
+ };
35
+
36
+ export default meta;
37
+
38
+ export function ContextPopper(props: ElementPopoverStoryProps) {
39
+ const anchorElement = useRef<HTMLButtonElement>(null);
40
+
41
+ return (
42
+ <VStack height="100%" width="100%" minHeight="600px" hAlign="center" vAlign="center">
43
+ <HStack
44
+ ref={anchorElement}
45
+ minWidth="200px"
46
+ minHeight="100px"
47
+ vAlign="center"
48
+ hAlign="center"
49
+ style={{ cursor: 'context-menu', background: 'blue', color: 'white' }}
50
+ >
51
+ Right-click me!
52
+ </HStack>
53
+ <ContextPopperComponent
54
+ anchorElement={anchorElement}
55
+ verticalAnchor={props.verticalAnchor}
56
+ verticalOrigin={props.verticalOrigin}
57
+ verticalOffset={props.verticalOffset}
58
+ horizontalAnchor={props.horizontalAnchor}
59
+ horizontalOrigin={props.horizontalOrigin}
60
+ horizontalOffset={props.horizontalOffset}
61
+ restoreFocus={props.restoreFocus}
62
+ dismissals={props.dismissals}
63
+ veil={props.veil}
64
+ >
65
+ <StyleBox
66
+ className="surface-primary"
67
+ boxShadow="0 0 10px 1px rgba(0,0,0,0.45)"
68
+ backgroundColor="white"
69
+ padding="8px"
70
+ borderRadius={'8px'}
71
+ >
72
+ <BodyText selectable>Hello World</BodyText>
73
+ </StyleBox>
74
+ </ContextPopperComponent>
75
+ </VStack>
76
+ );
77
+ }
@@ -0,0 +1,80 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import React, { useRef, useState } from 'react';
3
+ import {
4
+ ElementPopper as ElementPopperComponent,
5
+ ElementPopperProps,
6
+ } from '../element_popper.js';
7
+ import { StyleBox } from '../../../stacks/story_components/style_box.js';
8
+ import { VStack } from '../../../stacks/v_stack.js';
9
+ import { BodyText } from '../../../typography/index.js';
10
+ import { Button } from '../../../actions/index.js';
11
+ import { SBPopperBaseArgs, SBPopperInitialArgs } from './base_args.js';
12
+
13
+ type ElementPopoverStoryProps = Omit<
14
+ ElementPopperProps,
15
+ 'anchorElement' | 'open' | 'onClose' | 'isScrollAwayException'
16
+ > & {
17
+ clickAwayRefs?: React.RefObject<HTMLElement | null>[];
18
+ isScrollAwayException?: boolean;
19
+ };
20
+
21
+ const meta: Meta<typeof ElementPopperComponent> = {
22
+ title: 'Overlays/Popper/Element Popper',
23
+ component: ElementPopperComponent,
24
+ tags: ['autodocs'],
25
+ parameters: {
26
+ docs: {
27
+ description: {
28
+ component: 'A popper component that displays a content in a portal.',
29
+ },
30
+ },
31
+ },
32
+ argTypes: SBPopperBaseArgs,
33
+ args: SBPopperInitialArgs,
34
+ };
35
+
36
+ export default meta;
37
+
38
+ export function ElementPopper(props: ElementPopoverStoryProps) {
39
+ const [isOpen, setIsOpen] = useState(false);
40
+ const anchorElement = useRef<HTMLButtonElement>(null);
41
+
42
+ function open() {
43
+ setIsOpen(true);
44
+ }
45
+
46
+ function close() {
47
+ setIsOpen(false);
48
+ }
49
+
50
+ return (
51
+ <VStack height="100%" width="100%" minHeight="600px" hAlign="center" vAlign="center">
52
+ <Button onClick={open} ref={anchorElement}>
53
+ Open
54
+ </Button>
55
+ <ElementPopperComponent
56
+ anchorElement={anchorElement}
57
+ open={isOpen}
58
+ onDismissal={close}
59
+ verticalAnchor={props.verticalAnchor}
60
+ verticalOrigin={props.verticalOrigin}
61
+ verticalOffset={props.verticalOffset}
62
+ horizontalAnchor={props.horizontalAnchor}
63
+ horizontalOrigin={props.horizontalOrigin}
64
+ horizontalOffset={props.horizontalOffset}
65
+ restoreFocus={props.restoreFocus}
66
+ dismissals={props.dismissals}
67
+ >
68
+ <StyleBox
69
+ className="surface-primary"
70
+ boxShadow="0 0 10px 1px rgba(0,0,0,0.45)"
71
+ backgroundColor="white"
72
+ padding="8px"
73
+ borderRadius={'8px'}
74
+ >
75
+ <BodyText selectable>Hello World</BodyText>
76
+ </StyleBox>
77
+ </ElementPopperComponent>
78
+ </VStack>
79
+ );
80
+ }
@@ -0,0 +1,73 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import React, { useRef } from 'react';
3
+ import {
4
+ PreviewPopper as PreviewPopperComponent,
5
+ PreviewPopperProps,
6
+ } from '../preview_popper.js';
7
+ import { StyleBox } from '../../../stacks/story_components/style_box.js';
8
+ import { VStack } from '../../../stacks/v_stack.js';
9
+ import { BodyText } from '../../../typography/index.js';
10
+ import { SBPopperBaseArgs, SBPopperInitialArgs } from './base_args.js';
11
+
12
+ type ElementPopoverStoryProps = Omit<PreviewPopperProps, 'anchorElement'> & {
13
+ clickAwayRefs?: React.RefObject<HTMLElement | null>[];
14
+ };
15
+
16
+ const meta: Meta<typeof PreviewPopperComponent> = {
17
+ title: 'Overlays/Popper/Preview Popper',
18
+ component: PreviewPopperComponent,
19
+ tags: ['autodocs'],
20
+ parameters: {
21
+ docs: {
22
+ description: {
23
+ component: 'A popper component that displays a content in a portal.',
24
+ },
25
+ },
26
+ },
27
+ argTypes: SBPopperBaseArgs,
28
+ args: SBPopperInitialArgs,
29
+ };
30
+
31
+ export default meta;
32
+
33
+ export function SBPreviewPopper(props: ElementPopoverStoryProps) {
34
+ const anchorElement = useRef<HTMLDivElement>(null);
35
+
36
+ return (
37
+ <VStack height="100%" width="100%" minHeight="600px" hAlign="center" vAlign="center">
38
+ <StyleBox
39
+ ref={anchorElement}
40
+ backgroundColor="red"
41
+ padding="8px"
42
+ borderRadius={'8px'}
43
+ width="200px"
44
+ height="100px"
45
+ display="flex"
46
+ justifyContent="center"
47
+ alignItems="center"
48
+ >
49
+ Hover to open
50
+ </StyleBox>
51
+ <PreviewPopperComponent
52
+ anchorElement={anchorElement}
53
+ verticalAnchor={props.verticalAnchor}
54
+ verticalOrigin={props.verticalOrigin}
55
+ verticalOffset={props.verticalOffset}
56
+ horizontalAnchor={props.horizontalAnchor}
57
+ horizontalOrigin={props.horizontalOrigin}
58
+ horizontalOffset={props.horizontalOffset}
59
+ restoreFocus={props.restoreFocus}
60
+ >
61
+ <StyleBox
62
+ className="surface-primary"
63
+ boxShadow="0 0 10px 1px rgba(0,0,0,0.45)"
64
+ backgroundColor="white"
65
+ padding="8px"
66
+ borderRadius={'8px'}
67
+ >
68
+ <BodyText selectable>Hello World</BodyText>
69
+ </StyleBox>
70
+ </PreviewPopperComponent>
71
+ </VStack>
72
+ );
73
+ }
@@ -0,0 +1,55 @@
1
+ import { type PropsWithChildren } from 'react';
2
+ import { useRestoreFocus } from '../hooks/use_restore_focus.js';
3
+ import {
4
+ PopperDismissalDecorator,
5
+ type PopperDismissalDecoratorProps,
6
+ } from './dismissal_decorator.js';
7
+
8
+ export interface BasePopperOwnProps {
9
+ open: boolean;
10
+ restoreFocus?: boolean;
11
+ veil?: boolean;
12
+ }
13
+
14
+ export interface BasePopperProps
15
+ extends BasePopperOwnProps,
16
+ PopperDismissalDecoratorProps {}
17
+
18
+ export const BasePopper: React.FC<PropsWithChildren<BasePopperProps>> = ({
19
+ restoreFocus = false,
20
+ open,
21
+ onDismissal,
22
+ isException,
23
+ dismissals = [],
24
+ acceptedRefs,
25
+ // TODO: add veil
26
+ // veil = false,
27
+ children,
28
+ }) => {
29
+ useRestoreFocus(open, restoreFocus);
30
+
31
+ if (!open) return null;
32
+
33
+ // if (veil) {
34
+ // content = (
35
+ // <div
36
+ // // TODO: add ref and onClick
37
+ // // ref={veilRef}
38
+ // // onClick={e => veilRef.current === e.target && onVeilClick && onVeilClick(e)}
39
+ // >
40
+ // {content}
41
+ // </div>
42
+ // );
43
+ // }
44
+
45
+ return (
46
+ <PopperDismissalDecorator
47
+ dismissals={dismissals}
48
+ onDismissal={onDismissal}
49
+ isException={isException}
50
+ acceptedRefs={acceptedRefs}
51
+ >
52
+ {children}
53
+ </PopperDismissalDecorator>
54
+ );
55
+ };
@@ -0,0 +1,80 @@
1
+ import { forwardRef, type PropsWithChildren } from 'react';
2
+ import { ClickAwayListener } from '../../../utils/click_away_listener.js';
3
+ import { ScrollAwayListener } from '../../../utils/scroll_away_listener.js';
4
+ import { MouseLeaveRegion } from '../../../utils/mouse_leave_region.js';
5
+
6
+ export enum PopperDismissal {
7
+ CLICK_AWAY = 'clickAway',
8
+ SCROLL_AWAY = 'scrollAway',
9
+ MOUSE_LEAVE = 'mouseLeave',
10
+ VEIL_CLICK = 'veilClick',
11
+ }
12
+
13
+ export interface PopperDismissalDecoratorProps {
14
+ dismissals?: PopperDismissal[];
15
+ onDismissal?: (dismissal: PopperDismissal) => void;
16
+ isException?: (dismissal: PopperDismissal, target: HTMLElement) => boolean;
17
+ acceptedRefs?: React.RefObject<HTMLElement>[];
18
+ }
19
+
20
+ export const PopperDismissalDecorator = forwardRef<
21
+ HTMLElement,
22
+ PropsWithChildren<PopperDismissalDecoratorProps>
23
+ >(function DismissalDecorator(
24
+ { onDismissal, isException, dismissals = [], children, acceptedRefs = [] },
25
+ ref
26
+ ) {
27
+ const hasClickAway = dismissals.includes(PopperDismissal.CLICK_AWAY);
28
+ const hasScrollAway = dismissals.includes(PopperDismissal.SCROLL_AWAY);
29
+ const hasMouseLeave = dismissals.includes(PopperDismissal.MOUSE_LEAVE);
30
+ // TODO:
31
+ // const hasVeilClick = dismissals.includes(PopperDismissal.VEIL_CLICK);
32
+
33
+ const buildHandleDismissal = (dismissal: PopperDismissal) => () => {
34
+ onDismissal?.(dismissal);
35
+ };
36
+
37
+ function buildExceptionHandler(dismissal: PopperDismissal) {
38
+ if (dismissal in dismissals) {
39
+ return target => isException?.(dismissal, target) ?? false;
40
+ }
41
+ return () => false;
42
+ }
43
+
44
+ let content: React.ReactNode = (
45
+ <>
46
+ {children}
47
+ {hasMouseLeave && (
48
+ <MouseLeaveRegion
49
+ elementsRefs={acceptedRefs}
50
+ onMouseLeave={buildHandleDismissal(PopperDismissal.MOUSE_LEAVE)}
51
+ />
52
+ )}
53
+ </>
54
+ );
55
+
56
+ if (hasScrollAway) {
57
+ content = (
58
+ <ScrollAwayListener
59
+ onScrollAway={buildHandleDismissal(PopperDismissal.SCROLL_AWAY)}
60
+ isException={buildExceptionHandler(PopperDismissal.SCROLL_AWAY)}
61
+ >
62
+ {content}
63
+ </ScrollAwayListener>
64
+ );
65
+ }
66
+
67
+ if (hasClickAway) {
68
+ content = (
69
+ <ClickAwayListener
70
+ onClickAway={buildHandleDismissal(PopperDismissal.CLICK_AWAY)}
71
+ refs={acceptedRefs}
72
+ isException={buildExceptionHandler(PopperDismissal.CLICK_AWAY)}
73
+ >
74
+ {content}
75
+ </ClickAwayListener>
76
+ );
77
+ }
78
+
79
+ return content;
80
+ });
@@ -0,0 +1,43 @@
1
+ import { forwardRef, type PropsWithChildren } from 'react';
2
+ import { BasePopper, type BasePopperProps } from './base/base_popper.js';
3
+ import { Tethered, type TetheredProps } from '../tethered/tethered.js';
4
+ import { useContextTrigger } from './hooks/use_context_trigger.js';
5
+ import { PopperDismissal } from './base/dismissal_decorator.js';
6
+
7
+ export type ContextPopperProps = Omit<BasePopperProps, 'open' | 'onDismissal'> &
8
+ Omit<TetheredProps, 'anchor'> & {
9
+ anchorElement: React.RefObject<HTMLElement>;
10
+ };
11
+
12
+ export const ContextPopper = forwardRef<
13
+ HTMLDivElement,
14
+ PropsWithChildren<ContextPopperProps>
15
+ >(function ContextPopper(
16
+ {
17
+ anchorElement,
18
+ restoreFocus,
19
+ children,
20
+ acceptedRefs = [],
21
+ isException,
22
+ dismissals = [PopperDismissal.CLICK_AWAY, PopperDismissal.SCROLL_AWAY],
23
+ ...tetheredProps
24
+ },
25
+ ref
26
+ ) {
27
+ const { isOpen, close, rectangle } = useContextTrigger(anchorElement);
28
+
29
+ return (
30
+ <BasePopper
31
+ open={isOpen && rectangle != null}
32
+ onDismissal={close}
33
+ restoreFocus={restoreFocus}
34
+ dismissals={dismissals}
35
+ acceptedRefs={acceptedRefs}
36
+ isException={isException}
37
+ >
38
+ <Tethered ref={ref} anchor={rectangle} {...tetheredProps}>
39
+ {children}
40
+ </Tethered>
41
+ </BasePopper>
42
+ );
43
+ });
@@ -0,0 +1,42 @@
1
+ import { forwardRef, type PropsWithChildren } from 'react';
2
+ import { BasePopper, type BasePopperProps } from './base/base_popper.js';
3
+ import {
4
+ ElementTethered,
5
+ type ElementTetheredProps,
6
+ } from '../tethered/element_tethered.js';
7
+
8
+ export type ElementPopperProps = BasePopperProps & ElementTetheredProps;
9
+
10
+ export const ElementPopper = forwardRef<
11
+ HTMLDivElement,
12
+ PropsWithChildren<ElementPopperProps>
13
+ >(function ElementPopper(
14
+ {
15
+ restoreFocus,
16
+ open,
17
+ onDismissal,
18
+ isException,
19
+ acceptedRefs,
20
+ veil,
21
+ dismissals,
22
+ children,
23
+ ...elementTetheredProps
24
+ },
25
+ ref
26
+ ) {
27
+ return (
28
+ <BasePopper
29
+ restoreFocus={restoreFocus}
30
+ open={open}
31
+ onDismissal={onDismissal}
32
+ isException={isException}
33
+ dismissals={dismissals}
34
+ acceptedRefs={acceptedRefs}
35
+ veil={veil}
36
+ >
37
+ <ElementTethered ref={ref} {...elementTetheredProps}>
38
+ {children}
39
+ </ElementTethered>
40
+ </BasePopper>
41
+ );
42
+ });