@mijadesign/nut-mcp 1.0.0-alpha.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 (58) hide show
  1. package/README.md +147 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +16 -0
  4. package/dist/services/aliases.service.d.ts +1 -0
  5. package/dist/services/aliases.service.js +19 -0
  6. package/dist/services/doc-parser.service.d.ts +3 -0
  7. package/dist/services/doc-parser.service.js +162 -0
  8. package/dist/services/index.services.d.ts +3 -0
  9. package/dist/services/index.services.js +71 -0
  10. package/dist/services/paths.service.d.ts +5 -0
  11. package/dist/services/paths.service.js +18 -0
  12. package/dist/tools/base.tool.d.ts +8 -0
  13. package/dist/tools/base.tool.js +27 -0
  14. package/dist/tools/get-component-doc.tool.d.ts +12 -0
  15. package/dist/tools/get-component-doc.tool.js +40 -0
  16. package/dist/tools/index.d.ts +4 -0
  17. package/dist/tools/index.js +4 -0
  18. package/dist/tools/list-components.tool.d.ts +8 -0
  19. package/dist/tools/list-components.tool.js +32 -0
  20. package/dist/tools/search-components.tool.d.ts +12 -0
  21. package/dist/tools/search-components.tool.js +61 -0
  22. package/dist/types/index.d.ts +33 -0
  23. package/dist/types/index.js +1 -0
  24. package/docs/docs/aliases.json +59 -0
  25. package/docs/docs/components/base/button/index.md +415 -0
  26. package/docs/docs/components/base/cell/index.md +279 -0
  27. package/docs/docs/components/base/configprovider/index.md +215 -0
  28. package/docs/docs/components/base/image/index.md +282 -0
  29. package/docs/docs/components/base/overlay/index.md +288 -0
  30. package/docs/docs/components/dentry/cascader/index.md +1080 -0
  31. package/docs/docs/components/dentry/checkbox/index.md +842 -0
  32. package/docs/docs/components/dentry/datepicker/index.md +489 -0
  33. package/docs/docs/components/dentry/form/index.md +457 -0
  34. package/docs/docs/components/dentry/input/index.md +257 -0
  35. package/docs/docs/components/dentry/picker/index.md +621 -0
  36. package/docs/docs/components/dentry/radio/index.md +364 -0
  37. package/docs/docs/components/dentry/searchbar/index.md +317 -0
  38. package/docs/docs/components/dentry/selector/index.md +295 -0
  39. package/docs/docs/components/dentry/switch/index.md +300 -0
  40. package/docs/docs/components/dentry/textarea/index.md +231 -0
  41. package/docs/docs/components/dentry/uploader/index.md +745 -0
  42. package/docs/docs/components/exhibition/collapse/index.md +339 -0
  43. package/docs/docs/components/exhibition/swiper/index.md +385 -0
  44. package/docs/docs/components/exhibition/tag/index.md +253 -0
  45. package/docs/docs/components/feedback/dialog/index.md +306 -0
  46. package/docs/docs/components/feedback/drag/index.md +164 -0
  47. package/docs/docs/components/feedback/empty/index.md +211 -0
  48. package/docs/docs/components/feedback/infiniteloading/index.md +397 -0
  49. package/docs/docs/components/feedback/noticebar/index.md +175 -0
  50. package/docs/docs/components/feedback/popup/index.md +563 -0
  51. package/docs/docs/components/feedback/pulltorefresh/index.md +254 -0
  52. package/docs/docs/components/feedback/toast/index.md +355 -0
  53. package/docs/docs/components/layout/divider/index.md +162 -0
  54. package/docs/docs/components/layout/grid/index.md +386 -0
  55. package/docs/docs/components/layout/space/index.md +196 -0
  56. package/docs/docs/components/nav/tabs/index.md +955 -0
  57. package/docs/docs/components-index.json +233 -0
  58. package/package.json +34 -0
