@douyinfe/semi-foundation 2.66.0-alpha.0 → 2.66.0-alpha.2
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.
- package/hotKeys/constants.ts +69 -0
- package/hotKeys/foundation.ts +65 -0
- package/hotKeys/hotKeys.scss +29 -0
- package/hotKeys/variables.scss +9 -0
- package/lib/cjs/hotKeys/constants.d.ts +6 -0
- package/lib/cjs/hotKeys/constants.js +151 -0
- package/lib/cjs/hotKeys/foundation.d.ts +12 -0
- package/lib/cjs/hotKeys/foundation.js +61 -0
- package/lib/cjs/hotKeys/hotKeys.css +31 -0
- package/lib/cjs/hotKeys/hotKeys.scss +29 -0
- package/lib/cjs/hotKeys/variables.scss +9 -0
- package/lib/cjs/markdownRender/foundation.d.ts +2 -1
- package/lib/cjs/overflowList/foundation.js +3 -4
- package/lib/cjs/tabs/constants.d.ts +1 -0
- package/lib/cjs/tabs/constants.js +2 -1
- package/lib/cjs/tabs/tabs.css +29 -0
- package/lib/cjs/tabs/tabs.scss +42 -0
- package/lib/cjs/tabs/variables.scss +12 -0
- package/lib/cjs/tooltip/foundation.d.ts +0 -1
- package/lib/cjs/tooltip/foundation.js +0 -3
- package/lib/cjs/upload/upload.css +2 -0
- package/lib/cjs/upload/upload.scss +2 -0
- package/lib/es/hotKeys/constants.d.ts +6 -0
- package/lib/es/hotKeys/constants.js +144 -0
- package/lib/es/hotKeys/foundation.d.ts +12 -0
- package/lib/es/hotKeys/foundation.js +53 -0
- package/lib/es/hotKeys/hotKeys.css +31 -0
- package/lib/es/hotKeys/hotKeys.scss +29 -0
- package/lib/es/hotKeys/variables.scss +9 -0
- package/lib/es/markdownRender/foundation.d.ts +2 -1
- package/lib/es/overflowList/foundation.js +3 -4
- package/lib/es/tabs/constants.d.ts +1 -0
- package/lib/es/tabs/constants.js +2 -1
- package/lib/es/tabs/tabs.css +29 -0
- package/lib/es/tabs/tabs.scss +42 -0
- package/lib/es/tabs/variables.scss +12 -0
- package/lib/es/tooltip/foundation.d.ts +0 -1
- package/lib/es/tooltip/foundation.js +0 -3
- package/lib/es/upload/upload.css +2 -0
- package/lib/es/upload/upload.scss +2 -0
- package/markdownRender/foundation.ts +2 -1
- package/overflowList/foundation.ts +3 -4
- package/package.json +7 -4
- package/tabs/constants.ts +2 -1
- package/tabs/tabs.scss +42 -0
- package/tabs/variables.scss +12 -0
- package/tooltip/foundation.ts +14 -18
- package/upload/upload.scss +2 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BASE_CLASS_PREFIX } from "../base/constants";
|
|
2
|
+
|
|
3
|
+
const cssClasses = {
|
|
4
|
+
PREFIX: `${BASE_CLASS_PREFIX}-hotKeys`,
|
|
5
|
+
} as const;
|
|
6
|
+
|
|
7
|
+
const strings = {
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { cssClasses, strings };
|
|
11
|
+
|
|
12
|
+
export function keyToCode(key: KeyboardEvent["key"]) {
|
|
13
|
+
const keyCodeMap = {
|
|
14
|
+
// alpha
|
|
15
|
+
'a': 'KeyA', 'b': 'KeyB', 'c': 'KeyC', 'd': 'KeyD', 'e': 'KeyE',
|
|
16
|
+
'f': 'KeyF', 'g': 'KeyG', 'h': 'KeyH', 'i': 'KeyI', 'j': 'KeyJ',
|
|
17
|
+
'k': 'KeyK', 'l': 'KeyL', 'm': 'KeyM', 'n': 'KeyN', 'o': 'KeyO',
|
|
18
|
+
'p': 'KeyP', 'q': 'KeyQ', 'r': 'KeyR', 's': 'KeyS', 't': 'KeyT',
|
|
19
|
+
'u': 'KeyU', 'v': 'KeyV', 'w': 'KeyW', 'x': 'KeyX', 'y': 'KeyY',
|
|
20
|
+
'z': 'KeyZ',
|
|
21
|
+
|
|
22
|
+
// digit
|
|
23
|
+
'0': 'Digit0', '1': 'Digit1', '2': 'Digit2', '3': 'Digit3',
|
|
24
|
+
'4': 'Digit4', '5': 'Digit5', '6': 'Digit6', '7': 'Digit7',
|
|
25
|
+
'8': 'Digit8', '9': 'Digit9',
|
|
26
|
+
|
|
27
|
+
// punctuation
|
|
28
|
+
' ': 'Space', 'enter': 'Enter', 'escape': 'Escape', 'backspace': 'Backspace',
|
|
29
|
+
'tab': 'Tab', '-': 'Minus', '=': 'Equal', '[': 'BracketLeft',
|
|
30
|
+
']': 'BracketRight', '\\': 'Backslash', ';': 'Semicolon',
|
|
31
|
+
"'": 'Quote', '`': 'Backquote', ',': 'Comma', '.': 'Period',
|
|
32
|
+
'/': 'Slash', '?': 'Slash', '!': 'Digit1', '@': 'Digit2',
|
|
33
|
+
'#': 'Digit3', '$': 'Digit4', '%': 'Digit5', '^': 'Digit6',
|
|
34
|
+
'&': 'Digit7', '*': 'Digit8', '(': 'Digit9', ')': 'Digit0',
|
|
35
|
+
|
|
36
|
+
// arrow
|
|
37
|
+
'arrowup': 'ArrowUp', 'arrowdown': 'ArrowDown',
|
|
38
|
+
'arrowleft': 'ArrowLeft', 'arrowright': 'ArrowRight',
|
|
39
|
+
|
|
40
|
+
// function
|
|
41
|
+
'shift': 'ShiftLeft', 'control': 'ControlLeft', 'alt': 'AltLeft',
|
|
42
|
+
'meta': 'MetaLeft', 'capslock': 'CapsLock', 'f1': 'F1',
|
|
43
|
+
'f2': 'F2', 'f3': 'F3', 'f4': 'F4', 'f5': 'F5', 'f6': 'F6',
|
|
44
|
+
'f7': 'F7', 'f8': 'F8', 'f9': 'F9', 'f10': 'F10', 'f11': 'F11',
|
|
45
|
+
'f12': 'F12', 'insert': 'Insert', 'delete': 'Delete', 'home': 'Home',
|
|
46
|
+
'end': 'End', 'pageup': 'PageUp', 'pagedown': 'PageDown',
|
|
47
|
+
'numlock': 'NumLock', 'scrolllock': 'ScrollLock', 'pause': 'Pause',
|
|
48
|
+
|
|
49
|
+
// numpad
|
|
50
|
+
'numpad0': 'Numpad0', 'numpad1': 'Numpad1', 'numpad2': 'Numpad2',
|
|
51
|
+
'numpad3': 'Numpad3', 'numpad4': 'Numpad4', 'numpad5': 'Numpad5',
|
|
52
|
+
'numpad6': 'Numpad6', 'numpad7': 'Numpad7', 'numpad8': 'Numpad8',
|
|
53
|
+
'numpad9': 'Numpad9', 'numpaddecimal': 'NumpadDecimal',
|
|
54
|
+
'numpaddivide': 'NumpadDivide', 'numpadmultiply': 'NumpadMultiply',
|
|
55
|
+
'numpadsubtract': 'NumpadSubtract', 'numpadadd': 'NumpadAdd',
|
|
56
|
+
'numpadenter': 'NumpadEnter',
|
|
57
|
+
|
|
58
|
+
// Others
|
|
59
|
+
'printscreen': 'PrintScreen', 'contextmenu': 'ContextMenu',
|
|
60
|
+
'help': 'Help', 'select': 'Select', 'execute': 'Execute',
|
|
61
|
+
'clear': 'Clear', 'kana': 'KanaMode', 'kanji': 'KanjiMode',
|
|
62
|
+
'nonconvert': 'NonConvert', 'convert': 'Convert',
|
|
63
|
+
'process': 'Process', 'accept': 'Accept', 'modechange': 'ModeChange',
|
|
64
|
+
'launchapp1': 'LaunchApp1', 'launchapp2': 'LaunchApp2',
|
|
65
|
+
'launchmail': 'LaunchMail', 'mediaselect': 'MediaSelect'
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return keyCodeMap[key.toLowerCase()] || undefined;
|
|
69
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
2
|
+
import { keyToCode } from './constants';
|
|
3
|
+
|
|
4
|
+
export interface HotKeysAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
5
|
+
notifyClick: () => void;
|
|
6
|
+
getListenerTarget: () => HTMLElement
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default class HotKeysFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<HotKeysAdapter<P, S>, P, S> {
|
|
10
|
+
constructor(adapter: HotKeysAdapter<P, S>) {
|
|
11
|
+
super({ ...adapter });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
init(): void {
|
|
15
|
+
// init Listener
|
|
16
|
+
const target = this._adapter.getListenerTarget();
|
|
17
|
+
target?.addEventListener('keydown', this.handleKeyDown);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
handleKeyDown = (event: KeyboardEvent): void => {
|
|
21
|
+
const disabled = this.getProps().disabled;
|
|
22
|
+
if (disabled) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const hotKeys = this.getProps().hotKeys;
|
|
26
|
+
let allModifier = new Array(4).fill(false); // Meta Shift Alt Ctrl
|
|
27
|
+
let clickedModifier = [event.metaKey, event.shiftKey, event.altKey, event.ctrlKey];
|
|
28
|
+
const keysPressed = hotKeys?.map((key: KeyboardEvent["key"])=> {
|
|
29
|
+
if (key === "Meta") {
|
|
30
|
+
allModifier[0] = true;
|
|
31
|
+
return event.metaKey;
|
|
32
|
+
} else if (key === "Shift") {
|
|
33
|
+
allModifier[1] = true;
|
|
34
|
+
return event.shiftKey;
|
|
35
|
+
} else if (key === "Alt") {
|
|
36
|
+
allModifier[2] = true;
|
|
37
|
+
return event.altKey;
|
|
38
|
+
} else if (key === "Control") {
|
|
39
|
+
allModifier[3] = true;
|
|
40
|
+
return event.ctrlKey;
|
|
41
|
+
}
|
|
42
|
+
return event.code === keyToCode(key);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
if (!allModifier.every((value, index) => value === clickedModifier[index])) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (keysPressed.every(Boolean)) {
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
this.handleClick();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
handleClick(): void {
|
|
57
|
+
this._adapter.notifyClick();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
destroy(): void {
|
|
61
|
+
// remove Listener
|
|
62
|
+
const target = this._adapter.getListenerTarget();
|
|
63
|
+
target?.removeEventListener('keydown', this.handleKeyDown);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@import "./variables.scss";
|
|
2
|
+
|
|
3
|
+
$module: #{$prefix}-hotKeys;
|
|
4
|
+
|
|
5
|
+
.#{$module} {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
position: relative;
|
|
8
|
+
user-select: none;
|
|
9
|
+
white-space: nowrap;
|
|
10
|
+
vertical-align: bottom;
|
|
11
|
+
@include all-center;
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
|
|
14
|
+
&-content {
|
|
15
|
+
@include font-size-small;
|
|
16
|
+
border-radius: $radius-hotKeys;
|
|
17
|
+
height: $height-hotKeys;
|
|
18
|
+
padding: $spacing-hotKeys-paddingY $spacing-hotKeys-paddingX;
|
|
19
|
+
border: $width-hotKeys-border;
|
|
20
|
+
background-color: $color-hotKeys-bg;
|
|
21
|
+
color: $color-hotKeys-text;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-split {
|
|
25
|
+
@include font-size-small;
|
|
26
|
+
margin: 0 3px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
$color-hotKeys-bg: var(--semi-color-fill-0); // 快捷键背景颜色
|
|
2
|
+
$color-hotKeys-text: var(--semi-color-text-2); // 快捷键文字颜色
|
|
3
|
+
|
|
4
|
+
$width-hotKeys-border: 1px; // 快捷键描边宽度
|
|
5
|
+
$radius-hotKeys: 2px; // 边框半径
|
|
6
|
+
|
|
7
|
+
$height-hotKeys: 20px; // 快捷键高度
|
|
8
|
+
$spacing-hotKeys-paddingY: 2px;
|
|
9
|
+
$spacing-hotKeys-paddingX: $spacing-tight;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cssClasses = void 0;
|
|
7
|
+
exports.keyToCode = keyToCode;
|
|
8
|
+
exports.strings = void 0;
|
|
9
|
+
var _constants = require("../base/constants");
|
|
10
|
+
const cssClasses = exports.cssClasses = {
|
|
11
|
+
PREFIX: `${_constants.BASE_CLASS_PREFIX}-hotKeys`
|
|
12
|
+
};
|
|
13
|
+
const strings = exports.strings = {};
|
|
14
|
+
function keyToCode(key) {
|
|
15
|
+
const keyCodeMap = {
|
|
16
|
+
// alpha
|
|
17
|
+
'a': 'KeyA',
|
|
18
|
+
'b': 'KeyB',
|
|
19
|
+
'c': 'KeyC',
|
|
20
|
+
'd': 'KeyD',
|
|
21
|
+
'e': 'KeyE',
|
|
22
|
+
'f': 'KeyF',
|
|
23
|
+
'g': 'KeyG',
|
|
24
|
+
'h': 'KeyH',
|
|
25
|
+
'i': 'KeyI',
|
|
26
|
+
'j': 'KeyJ',
|
|
27
|
+
'k': 'KeyK',
|
|
28
|
+
'l': 'KeyL',
|
|
29
|
+
'm': 'KeyM',
|
|
30
|
+
'n': 'KeyN',
|
|
31
|
+
'o': 'KeyO',
|
|
32
|
+
'p': 'KeyP',
|
|
33
|
+
'q': 'KeyQ',
|
|
34
|
+
'r': 'KeyR',
|
|
35
|
+
's': 'KeyS',
|
|
36
|
+
't': 'KeyT',
|
|
37
|
+
'u': 'KeyU',
|
|
38
|
+
'v': 'KeyV',
|
|
39
|
+
'w': 'KeyW',
|
|
40
|
+
'x': 'KeyX',
|
|
41
|
+
'y': 'KeyY',
|
|
42
|
+
'z': 'KeyZ',
|
|
43
|
+
// digit
|
|
44
|
+
'0': 'Digit0',
|
|
45
|
+
'1': 'Digit1',
|
|
46
|
+
'2': 'Digit2',
|
|
47
|
+
'3': 'Digit3',
|
|
48
|
+
'4': 'Digit4',
|
|
49
|
+
'5': 'Digit5',
|
|
50
|
+
'6': 'Digit6',
|
|
51
|
+
'7': 'Digit7',
|
|
52
|
+
'8': 'Digit8',
|
|
53
|
+
'9': 'Digit9',
|
|
54
|
+
// punctuation
|
|
55
|
+
' ': 'Space',
|
|
56
|
+
'enter': 'Enter',
|
|
57
|
+
'escape': 'Escape',
|
|
58
|
+
'backspace': 'Backspace',
|
|
59
|
+
'tab': 'Tab',
|
|
60
|
+
'-': 'Minus',
|
|
61
|
+
'=': 'Equal',
|
|
62
|
+
'[': 'BracketLeft',
|
|
63
|
+
']': 'BracketRight',
|
|
64
|
+
'\\': 'Backslash',
|
|
65
|
+
';': 'Semicolon',
|
|
66
|
+
"'": 'Quote',
|
|
67
|
+
'`': 'Backquote',
|
|
68
|
+
',': 'Comma',
|
|
69
|
+
'.': 'Period',
|
|
70
|
+
'/': 'Slash',
|
|
71
|
+
'?': 'Slash',
|
|
72
|
+
'!': 'Digit1',
|
|
73
|
+
'@': 'Digit2',
|
|
74
|
+
'#': 'Digit3',
|
|
75
|
+
'$': 'Digit4',
|
|
76
|
+
'%': 'Digit5',
|
|
77
|
+
'^': 'Digit6',
|
|
78
|
+
'&': 'Digit7',
|
|
79
|
+
'*': 'Digit8',
|
|
80
|
+
'(': 'Digit9',
|
|
81
|
+
')': 'Digit0',
|
|
82
|
+
// arrow
|
|
83
|
+
'arrowup': 'ArrowUp',
|
|
84
|
+
'arrowdown': 'ArrowDown',
|
|
85
|
+
'arrowleft': 'ArrowLeft',
|
|
86
|
+
'arrowright': 'ArrowRight',
|
|
87
|
+
// function
|
|
88
|
+
'shift': 'ShiftLeft',
|
|
89
|
+
'control': 'ControlLeft',
|
|
90
|
+
'alt': 'AltLeft',
|
|
91
|
+
'meta': 'MetaLeft',
|
|
92
|
+
'capslock': 'CapsLock',
|
|
93
|
+
'f1': 'F1',
|
|
94
|
+
'f2': 'F2',
|
|
95
|
+
'f3': 'F3',
|
|
96
|
+
'f4': 'F4',
|
|
97
|
+
'f5': 'F5',
|
|
98
|
+
'f6': 'F6',
|
|
99
|
+
'f7': 'F7',
|
|
100
|
+
'f8': 'F8',
|
|
101
|
+
'f9': 'F9',
|
|
102
|
+
'f10': 'F10',
|
|
103
|
+
'f11': 'F11',
|
|
104
|
+
'f12': 'F12',
|
|
105
|
+
'insert': 'Insert',
|
|
106
|
+
'delete': 'Delete',
|
|
107
|
+
'home': 'Home',
|
|
108
|
+
'end': 'End',
|
|
109
|
+
'pageup': 'PageUp',
|
|
110
|
+
'pagedown': 'PageDown',
|
|
111
|
+
'numlock': 'NumLock',
|
|
112
|
+
'scrolllock': 'ScrollLock',
|
|
113
|
+
'pause': 'Pause',
|
|
114
|
+
// numpad
|
|
115
|
+
'numpad0': 'Numpad0',
|
|
116
|
+
'numpad1': 'Numpad1',
|
|
117
|
+
'numpad2': 'Numpad2',
|
|
118
|
+
'numpad3': 'Numpad3',
|
|
119
|
+
'numpad4': 'Numpad4',
|
|
120
|
+
'numpad5': 'Numpad5',
|
|
121
|
+
'numpad6': 'Numpad6',
|
|
122
|
+
'numpad7': 'Numpad7',
|
|
123
|
+
'numpad8': 'Numpad8',
|
|
124
|
+
'numpad9': 'Numpad9',
|
|
125
|
+
'numpaddecimal': 'NumpadDecimal',
|
|
126
|
+
'numpaddivide': 'NumpadDivide',
|
|
127
|
+
'numpadmultiply': 'NumpadMultiply',
|
|
128
|
+
'numpadsubtract': 'NumpadSubtract',
|
|
129
|
+
'numpadadd': 'NumpadAdd',
|
|
130
|
+
'numpadenter': 'NumpadEnter',
|
|
131
|
+
// Others
|
|
132
|
+
'printscreen': 'PrintScreen',
|
|
133
|
+
'contextmenu': 'ContextMenu',
|
|
134
|
+
'help': 'Help',
|
|
135
|
+
'select': 'Select',
|
|
136
|
+
'execute': 'Execute',
|
|
137
|
+
'clear': 'Clear',
|
|
138
|
+
'kana': 'KanaMode',
|
|
139
|
+
'kanji': 'KanjiMode',
|
|
140
|
+
'nonconvert': 'NonConvert',
|
|
141
|
+
'convert': 'Convert',
|
|
142
|
+
'process': 'Process',
|
|
143
|
+
'accept': 'Accept',
|
|
144
|
+
'modechange': 'ModeChange',
|
|
145
|
+
'launchapp1': 'LaunchApp1',
|
|
146
|
+
'launchapp2': 'LaunchApp2',
|
|
147
|
+
'launchmail': 'LaunchMail',
|
|
148
|
+
'mediaselect': 'MediaSelect'
|
|
149
|
+
};
|
|
150
|
+
return keyCodeMap[key.toLowerCase()] || undefined;
|
|
151
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
2
|
+
export interface HotKeysAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
3
|
+
notifyClick: () => void;
|
|
4
|
+
getListenerTarget: () => HTMLElement;
|
|
5
|
+
}
|
|
6
|
+
export default class HotKeysFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<HotKeysAdapter<P, S>, P, S> {
|
|
7
|
+
constructor(adapter: HotKeysAdapter<P, S>);
|
|
8
|
+
init(): void;
|
|
9
|
+
handleKeyDown: (event: KeyboardEvent) => void;
|
|
10
|
+
handleClick(): void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _foundation = _interopRequireDefault(require("../base/foundation"));
|
|
8
|
+
var _constants = require("./constants");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
class HotKeysFoundation extends _foundation.default {
|
|
11
|
+
constructor(adapter) {
|
|
12
|
+
super(Object.assign({}, adapter));
|
|
13
|
+
this.handleKeyDown = event => {
|
|
14
|
+
const disabled = this.getProps().disabled;
|
|
15
|
+
if (disabled) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const hotKeys = this.getProps().hotKeys;
|
|
19
|
+
let allModifier = new Array(4).fill(false); // Meta Shift Alt Ctrl
|
|
20
|
+
let clickedModifier = [event.metaKey, event.shiftKey, event.altKey, event.ctrlKey];
|
|
21
|
+
const keysPressed = hotKeys === null || hotKeys === void 0 ? void 0 : hotKeys.map(key => {
|
|
22
|
+
if (key === "Meta") {
|
|
23
|
+
allModifier[0] = true;
|
|
24
|
+
return event.metaKey;
|
|
25
|
+
} else if (key === "Shift") {
|
|
26
|
+
allModifier[1] = true;
|
|
27
|
+
return event.shiftKey;
|
|
28
|
+
} else if (key === "Alt") {
|
|
29
|
+
allModifier[2] = true;
|
|
30
|
+
return event.altKey;
|
|
31
|
+
} else if (key === "Control") {
|
|
32
|
+
allModifier[3] = true;
|
|
33
|
+
return event.ctrlKey;
|
|
34
|
+
}
|
|
35
|
+
return event.code === (0, _constants.keyToCode)(key);
|
|
36
|
+
});
|
|
37
|
+
if (!allModifier.every((value, index) => value === clickedModifier[index])) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (keysPressed.every(Boolean)) {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
this.handleClick();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
init() {
|
|
48
|
+
// init Listener
|
|
49
|
+
const target = this._adapter.getListenerTarget();
|
|
50
|
+
target === null || target === void 0 ? void 0 : target.addEventListener('keydown', this.handleKeyDown);
|
|
51
|
+
}
|
|
52
|
+
handleClick() {
|
|
53
|
+
this._adapter.notifyClick();
|
|
54
|
+
}
|
|
55
|
+
destroy() {
|
|
56
|
+
// remove Listener
|
|
57
|
+
const target = this._adapter.getListenerTarget();
|
|
58
|
+
target === null || target === void 0 ? void 0 : target.removeEventListener('keydown', this.handleKeyDown);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.default = HotKeysFoundation;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* shadow */
|
|
2
|
+
/* sizing */
|
|
3
|
+
/* spacing */
|
|
4
|
+
.semi-hotKeys {
|
|
5
|
+
box-sizing: border-box;
|
|
6
|
+
position: relative;
|
|
7
|
+
user-select: none;
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
vertical-align: bottom;
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
align-items: center;
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
}
|
|
15
|
+
.semi-hotKeys-content {
|
|
16
|
+
font-size: 12px;
|
|
17
|
+
line-height: 16px;
|
|
18
|
+
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
19
|
+
border-radius: 2px;
|
|
20
|
+
height: 20px;
|
|
21
|
+
padding: 2px 8px;
|
|
22
|
+
border: 1px;
|
|
23
|
+
background-color: var(--semi-color-fill-0);
|
|
24
|
+
color: var(--semi-color-text-2);
|
|
25
|
+
}
|
|
26
|
+
.semi-hotKeys-split {
|
|
27
|
+
font-size: 12px;
|
|
28
|
+
line-height: 16px;
|
|
29
|
+
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
30
|
+
margin: 0 3px;
|
|
31
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@import "./variables.scss";
|
|
2
|
+
|
|
3
|
+
$module: #{$prefix}-hotKeys;
|
|
4
|
+
|
|
5
|
+
.#{$module} {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
position: relative;
|
|
8
|
+
user-select: none;
|
|
9
|
+
white-space: nowrap;
|
|
10
|
+
vertical-align: bottom;
|
|
11
|
+
@include all-center;
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
|
|
14
|
+
&-content {
|
|
15
|
+
@include font-size-small;
|
|
16
|
+
border-radius: $radius-hotKeys;
|
|
17
|
+
height: $height-hotKeys;
|
|
18
|
+
padding: $spacing-hotKeys-paddingY $spacing-hotKeys-paddingX;
|
|
19
|
+
border: $width-hotKeys-border;
|
|
20
|
+
background-color: $color-hotKeys-bg;
|
|
21
|
+
color: $color-hotKeys-text;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-split {
|
|
25
|
+
@include font-size-small;
|
|
26
|
+
margin: 0 3px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
$color-hotKeys-bg: var(--semi-color-fill-0); // 快捷键背景颜色
|
|
2
|
+
$color-hotKeys-text: var(--semi-color-text-2); // 快捷键文字颜色
|
|
3
|
+
|
|
4
|
+
$width-hotKeys-border: 1px; // 快捷键描边宽度
|
|
5
|
+
$radius-hotKeys: 2px; // 边框半径
|
|
6
|
+
|
|
7
|
+
$height-hotKeys: 20px; // 快捷键高度
|
|
8
|
+
$spacing-hotKeys-paddingY: 2px;
|
|
9
|
+
$spacing-hotKeys-paddingX: $spacing-tight;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
2
2
|
import { MDXProps } from 'mdx/types';
|
|
3
3
|
import { type PluggableList } from "@mdx-js/mdx/lib/core";
|
|
4
|
+
import { VFile } from "vfile";
|
|
4
5
|
export interface MarkdownRenderAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
5
6
|
getRuntime: () => any;
|
|
6
7
|
}
|
|
@@ -16,7 +17,7 @@ export interface MarkdownRenderBaseState {
|
|
|
16
17
|
}
|
|
17
18
|
declare class MarkdownRenderFoundation extends BaseFoundation<MarkdownRenderAdapter> {
|
|
18
19
|
private getOptions;
|
|
19
|
-
compile: (mdxRaw: string) => Promise<
|
|
20
|
+
compile: (mdxRaw: string) => Promise<VFile>;
|
|
20
21
|
evaluate: (mdxRaw: string) => Promise<import("mdx/types").MDXContent>;
|
|
21
22
|
evaluateSync: (mdxRaw: string) => import("mdx/types").MDXContent;
|
|
22
23
|
}
|
|
@@ -39,8 +39,7 @@ class OverflowListFoundation extends _foundation.default {
|
|
|
39
39
|
if (!this.isScrollMode()) {
|
|
40
40
|
return overflow;
|
|
41
41
|
}
|
|
42
|
-
const
|
|
43
|
-
const visibleStateArr = cloneItems.map(_ref => {
|
|
42
|
+
const visibleStateArr = items.map(_ref => {
|
|
44
43
|
let {
|
|
45
44
|
key
|
|
46
45
|
} = _ref;
|
|
@@ -49,8 +48,8 @@ class OverflowListFoundation extends _foundation.default {
|
|
|
49
48
|
const visibleStart = visibleStateArr.indexOf(true);
|
|
50
49
|
const visibleEnd = visibleStateArr.lastIndexOf(true);
|
|
51
50
|
const overflowList = [];
|
|
52
|
-
overflowList[0] = visibleStart >= 0 ?
|
|
53
|
-
overflowList[1] = visibleEnd >= 0 ?
|
|
51
|
+
overflowList[0] = visibleStart >= 0 ? items.slice(0, visibleStart) : [];
|
|
52
|
+
overflowList[1] = visibleEnd >= 0 ? items.slice(visibleEnd + 1, items.length) : items.slice();
|
|
54
53
|
return overflowList;
|
|
55
54
|
}
|
|
56
55
|
handleIntersect(entries) {
|
|
@@ -11,6 +11,7 @@ const cssClasses = exports.cssClasses = {
|
|
|
11
11
|
TABS_BAR_LINE: `${_constants.BASE_CLASS_PREFIX}-tabs-bar-line`,
|
|
12
12
|
TABS_BAR_CARD: `${_constants.BASE_CLASS_PREFIX}-tabs-bar-card`,
|
|
13
13
|
TABS_BAR_BUTTON: `${_constants.BASE_CLASS_PREFIX}-tabs-bar-button`,
|
|
14
|
+
TABS_BAR_SLASH: `${_constants.BASE_CLASS_PREFIX}-tabs-bar-slash`,
|
|
14
15
|
TABS_BAR_EXTRA: `${_constants.BASE_CLASS_PREFIX}-tabs-bar-extra`,
|
|
15
16
|
TABS_TAB: `${_constants.BASE_CLASS_PREFIX}-tabs-tab`,
|
|
16
17
|
TABS_TAB_ACTIVE: `${_constants.BASE_CLASS_PREFIX}-tabs-tab-active`,
|
|
@@ -32,7 +33,7 @@ const numbers = exports.numbers = {
|
|
|
32
33
|
DEFAULT_ACTIVE_KEY: 1
|
|
33
34
|
};
|
|
34
35
|
const strings = exports.strings = {
|
|
35
|
-
TYPE_MAP: ['line', 'card', 'button'],
|
|
36
|
+
TYPE_MAP: ['line', 'card', 'button', 'slash'],
|
|
36
37
|
SIZE: ['small', 'medium', 'large'],
|
|
37
38
|
POSITION_MAP: ['top', 'left']
|
|
38
39
|
};
|
package/lib/cjs/tabs/tabs.css
CHANGED
|
@@ -135,18 +135,27 @@
|
|
|
135
135
|
margin-left: 10px;
|
|
136
136
|
cursor: pointer;
|
|
137
137
|
}
|
|
138
|
+
.semi-tabs-tab-single.semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close.semi-icon-close:hover {
|
|
139
|
+
color: var(--semi-color-text-0);
|
|
140
|
+
}
|
|
138
141
|
.semi-tabs-tab-single.semi-tabs-tab:hover {
|
|
139
142
|
color: var(--semi-color-text-0);
|
|
140
143
|
}
|
|
141
144
|
.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon:not(.semi-icon-checkbox_tick, .semi-icon-radio, .semi-icon-checkbox_indeterminate) {
|
|
142
145
|
color: var(--semi-color-text-0);
|
|
143
146
|
}
|
|
147
|
+
.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon.semi-tabs-tab-icon-close {
|
|
148
|
+
color: var(--semi-color-text-2);
|
|
149
|
+
}
|
|
144
150
|
.semi-tabs-tab-single.semi-tabs-tab:active {
|
|
145
151
|
color: var(--semi-color-text-0);
|
|
146
152
|
}
|
|
147
153
|
.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon:not(.semi-icon-checkbox_tick, .semi-icon-radio, .semi-icon-checkbox_indeterminate) {
|
|
148
154
|
color: var(--semi-color-text-0);
|
|
149
155
|
}
|
|
156
|
+
.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon.semi-tabs-tab-icon-close {
|
|
157
|
+
color: var(--semi-color-text-2);
|
|
158
|
+
}
|
|
150
159
|
.semi-tabs-tab-single.semi-tabs-tab-active, .semi-tabs-tab-single.semi-tabs-tab-active:hover {
|
|
151
160
|
cursor: default;
|
|
152
161
|
font-weight: 600;
|
|
@@ -424,6 +433,26 @@
|
|
|
424
433
|
border: none;
|
|
425
434
|
background-color: var(--semi-color-primary-light-default);
|
|
426
435
|
}
|
|
436
|
+
.semi-tabs-bar-slash .semi-tabs-tab {
|
|
437
|
+
padding: 12px 0px;
|
|
438
|
+
}
|
|
439
|
+
.semi-tabs-bar-slash .semi-tabs-tab:nth-of-type(1) {
|
|
440
|
+
padding-left: 0;
|
|
441
|
+
}
|
|
442
|
+
.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type) {
|
|
443
|
+
margin-right: 16px;
|
|
444
|
+
}
|
|
445
|
+
.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type):after {
|
|
446
|
+
content: "";
|
|
447
|
+
margin-left: 16px;
|
|
448
|
+
display: inline-block;
|
|
449
|
+
height: 14px;
|
|
450
|
+
width: 8px;
|
|
451
|
+
margin-top: 3px;
|
|
452
|
+
margin-bottom: 3px;
|
|
453
|
+
vertical-align: bottom;
|
|
454
|
+
background: linear-gradient(to bottom right, transparent 0%, transparent calc(50% - 1px), var(--semi-color-text-2) 50%, transparent calc(50% + 1px), transparent 100%);
|
|
455
|
+
}
|
|
427
456
|
.semi-tabs-content {
|
|
428
457
|
width: 100%;
|
|
429
458
|
padding: 5px 0;
|
package/lib/cjs/tabs/tabs.scss
CHANGED
|
@@ -174,6 +174,10 @@ $ignoreIcon: '.#{$prefix}-icon-checkbox_tick, .#{$prefix}-icon-radio, .#{$prefix
|
|
|
174
174
|
color: var(--semi-color-text-2);
|
|
175
175
|
margin-left: 10px;
|
|
176
176
|
cursor: pointer;
|
|
177
|
+
|
|
178
|
+
&.#{$prefix}-icon-close:hover {
|
|
179
|
+
color: var(--semi-color-text-0);
|
|
180
|
+
}
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
&:hover {
|
|
@@ -182,6 +186,10 @@ $ignoreIcon: '.#{$prefix}-icon-checkbox_tick, .#{$prefix}-icon-radio, .#{$prefix
|
|
|
182
186
|
.#{$prefix}-icon:not(#{$ignoreIcon}) {
|
|
183
187
|
color: $color-tabs_tab-icon-hover;
|
|
184
188
|
}
|
|
189
|
+
|
|
190
|
+
.#{$prefix}-icon.#{$module}-tab-icon-close {
|
|
191
|
+
color: var(--semi-color-text-2);
|
|
192
|
+
}
|
|
185
193
|
}
|
|
186
194
|
|
|
187
195
|
&:active {
|
|
@@ -190,6 +198,10 @@ $ignoreIcon: '.#{$prefix}-icon-checkbox_tick, .#{$prefix}-icon-radio, .#{$prefix
|
|
|
190
198
|
.#{$prefix}-icon:not(#{$ignoreIcon}) {
|
|
191
199
|
color: $color-tabs_tab-icon-active;
|
|
192
200
|
}
|
|
201
|
+
|
|
202
|
+
.#{$prefix}-icon.#{$module}-tab-icon-close {
|
|
203
|
+
color: var(--semi-color-text-2);
|
|
204
|
+
}
|
|
193
205
|
}
|
|
194
206
|
}
|
|
195
207
|
|
|
@@ -583,6 +595,36 @@ $ignoreIcon: '.#{$prefix}-icon-checkbox_tick, .#{$prefix}-icon-radio, .#{$prefix
|
|
|
583
595
|
}
|
|
584
596
|
}
|
|
585
597
|
|
|
598
|
+
&-bar-slash {
|
|
599
|
+
|
|
600
|
+
.#{$module}-tab {
|
|
601
|
+
padding: $spacing-tabs_bar_slash_tab-paddingY $spacing-tabs_bar_slash_tab-paddingX;
|
|
602
|
+
|
|
603
|
+
&:nth-of-type(1) {
|
|
604
|
+
padding-left: 0;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
&:not(:last-of-type) {
|
|
608
|
+
margin-right: $spacing-tabs_bar_slash-marginRight;
|
|
609
|
+
|
|
610
|
+
&:after {
|
|
611
|
+
content: "";
|
|
612
|
+
margin-left: $spacing-tabs_bar_slash_line_marginLeft;
|
|
613
|
+
display: inline-block;
|
|
614
|
+
height: $height-tabs_tab_slash_line;
|
|
615
|
+
width: $width-tabs_tab_slash_line;
|
|
616
|
+
margin-top: $spacing-tabs_bar_slash_line_marginTop;
|
|
617
|
+
margin-bottom: $spacing-tabs_bar_slash_line_marginBottom;
|
|
618
|
+
vertical-align: bottom;
|
|
619
|
+
// Get diagonal slash
|
|
620
|
+
background: linear-gradient(to bottom right, transparent 0%,
|
|
621
|
+
transparent calc(50% - 1px), $color-tabs_tab_slash_line 50%,
|
|
622
|
+
transparent calc(50% + 1px), transparent 100%);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
|
|
586
628
|
&-content {
|
|
587
629
|
width: 100%;
|
|
588
630
|
padding: $spacing-tabs_content-paddingY $spacing-tabs_content-paddingX;
|