tooltip.stories.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820
  1. import React, { useState, useMemo } from 'react';
  2. import Tooltip from '../index';
  3. import './story.scss';
  4. import { Tag, Icon, IconButton, Switch, Checkbox, Radio, Button, Select, InputNumber, Space } from '@douyinfe/semi-ui';
  5. import InTableDemo from './InTable';
  6. import EdgeDemo from './Edge';
  7. import ScrollTooltip from './ScrollDemo';
  8. import DangerousHtml from './DangerousHtml';
  9. import ArrowPointAtCenter from './ArrowPointAtCenter';
  10. import CustomContainer from './CustomContainer';
  11. import ContainerPosition from './ContainerPosition';
  12. import { IconList, IconSidebar, IconEdit } from '@douyinfe/semi-icons';
  13. export default {
  14. title: 'Tooltip',
  15. parameters: {
  16. chromatic: { disableSnapshot: true },
  17. },
  18. };
  19. function test(visible) {
  20. console.log('visible Change:' + visible);
  21. }
  22. const ScrollDemo = function ScrollDemo(props = {}) {
  23. const tops = [
  24. ['topLeft', 'TL'],
  25. ['top', 'Top'],
  26. ['topRight', 'TR'],
  27. ];
  28. const lefts = [
  29. ['leftTop', 'LT'],
  30. ['left', 'Left'],
  31. ['leftBottom', 'LB'],
  32. ];
  33. const rights = [
  34. ['rightTop', 'RT'],
  35. ['right', 'Right'],
  36. ['rightBottom', 'RB'],
  37. ];
  38. const bottoms = [
  39. ['bottomLeft', 'BL'],
  40. ['bottom', 'Bottom'],
  41. ['bottomRight', 'BR'],
  42. ];
  43. const { tagStyle, ...restProps } = props;
  44. return (
  45. <div
  46. style={{
  47. paddingLeft: 40,
  48. }}
  49. >
  50. <div
  51. style={{
  52. marginLeft: 40,
  53. whiteSpace: 'nowrap',
  54. }}
  55. >
  56. {tops.map((pos, index) => (
  57. <Tooltip
  58. content={
  59. <article>
  60. <p>hi bytedance</p>
  61. <p>hi bytedance</p>
  62. </article>
  63. }
  64. position={Array.isArray(pos) ? pos[0] : pos}
  65. key={index}
  66. trigger={'click'}
  67. {...restProps}
  68. >
  69. <Tag style={tagStyle}>{Array.isArray(pos) ? pos[1] : pos}</Tag>
  70. </Tooltip>
  71. ))}
  72. </div>
  73. <div
  74. style={{
  75. width: 40,
  76. float: 'left',
  77. }}
  78. >
  79. {lefts.map((pos, index) => (
  80. <Tooltip
  81. content={
  82. <article>
  83. <p>hi bytedance</p>
  84. <p>hi bytedance</p>
  85. </article>
  86. }
  87. position={Array.isArray(pos) ? pos[0] : pos}
  88. key={index}
  89. trigger={'click'}
  90. {...restProps}
  91. >
  92. <Tag style={tagStyle}>{Array.isArray(pos) ? pos[1] : pos}</Tag>
  93. </Tooltip>
  94. ))}
  95. </div>
  96. <div
  97. style={{
  98. width: 40,
  99. marginLeft: 180,
  100. }}
  101. >
  102. {rights.map((pos, index) => (
  103. <Tooltip
  104. content={
  105. <article>
  106. <p>hi bytedance</p>
  107. <p>hi bytedance</p>
  108. </article>
  109. }
  110. position={Array.isArray(pos) ? pos[0] : pos}
  111. key={index}
  112. trigger={'click'}
  113. {...restProps}
  114. >
  115. <Tag style={tagStyle}>{Array.isArray(pos) ? pos[1] : pos}</Tag>
  116. </Tooltip>
  117. ))}
  118. </div>
  119. <div
  120. style={{
  121. marginLeft: 40,
  122. clear: 'both',
  123. whiteSpace: 'nowrap',
  124. }}
  125. >
  126. {bottoms.map((pos, index) => (
  127. <Tooltip
  128. content={
  129. <article>
  130. <p>hi bytedance</p>
  131. <p>hi bytedance</p>
  132. </article>
  133. }
  134. position={Array.isArray(pos) ? pos[0] : pos}
  135. key={index}
  136. trigger={'click'}
  137. {...restProps}
  138. >
  139. <Tag style={tagStyle}>{Array.isArray(pos) ? pos[1] : pos}</Tag>
  140. </Tooltip>
  141. ))}
  142. </div>
  143. </div>
  144. );
  145. };
  146. export const TooltipOnVisibleChange = () => {
  147. const [visible, setVisible] = useState(true);
  148. return (
  149. <div className="demo">
  150. <div>
  151. <label>受控</label>
  152. <Tooltip
  153. content={
  154. <article>
  155. <p>hi bytedance</p>
  156. <p>hi bytedance</p>
  157. </article>
  158. }
  159. position="top"
  160. onVisibleChange={setVisible}
  161. trigger="click"
  162. visible={visible}
  163. >
  164. <Tag>demo</Tag>
  165. </Tooltip>
  166. </div>
  167. <br />
  168. <br />
  169. <div>
  170. <label>非受控</label>
  171. <Tooltip
  172. content={
  173. <article>
  174. <p>hi bytedance</p>
  175. <p>hi bytedance</p>
  176. </article>
  177. }
  178. position="leftTop"
  179. onVisibleChange={test}
  180. trigger="click"
  181. >
  182. <Tag>demo</Tag>
  183. </Tooltip>
  184. </div>
  185. <br />
  186. <br />
  187. {/* <Tooltip
  188. content={
  189. <article>
  190. <p>hi bytedance</p>
  191. <p>hi bytedance</p>
  192. </article>
  193. }
  194. position="rightBottom"
  195. onVisibleChange={test}
  196. trigger="hover"
  197. >
  198. <Tag>hover</Tag>
  199. </Tooltip>
  200. <br />
  201. <br />
  202. <Tooltip
  203. content={
  204. <article>
  205. <p>hi bytedance</p>
  206. <p>hi bytedance</p>
  207. </article>
  208. }
  209. mouseLeaveDelay={100}
  210. position="rightBottom"
  211. onVisibleChange={test}
  212. trigger="hover"
  213. >
  214. <Tag>hover with leave delay time</Tag>
  215. </Tooltip>
  216. <br />
  217. <br />
  218. <Tooltip
  219. content={
  220. <article>
  221. <p>hi bytedance</p>
  222. <p>hi bytedance</p>
  223. </article>
  224. }
  225. position="rightBottom"
  226. onVisibleChange={test}
  227. trigger="click"
  228. >
  229. <Tag>click</Tag>
  230. </Tooltip> */}
  231. </div>
  232. );
  233. };
  234. TooltipOnVisibleChange.story = {
  235. name: 'tooltip onVisibleChange',
  236. };
  237. export const GetPopupContainerDemo = () => (
  238. <div className="demo">
  239. <div className="content-layer" />
  240. <Tooltip
  241. content={
  242. <article>
  243. <p>hi bytedance</p> <p>hi bytedance</p>
  244. </article>
  245. }
  246. position="bottom"
  247. visible
  248. trigger="custom"
  249. getPopupContainer={() => document.querySelector('.content-layer')}
  250. >
  251. <Tag>指定弹出层的容器</Tag>
  252. {/* <div className='content'></div> */}
  253. </Tooltip>
  254. <div>
  255. <label>给定容器为window,看是否报错</label>
  256. <Tooltip content={'单选'} position="top" getPopupContainer={() => window}>
  257. <Radio style={{ display: 'inline-flex' }}>单选</Radio>
  258. </Tooltip>
  259. </div>
  260. </div>
  261. );
  262. GetPopupContainerDemo.story = {
  263. name: 'tooltip指定弹出层的容器',
  264. };
  265. export const TooltipAll = () => (
  266. <div className="demo">
  267. <ScrollDemo />
  268. <div
  269. style={{
  270. padding: 120,
  271. }}
  272. >
  273. <ScrollDemo
  274. showArrow
  275. tagStyle={{
  276. height: 80,
  277. }}
  278. />
  279. </div>
  280. </div>
  281. );
  282. TooltipAll.story = {
  283. name: 'tooltip All',
  284. };
  285. export const NoContent = () => (
  286. <div className="demo">
  287. <div
  288. style={{
  289. padding: 120,
  290. }}
  291. >
  292. <ScrollDemo showArrow content={''} />
  293. </div>
  294. <div
  295. style={{
  296. padding: 120,
  297. }}
  298. >
  299. <ScrollDemo
  300. showArrow
  301. tagStyle={{
  302. minHeight: 80,
  303. minWidth: 120,
  304. }}
  305. content={''}
  306. />
  307. </div>
  308. </div>
  309. );
  310. NoContent.story = {
  311. name: 'no content',
  312. };
  313. export const AdjustPosition = () => (
  314. <>
  315. <div className="adjust">
  316. <div className="wrapper">
  317. 第一个滚动区域
  318. <Tooltip
  319. content={
  320. <article>
  321. <p>hi bytedance</p>
  322. <p>hi bytedance</p>
  323. </article>
  324. }
  325. position="rightBottom"
  326. trigger="click"
  327. >
  328. {/* <Tag className='topLeft'>topleft</Tag> */}
  329. <div>test</div>
  330. </Tooltip>
  331. <Tooltip
  332. content={
  333. <article>
  334. <p>hi bytedance</p>
  335. <p>hi bytedance</p>
  336. </article>
  337. }
  338. position="topRight"
  339. trigger="click"
  340. >
  341. <Tag className="topRight">topRight</Tag>
  342. </Tooltip>
  343. <Tooltip
  344. content={
  345. <article>
  346. <p>hi bytedance</p>
  347. <p>hi bytedance</p>
  348. </article>
  349. }
  350. position="bottomLeft"
  351. trigger="click"
  352. >
  353. <Tag className="bottomLeft">bottomLeft</Tag>
  354. </Tooltip>
  355. <Tooltip
  356. content={
  357. <article>
  358. <p>hi bytedance</p>
  359. <p>hi bytedance</p>
  360. </article>
  361. }
  362. position="bottomRight"
  363. trigger="click"
  364. >
  365. <Tag className="bottomRight">bottomRight</Tag>
  366. </Tooltip>
  367. </div>
  368. </div>
  369. <div className="adjust2">
  370. <div className="wrapper2">第二个滚动区域</div>
  371. </div>
  372. </>
  373. );
  374. AdjustPosition.story = {
  375. name: '自适应',
  376. };
  377. export const CompositeComponent = () => (
  378. <div
  379. style={{
  380. padding: 50,
  381. }}
  382. >
  383. <Tooltip
  384. content={
  385. <article>
  386. <p>hi bytedance</p> <p>hi bytedance</p>
  387. </article>
  388. }
  389. position="top"
  390. >
  391. <IconList />
  392. </Tooltip>
  393. <Tooltip content={'收起'} position="top">
  394. <IconButton icon={<IconSidebar />} />
  395. </Tooltip>
  396. <Tooltip content={'开关'} position="top">
  397. <Switch />
  398. </Tooltip>
  399. <Tooltip content={'选择框'} position="top">
  400. <Checkbox
  401. style={{
  402. display: 'inline-flex',
  403. }}
  404. >
  405. 选择框
  406. </Checkbox>
  407. </Tooltip>
  408. <Tooltip content={'单选'} position="top">
  409. <Radio
  410. style={{
  411. display: 'inline-flex',
  412. }}
  413. >
  414. 单选
  415. </Radio>
  416. </Tooltip>
  417. </div>
  418. );
  419. CompositeComponent.story = {
  420. name: '复合组件',
  421. };
  422. export const WrapDisabledElems = () => (
  423. <div
  424. style={{
  425. padding: 50,
  426. }}
  427. >
  428. <Tooltip content="disabled">
  429. <IconButton disabled icon={<IconEdit />} />
  430. </Tooltip>
  431. <Tooltip content="disabled">
  432. <IconButton disabled icon={<IconEdit />} block />
  433. </Tooltip>
  434. <Tooltip content="disabled">
  435. <Button disabled block>
  436. 编辑
  437. </Button>
  438. </Tooltip>
  439. <Tooltip content="disabled">
  440. <Button
  441. disabled
  442. style={{
  443. display: 'block',
  444. }}
  445. >
  446. 编辑
  447. </Button>
  448. </Tooltip>
  449. </div>
  450. );
  451. WrapDisabledElems.story = {
  452. name: 'wrap disabled elems',
  453. };
  454. export const InTable = () => (
  455. <div
  456. style={{
  457. marginTop: 50,
  458. }}
  459. >
  460. <InTableDemo />
  461. </div>
  462. );
  463. InTable.story = {
  464. name: 'in table',
  465. };
  466. export const _EdgeDemo = () => <EdgeDemo />;
  467. _EdgeDemo.story = {
  468. name: 'edge demo',
  469. };
  470. export const ScrollTooltipDemo = () => <ScrollTooltip />;
  471. ScrollTooltipDemo.story = {
  472. name: 'scroll demo and set popup container',
  473. };
  474. export const DangerousHtmlDemo = () => <DangerousHtml />;
  475. DangerousHtmlDemo.story = {
  476. name: 'in dangerous html',
  477. };
  478. export const ArrowPointAtCenterDemo = () => <ArrowPointAtCenter />;
  479. ArrowPointAtCenterDemo.story = {
  480. name: 'arrow point at center',
  481. };
  482. export const CustomContainerDemo = () => <CustomContainer />;
  483. CustomContainerDemo.story = {
  484. name: 'custom container',
  485. };
  486. export const ContainerPositionDemo = () => <ContainerPosition />;
  487. ContainerPositionDemo.story = {
  488. name: 'container observer',
  489. };
  490. export const QuickMoveMouse = () => {
  491. /**
  492. * mouseEnterDelay, mouseLeaveDelay 默认都为 50
  493. * mouseEnterDelay, mouseLeaveDelay 都为 0,快速滑动可能出现两个 tooltip 出现
  494. */
  495. const Demo = () => {
  496. const props = {
  497. mouseEnterDelay: 50,
  498. mouseLeaveDelay: 0,
  499. };
  500. return (
  501. <div className="demo">
  502. <div>
  503. <Tooltip content={'1'} {...props}>
  504. aaaaaaaaaaa
  505. </Tooltip>
  506. </div>
  507. <div>
  508. <Tooltip content={'2'} {...props}>
  509. bbbbbbbbbbb
  510. </Tooltip>
  511. </div>
  512. <div>
  513. <Tooltip content={'3'} {...props}>
  514. ccccccccccc
  515. </Tooltip>
  516. </div>
  517. <div>
  518. <Tooltip content={'4'} {...props}>
  519. aaaaaaaaaaa
  520. </Tooltip>
  521. </div>
  522. <div>
  523. <Tooltip content={'5'} {...props}>
  524. bbbbbbbbbbb
  525. </Tooltip>
  526. </div>
  527. <div>
  528. <Tooltip content={'6'} {...props}>
  529. ccccccccccc
  530. </Tooltip>
  531. </div>
  532. <div>
  533. <Tooltip content={'7'} {...props}>
  534. aaaaaaaaaaa
  535. </Tooltip>
  536. </div>
  537. <div>
  538. <Tooltip content={'8'} {...props}>
  539. bbbbbbbbbbb
  540. </Tooltip>
  541. </div>
  542. <div>
  543. <Tooltip content={'9'} {...props}>
  544. ccccccccccc
  545. </Tooltip>
  546. </div>
  547. </div>
  548. );
  549. };
  550. return <Demo />;
  551. };
  552. QuickMoveMouse.story = {
  553. name: '快速移动鼠标可见性',
  554. };
  555. export const MotionFalseFix1402 = () => {
  556. function Demo() {
  557. const Test = React.forwardRef((props, ref) => (
  558. <span {...props} ref={ref}>
  559. Test
  560. </span>
  561. ));
  562. return (
  563. <div>
  564. <Tooltip content={'hi bytedance'} motion={false}>
  565. <Test />
  566. </Tooltip>
  567. <br />
  568. <br />
  569. <Tooltip content={'hi bytedance'}>
  570. <Test />
  571. </Tooltip>
  572. </div>
  573. );
  574. }
  575. return <Demo />;
  576. };
  577. MotionFalseFix1402.story = {
  578. name: 'motion=false fix #1402',
  579. };
  580. export const DisabledWrapperCls = () => (
  581. <>
  582. <Tooltip wrapperClassName="test" content={'hi bytedance'}>
  583. <Button>按钮</Button>
  584. </Tooltip>
  585. <br />
  586. <br />
  587. <Tooltip wrapperClassName="test" content={'hi bytedance'}>
  588. <Button disabled>禁用的单个按钮</Button>
  589. </Tooltip>
  590. <br />
  591. <br />
  592. <Tooltip wrapperClassName="test" content={'hi bytedance'}>
  593. <Button>正常的多个按钮</Button>
  594. <Button>正常的多个按钮</Button>
  595. </Tooltip>
  596. <br />
  597. <br />
  598. <Tooltip wrapperClassName="test" content={'hi bytedance'}>
  599. <Select disabled placeholder="请选择业务线" style={{ width: 120 }}>
  600. <Select.Option value="abc">抖音</Select.Option>
  601. <Select.Option value="hotsoon">火山</Select.Option>
  602. <Select.Option value="jianying" disabled>
  603. 剪映
  604. </Select.Option>
  605. <Select.Option value="xigua">西瓜视频</Select.Option>
  606. </Select>
  607. </Tooltip>
  608. <br />
  609. <br />
  610. </>
  611. );
  612. DisabledWrapperCls.story = {
  613. name: 'disabledWrapperCls',
  614. };
  615. export const ShowArrow = () => {
  616. function Demo() {
  617. const Test = React.forwardRef((props, ref) => (
  618. <Tag {...props} ref={ref}>
  619. Test
  620. </Tag>
  621. ));
  622. return (
  623. <div>
  624. <h4>should show content and arrow when click</h4>
  625. <Tooltip showArrow trigger="click" content={'hi bytedance'}>
  626. <Test />
  627. </Tooltip>
  628. </div>
  629. );
  630. }
  631. return <Demo />;
  632. };
  633. ShowArrow.story = {
  634. name: 'showArrow',
  635. };
  636. export const OnClickOutSideDemo = () => {
  637. let [v, setV] = useState(false);
  638. let clickOutSide = () => {
  639. console.log('clickOutSide');
  640. setV(false);
  641. };
  642. return (
  643. <>
  644. <Tooltip onClickOutSide={() => clickOutSide()} content={'hi bytedance'} visible={v} trigger="custom">
  645. <Button onClick={() => setV(true)}>按钮</Button>
  646. </Tooltip>
  647. <br />
  648. <br />
  649. <Tooltip onClickOutSide={() => console.log('clickOutSide')} content={'hi bytedance'} trigger="click">
  650. <Button>单个按钮</Button>
  651. </Tooltip>
  652. </>
  653. );
  654. };
  655. OnClickOutSideDemo.story = {
  656. name: 'OnClickOutSide',
  657. };
  658. export const AutoAdjustWithSpacing = () => {
  659. const [height, setHeight] = useState(84);
  660. const [key, setKey] = useState(1);
  661. const initSpacing = 8;
  662. const [spacing, setSpacing] = useState(initSpacing);
  663. const change = (height, hasSpace) => {
  664. setHeight(height);
  665. hasSpace ? setSpacing(initSpacing) : setSpacing(0);
  666. setKey(Math.random());
  667. };
  668. return (
  669. <div className="demo1">
  670. <div>
  671. <Tooltip
  672. motion={false}
  673. rePosKey={key}
  674. // spacing={spacing}
  675. content={
  676. <article style={{ boxSizing: 'border-box', height: height }}>
  677. <p>hi bytedance, + padding 20</p>
  678. <p>hi bytedance</p>
  679. </article>
  680. }
  681. position="top"
  682. trigger="custom"
  683. visible={true}
  684. >
  685. <Tag>demo</Tag>
  686. </Tooltip>
  687. </div>
  688. <div style={{ marginTop: 200 }}>
  689. <Switch onChange={hasSpace => change(height, hasSpace)} checked={spacing === initSpacing ? true : false}></Switch>
  690. <InputNumber onChange={height => change(Number(height))} value={height} style={{ width: 200 }} />
  691. </div>
  692. </div>
  693. )
  694. };
  695. AutoAdjustWithSpacing.story = {
  696. name: 'AutoAdjustWithSpacing',
  697. };
  698. /**
  699. * Chromatic UI test
  700. */
  701. export const leftTopOverDemo = () => {
  702. const [visible, setVisible] = useState(true);
  703. const content = (
  704. <div style={{ height: 200, width: 200 }}>
  705. Semi Design
  706. </div>
  707. );
  708. const commonProps = {
  709. content,
  710. trigger: 'click',
  711. showArrow: false,
  712. visible,
  713. trigger: 'custom',
  714. motion: false,
  715. };
  716. const buttonStyle = {
  717. width: 200,
  718. };
  719. return (
  720. <div data-cy='wrapper'>
  721. <Button onClick={() => setVisible(!visible)}>toggle visible</Button>
  722. <div style={{ paddingTop: 200 }}>
  723. <Space spacing={80}>
  724. <Tooltip {...commonProps} position='leftTopOver' >
  725. <Button data-cy='leftTopOver' style={buttonStyle}>leftTopOver</Button>
  726. </Tooltip>
  727. <Tooltip {...commonProps} position='leftBottomOver'>
  728. <Button data-cy='leftBottomOver' style={buttonStyle}>leftBottomOver</Button>
  729. </Tooltip>
  730. <Tooltip {...commonProps} position='rightTopOver'>
  731. <Button data-cy='rightTopOver' style={buttonStyle}>rightTopOver</Button>
  732. </Tooltip>
  733. <Tooltip {...commonProps} position='rightBottomOver'>
  734. <Button data-cy='rightBottomOver' style={buttonStyle}>rightBottomOver</Button>
  735. </Tooltip>
  736. </Space>
  737. </div>
  738. </div>
  739. )
  740. };
  741. leftTopOverDemo.storyName = `leftTopOver visible`;
  742. leftTopOverDemo.parameters = {
  743. chromatic: {
  744. disableSnapshot: false,
  745. delay: 3000,
  746. viewports: [1200]
  747. }
  748. };
  749. /**
  750. * Cypress test
  751. */
  752. export const leftTopOverAutoAdjustOverflow = () => {
  753. const content = (
  754. <div style={{ height: 200, width: 200 }}>
  755. Semi Design
  756. </div>
  757. );
  758. const commonProps = {
  759. content,
  760. trigger: 'click',
  761. showArrow: false,
  762. };
  763. return (
  764. <div data-cy='wrapper' style={{ width: '200vw', height: '200vw', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
  765. <div>
  766. <Tooltip {...commonProps} position='leftTopOver' >
  767. <Button data-cy='leftTopOver' style={{ width: 200 }}>leftTopOver</Button>
  768. </Tooltip>
  769. </div>
  770. </div>
  771. )
  772. };
  773. leftTopOverAutoAdjustOverflow.storyName = `leftTopOver autoAdjustOverflow`;