@@ -0,0 +1,955 @@
1
+ ---
2
+ order: 10
3
+ demoUrl: 'https://frontend.mishudata.com/mobile/demo/#/nav/pages/tabs/index'
4
+ group:
5
+ title: 导航组件
6
+ order: 4
7
+ ---
8
+
9
+ # Tabs 选项卡切换 <Badge>2.0.0</Badge>
10
+
11
+
12
+ 用于内容分类后的展示切换。
13
+
14
+ ## 引入
15
+
16
+ ```tsx
17
+ import { Tabs } from '@mijadesign/mjui-react-taro';
18
+ ```
19
+
20
+ ## 示例代码
21
+
22
+ ### 基础用法
23
+
24
+
25
+ ```tsx
26
+ import { Tabs } from '@mijadesign/mjui-react-taro'
27
+ import React, { useState } from 'react'
28
+
29
+ const Demo1 = () => {
30
+ const [tab1value, setTab1value] = useState<string | number>('0')
31
+ return (
32
+ <>
33
+ <Tabs
34
+ value={tab1value}
35
+ onChange={(value) => {
36
+ setTab1value(value)
37
+ }}
38
+ >
39
+ <Tabs.TabPane title="选项" />
40
+ <Tabs.TabPane title="选项" />
41
+ <Tabs.TabPane title="选项" />
42
+ </Tabs>
43
+ </>
44
+ )
45
+ }
46
+ export default Demo1
47
+
48
+ ```
49
+
50
+ ### 基础用法-微笑曲线
51
+
52
+
53
+ ```tsx
54
+ import { Tabs } from '@mijadesign/mjui-react-taro'
55
+ import { Remind } from '@mijadesign/mobile-icons'
56
+ import { Text, View } from '@tarojs/components'
57
+ import React, { useState } from 'react'
58
+
59
+ const Demo2 = () => {
60
+ const [tabvalue, setTabvalue] = useState('c1')
61
+ const list = [
62
+ {
63
+ title: '选项',
64
+ paneKey: 'c1',
65
+ icon: <Remind />,
66
+ },
67
+ {
68
+ title: '选项',
69
+ paneKey: 'c2',
70
+ icon: <Remind />,
71
+ },
72
+ {
73
+ title: '选项',
74
+ paneKey: 'c3',
75
+ icon: <Remind />,
76
+ },
77
+ ]
78
+ return (
79
+ <>
80
+ <Tabs
81
+ value={tabvalue}
82
+ title={() => {
83
+ return list.map((item) => (
84
+ <View
85
+ onClick={() => setTabvalue(item.paneKey)}
86
+ className={`nut-tabs-titles-item ${tabvalue === item.paneKey ? 'nut-tabs-titles-item-active' : ''}`}
87
+ key={item.paneKey}
88
+ >
89
+ <Text className="nut-tabs-titles-item-text">
90
+ <Text style={{ marginRight: '4px' }}>{item.icon}</Text>
91
+ {item.title}
92
+ </Text>
93
+ <Text className="nut-tabs-titles-item-line" />
94
+ </View>
95
+ ))
96
+ }}
97
+ >
98
+ {list.map((item) => (
99
+ <Tabs.TabPane key={item.paneKey} value={item.paneKey}>
100
+ {item.title}
101
+ </Tabs.TabPane>
102
+ ))}
103
+ </Tabs>
104
+ </>
105
+ )
106
+ }
107
+ export default Demo2
108
+
109
+ ```
110
+
111
+ ### 基础用法-简约模式
112
+
113
+
114
+ ```tsx
115
+ import React, { useState } from 'react'
116
+ import { Tabs } from '@mijadesign/mjui-react-taro'
117
+
118
+ const Demo3 = () => {
119
+ const [tab1value, setTab1value] = useState<string | number>('0')
120
+ return (
121
+ <>
122
+ <Tabs
123
+ value={tab1value}
124
+ onChange={(value) => {
125
+ setTab1value(value)
126
+ }}
127
+ activeType="simple"
128
+ >
129
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
130
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
131
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
132
+ </Tabs>
133
+ </>
134
+ )
135
+ }
136
+ export default Demo3
137
+
138
+ ```
139
+
140
+ ### 基础用法-卡片模式
141
+
142
+
143
+ ```tsx
144
+ import { Tabs } from '@mijadesign/mjui-react-taro'
145
+ import React, { useState } from 'react'
146
+
147
+ const Demo4 = () => {
148
+ const [tab1value, setTab1value] = useState<string | number>('0')
149
+ return (
150
+ <>
151
+ <Tabs
152
+ fixWidth
153
+ value={tab1value}
154
+ onChange={(value) => {
155
+ setTab1value(value)
156
+ }}
157
+ >
158
+ <Tabs.TabPane title="选项123"> Tab 1 </Tabs.TabPane>
159
+ <Tabs.TabPane title="选项"> Tab 2 </Tabs.TabPane>
160
+ <Tabs.TabPane title="选项"> Tab 3 </Tabs.TabPane>
161
+ </Tabs>
162
+ </>
163
+ )
164
+ }
165
+ export default Demo4
166
+
167
+ ```
168
+
169
+ ### 基础用法-按钮模式
170
+
171
+
172
+ ```tsx
173
+ import { Tabs, TabsProps } from '@mijadesign/mjui-react-taro'
174
+ import React, { FC, useState } from 'react'
175
+
176
+ const Demo5: FC<Partial<TabsProps>> = (props) => {
177
+ const [tab1value, setTab1value] = useState<string | number>('0')
178
+ return (
179
+ <>
180
+ <Tabs
181
+ value={tab1value}
182
+ onChange={(value) => {
183
+ setTab1value(value)
184
+ }}
185
+ activeType="button"
186
+ {...props}
187
+ >
188
+ <Tabs.TabPane title="选项" />
189
+ <Tabs.TabPane title="选项" />
190
+ <Tabs.TabPane title="选项" />
191
+ </Tabs>
192
+ </>
193
+ )
194
+ }
195
+ export default Demo5
196
+
197
+ ```
198
+
199
+ ### 基础用法-分割线模式
200
+
201
+
202
+ ```tsx
203
+ import React, { useState } from 'react'
204
+ import { Tabs } from '@mijadesign/mjui-react-taro'
205
+
206
+ const Demo6 = () => {
207
+ const [tab1value, setTab1value] = useState<string | number>('0')
208
+ return (
209
+ <>
210
+ <Tabs
211
+ value={tab1value}
212
+ onChange={(value) => {
213
+ setTab1value(value)
214
+ }}
215
+ activeType="divider"
216
+ >
217
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
218
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
219
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
220
+ </Tabs>
221
+ </>
222
+ )
223
+ }
224
+ export default Demo6
225
+
226
+ ```
227
+
228
+ ### Title 左对齐
229
+
230
+
231
+ ```tsx
232
+ import React, { useState } from 'react'
233
+ import { Tabs } from '@mijadesign/mjui-react-taro'
234
+
235
+ const Demo7 = () => {
236
+ const [tab1value, setTab1value] = useState<string | number>('0')
237
+ return (
238
+ <>
239
+ <Tabs
240
+ value={tab1value}
241
+ onChange={(value) => {
242
+ setTab1value(value)
243
+ }}
244
+ align="left"
245
+ >
246
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
247
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
248
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
249
+ </Tabs>
250
+ </>
251
+ )
252
+ }
253
+ export default Demo7
254
+
255
+ ```
256
+
257
+ ### 左对齐-卡片模式
258
+
259
+
260
+ ```tsx
261
+ import React, { useState } from 'react'
262
+ import { Tabs } from '@mijadesign/mjui-react-taro'
263
+
264
+ const Demo8 = () => {
265
+ const [tab1value, setTab1value] = useState<string | number>('0')
266
+ return (
267
+ <>
268
+ <Tabs
269
+ value={tab1value}
270
+ activeType="card"
271
+ onChange={(value) => {
272
+ setTab1value(value)
273
+ }}
274
+ align="left"
275
+ >
276
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
277
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
278
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
279
+ </Tabs>
280
+ </>
281
+ )
282
+ }
283
+ export default Demo8
284
+
285
+ ```
286
+
287
+ ### 左对齐-按钮模式
288
+
289
+
290
+ ```tsx
291
+ import React, { useState } from 'react'
292
+ import { Tabs } from '@mijadesign/mjui-react-taro'
293
+
294
+ const Demo9 = () => {
295
+ const [tab1value, setTab1value] = useState<string | number>('0')
296
+ return (
297
+ <>
298
+ <Tabs
299
+ value={tab1value}
300
+ activeType="button"
301
+ onChange={(value) => {
302
+ setTab1value(value)
303
+ }}
304
+ align="left"
305
+ >
306
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
307
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
308
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
309
+ </Tabs>
310
+ </>
311
+ )
312
+ }
313
+ export default Demo9
314
+
315
+ ```
316
+
317
+ ### 左对齐-分割线模式
318
+
319
+
320
+ ```tsx
321
+ import React, { useState } from 'react'
322
+ import { Tabs } from '@mijadesign/mjui-react-taro'
323
+
324
+ const Demo10 = () => {
325
+ const [tab1value, setTab1value] = useState<string | number>('0')
326
+ return (
327
+ <>
328
+ <Tabs
329
+ value={tab1value}
330
+ activeType="divider"
331
+ onChange={(value) => {
332
+ setTab1value(value)
333
+ }}
334
+ align="left"
335
+ >
336
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
337
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
338
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
339
+ </Tabs>
340
+ </>
341
+ )
342
+ }
343
+ export default Demo10
344
+
345
+ ```
346
+
347
+ ### 通过 value 匹配
348
+
349
+
350
+ ```tsx
351
+ import React, { useState } from 'react'
352
+ import { Tabs } from '@mijadesign/mjui-react-taro'
353
+
354
+ const Demo11 = () => {
355
+ const [tab2value, setTab2value] = useState<string | number>('0')
356
+ return (
357
+ <>
358
+ <Tabs
359
+ value={tab2value}
360
+ onChange={(value) => {
361
+ setTab2value(value)
362
+ }}
363
+ >
364
+ <Tabs.TabPane title="Tab 1" value="0">
365
+ Tab 1
366
+ </Tabs.TabPane>
367
+ <Tabs.TabPane title="Tab 2" value="1" disabled>
368
+ Tab 2
369
+ </Tabs.TabPane>
370
+ <Tabs.TabPane title="Tab 3" value="2">
371
+ Tab 3
372
+ </Tabs.TabPane>
373
+ </Tabs>
374
+ </>
375
+ )
376
+ }
377
+ export default Demo11
378
+
379
+ ```
380
+
381
+ ### 滑动切换
382
+
383
+
384
+ ```tsx
385
+ import { Swiper, Tabs } from '@mijadesign/mjui-react-taro'
386
+ import React, { useRef, useState } from 'react'
387
+
388
+ const Demo12 = () => {
389
+ const swiperRef = useRef<React.ElementRef<typeof Swiper> | null>(null)
390
+ const [tabIndex, setTabIndex] = useState<string | number>(0)
391
+ const contentStyle = { backgroundColor: '#fff', padding: '16px' }
392
+ return (
393
+ <>
394
+ <Tabs
395
+ value={tabIndex}
396
+ onChange={(page) => {
397
+ swiperRef.current?.to(page)
398
+ setTabIndex(page)
399
+ }}
400
+ >
401
+ <Tabs.TabPane title="Tab 1" />
402
+ <Tabs.TabPane title="Tab 2" />
403
+ <Tabs.TabPane title="Tab 3" />
404
+ </Tabs>
405
+ <Swiper
406
+ defaultValue={0}
407
+ loop={false}
408
+ ref={swiperRef}
409
+ height={50}
410
+ onChange={(e) => {
411
+ setTabIndex(e.detail.current)
412
+ }}
413
+ >
414
+ <Swiper.Item>
415
+ <div style={contentStyle}>Tab 1</div>
416
+ </Swiper.Item>
417
+ <Swiper.Item>
418
+ <div style={contentStyle}>Tab 2</div>
419
+ </Swiper.Item>
420
+ <Swiper.Item>
421
+ <div style={contentStyle}>Tab 3</div>
422
+ </Swiper.Item>
423
+ </Swiper>
424
+ </>
425
+ )
426
+ }
427
+ export default Demo12
428
+
429
+ ```
430
+
431
+ ### CSS 粘性布局
432
+
433
+ 通过设置tab的style 例如:`tabStyle={{ position: 'sticky', top: '0px', zIndex: 11 }}` ,来实现Css的粘性布局,注意:在微信小程序里组件外层元素不能存在 overflow 为 `hidden`、`auto`、`scroll`的设置。
434
+
435
+
436
+ ```tsx
437
+ import { Tabs } from '@mijadesign/mjui-react-taro'
438
+ import React, { useState } from 'react'
439
+
440
+ const Demo13 = () => {
441
+ const [tab2value, setTab2value] = useState<string | number>('0')
442
+ return (
443
+ <>
444
+ <Tabs
445
+ value={tab2value}
446
+ tabStyle={{ position: 'sticky', top: '-18px', zIndex: 11, background: '#fff' }}
447
+ onChange={(value) => {
448
+ setTab2value(value)
449
+ }}
450
+ >
451
+ <Tabs.TabPane title="Tab 1">
452
+ <p>Tab 1</p>
453
+ <p>Tab 1</p>
454
+ <p>Tab 1</p>
455
+ <p>Tab 1</p>
456
+ <p>Tab 1</p>
457
+ <p>Tab 1</p>
458
+ <p>Tab 1</p>
459
+ <p>Tab 1</p>
460
+ </Tabs.TabPane>
461
+ <Tabs.TabPane title="Tab 2">
462
+ <p>Tab 2</p>
463
+ <p>Tab 2</p>
464
+ <p>Tab 2</p>
465
+ <p>Tab 2</p>
466
+ <p>Tab 2</p>
467
+ <p>Tab 2</p>
468
+ <p>Tab 2</p>
469
+ <p>Tab 2</p>
470
+ </Tabs.TabPane>
471
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
472
+ </Tabs>
473
+ </>
474
+ )
475
+ }
476
+ export default Demo13
477
+
478
+ ```
479
+
480
+ ### Tabpane 自动高度
481
+
482
+ 自动高度。设置为 true 时,nut-tabs 和 nut-tabs\_\_content 会随着当前 nut-tabpane 的高度而发生变化。
483
+
484
+
485
+ ```tsx
486
+ import React, { useState } from 'react'
487
+ import { Tabs } from '@mijadesign/mjui-react-taro'
488
+
489
+ const Demo14 = () => {
490
+ const [tab2value, setTab2value] = useState<string | number>('0')
491
+ return (
492
+ <>
493
+ <Tabs
494
+ value={tab2value}
495
+ autoHeight
496
+ onChange={(value) => {
497
+ setTab2value(value)
498
+ }}
499
+ >
500
+ <Tabs.TabPane title="Tab 1">
501
+ <p>Tab 1</p>
502
+ <p>Tab 1</p>
503
+ <p>Tab 1</p>
504
+ <p>Tab 1</p>
505
+ </Tabs.TabPane>
506
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
507
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
508
+ </Tabs>
509
+ </>
510
+ )
511
+ }
512
+ export default Demo14
513
+
514
+ ```
515
+
516
+ ### 数据异步渲染 3s
517
+
518
+
519
+ ```tsx
520
+ import React, { useState, useEffect } from 'react'
521
+ import { Tabs } from '@mijadesign/mjui-react-taro'
522
+
523
+ const Demo15 = () => {
524
+ const [tab3value, setTab3value] = useState<string | number>(0)
525
+ const [list3, setList3] = useState<number[]>([])
526
+ useEffect(() => {
527
+ setTimeout(() => {
528
+ setTab3value(2)
529
+ setList3([...new Array(3).keys()])
530
+ }, 3000)
531
+ }, [])
532
+ return (
533
+ <>
534
+ <Tabs
535
+ value={tab3value}
536
+ onChange={(value) => {
537
+ setTab3value(value)
538
+ }}
539
+ >
540
+ {list3.map((item) => (
541
+ <Tabs.TabPane key={item} title={`Tab ${item}`}>
542
+ Tab {item}
543
+ </Tabs.TabPane>
544
+ ))}
545
+ </Tabs>
546
+ </>
547
+ )
548
+ }
549
+ export default Demo15
550
+
551
+ ```
552
+
553
+ ### 数量多,滚动操作
554
+
555
+
556
+ ```tsx
557
+ import { Tabs } from '@mijadesign/mjui-react-taro'
558
+ import React, { useState } from 'react'
559
+
560
+ const Demo16 = () => {
561
+ const [tab4value, setTab4value] = useState<string | number>('0')
562
+ return (
563
+ <>
564
+ <Tabs
565
+ value={tab4value}
566
+ onChange={(value) => {
567
+ setTab4value(value)
568
+ }}
569
+ >
570
+ <Tabs.TabPane title="选项">选项1</Tabs.TabPane>
571
+ <Tabs.TabPane title="选项">选项2</Tabs.TabPane>
572
+ <Tabs.TabPane title="选项">选项3</Tabs.TabPane>
573
+ <Tabs.TabPane title="选项">选项4</Tabs.TabPane>
574
+ <Tabs.TabPane title="选项">选项5</Tabs.TabPane>
575
+ <Tabs.TabPane title="选项">选项6</Tabs.TabPane>
576
+ </Tabs>
577
+ </>
578
+ )
579
+ }
580
+ export default Demo16
581
+
582
+ ```
583
+
584
+ ### 数量多,滚动操作 2
585
+
586
+
587
+ ```tsx
588
+ import React, { useState } from 'react'
589
+ import { Tabs } from '@mijadesign/mjui-react-taro'
590
+
591
+ const Demo17 = () => {
592
+ const [tab4value, setTab4value] = useState<string | number>('0')
593
+ const list4 = Array.from(new Array(10).keys())
594
+ return (
595
+ <>
596
+ <Tabs
597
+ value={tab4value}
598
+ style={{ height: '300px' }}
599
+ onChange={(value) => {
600
+ setTab4value(value)
601
+ }}
602
+ direction="vertical"
603
+ >
604
+ {list4.map((item) => (
605
+ <Tabs.TabPane key={item} title={`Tab ${item}`}>
606
+ Tab {item}
607
+ </Tabs.TabPane>
608
+ ))}
609
+ </Tabs>
610
+ </>
611
+ )
612
+ }
613
+ export default Demo17
614
+
615
+ ```
616
+
617
+ ### 左右布局
618
+
619
+
620
+ ```tsx
621
+ import React, { useState } from 'react'
622
+ import { Tabs } from '@mijadesign/mjui-react-taro'
623
+
624
+ const Demo18 = () => {
625
+ const [tab5value, setTab5value] = useState<string | number>('0')
626
+ const list5 = Array.from(new Array(2).keys())
627
+ return (
628
+ <>
629
+ <Tabs
630
+ style={{ height: '300px' }}
631
+ value={tab5value}
632
+ onChange={(value) => {
633
+ setTab5value(value)
634
+ }}
635
+ direction="vertical"
636
+ >
637
+ {list5.map((item) => (
638
+ <Tabs.TabPane key={item} title={`Tab ${item}`}>
639
+ Tab {item}
640
+ </Tabs.TabPane>
641
+ ))}
642
+ </Tabs>
643
+ </>
644
+ )
645
+ }
646
+ export default Demo18
647
+
648
+ ```
649
+
650
+ ### 左右布局-微笑曲线
651
+
652
+
653
+ ```tsx
654
+ import React, { useState } from 'react'
655
+ import { Tabs } from '@mijadesign/mjui-react-taro'
656
+
657
+ const Demo19 = () => {
658
+ const [tab6value, setTab6value] = useState<string | number>('0')
659
+ const list5 = Array.from(new Array(2).keys())
660
+ return (
661
+ <>
662
+ <Tabs
663
+ style={{ height: '300px' }}
664
+ value={tab6value}
665
+ onChange={(value) => {
666
+ setTab6value(value)
667
+ }}
668
+ direction="vertical"
669
+ >
670
+ {list5.map((item) => (
671
+ <Tabs.TabPane key={item} title={`Tab ${item}`}>
672
+ Tab {item}
673
+ </Tabs.TabPane>
674
+ ))}
675
+ </Tabs>
676
+ </>
677
+ )
678
+ }
679
+ export default Demo19
680
+
681
+ ```
682
+
683
+ ### 嵌套布局
684
+
685
+
686
+ ```tsx
687
+ import React, { useState } from 'react'
688
+ import { Tabs } from '@mijadesign/mjui-react-taro'
689
+
690
+ const Demo20 = () => {
691
+ const [tab8value, setTab8value] = useState<string | number>('0')
692
+ const [tab9value, setTab9value] = useState<string | number>('0')
693
+ return (
694
+ <>
695
+ <Tabs
696
+ value={tab8value}
697
+ onChange={(value) => {
698
+ setTab8value(value)
699
+ }}
700
+ direction="vertical"
701
+ >
702
+ <Tabs.TabPane title="Tab 1">
703
+ <Tabs
704
+ value={tab9value}
705
+ onChange={(value) => {
706
+ setTab9value(value)
707
+ }}
708
+ direction="horizontal"
709
+ >
710
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
711
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
712
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
713
+ </Tabs>
714
+ </Tabs.TabPane>
715
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
716
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
717
+ </Tabs>
718
+ </>
719
+ )
720
+ }
721
+ export default Demo20
722
+
723
+ ```
724
+
725
+ ### 嵌套布局 2
726
+
727
+
728
+ ```tsx
729
+ import React, { useState } from 'react'
730
+ import { Tabs } from '@mijadesign/mjui-react-taro'
731
+
732
+ const Demo21 = () => {
733
+ const [tab8value, setTab8value] = useState<string | number>('0')
734
+ const [tab9value, setTab9value] = useState<string | number>('0')
735
+ return (
736
+ <>
737
+ <Tabs
738
+ value={tab8value}
739
+ onChange={(value) => {
740
+ setTab8value(value)
741
+ }}
742
+ autoHeight
743
+ >
744
+ <Tabs.TabPane title="Tab 1">
745
+ <Tabs
746
+ value={tab9value}
747
+ onChange={(value) => {
748
+ setTab9value(value)
749
+ }}
750
+ direction="vertical"
751
+ >
752
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
753
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
754
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
755
+ </Tabs>
756
+ </Tabs.TabPane>
757
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
758
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
759
+ </Tabs>
760
+ </>
761
+ )
762
+ }
763
+ export default Demo21
764
+
765
+ ```
766
+
767
+ ### Title 字体尺寸: 20px 12px
768
+
769
+
770
+ ```tsx
771
+ import React, { useState } from 'react'
772
+ import { Tabs } from '@mijadesign/mjui-react-taro'
773
+
774
+ const Demo22 = () => {
775
+ const [tab1value, setTab1value] = useState<string | number>('0')
776
+ return (
777
+ <>
778
+ <Tabs
779
+ value={tab1value}
780
+ onChange={(value) => {
781
+ setTab1value(value)
782
+ }}
783
+ style={{ '--nutui-tabs-titles-font-size': '20px' }}
784
+ >
785
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
786
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
787
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
788
+ </Tabs>
789
+ <Tabs
790
+ value={tab1value}
791
+ onChange={(value) => {
792
+ setTab1value(value)
793
+ }}
794
+ style={{ '--nutui-tabs-titles-font-size': '12px' }}
795
+ >
796
+ <Tabs.TabPane title="Tab 1"> Tab 1 </Tabs.TabPane>
797
+ <Tabs.TabPane title="Tab 2"> Tab 2 </Tabs.TabPane>
798
+ <Tabs.TabPane title="Tab 3"> Tab 3 </Tabs.TabPane>
799
+ </Tabs>
800
+ </>
801
+ )
802
+ }
803
+ export default Demo22
804
+
805
+ ```
806
+
807
+ ### 自定义标签栏
808
+
809
+
810
+ ```tsx
811
+ import { Image, Tabs } from '@mijadesign/mjui-react-taro'
812
+ import React, { useState } from 'react'
813
+
814
+ const Demo23 = () => {
815
+ const items = [
816
+ {
817
+ label: '选项',
818
+ key: 'c1',
819
+ icon: (
820
+ <Image
821
+ style={{ width: '28px', height: '28px' }}
822
+ src="https://sblp-oss.mibaodata.com/static/front-end/components/tabsDemoIcon.png"
823
+ />
824
+ ),
825
+ },
826
+ {
827
+ label: '选项',
828
+ key: 'c2',
829
+ },
830
+ {
831
+ label: '选项',
832
+ key: 'c3',
833
+ },
834
+ ]
835
+ const [value1, setValue1] = useState<any>('c1')
836
+ const items1 = [
837
+ {
838
+ label: (
839
+ <Image
840
+ style={{ width: '117px', height: '48px' }}
841
+ src={
842
+ value1 === 'c1'
843
+ ? 'https://sblp-oss.mibaodata.com/static/front-end/components/tabsDemoActive.png'
844
+ : 'https://sblp-oss.mibaodata.com/static/front-end/components/tabsDemo.png'
845
+ }
846
+ />
847
+ ),
848
+ key: 'c1',
849
+ },
850
+ {
851
+ label: '选项',
852
+ key: 'c2',
853
+ },
854
+ {
855
+ label: '选项',
856
+ key: 'c3',
857
+ },
858
+ ]
859
+
860
+ return (
861
+ <div>
862
+ <Tabs
863
+ items={items1}
864
+ value={value1}
865
+ onChange={(key) => {
866
+ setValue1(key)
867
+ }}
868
+ />
869
+ <Tabs defaultValue="c1" items={items} />
870
+ </div>
871
+ )
872
+ }
873
+ export default Demo23
874
+
875
+ ```
876
+
877
+ ## Tabs
878
+
879
+ ### Props
880
+
881
+ | 属性 | 说明 | 类型 | 默认值 |
882
+ | --- | --- | --- | --- |
883
+ | value | 当前激活 tab 面板的值 | `number` \| `string` | `0` |
884
+ | defaultValue | 初始化激活 tab 的值 | `number` \| `string` | `0` |
885
+ | activeColor | 标签选中色 | `string` | `#1a1a1a` |
886
+ | direction | 使用横纵方向 | `horizontal` \| `vertical` | `horizontal` |
887
+ | activeType | 选中底部展示样式 可选值 `line`、`smile`、`simple`、`card`、`button`、`divider` | `line` \| `smile` \| `simple` \| `card` \| `button`\| `divider` | `line` |
888
+ | duration | 切换动画时长,单位 ms 0 代表无动画 | `number` \| `string` | `300` |
889
+ | title | 自定义导航区域 | `() => JSX.Element[]` | `-` |
890
+ | align | 标题对齐方式 | `left` \| `right` | `-` |
891
+ | autoHeight | 自动高度。设置为 true 时,nut-tabs 和 nut-tabs\_\_content 会随着当前 nut-tabpane 的高度而发生变化。 | `boolean` | `false` |
892
+ | tabStyle | 标签栏样式 | `CSSProperties` | `{}` |
893
+ | items | 配置选项卡内容 | `Array<TabItemType>` | `` |
894
+ | fixWidth | 宽度是否固定 | `boolean` | `false` |
895
+ | onClick | 点击标签时触发 | `(index: string\| number) => void` | `-` |
896
+ | onChange | 当前激活的标签改变时触发 | `(index: string \| number) => void` | `-` |
897
+
898
+ ### TabItemType
899
+ | 属性 | 说明 | 类型 | 默认值 |
900
+ | --- | --- | --- | --- |
901
+ | label | 标题 | `React.ReactNode` | `-` |
902
+ | key | 标签 Key , 匹配的标识符, 默认为索引值 | `string` \| `number` | `-` |
903
+ | icon | 标签 Key , 匹配的标识符, 默认为索引值 | `React.ReactNode` | `-` |
904
+ | disabled | 是否禁用标签 | `boolean` | `false` |
905
+ | children | 选项内容 | `React.ReactNode` | `-` |
906
+
907
+ ## Tabs.Tabpane
908
+
909
+ ### Props
910
+
911
+ | 属性 | 说明 | 类型 | 默认值 |
912
+ | --- | --- | --- | --- |
913
+ | title | 标题 | `string` | `-` |
914
+ | value | 标签 Key , 匹配的标识符, 默认为索引值 | `string` \| `number` | `-` |
915
+ | disabled | 是否禁用标签 | `boolean` | `false` |
916
+
917
+
918
+ ## 主题定制
919
+
920
+ ### 样式变量
921
+
922
+ 组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/component/configprovider)。
923
+
924
+ | 名称 | 说明 | 默认值 |
925
+ | --- | --- | --- |
926
+ | \--nutui-tabs-button-active-background-color | Tab 选中标题的背景色 | `$color-background` |
927
+ | \--nutui-tabs-button-active-border | Tab 选中标题的边框色 | `1px solid $color-primary` |
928
+ | \--nutui-tabs-button-border-radius | 按钮模式的按钮的圆角 | `32px` |
929
+ | \--nutui-tabs-line-border-radius | 水平方向线的圆角 | `3px` |
930
+ | \--nutui-tabs-line-bottom | 水平方向线条距离 | `2px` |
931
+ | \--nutui-tabs-tab-button-font-size | 按钮模式的按钮字号 | `$font-size-2` |
932
+ | \--nutui-tabs-tab-line-color | 水平方向线条颜色 | `$color-primary` |
933
+ | \--nutui-tabs-tab-line-height | 水平方向激活选项卡线条的高度 | `4px` |
934
+ | \--nutui-tabs-tab-line-opacity | 水平方向线的透明度 | `1` |
935
+ | \--nutui-tabs-tab-line-width | 水平方向激活选项卡线条的宽度 | `28px` |
936
+ | \--nutui-tabs-tabpane-background-color | Tabpane 的背景色 | `#fff` |
937
+ | \--nutui-tabs-tabpane-padding | Tabpane 的内边距 | `$spacing-3` |
938
+ | \--nutui-tabs-title-gap | Tab 标题的左右 margin | `0px` |
939
+ | \--nutui-tabs-titles-background-color | Tab 标题的背景色 | `transparent` |
940
+ | \--nutui-tabs-titles-font-size | Tab 标题的字号 | `$font-size-3` |
941
+ | \--nutui-tabs-titles-gap | 标题内容之间的左右 margin | `$spacing-3` |
942
+ | \--nutui-tabs-titles-height | 水平方向标题的高度 | `48px` |
943
+ | \--nutui-tabs-titles-icon-font-size | 标题处icon的字号 | `28px` |
944
+ | \--nutui-tabs-titles-item-active-background-color | 水平方向激活选项卡标题的背景色 | `$color-background-overlay` |
945
+ | \--nutui-tabs-titles-item-active-color | Tab 选中标题的字色 | `$color-primary` |
946
+ | \--nutui-tabs-titles-item-active-font-size | Tab 选中标题的字号 | `$font-size-3` |
947
+ | \--nutui-tabs-titles-item-active-font-weight | Tab 选中标题的字重 | `$font-weight-bold` |
948
+ | \--nutui-tabs-titles-item-color | Tab 标题的字色 | `$color-title` |
949
+ | \--nutui-tabs-titles-item-min-width | 水平方向标题的最小宽度 | `34px` |
950
+ | \--nutui-tabs-titles-item-smile-bottom | smile 方向线条距离 | `-10%` |
951
+ | \--nutui-tabs-vertical-tab-line-color | 垂直方向线条颜色 | `linear-gradient(180deg, $color-primary 0%, rgba(#FF0F23, 0.15) 100%)` |
952
+ | \--nutui-tabs-vertical-tab-line-height | 垂直方向标题线条的高度 | `12px` |
953
+ | \--nutui-tabs-vertical-tab-line-width | 垂直方向标题线条的宽度 | `3px` |
954
+ | \--nutui-tabs-vertical-titles-item-height | 垂直方向标题的高度 | `40px` |
955
+ | \--nutui-tabs-vertical-titles-width | 垂直方向标题的宽度 | `100px` |