@douyinfe/semi-foundation 2.89.0-beta.0 → 2.90.0-beta.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.
@@ -3,6 +3,9 @@ import BaseFoundation, { DefaultAdapter } from "../base/foundation";
3
3
  import { getUuidv4 } from "../utils/uuid";
4
4
  import { strings } from "./constants";
5
5
  import { Animation } from '@douyinfe/semi-animation';
6
+ import 'prismjs';
7
+ import "prismjs/components/prism-jsx.js";
8
+ import "prismjs/components/prism-tsx.js";
6
9
 
7
10
  export interface DialogueAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
8
11
  getContainerRef: () => HTMLDivElement;
@@ -4,6 +4,10 @@ import { Animation } from '@douyinfe/semi-animation';
4
4
  import { debounce } from "lodash";
5
5
  import { getUuidv4 } from "../utils/uuid";
6
6
  import { handlePrevent } from "../utils/a11y";
7
+ // code's default height type is html/js/css, add jsx & tsx;
8
+ import 'prismjs';
9
+ import "prismjs/components/prism-jsx.js";
10
+ import "prismjs/components/prism-tsx.js";
7
11
 
8
12
  const { PIC_PREFIX, PIC_SUFFIX_ARRAY, ROLE,
9
13
  SCROLL_ANIMATION_TIME, SHOW_SCROLL_GAP
@@ -60,7 +60,12 @@ export default class InputBoxFoundation <P = Record<string, any>, S = Record<str
60
60
 
61
61
  getDisableSend = () => {
62
62
  const { content, attachment } = this.getStates();
63
- const { disableSend: disableSendInProps } = this.getProps();
63
+ const { disableSend: disableSendInProps, canSend } = this.getProps();
64
+ // 如果用户设置了 canSend API,则使用 canSend 值
65
+ // If the user has configured the canSend API, then the canSend value will be used.
66
+ if (typeof canSend === 'boolean') {
67
+ return !canSend;
68
+ }
64
69
  /** 不能发送的条件:(满足任1)
65
70
  * 1. props 中禁止发送;2. 没有文本输入,且没有上传文件; 3.上传文件中有状态不为 success 的
66
71
  * Conditions under which content cannot be sent: (any one of the following conditions must be met)
@@ -1,5 +1,8 @@
1
1
  /// <reference types="lodash" />
2
2
  import BaseFoundation, { DefaultAdapter } from "../base/foundation";
3
+ import 'prismjs';
4
+ import "prismjs/components/prism-jsx.js";
5
+ import "prismjs/components/prism-tsx.js";
3
6
  export interface DialogueAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
4
7
  getContainerRef: () => HTMLDivElement;
5
8
  setWheelScroll: (flag: boolean) => void;
@@ -9,6 +9,9 @@ var _foundation = _interopRequireDefault(require("../base/foundation"));
9
9
  var _uuid = require("../utils/uuid");
10
10
  var _constants = require("./constants");
11
11
  var _semiAnimation = require("@douyinfe/semi-animation");
12
+ require("prismjs");
13
+ require("prismjs/components/prism-jsx.js");
14
+ require("prismjs/components/prism-tsx.js");
12
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
16
  class DialogueFoundation extends _foundation.default {
14
17
  constructor(adapter) {
@@ -1,5 +1,8 @@
1
1
  /// <reference types="lodash" />
2
2
  import BaseFoundation, { DefaultAdapter } from "../base/foundation";
3
+ import 'prismjs';
4
+ import "prismjs/components/prism-jsx.js";
5
+ import "prismjs/components/prism-tsx.js";
3
6
  export interface Content {
4
7
  type: 'text' | 'image_url' | 'file_url';
5
8
  text?: string;
@@ -10,7 +10,12 @@ var _constants = require("./constants");
10
10
  var _semiAnimation = require("@douyinfe/semi-animation");
11
11
  var _uuid = require("../utils/uuid");
12
12
  var _a11y = require("../utils/a11y");
13
+ require("prismjs");
14
+ require("prismjs/components/prism-jsx.js");
15
+ require("prismjs/components/prism-tsx.js");
13
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ // code's default height type is html/js/css, add jsx & tsx;
18
+
14
19
  const {
15
20
  PIC_PREFIX,
16
21
  PIC_SUFFIX_ARRAY,
@@ -75,8 +75,14 @@ class InputBoxFoundation extends _foundation.default {
75
75
  attachment
76
76
  } = this.getStates();
77
77
  const {
78
- disableSend: disableSendInProps
78
+ disableSend: disableSendInProps,
79
+ canSend
79
80
  } = this.getProps();
81
+ // 如果用户设置了 canSend API,则使用 canSend 值
82
+ // If the user has configured the canSend API, then the canSend value will be used.
83
+ if (typeof canSend === 'boolean') {
84
+ return !canSend;
85
+ }
80
86
  /** 不能发送的条件:(满足任1)
81
87
  * 1. props 中禁止发送;2. 没有文本输入,且没有上传文件; 3.上传文件中有状态不为 success 的
82
88
  * Conditions under which content cannot be sent: (any one of the following conditions must be met)
@@ -388,36 +388,41 @@
388
388
  .semi-table .semi-table-column-filter.on {
389
389
  color: var(--semi-color-primary);
390
390
  }
391
- .semi-table-bordered .semi-table-title {
391
+ .semi-table-bordered > .semi-table-title {
392
392
  padding-left: 16px;
393
393
  padding-right: 16px;
394
394
  border-top: 1px solid var(--semi-color-border);
395
395
  border-right: 1px solid var(--semi-color-border);
396
396
  border-left: 1px solid var(--semi-color-border);
397
397
  }
398
- .semi-table-bordered .semi-table-container {
398
+ .semi-table-bordered > .semi-table-container {
399
399
  border: 1px solid var(--semi-color-border);
400
400
  border-right: 0;
401
401
  border-bottom: 0;
402
402
  }
403
- .semi-table-bordered .semi-table-header::-webkit-scrollbar {
403
+ :where(.semi-table-bordered) > .semi-table-container > .semi-table-header::-webkit-scrollbar {
404
404
  border-right: 1px solid var(--semi-color-border);
405
405
  }
406
- .semi-table-bordered .semi-table-footer {
406
+ :where(.semi-table-bordered) > .semi-table-container > .semi-table-footer {
407
407
  border-left: 1px solid var(--semi-color-border);
408
408
  border-right: 1px solid var(--semi-color-border);
409
409
  border-bottom: 1px solid var(--semi-color-border);
410
410
  }
411
- .semi-table-bordered .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
411
+ :where(.semi-table-bordered > .semi-table-container) > .semi-table-body > .semi-table-placeholder {
412
+ border-right: 1px solid var(--semi-color-border);
413
+ }
414
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
412
415
  background-color: transparent;
413
416
  }
414
- .semi-table-bordered .semi-table-thead > .semi-table-row > .semi-table-row-head,
415
- .semi-table-bordered .semi-table-tbody > .semi-table-row > .semi-table-row-cell {
417
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head, :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-tbody > .semi-table-row > .semi-table-row-cell {
416
418
  border-right: 1px solid var(--semi-color-border);
417
419
  }
418
- .semi-table-bordered .semi-table-placeholder {
420
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-header) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head {
419
421
  border-right: 1px solid var(--semi-color-border);
420
422
  }
423
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-header) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
424
+ background-color: transparent;
425
+ }
421
426
  .semi-table-placeholder {
422
427
  position: sticky;
423
428
  left: 0px;
@@ -508,7 +508,7 @@ $module: #{$prefix}-table;
508
508
  }
509
509
 
510
510
  &-bordered {
511
- .#{$module}-title {
511
+ & > .#{$module}-title {
512
512
  padding-left: $spacing-table_bordered_titler-paddingLeft;
513
513
  padding-right: $spacing-table_bordered_titler-paddingRight;
514
514
  border-top: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
@@ -516,37 +516,55 @@ $module: #{$prefix}-table;
516
516
  border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
517
517
  }
518
518
 
519
- .#{$module}-container {
519
+ & > .#{$module}-container {
520
520
  border: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
521
521
  border-right: 0;
522
522
  border-bottom: 0;
523
523
  }
524
524
 
525
- .#{$module}-header {
526
- &::-webkit-scrollbar {
527
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
525
+ :where(&) {
526
+ & > .#{$module}-container {
527
+ & > .#{$module}-header {
528
+ &::-webkit-scrollbar {
529
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
530
+ }
531
+ }
532
+
533
+ & > .#{$module}-footer {
534
+ border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
535
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
536
+ border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
537
+ }
528
538
  }
529
539
  }
530
540
 
531
- .#{$module}-footer {
532
- border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
533
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
534
- border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
541
+ :where(& > .#{$module}-container) {
542
+ & > .#{$module}-body > .#{$module}-placeholder {
543
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
544
+ }
535
545
  }
536
546
 
537
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
538
- .react-resizable-handle {
539
- background-color: transparent;
547
+ :where(& > .#{$module}-container > .#{$module}-body) {
548
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
549
+ .react-resizable-handle {
550
+ background-color: transparent;
551
+ }
540
552
  }
541
- }
542
553
 
543
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
544
- .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
545
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
554
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
555
+ & > .#{$module} > .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
556
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
557
+ }
546
558
  }
547
559
 
548
- .#{$module}-placeholder {
549
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
560
+ :where(& > .#{$module}-container > .#{$module}-header) {
561
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
562
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
563
+
564
+ .react-resizable-handle {
565
+ background-color: transparent;
566
+ }
567
+ }
550
568
  }
551
569
  }
552
570
 
@@ -33,6 +33,7 @@ declare class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
33
33
  */
34
34
  handleInputChange: (e: TagInputChangeEvent) => void;
35
35
  handleInputCompositionStart: (e: any) => void;
36
+ _splitArray: (originString: string, separators: string | string[] | null) => any;
36
37
  handleInputCompositionEnd: (e: any) => void;
37
38
  /**
38
39
  * check whether the input change is legal
@@ -49,6 +49,15 @@ class TagInputFoundation extends _foundation.default {
49
49
  }
50
50
  this._adapter.setEntering(true);
51
51
  };
52
+ this._splitArray = (originString, separators) => {
53
+ const {
54
+ split
55
+ } = this.getProps();
56
+ if ((0, _isFunction2.default)(split)) {
57
+ return split(originString, separators);
58
+ }
59
+ return (0, _getSplitedArray.default)(originString, separators);
60
+ };
52
61
  this.handleInputCompositionEnd = e => {
53
62
  const {
54
63
  value
@@ -63,7 +72,7 @@ class TagInputFoundation extends _foundation.default {
63
72
  }
64
73
  this._adapter.setEntering(false);
65
74
  let allowChange = true;
66
- const inputArr = (0, _getSplitedArray.default)(value, separator);
75
+ const inputArr = this._splitArray(value, separator);
67
76
  let index = 0;
68
77
  for (; index < inputArr.length; index++) {
69
78
  if (inputArr[index].length > maxLength) {
@@ -100,8 +109,8 @@ class TagInputFoundation extends _foundation.default {
100
109
  } = this._adapter.getStates();
101
110
  let allowChange = true;
102
111
  if ((0, _isNumber2.default)(maxLength)) {
103
- const valueArr = (0, _getSplitedArray.default)(value, separator);
104
- const inputArr = (0, _getSplitedArray.default)(inputValue, separator);
112
+ const valueArr = this._splitArray(value, separator);
113
+ const inputArr = this._splitArray(inputValue, separator);
105
114
  const maxLen = Math.max(valueArr.length, inputArr.length);
106
115
  for (let i = 0; i < maxLen; i++) {
107
116
  // When the input length is increasing
@@ -154,7 +163,7 @@ class TagInputFoundation extends _foundation.default {
154
163
  inputValue,
155
164
  tagsArray
156
165
  } = this._adapter.getStates();
157
- let addTags = (0, _getSplitedArray.default)(inputValue, separator);
166
+ let addTags = this._splitArray(inputValue, separator);
158
167
  addTags = addTags.filter((item, idx) => {
159
168
  // If allowDuplicates is false, then filter duplicates
160
169
  if (!allowDuplicates) {
@@ -40,6 +40,8 @@ export default class VideoPlayerFoundation<P = Record<string, any>, S = Record<s
40
40
  handlePlayOrPause(): void;
41
41
  handlePlay(): void;
42
42
  handlePause(): void;
43
+ handleVideoPlay: () => void;
44
+ handleVideoPause: () => void;
43
45
  handleCanPlay: () => void;
44
46
  handleWaiting: (locale: any) => void;
45
47
  handleStalled: (locale: any) => void;
@@ -18,6 +18,14 @@ class VideoPlayerFoundation extends _foundation.default {
18
18
  this._adapter.setShowControls(false);
19
19
  }, 3000);
20
20
  }, 200);
21
+ this.handleVideoPlay = () => {
22
+ this._adapter.setIsPlaying(true);
23
+ this._adapter.notifyPlay();
24
+ };
25
+ this.handleVideoPause = () => {
26
+ this._adapter.setIsPlaying(false);
27
+ this._adapter.notifyPause();
28
+ };
21
29
  this.handleCanPlay = () => {
22
30
  this._adapter.setShowNotification(false);
23
31
  };
@@ -197,17 +205,17 @@ class VideoPlayerFoundation extends _foundation.default {
197
205
  handlePlay() {
198
206
  const video = this._adapter.getVideo();
199
207
  if (video) {
208
+ // 触发原生 onPlay 后通过 handleVideoPlay 更新 isPlaying 状态
209
+ // After triggering the native onPlay, the isPlaying state is updated via handleVideoPlay.
200
210
  video.play();
201
- this._adapter.setIsPlaying(true);
202
- this._adapter.notifyPlay();
203
211
  }
204
212
  }
205
213
  handlePause() {
206
214
  const video = this._adapter.getVideo();
207
215
  if (video) {
216
+ // 触发原生 onPause 后通过 handleVideoPause 更新 isPlaying 状态
217
+ // After triggering the native onPause, the isPlaying state is updated via handleVideoPause.
208
218
  video.pause();
209
- this._adapter.setIsPlaying(false);
210
- this._adapter.notifyPause();
211
219
  }
212
220
  }
213
221
  handleVolumeChange(value) {
@@ -1,5 +1,8 @@
1
1
  /// <reference types="lodash" />
2
2
  import BaseFoundation, { DefaultAdapter } from "../base/foundation";
3
+ import 'prismjs';
4
+ import "prismjs/components/prism-jsx.js";
5
+ import "prismjs/components/prism-tsx.js";
3
6
  export interface DialogueAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
4
7
  getContainerRef: () => HTMLDivElement;
5
8
  setWheelScroll: (flag: boolean) => void;
@@ -3,6 +3,9 @@ import BaseFoundation from "../base/foundation";
3
3
  import { getUuidv4 } from "../utils/uuid";
4
4
  import { strings } from "./constants";
5
5
  import { Animation } from '@douyinfe/semi-animation';
6
+ import 'prismjs';
7
+ import "prismjs/components/prism-jsx.js";
8
+ import "prismjs/components/prism-tsx.js";
6
9
  export default class DialogueFoundation extends BaseFoundation {
7
10
  constructor(adapter) {
8
11
  super(Object.assign({}, adapter));
@@ -1,5 +1,8 @@
1
1
  /// <reference types="lodash" />
2
2
  import BaseFoundation, { DefaultAdapter } from "../base/foundation";
3
+ import 'prismjs';
4
+ import "prismjs/components/prism-jsx.js";
5
+ import "prismjs/components/prism-tsx.js";
3
6
  export interface Content {
4
7
  type: 'text' | 'image_url' | 'file_url';
5
8
  text?: string;
@@ -4,6 +4,10 @@ import { strings } from "./constants";
4
4
  import { Animation } from '@douyinfe/semi-animation';
5
5
  import { getUuidv4 } from "../utils/uuid";
6
6
  import { handlePrevent } from "../utils/a11y";
7
+ // code's default height type is html/js/css, add jsx & tsx;
8
+ import 'prismjs';
9
+ import "prismjs/components/prism-jsx.js";
10
+ import "prismjs/components/prism-tsx.js";
7
11
  const {
8
12
  PIC_PREFIX,
9
13
  PIC_SUFFIX_ARRAY,
@@ -68,8 +68,14 @@ export default class InputBoxFoundation extends BaseFoundation {
68
68
  attachment
69
69
  } = this.getStates();
70
70
  const {
71
- disableSend: disableSendInProps
71
+ disableSend: disableSendInProps,
72
+ canSend
72
73
  } = this.getProps();
74
+ // 如果用户设置了 canSend API,则使用 canSend 值
75
+ // If the user has configured the canSend API, then the canSend value will be used.
76
+ if (typeof canSend === 'boolean') {
77
+ return !canSend;
78
+ }
73
79
  /** 不能发送的条件:(满足任1)
74
80
  * 1. props 中禁止发送;2. 没有文本输入,且没有上传文件; 3.上传文件中有状态不为 success 的
75
81
  * Conditions under which content cannot be sent: (any one of the following conditions must be met)
@@ -388,36 +388,41 @@
388
388
  .semi-table .semi-table-column-filter.on {
389
389
  color: var(--semi-color-primary);
390
390
  }
391
- .semi-table-bordered .semi-table-title {
391
+ .semi-table-bordered > .semi-table-title {
392
392
  padding-left: 16px;
393
393
  padding-right: 16px;
394
394
  border-top: 1px solid var(--semi-color-border);
395
395
  border-right: 1px solid var(--semi-color-border);
396
396
  border-left: 1px solid var(--semi-color-border);
397
397
  }
398
- .semi-table-bordered .semi-table-container {
398
+ .semi-table-bordered > .semi-table-container {
399
399
  border: 1px solid var(--semi-color-border);
400
400
  border-right: 0;
401
401
  border-bottom: 0;
402
402
  }
403
- .semi-table-bordered .semi-table-header::-webkit-scrollbar {
403
+ :where(.semi-table-bordered) > .semi-table-container > .semi-table-header::-webkit-scrollbar {
404
404
  border-right: 1px solid var(--semi-color-border);
405
405
  }
406
- .semi-table-bordered .semi-table-footer {
406
+ :where(.semi-table-bordered) > .semi-table-container > .semi-table-footer {
407
407
  border-left: 1px solid var(--semi-color-border);
408
408
  border-right: 1px solid var(--semi-color-border);
409
409
  border-bottom: 1px solid var(--semi-color-border);
410
410
  }
411
- .semi-table-bordered .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
411
+ :where(.semi-table-bordered > .semi-table-container) > .semi-table-body > .semi-table-placeholder {
412
+ border-right: 1px solid var(--semi-color-border);
413
+ }
414
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
412
415
  background-color: transparent;
413
416
  }
414
- .semi-table-bordered .semi-table-thead > .semi-table-row > .semi-table-row-head,
415
- .semi-table-bordered .semi-table-tbody > .semi-table-row > .semi-table-row-cell {
417
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head, :where(.semi-table-bordered > .semi-table-container > .semi-table-body) > .semi-table > .semi-table-tbody > .semi-table-row > .semi-table-row-cell {
416
418
  border-right: 1px solid var(--semi-color-border);
417
419
  }
418
- .semi-table-bordered .semi-table-placeholder {
420
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-header) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head {
419
421
  border-right: 1px solid var(--semi-color-border);
420
422
  }
423
+ :where(.semi-table-bordered > .semi-table-container > .semi-table-header) > .semi-table > .semi-table-thead > .semi-table-row > .semi-table-row-head .react-resizable-handle {
424
+ background-color: transparent;
425
+ }
421
426
  .semi-table-placeholder {
422
427
  position: sticky;
423
428
  left: 0px;
@@ -508,7 +508,7 @@ $module: #{$prefix}-table;
508
508
  }
509
509
 
510
510
  &-bordered {
511
- .#{$module}-title {
511
+ & > .#{$module}-title {
512
512
  padding-left: $spacing-table_bordered_titler-paddingLeft;
513
513
  padding-right: $spacing-table_bordered_titler-paddingRight;
514
514
  border-top: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
@@ -516,37 +516,55 @@ $module: #{$prefix}-table;
516
516
  border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
517
517
  }
518
518
 
519
- .#{$module}-container {
519
+ & > .#{$module}-container {
520
520
  border: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
521
521
  border-right: 0;
522
522
  border-bottom: 0;
523
523
  }
524
524
 
525
- .#{$module}-header {
526
- &::-webkit-scrollbar {
527
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
525
+ :where(&) {
526
+ & > .#{$module}-container {
527
+ & > .#{$module}-header {
528
+ &::-webkit-scrollbar {
529
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
530
+ }
531
+ }
532
+
533
+ & > .#{$module}-footer {
534
+ border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
535
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
536
+ border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
537
+ }
528
538
  }
529
539
  }
530
540
 
531
- .#{$module}-footer {
532
- border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
533
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
534
- border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
541
+ :where(& > .#{$module}-container) {
542
+ & > .#{$module}-body > .#{$module}-placeholder {
543
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
544
+ }
535
545
  }
536
546
 
537
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
538
- .react-resizable-handle {
539
- background-color: transparent;
547
+ :where(& > .#{$module}-container > .#{$module}-body) {
548
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
549
+ .react-resizable-handle {
550
+ background-color: transparent;
551
+ }
540
552
  }
541
- }
542
553
 
543
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
544
- .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
545
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
554
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
555
+ & > .#{$module} > .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
556
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
557
+ }
546
558
  }
547
559
 
548
- .#{$module}-placeholder {
549
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
560
+ :where(& > .#{$module}-container > .#{$module}-header) {
561
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
562
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
563
+
564
+ .react-resizable-handle {
565
+ background-color: transparent;
566
+ }
567
+ }
550
568
  }
551
569
  }
552
570
 
@@ -33,6 +33,7 @@ declare class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
33
33
  */
34
34
  handleInputChange: (e: TagInputChangeEvent) => void;
35
35
  handleInputCompositionStart: (e: any) => void;
36
+ _splitArray: (originString: string, separators: string | string[] | null) => any;
36
37
  handleInputCompositionEnd: (e: any) => void;
37
38
  /**
38
39
  * check whether the input change is legal
@@ -42,6 +42,15 @@ class TagInputFoundation extends BaseFoundation {
42
42
  }
43
43
  this._adapter.setEntering(true);
44
44
  };
45
+ this._splitArray = (originString, separators) => {
46
+ const {
47
+ split
48
+ } = this.getProps();
49
+ if (_isFunction(split)) {
50
+ return split(originString, separators);
51
+ }
52
+ return getSplitedArray(originString, separators);
53
+ };
45
54
  this.handleInputCompositionEnd = e => {
46
55
  const {
47
56
  value
@@ -56,7 +65,7 @@ class TagInputFoundation extends BaseFoundation {
56
65
  }
57
66
  this._adapter.setEntering(false);
58
67
  let allowChange = true;
59
- const inputArr = getSplitedArray(value, separator);
68
+ const inputArr = this._splitArray(value, separator);
60
69
  let index = 0;
61
70
  for (; index < inputArr.length; index++) {
62
71
  if (inputArr[index].length > maxLength) {
@@ -93,8 +102,8 @@ class TagInputFoundation extends BaseFoundation {
93
102
  } = this._adapter.getStates();
94
103
  let allowChange = true;
95
104
  if (_isNumber(maxLength)) {
96
- const valueArr = getSplitedArray(value, separator);
97
- const inputArr = getSplitedArray(inputValue, separator);
105
+ const valueArr = this._splitArray(value, separator);
106
+ const inputArr = this._splitArray(inputValue, separator);
98
107
  const maxLen = Math.max(valueArr.length, inputArr.length);
99
108
  for (let i = 0; i < maxLen; i++) {
100
109
  // When the input length is increasing
@@ -147,7 +156,7 @@ class TagInputFoundation extends BaseFoundation {
147
156
  inputValue,
148
157
  tagsArray
149
158
  } = this._adapter.getStates();
150
- let addTags = getSplitedArray(inputValue, separator);
159
+ let addTags = this._splitArray(inputValue, separator);
151
160
  addTags = addTags.filter((item, idx) => {
152
161
  // If allowDuplicates is false, then filter duplicates
153
162
  if (!allowDuplicates) {
@@ -40,6 +40,8 @@ export default class VideoPlayerFoundation<P = Record<string, any>, S = Record<s
40
40
  handlePlayOrPause(): void;
41
41
  handlePlay(): void;
42
42
  handlePause(): void;
43
+ handleVideoPlay: () => void;
44
+ handleVideoPause: () => void;
43
45
  handleCanPlay: () => void;
44
46
  handleWaiting: (locale: any) => void;
45
47
  handleStalled: (locale: any) => void;
@@ -11,6 +11,14 @@ export default class VideoPlayerFoundation extends BaseFoundation {
11
11
  this._adapter.setShowControls(false);
12
12
  }, 3000);
13
13
  }, 200);
14
+ this.handleVideoPlay = () => {
15
+ this._adapter.setIsPlaying(true);
16
+ this._adapter.notifyPlay();
17
+ };
18
+ this.handleVideoPause = () => {
19
+ this._adapter.setIsPlaying(false);
20
+ this._adapter.notifyPause();
21
+ };
14
22
  this.handleCanPlay = () => {
15
23
  this._adapter.setShowNotification(false);
16
24
  };
@@ -190,17 +198,17 @@ export default class VideoPlayerFoundation extends BaseFoundation {
190
198
  handlePlay() {
191
199
  const video = this._adapter.getVideo();
192
200
  if (video) {
201
+ // 触发原生 onPlay 后通过 handleVideoPlay 更新 isPlaying 状态
202
+ // After triggering the native onPlay, the isPlaying state is updated via handleVideoPlay.
193
203
  video.play();
194
- this._adapter.setIsPlaying(true);
195
- this._adapter.notifyPlay();
196
204
  }
197
205
  }
198
206
  handlePause() {
199
207
  const video = this._adapter.getVideo();
200
208
  if (video) {
209
+ // 触发原生 onPause 后通过 handleVideoPause 更新 isPlaying 状态
210
+ // After triggering the native onPause, the isPlaying state is updated via handleVideoPause.
201
211
  video.pause();
202
- this._adapter.setIsPlaying(false);
203
- this._adapter.notifyPause();
204
212
  }
205
213
  }
206
214
  handleVolumeChange(value) {
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-foundation",
3
- "version": "2.89.0-beta.0",
3
+ "version": "2.90.0-beta.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "build:lib": "node ./scripts/compileLib.js",
7
7
  "prepublishOnly": "npm run build:lib"
8
8
  },
9
9
  "dependencies": {
10
- "@douyinfe/semi-animation": "2.89.0-beta.0",
11
- "@douyinfe/semi-json-viewer-core": "2.89.0-beta.0",
10
+ "@douyinfe/semi-animation": "2.90.0-beta.0",
11
+ "@douyinfe/semi-json-viewer-core": "2.90.0-beta.0",
12
12
  "@mdx-js/mdx": "^3.0.1",
13
13
  "async-validator": "^3.5.0",
14
14
  "classnames": "^2.2.6",
@@ -29,7 +29,7 @@
29
29
  "*.scss",
30
30
  "*.css"
31
31
  ],
32
- "gitHead": "e0c70c237b5788629d4064ebe4f8d477dc069091",
32
+ "gitHead": "aa25e1ef1574f7588459cdaadf25a523d6d2f6c5",
33
33
  "devDependencies": {
34
34
  "@babel/plugin-transform-runtime": "^7.15.8",
35
35
  "@babel/preset-env": "^7.15.8",
package/table/table.scss CHANGED
@@ -508,7 +508,7 @@ $module: #{$prefix}-table;
508
508
  }
509
509
 
510
510
  &-bordered {
511
- .#{$module}-title {
511
+ & > .#{$module}-title {
512
512
  padding-left: $spacing-table_bordered_titler-paddingLeft;
513
513
  padding-right: $spacing-table_bordered_titler-paddingRight;
514
514
  border-top: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
@@ -516,37 +516,55 @@ $module: #{$prefix}-table;
516
516
  border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
517
517
  }
518
518
 
519
- .#{$module}-container {
519
+ & > .#{$module}-container {
520
520
  border: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
521
521
  border-right: 0;
522
522
  border-bottom: 0;
523
523
  }
524
524
 
525
- .#{$module}-header {
526
- &::-webkit-scrollbar {
527
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
525
+ :where(&) {
526
+ & > .#{$module}-container {
527
+ & > .#{$module}-header {
528
+ &::-webkit-scrollbar {
529
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
530
+ }
531
+ }
532
+
533
+ & > .#{$module}-footer {
534
+ border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
535
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
536
+ border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
537
+ }
528
538
  }
529
539
  }
530
540
 
531
- .#{$module}-footer {
532
- border-left: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
533
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
534
- border-bottom: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
541
+ :where(& > .#{$module}-container) {
542
+ & > .#{$module}-body > .#{$module}-placeholder {
543
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
544
+ }
535
545
  }
536
546
 
537
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
538
- .react-resizable-handle {
539
- background-color: transparent;
547
+ :where(& > .#{$module}-container > .#{$module}-body) {
548
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
549
+ .react-resizable-handle {
550
+ background-color: transparent;
551
+ }
540
552
  }
541
- }
542
553
 
543
- .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
544
- .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
545
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
554
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head,
555
+ & > .#{$module} > .#{$module}-tbody > .#{$module}-row > .#{$module}-row-cell {
556
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
557
+ }
546
558
  }
547
559
 
548
- .#{$module}-placeholder {
549
- border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
560
+ :where(& > .#{$module}-container > .#{$module}-header) {
561
+ & > .#{$module} > .#{$module}-thead > .#{$module}-row > .#{$module}-row-head {
562
+ border-right: $width-table_base_border $border-table_base-borderStyle $color-table-border-default;
563
+
564
+ .react-resizable-handle {
565
+ background-color: transparent;
566
+ }
567
+ }
550
568
  }
551
569
  }
552
570
 
@@ -73,6 +73,14 @@ class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
73
73
  this._adapter.setEntering(true);
74
74
  }
75
75
 
76
+ _splitArray = (originString: string, separators: string | string[] | null) => {
77
+ const { split } = this.getProps();
78
+ if (isFunction(split)) {
79
+ return split(originString, separators);
80
+ }
81
+ return getSplitedArray(originString, separators);
82
+ }
83
+
76
84
  handleInputCompositionEnd = (e: any) => {
77
85
  const { value } = e.target;
78
86
  const {
@@ -85,7 +93,7 @@ class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
85
93
  }
86
94
  this._adapter.setEntering(false);
87
95
  let allowChange = true;
88
- const inputArr = getSplitedArray(value, separator);
96
+ const inputArr = this._splitArray(value, separator);
89
97
  let index = 0;
90
98
  for (; index < inputArr.length; index++) {
91
99
  if (inputArr[index].length > maxLength) {
@@ -121,8 +129,8 @@ class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
121
129
  const { inputValue } = this._adapter.getStates();
122
130
  let allowChange = true;
123
131
  if (isNumber(maxLength)) {
124
- const valueArr = getSplitedArray(value, separator);
125
- const inputArr = getSplitedArray(inputValue, separator);
132
+ const valueArr = this._splitArray(value, separator);
133
+ const inputArr = this._splitArray(inputValue, separator);
126
134
  const maxLen = Math.max(valueArr.length, inputArr.length);
127
135
  for (let i = 0; i < maxLen; i++) {
128
136
  // When the input length is increasing
@@ -174,7 +182,7 @@ class TagInputFoundation extends BaseFoundation<TagInputAdapter> {
174
182
  inputValue,
175
183
  tagsArray
176
184
  } = this._adapter.getStates();
177
- let addTags = getSplitedArray(inputValue, separator);
185
+ let addTags = this._splitArray(inputValue, separator);
178
186
 
179
187
  addTags = addTags.filter((item, idx) => {
180
188
  // If allowDuplicates is false, then filter duplicates
@@ -107,21 +107,31 @@ export default class VideoPlayerFoundation<P = Record<string, any>, S = Record<s
107
107
  handlePlay() {
108
108
  const video = this._adapter.getVideo();
109
109
  if (video) {
110
+ // 触发原生 onPlay 后通过 handleVideoPlay 更新 isPlaying 状态
111
+ // After triggering the native onPlay, the isPlaying state is updated via handleVideoPlay.
110
112
  video.play();
111
- this._adapter.setIsPlaying(true);
112
- this._adapter.notifyPlay();
113
113
  }
114
114
  }
115
115
 
116
116
  handlePause() {
117
117
  const video = this._adapter.getVideo();
118
118
  if (video) {
119
+ // 触发原生 onPause 后通过 handleVideoPause 更新 isPlaying 状态
120
+ // After triggering the native onPause, the isPlaying state is updated via handleVideoPause.
119
121
  video.pause();
120
- this._adapter.setIsPlaying(false);
121
- this._adapter.notifyPause();
122
122
  }
123
123
  }
124
124
 
125
+ handleVideoPlay = () => {
126
+ this._adapter.setIsPlaying(true);
127
+ this._adapter.notifyPlay();
128
+ }
129
+
130
+ handleVideoPause = () => {
131
+ this._adapter.setIsPlaying(false);
132
+ this._adapter.notifyPause();
133
+ }
134
+
125
135
  handleCanPlay = () => {
126
136
  this._adapter.setShowNotification(false);
127
137
  }