userGuide.stories.jsx 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. /* argus-disable unPkgSensitiveInfo */
  2. import React, { useState } from 'react';
  3. import { Button, UserGuide, Toast, Tag, Switch, Space } from '@douyinfe/semi-ui/index';
  4. export default {
  5. title: 'UserGuide',
  6. };
  7. export const BasicUsage = () => {
  8. const [visible, setVisible] = useState(false);
  9. return (
  10. <div>
  11. <div style={{ marginTop: '20px' }}>
  12. <Button onClick={() => setVisible(true)}>显示引导</Button>
  13. </div>
  14. <br />
  15. <Space spacing='medium'>
  16. <Switch id={'step-1'} defaultChecked={true}/>
  17. <Button id={'step-2'} type="secondary" onClick={() => {
  18. console.log('次要')
  19. }}>次要</Button>
  20. <Button id={'step-3'} type="tertiary">第三</Button>
  21. <Button id={'step-4'} type="warning">警告</Button>
  22. </Space>
  23. <UserGuide
  24. mode="popup"
  25. mask={true}
  26. steps={[
  27. {
  28. target: document.querySelector('#step-1'),
  29. cover: (
  30. <img
  31. alt="example"
  32. height={200}
  33. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  34. />
  35. ),
  36. title: "这里是标题1",
  37. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  38. position: "bottom"
  39. },
  40. {
  41. target: document.querySelector('#step-2'),
  42. cover: (
  43. <img
  44. alt="example"
  45. height={200}
  46. width={'100%'}
  47. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  48. />
  49. ),
  50. title: "这里是标题2",
  51. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  52. position: "right"
  53. },
  54. {
  55. target: document.querySelector('#step-3'),
  56. title: "这里是标题3",
  57. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  58. position: "bottom"
  59. },
  60. {
  61. target: document.querySelector('#step-4'),
  62. title: "这里是标题4",
  63. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  64. position: "right"
  65. }
  66. ]}
  67. visible={visible}
  68. onFinish={() => {
  69. setVisible(false);
  70. console.log('引导完成')
  71. }}
  72. onSkip={() => {
  73. setVisible(false);
  74. console.log('引导跳过')
  75. }}
  76. />
  77. </div>
  78. );
  79. };
  80. export const PrimaryTheme = () => {
  81. const [visible, setVisible] = useState(false);
  82. return (
  83. <div>
  84. <Space spacing='medium'>
  85. <Switch id={'step-1'} defaultChecked={true}/>
  86. <Button id={'step-2'} type="secondary">次要</Button>
  87. <Button id={'step-3'} type="tertiary">第三</Button>
  88. <Button id={'step-4'} type="warning">警告</Button>
  89. </Space>
  90. <div style={{ marginTop: '20px' }}>
  91. <Button onClick={() => setVisible(true)}>显示引导</Button>
  92. </div>
  93. <UserGuide
  94. mode="popup"
  95. theme="primary"
  96. mask={true}
  97. steps={[
  98. {
  99. target: document.querySelector('#step-1'),
  100. cover: (
  101. <img
  102. alt="example"
  103. height={200}
  104. width={'100%'}
  105. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  106. />
  107. ),
  108. title: "这里是标题1",
  109. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  110. position: "bottom"
  111. },
  112. {
  113. target: document.querySelector('#step-2'),
  114. cover: (
  115. <img
  116. alt="example"
  117. height={200}
  118. width={'100%'}
  119. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  120. />
  121. ),
  122. title: "这里是标题2",
  123. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  124. position: "right"
  125. },
  126. {
  127. target: document.querySelector('#step-3'),
  128. title: "这里是标题3",
  129. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  130. position: "bottom"
  131. },
  132. {
  133. target: document.querySelector('#step-4'),
  134. title: "这里是标题4",
  135. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  136. position: "right"
  137. }
  138. ]}
  139. visible={visible}
  140. onFinish={() => {
  141. setVisible(false);
  142. console.log('引导完成')
  143. }}
  144. onSkip={() => {
  145. setVisible(false);
  146. console.log('引导跳过')
  147. }}
  148. />
  149. </div>
  150. );
  151. };
  152. export const HideButtons = () => {
  153. const [visible, setVisible] = useState(false);
  154. return (
  155. <div>
  156. <Space spacing='medium'>
  157. <Switch id={'step-1'} defaultChecked={true}/>
  158. <Button id={'step-2'} type="secondary">次要</Button>
  159. <Button id={'step-3'} type="tertiary">第三</Button>
  160. <Button id={'step-4'} type="warning">警告</Button>
  161. </Space>
  162. <div style={{ marginTop: '20px' }}>
  163. <Button onClick={() => setVisible(true)}>显示引导</Button>
  164. </div>
  165. <UserGuide
  166. mode="popup"
  167. mask={true}
  168. showPrevButton={false}
  169. showSkipButton={false}
  170. steps={[
  171. {
  172. target: document.querySelector('#step-1'),
  173. cover: (
  174. <img
  175. alt="example"
  176. height={200}
  177. width={'100%'}
  178. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  179. />
  180. ),
  181. title: "这里是标题1",
  182. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  183. position: "bottom"
  184. },
  185. {
  186. target: document.querySelector('#step-2'),
  187. cover: (
  188. <img
  189. alt="example"
  190. height={200}
  191. width={'100%'}
  192. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  193. />
  194. ),
  195. title: "这里是标题2",
  196. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  197. position: "right"
  198. },
  199. {
  200. target: document.querySelector('#step-3'),
  201. title: "这里是标题3",
  202. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  203. position: "bottom"
  204. },
  205. {
  206. target: document.querySelector('#step-4'),
  207. title: "这里是标题4",
  208. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  209. position: "right"
  210. }
  211. ]}
  212. visible={visible}
  213. onFinish={() => {
  214. setVisible(false);
  215. console.log('引导完成')
  216. }}
  217. onSkip={() => {
  218. setVisible(false);
  219. console.log('引导跳过')
  220. }}
  221. />
  222. </div>
  223. );
  224. };
  225. export const NoMask = () => {
  226. const [visible, setVisible] = useState(false);
  227. return (
  228. <div>
  229. <Space spacing='medium'>
  230. <Switch id={'step-1'} defaultChecked={true}/>
  231. <Button id={'step-2'} type="secondary">次要</Button>
  232. <Button id={'step-3'} type="tertiary">第三</Button>
  233. <Button id={'step-4'} type="warning">警告</Button>
  234. </Space>
  235. <div style={{ marginTop: '20px' }}>
  236. <Button onClick={() => setVisible(true)}>显示引导</Button>
  237. </div>
  238. <UserGuide
  239. mode="popup"
  240. theme="primary"
  241. mask={false}
  242. steps={[
  243. {
  244. target: document.querySelector('#step-1'),
  245. cover: (
  246. <img
  247. alt="example"
  248. height={200}
  249. width={'100%'}
  250. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  251. />
  252. ),
  253. title: "这里是标题1",
  254. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  255. position: "bottom"
  256. },
  257. {
  258. target: document.querySelector('#step-2'),
  259. cover: (
  260. <img
  261. alt="example"
  262. height={200}
  263. width={'100%'}
  264. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  265. />
  266. ),
  267. title: "这里是标题2",
  268. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  269. position: "right"
  270. },
  271. {
  272. target: document.querySelector('#step-3'),
  273. title: "这里是标题3",
  274. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  275. position: "bottom"
  276. },
  277. {
  278. target: document.querySelector('#step-4'),
  279. title: "这里是标题4",
  280. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  281. position: "right"
  282. }
  283. ]}
  284. visible={visible}
  285. onFinish={() => {
  286. setVisible(false);
  287. console.log('引导完成')
  288. }}
  289. onSkip={() => {
  290. setVisible(false);
  291. console.log('引导跳过')
  292. }}
  293. />
  294. </div>
  295. );
  296. };
  297. export const ControlledDemo = () => {
  298. const [visible, setVisible] = useState(false);
  299. const [current, setCurrent] = useState(1);
  300. return (
  301. <div>
  302. <Space spacing='medium'>
  303. <Switch id={'step-1'} defaultChecked={true}/>
  304. <Button id={'step-2'} type="secondary">次要</Button>
  305. <Button id={'step-3'} type="tertiary">第三</Button>
  306. <Button id={'step-4'} type="warning">警告</Button>
  307. </Space>
  308. <div style={{ marginTop: '20px' }}>
  309. <Button onClick={() => setVisible(true)}>显示引导</Button>
  310. </div>
  311. <UserGuide
  312. mode="popup"
  313. theme="primary"
  314. current={current}
  315. steps={[
  316. {
  317. target: document.querySelector('#step-1'),
  318. cover: (
  319. <img
  320. alt="example"
  321. height={200}
  322. width={'100%'}
  323. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  324. />
  325. ),
  326. title: "这里是标题1",
  327. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  328. position: "bottom"
  329. },
  330. {
  331. target: document.querySelector('#step-2'),
  332. cover: (
  333. <img
  334. alt="example"
  335. height={200}
  336. width={'100%'}
  337. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  338. />
  339. ),
  340. title: "这里是标题2",
  341. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  342. position: "right"
  343. },
  344. {
  345. target: document.querySelector('#step-3'),
  346. title: "这里是标题3",
  347. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  348. position: "bottom"
  349. },
  350. {
  351. target: document.querySelector('#step-4'),
  352. title: "这里是标题4",
  353. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  354. position: "right"
  355. }
  356. ]}
  357. visible={visible}
  358. onPrev={(current) => {
  359. console.log('onPrev', current)
  360. setCurrent(current - 1);
  361. }}
  362. onNext={(current) => {
  363. console.log('onNext', current)
  364. setCurrent(current + 1);
  365. }}
  366. onFinish={(current) => {
  367. console.log('onFinish', current)
  368. setVisible(false);
  369. setCurrent(0);
  370. console.log('引导完成')
  371. }}
  372. onSkip={(current) => {
  373. console.log('onSkip', current)
  374. setVisible(false);
  375. setCurrent(0);
  376. console.log('引导跳过')
  377. }}
  378. onChange={(current) => {
  379. console.log('onChange', current)
  380. console.log('changel', current)
  381. }}
  382. />
  383. </div>
  384. );
  385. };
  386. export const ModalMode = () => {
  387. const [visible, setVisible] = useState(false);
  388. return (
  389. <div>
  390. <Space spacing='medium'>
  391. <Switch id={'step-1'} defaultChecked={true}/>
  392. <Button id={'step-2'} type="secondary">次要</Button>
  393. <Button id={'step-3'} type="tertiary">第三</Button>
  394. <Button id={'step-4'} type="warning">警告</Button>
  395. </Space>
  396. <div style={{ marginTop: '20px' }}>
  397. <Button onClick={() => setVisible(true)}>显示引导</Button>
  398. </div>
  399. <UserGuide
  400. mode="modal"
  401. mask={true}
  402. steps={[
  403. {
  404. cover: (
  405. <img
  406. alt="example"
  407. height={'100%'}
  408. width={'100%'}
  409. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo.jpeg"
  410. />
  411. ),
  412. title: "这里是标题1",
  413. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  414. },
  415. {
  416. cover: (
  417. <img
  418. alt="example"
  419. height={'100%'}
  420. width={'100%'}
  421. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo2.jpeg"
  422. />
  423. ),
  424. title: "这里是标题2",
  425. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  426. },
  427. {
  428. cover: (
  429. <img
  430. alt="example"
  431. height={'100%'}
  432. width={'100%'}
  433. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo2.jpeg"
  434. />
  435. ),
  436. title: "这里是标题3",
  437. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  438. },
  439. {
  440. cover: (
  441. <img
  442. alt="example"
  443. height={'100%'}
  444. width={'100%'}
  445. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/card-cover-docs-demo2.jpeg"
  446. />
  447. ),
  448. title: "这里是标题4",
  449. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  450. }
  451. ]}
  452. visible={visible}
  453. onFinish={() => {
  454. setVisible(false);
  455. console.log('引导完成')
  456. }}
  457. onSkip={() => {
  458. setVisible(false);
  459. console.log('引导跳过')
  460. }}
  461. />
  462. </div>
  463. );
  464. };
  465. export const CustomButton = () => {
  466. const [visible, setVisible] = useState(false);
  467. return (
  468. <div>
  469. <Space spacing='medium'>
  470. <Switch id={'step-1'} defaultChecked={true}/>
  471. <Button id={'step-2'} type="secondary">次要</Button>
  472. <Button id={'step-3'} type="tertiary">第三</Button>
  473. <Button id={'step-4'} type="warning">警告</Button>
  474. </Space>
  475. <div style={{ marginTop: '20px' }}>
  476. <Button onClick={() => setVisible(true)}>显示引导</Button>
  477. </div>
  478. <UserGuide
  479. mode="popup"
  480. mask={true}
  481. finishText='开始使用'
  482. prevButtonProps={{ theme: 'outline', type: 'primary' }}
  483. steps={[
  484. {
  485. target: document.querySelector('#step-1'),
  486. title: "这里是标题1",
  487. description: "一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  488. position: "bottom"
  489. },
  490. {
  491. target: document.querySelector('#step-2'),
  492. title: "这里是标题2",
  493. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  494. position: "right"
  495. },
  496. ]}
  497. visible={visible}
  498. onFinish={() => {
  499. setVisible(false);
  500. console.log('引导完成')
  501. }}
  502. onSkip={() => {
  503. setVisible(false);
  504. console.log('引导跳过')
  505. }}
  506. />
  507. </div>
  508. );
  509. }
  510. export const MixedTheme = () => {
  511. const [visible, setVisible] = useState(false);
  512. return (
  513. <div>
  514. <Space spacing='medium'>
  515. <Switch id={'step-1'} defaultChecked={true}/>
  516. <Button id={'step-2'} type="secondary">次要</Button>
  517. <Button id={'step-3'} type="tertiary">第三</Button>
  518. <Button id={'step-4'} type="warning">警告</Button>
  519. </Space>
  520. <div style={{ marginTop: '20px' }}>
  521. <Button onClick={() => setVisible(true)}>显示引导</Button>
  522. </div>
  523. <UserGuide
  524. mode="popup"
  525. mask={true}
  526. steps={[
  527. {
  528. target: document.querySelector('#step-1'),
  529. theme: 'primary',
  530. title: "这里是标题1",
  531. description: "一些描述文案",
  532. position: "bottom"
  533. },
  534. {
  535. target: document.querySelector('#step-2'),
  536. title: "这里是标题2",
  537. description: "这是第二步的说明一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案一些描述文案",
  538. position: "right"
  539. },
  540. ]}
  541. visible={visible}
  542. onFinish={() => {
  543. setVisible(false);
  544. console.log('引导完成')
  545. }}
  546. onSkip={() => {
  547. setVisible(false);
  548. console.log('引导跳过')
  549. }}
  550. />
  551. </div>
  552. );
  553. }
  554. export const OneStep = () => {
  555. const [visible, setVisible] = useState(false);
  556. return (
  557. <div>
  558. <Space spacing='medium'>
  559. <Switch id={'step-1'} defaultChecked={true}/>
  560. <Button id={'step-2'} type="secondary">次要</Button>
  561. <Button id={'step-3'} type="tertiary">第三</Button>
  562. <Button id={'step-4'} type="warning">警告</Button>
  563. </Space>
  564. <div style={{ marginTop: '20px' }}>
  565. <Button onClick={() => setVisible(true)}>显示引导</Button>
  566. </div>
  567. <UserGuide
  568. mode="popup"
  569. mask={true}
  570. steps={[
  571. {
  572. target: document.querySelector('#step-1'),
  573. theme: 'primary',
  574. title: "这里是标题",
  575. description: "一些描述文案",
  576. position: "bottom"
  577. }
  578. ]}
  579. visible={visible}
  580. onFinish={() => {
  581. setVisible(false);
  582. console.log('引导完成')
  583. }}
  584. onSkip={() => {
  585. setVisible(false);
  586. console.log('引导跳过')
  587. }}
  588. />
  589. </div>
  590. )
  591. }