@douyinfe/semi-foundation 2.70.1 → 2.71.0-alpha.3
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/cascader/constants.ts +2 -0
- package/cascader/foundation.ts +49 -2
- package/dragMove/foundation.ts +194 -0
- package/highlight/foundation.ts +211 -0
- package/jsonViewer/constants.ts +7 -0
- package/jsonViewer/foundation.ts +72 -0
- package/jsonViewer/jsonViewer.scss +200 -0
- package/jsonViewer/script/build.js +51 -0
- package/jsonViewer/variables.scss +15 -0
- package/lib/cjs/cascader/constants.d.ts +2 -0
- package/lib/cjs/cascader/constants.js +3 -1
- package/lib/cjs/cascader/foundation.d.ts +3 -0
- package/lib/cjs/cascader/foundation.js +55 -3
- package/lib/cjs/dragMove/foundation.d.ts +45 -0
- package/lib/cjs/dragMove/foundation.js +162 -0
- package/lib/cjs/highlight/foundation.d.ts +84 -0
- package/lib/cjs/highlight/foundation.js +184 -0
- package/lib/cjs/jsonViewer/constants.d.ts +4 -0
- package/lib/cjs/jsonViewer/constants.js +10 -0
- package/lib/cjs/jsonViewer/foundation.d.ts +24 -0
- package/lib/cjs/jsonViewer/foundation.js +69 -0
- package/lib/cjs/jsonViewer/jsonViewer.css +168 -0
- package/lib/cjs/jsonViewer/jsonViewer.scss +200 -0
- package/lib/cjs/jsonViewer/variables.scss +15 -0
- package/lib/cjs/lottie/foundation.d.ts +1 -1
- package/lib/cjs/resizable/foundation.d.ts +6 -2
- package/lib/cjs/tree/tree.css +1 -0
- package/lib/cjs/tree/tree.scss +2 -0
- package/lib/es/cascader/constants.d.ts +2 -0
- package/lib/es/cascader/constants.js +3 -1
- package/lib/es/cascader/foundation.d.ts +3 -0
- package/lib/es/cascader/foundation.js +55 -3
- package/lib/es/dragMove/foundation.d.ts +45 -0
- package/lib/es/dragMove/foundation.js +153 -0
- package/lib/es/highlight/foundation.d.ts +84 -0
- package/lib/es/highlight/foundation.js +174 -0
- package/lib/es/jsonViewer/constants.d.ts +4 -0
- package/lib/es/jsonViewer/constants.js +5 -0
- package/lib/es/jsonViewer/foundation.d.ts +24 -0
- package/lib/es/jsonViewer/foundation.js +62 -0
- package/lib/es/jsonViewer/jsonViewer.css +168 -0
- package/lib/es/jsonViewer/jsonViewer.scss +200 -0
- package/lib/es/jsonViewer/variables.scss +15 -0
- package/lib/es/lottie/foundation.d.ts +1 -1
- package/lib/es/resizable/foundation.d.ts +6 -2
- package/lib/es/resizable/foundation.js +3 -2
- package/lib/es/tree/tree.css +1 -0
- package/lib/es/tree/tree.scss +2 -0
- package/lottie/foundation.ts +2 -2
- package/package.json +5 -3
- package/resizable/foundation.ts +19 -5
- package/tree/tree.scss +2 -0
- package/tsconfig.json +1 -1
- package/lib/cjs/utils/getHighlight.d.ts +0 -45
- package/lib/cjs/utils/getHighlight.js +0 -175
- package/lib/es/utils/getHighlight.d.ts +0 -45
- package/lib/es/utils/getHighlight.js +0 -166
- package/utils/getHighlight.ts +0 -178
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _isString2 = _interopRequireDefault(require("lodash/isString"));
|
|
8
|
+
var _foundation = _interopRequireDefault(require("../base/foundation"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
// Modified version based on 'highlight-words-core'
|
|
11
|
+
|
|
12
|
+
const escapeRegExpFn = string => string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
|
13
|
+
class HighlightFoundation extends _foundation.default {
|
|
14
|
+
constructor(adapter) {
|
|
15
|
+
super(Object.assign({}, adapter));
|
|
16
|
+
/**
|
|
17
|
+
* Creates an array of chunk objects representing both higlightable and non highlightable pieces of text that match each search word.
|
|
18
|
+
*
|
|
19
|
+
findAll ['z'], 'aaazaaazaaa'
|
|
20
|
+
result #=> [
|
|
21
|
+
{ start: 0, end: 3, highlight: false }
|
|
22
|
+
{ start: 3, end: 4, highlight: true }
|
|
23
|
+
{ start: 4, end: 7, highlight: false }
|
|
24
|
+
{ start: 7, end: 8, highlight: true }
|
|
25
|
+
{ start: 8, end: 11, highlight: false }
|
|
26
|
+
]
|
|
27
|
+
findAll ['do', 'dollar'], 'aaa do dollar aaa'
|
|
28
|
+
#=> chunks: [
|
|
29
|
+
{ start: 4, end: 6 },
|
|
30
|
+
{ start: 7, end: 9 },
|
|
31
|
+
{ start: 7, end: 13 },
|
|
32
|
+
]
|
|
33
|
+
#=> chunksToHight: [
|
|
34
|
+
{ start: 4, end: 6 },
|
|
35
|
+
{ start: 7, end: 13 },
|
|
36
|
+
]
|
|
37
|
+
#=> result: [
|
|
38
|
+
{ start: 0, end: 4, highlight: false },
|
|
39
|
+
{ start: 4, end: 6, highlight: true },
|
|
40
|
+
{ start: 6, end: 7, highlight: false },
|
|
41
|
+
{ start: 7, end: 13, highlight: true },
|
|
42
|
+
{ start: 13, end: 17, highlight: false },
|
|
43
|
+
]
|
|
44
|
+
* @return Array of "chunks" (where a Chunk is { start:number, end:number, highlight:boolean })
|
|
45
|
+
*/
|
|
46
|
+
this.findAll = _ref => {
|
|
47
|
+
let {
|
|
48
|
+
autoEscape = true,
|
|
49
|
+
caseSensitive = false,
|
|
50
|
+
searchWords,
|
|
51
|
+
sourceString
|
|
52
|
+
} = _ref;
|
|
53
|
+
if ((0, _isString2.default)(searchWords)) {
|
|
54
|
+
searchWords = [searchWords];
|
|
55
|
+
}
|
|
56
|
+
const chunks = this.findChunks({
|
|
57
|
+
autoEscape,
|
|
58
|
+
caseSensitive,
|
|
59
|
+
searchWords,
|
|
60
|
+
sourceString
|
|
61
|
+
});
|
|
62
|
+
const chunksToHighlight = this.combineChunks({
|
|
63
|
+
chunks
|
|
64
|
+
});
|
|
65
|
+
const result = this.fillInChunks({
|
|
66
|
+
chunksToHighlight,
|
|
67
|
+
totalLength: sourceString ? sourceString.length : 0
|
|
68
|
+
});
|
|
69
|
+
return result;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Examine text for any matches.
|
|
73
|
+
* If we find matches, add them to the returned array as a "chunk" object ({start:number, end:number}).
|
|
74
|
+
* @return { start:number, end:number }[]
|
|
75
|
+
*/
|
|
76
|
+
this.findChunks = _ref2 => {
|
|
77
|
+
let {
|
|
78
|
+
autoEscape,
|
|
79
|
+
caseSensitive,
|
|
80
|
+
searchWords,
|
|
81
|
+
sourceString
|
|
82
|
+
} = _ref2;
|
|
83
|
+
return searchWords.map(searchWord => typeof searchWord === 'string' ? {
|
|
84
|
+
text: searchWord
|
|
85
|
+
} : searchWord).filter(searchWord => searchWord.text) // Remove empty words
|
|
86
|
+
.reduce((chunks, searchWord) => {
|
|
87
|
+
let searchText = searchWord.text;
|
|
88
|
+
if (autoEscape) {
|
|
89
|
+
searchText = escapeRegExpFn(searchText);
|
|
90
|
+
}
|
|
91
|
+
const regex = new RegExp(searchText, caseSensitive ? 'g' : 'gi');
|
|
92
|
+
let match;
|
|
93
|
+
while (match = regex.exec(sourceString)) {
|
|
94
|
+
const start = match.index;
|
|
95
|
+
const end = regex.lastIndex;
|
|
96
|
+
if (end > start) {
|
|
97
|
+
chunks.push({
|
|
98
|
+
highlight: true,
|
|
99
|
+
start,
|
|
100
|
+
end,
|
|
101
|
+
className: searchWord.className,
|
|
102
|
+
style: searchWord.style
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (match.index === regex.lastIndex) {
|
|
106
|
+
regex.lastIndex++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return chunks;
|
|
110
|
+
}, []);
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Takes an array of {start:number, end:number} objects and combines chunks that overlap into single chunks.
|
|
114
|
+
* @return {start:number, end:number}[]
|
|
115
|
+
*/
|
|
116
|
+
this.combineChunks = _ref3 => {
|
|
117
|
+
let {
|
|
118
|
+
chunks
|
|
119
|
+
} = _ref3;
|
|
120
|
+
return chunks.sort((first, second) => first.start - second.start).reduce((processedChunks, nextChunk) => {
|
|
121
|
+
// First chunk just goes straight in the array...
|
|
122
|
+
if (processedChunks.length === 0) {
|
|
123
|
+
return [nextChunk];
|
|
124
|
+
} else {
|
|
125
|
+
// ... subsequent chunks get checked to see if they overlap...
|
|
126
|
+
const prevChunk = processedChunks.pop();
|
|
127
|
+
if (nextChunk.start <= prevChunk.end) {
|
|
128
|
+
// It may be the case that prevChunk completely surrounds nextChunk, so take the
|
|
129
|
+
// largest of the end indeces.
|
|
130
|
+
const endIndex = Math.max(prevChunk.end, nextChunk.end);
|
|
131
|
+
processedChunks.push({
|
|
132
|
+
highlight: true,
|
|
133
|
+
start: prevChunk.start,
|
|
134
|
+
end: endIndex,
|
|
135
|
+
className: prevChunk.className || nextChunk.className,
|
|
136
|
+
style: Object.assign(Object.assign({}, prevChunk.style), nextChunk.style)
|
|
137
|
+
});
|
|
138
|
+
} else {
|
|
139
|
+
processedChunks.push(prevChunk, nextChunk);
|
|
140
|
+
}
|
|
141
|
+
return processedChunks;
|
|
142
|
+
}
|
|
143
|
+
}, []);
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Given a set of chunks to highlight, create an additional set of chunks
|
|
147
|
+
* to represent the bits of text between the highlighted text.
|
|
148
|
+
* @param chunksToHighlight {start:number, end:number}[]
|
|
149
|
+
* @param totalLength number
|
|
150
|
+
* @return {start:number, end:number, highlight:boolean}[]
|
|
151
|
+
*/
|
|
152
|
+
this.fillInChunks = _ref4 => {
|
|
153
|
+
let {
|
|
154
|
+
chunksToHighlight,
|
|
155
|
+
totalLength
|
|
156
|
+
} = _ref4;
|
|
157
|
+
const allChunks = [];
|
|
158
|
+
const append = (start, end, highlight, className, style) => {
|
|
159
|
+
if (end - start > 0) {
|
|
160
|
+
allChunks.push({
|
|
161
|
+
start,
|
|
162
|
+
end,
|
|
163
|
+
highlight,
|
|
164
|
+
className,
|
|
165
|
+
style
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
if (chunksToHighlight.length === 0) {
|
|
170
|
+
append(0, totalLength, false);
|
|
171
|
+
} else {
|
|
172
|
+
let lastIndex = 0;
|
|
173
|
+
chunksToHighlight.forEach(chunk => {
|
|
174
|
+
append(lastIndex, chunk.start, false);
|
|
175
|
+
append(chunk.start, chunk.end, true, chunk.className, chunk.style);
|
|
176
|
+
lastIndex = chunk.end;
|
|
177
|
+
});
|
|
178
|
+
append(lastIndex, totalLength, false);
|
|
179
|
+
}
|
|
180
|
+
return allChunks;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.default = HighlightFoundation;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cssClasses = void 0;
|
|
7
|
+
var _constants = require("../base/constants");
|
|
8
|
+
const cssClasses = exports.cssClasses = {
|
|
9
|
+
PREFIX: `${_constants.BASE_CLASS_PREFIX}-json-viewer`
|
|
10
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { JsonViewer, JsonViewerOptions } from '@douyinfe/semi-json-viewer-core';
|
|
2
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
3
|
+
export type { JsonViewerOptions };
|
|
4
|
+
export interface JsonViewerAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
5
|
+
getEditorRef: () => HTMLElement;
|
|
6
|
+
getSearchRef: () => HTMLInputElement;
|
|
7
|
+
notifyChange: (value: string) => void;
|
|
8
|
+
notifyHover: (value: string, el: HTMLElement) => HTMLElement | undefined;
|
|
9
|
+
setSearchOptions: (key: string) => void;
|
|
10
|
+
showSearchBar: () => void;
|
|
11
|
+
}
|
|
12
|
+
declare class JsonViewerFoundation extends BaseFoundation<JsonViewerAdapter> {
|
|
13
|
+
constructor(adapter: JsonViewerAdapter);
|
|
14
|
+
jsonViewer: JsonViewer | null;
|
|
15
|
+
init(): void;
|
|
16
|
+
search(searchText: string): void;
|
|
17
|
+
prevSearch(): void;
|
|
18
|
+
nextSearch(): void;
|
|
19
|
+
replace(replaceText: string): void;
|
|
20
|
+
replaceAll(replaceText: string): void;
|
|
21
|
+
setSearchOptions(key: string): void;
|
|
22
|
+
showSearchBar(): void;
|
|
23
|
+
}
|
|
24
|
+
export default JsonViewerFoundation;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _semiJsonViewerCore = require("@douyinfe/semi-json-viewer-core");
|
|
8
|
+
var _foundation = _interopRequireDefault(require("../base/foundation"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
class JsonViewerFoundation extends _foundation.default {
|
|
11
|
+
constructor(adapter) {
|
|
12
|
+
super(Object.assign(Object.assign({}, JsonViewerFoundation), adapter));
|
|
13
|
+
this.jsonViewer = null;
|
|
14
|
+
}
|
|
15
|
+
init() {
|
|
16
|
+
const props = this.getProps();
|
|
17
|
+
const editorRef = this._adapter.getEditorRef();
|
|
18
|
+
this.jsonViewer = new _semiJsonViewerCore.JsonViewer(editorRef, props.value, props.options);
|
|
19
|
+
this.jsonViewer.layout();
|
|
20
|
+
this.jsonViewer.emitter.on('contentChanged', e => {
|
|
21
|
+
var _a;
|
|
22
|
+
this._adapter.notifyChange((_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getModel().getValue());
|
|
23
|
+
if (this.getState('showSearchBar')) {
|
|
24
|
+
this.search(this._adapter.getSearchRef().value);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
this.jsonViewer.emitter.on('hoverNode', e => {
|
|
28
|
+
const el = this._adapter.notifyHover(e.value, e.target);
|
|
29
|
+
if (el) {
|
|
30
|
+
this.jsonViewer.emitter.emit('renderHoverNode', {
|
|
31
|
+
el
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
search(searchText) {
|
|
37
|
+
var _a;
|
|
38
|
+
const state = this.getState('searchOptions');
|
|
39
|
+
const {
|
|
40
|
+
caseSensitive,
|
|
41
|
+
wholeWord,
|
|
42
|
+
regex
|
|
43
|
+
} = state;
|
|
44
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().search(searchText, caseSensitive, wholeWord, regex);
|
|
45
|
+
}
|
|
46
|
+
prevSearch() {
|
|
47
|
+
var _a;
|
|
48
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(-1);
|
|
49
|
+
}
|
|
50
|
+
nextSearch() {
|
|
51
|
+
var _a;
|
|
52
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(1);
|
|
53
|
+
}
|
|
54
|
+
replace(replaceText) {
|
|
55
|
+
var _a;
|
|
56
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replace(replaceText);
|
|
57
|
+
}
|
|
58
|
+
replaceAll(replaceText) {
|
|
59
|
+
var _a;
|
|
60
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replaceAll(replaceText);
|
|
61
|
+
}
|
|
62
|
+
setSearchOptions(key) {
|
|
63
|
+
this._adapter.setSearchOptions(key);
|
|
64
|
+
}
|
|
65
|
+
showSearchBar() {
|
|
66
|
+
this._adapter.showSearchBar();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
var _default = exports.default = JsonViewerFoundation;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/* shadow */
|
|
2
|
+
/* sizing */
|
|
3
|
+
/* spacing */
|
|
4
|
+
.semi-json-viewer-background {
|
|
5
|
+
background-color: var(--semi-color-default);
|
|
6
|
+
}
|
|
7
|
+
.semi-json-viewer-string-key {
|
|
8
|
+
color: rgba(var(--semi-red-5), 1);
|
|
9
|
+
}
|
|
10
|
+
.semi-json-viewer-string-value {
|
|
11
|
+
color: rgba(var(--semi-blue-5), 1);
|
|
12
|
+
}
|
|
13
|
+
.semi-json-viewer-keyword {
|
|
14
|
+
color: rgba(var(--semi-blue-5), 1);
|
|
15
|
+
}
|
|
16
|
+
.semi-json-viewer-number {
|
|
17
|
+
color: rgba(var(--semi-green-5), 1);
|
|
18
|
+
}
|
|
19
|
+
.semi-json-viewer-delimiter-comma {
|
|
20
|
+
color: rgba(var(--semi-blue-6), 1);
|
|
21
|
+
}
|
|
22
|
+
.semi-json-viewer-delimiter-bracket-0 {
|
|
23
|
+
color: rgba(var(--semi-blue-7), 1);
|
|
24
|
+
}
|
|
25
|
+
.semi-json-viewer-delimiter-bracket-1 {
|
|
26
|
+
color: rgba(var(--semi-green-7), 1);
|
|
27
|
+
}
|
|
28
|
+
.semi-json-viewer-delimiter-bracket-2 {
|
|
29
|
+
color: rgba(var(--semi-orange-7), 1);
|
|
30
|
+
}
|
|
31
|
+
.semi-json-viewer-delimiter-array-0 {
|
|
32
|
+
color: rgba(var(--semi-blue-7), 1);
|
|
33
|
+
}
|
|
34
|
+
.semi-json-viewer-delimiter-array-1 {
|
|
35
|
+
color: rgba(var(--semi-green-7), 1);
|
|
36
|
+
}
|
|
37
|
+
.semi-json-viewer-delimiter-array-2 {
|
|
38
|
+
color: rgba(var(--semi-orange-7), 1);
|
|
39
|
+
}
|
|
40
|
+
.semi-json-viewer-search-result {
|
|
41
|
+
background-color: rgba(var(--semi-green-2), 1);
|
|
42
|
+
}
|
|
43
|
+
.semi-json-viewer-current-search-result {
|
|
44
|
+
background-color: rgba(var(--semi-yellow-4), 1) !important;
|
|
45
|
+
}
|
|
46
|
+
.semi-json-viewer-folding-icon {
|
|
47
|
+
opacity: 0.7;
|
|
48
|
+
transition: opacity 0.8s;
|
|
49
|
+
color: rgba(var(--semi-blue-7), 1);
|
|
50
|
+
}
|
|
51
|
+
.semi-json-viewer-view-line {
|
|
52
|
+
font-family: Menlo, Firecode, Monaco, "Courier New", monospace;
|
|
53
|
+
font-weight: normal;
|
|
54
|
+
font-size: 12px;
|
|
55
|
+
font-feature-settings: "liga" 0, "calt" 0;
|
|
56
|
+
font-variation-settings: normal;
|
|
57
|
+
letter-spacing: 0px;
|
|
58
|
+
color: #237893;
|
|
59
|
+
word-wrap: break-word;
|
|
60
|
+
white-space: pre-wrap;
|
|
61
|
+
}
|
|
62
|
+
.semi-json-viewer-line-number {
|
|
63
|
+
font-family: Menlo, Firecode, Monaco, "Courier New", monospace;
|
|
64
|
+
font-weight: normal;
|
|
65
|
+
font-size: 12px;
|
|
66
|
+
font-feature-settings: "liga" 0, "calt" 0;
|
|
67
|
+
font-variation-settings: normal;
|
|
68
|
+
letter-spacing: 0px;
|
|
69
|
+
color: rgba(var(--semi-grey-5), 1);
|
|
70
|
+
text-align: center;
|
|
71
|
+
width: 50px;
|
|
72
|
+
}
|
|
73
|
+
.semi-json-viewer-content-container {
|
|
74
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
75
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
76
|
+
}
|
|
77
|
+
.semi-json-viewer-content-container::-webkit-scrollbar {
|
|
78
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
79
|
+
}
|
|
80
|
+
.semi-json-viewer-search-bar-container {
|
|
81
|
+
width: 458px;
|
|
82
|
+
box-sizing: border-box;
|
|
83
|
+
border: 1px solid var(--semi-color-border);
|
|
84
|
+
border-radius: var(--semi-border-radius-small);
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-direction: column;
|
|
87
|
+
padding: 8px;
|
|
88
|
+
gap: 8px;
|
|
89
|
+
background-color: var(--semi-color-bg-0);
|
|
90
|
+
}
|
|
91
|
+
.semi-json-viewer-search-bar {
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: flex-start;
|
|
94
|
+
gap: 8px;
|
|
95
|
+
}
|
|
96
|
+
.semi-json-viewer-search-bar-input {
|
|
97
|
+
width: 200px;
|
|
98
|
+
flex-shrink: 0;
|
|
99
|
+
}
|
|
100
|
+
.semi-json-viewer-search-bar .semi-button-group {
|
|
101
|
+
flex-wrap: nowrap;
|
|
102
|
+
}
|
|
103
|
+
.semi-json-viewer-search-bar .semi-button:nth-of-type(1) {
|
|
104
|
+
width: 40px;
|
|
105
|
+
}
|
|
106
|
+
.semi-json-viewer-search-bar .semi-button:nth-of-type(2) {
|
|
107
|
+
width: 40px;
|
|
108
|
+
}
|
|
109
|
+
.semi-json-viewer-replace-bar {
|
|
110
|
+
display: flex;
|
|
111
|
+
align-items: flex-start;
|
|
112
|
+
gap: 8px;
|
|
113
|
+
}
|
|
114
|
+
.semi-json-viewer-replace-bar-input {
|
|
115
|
+
width: 261px;
|
|
116
|
+
}
|
|
117
|
+
.semi-json-viewer-replace-bar .semi-button:nth-of-type(1) {
|
|
118
|
+
width: 52px;
|
|
119
|
+
}
|
|
120
|
+
.semi-json-viewer-replace-bar .semi-button:nth-of-type(2) {
|
|
121
|
+
width: 80px;
|
|
122
|
+
}
|
|
123
|
+
.semi-json-viewer-search-options {
|
|
124
|
+
display: flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
justify-content: center;
|
|
127
|
+
list-style: none;
|
|
128
|
+
padding-inline-start: 0;
|
|
129
|
+
margin-block-start: 0;
|
|
130
|
+
margin-block-end: 0;
|
|
131
|
+
gap: 8px;
|
|
132
|
+
}
|
|
133
|
+
.semi-json-viewer-search-options-item {
|
|
134
|
+
min-width: 32px;
|
|
135
|
+
height: 32px;
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
justify-content: center;
|
|
139
|
+
cursor: pointer;
|
|
140
|
+
border-radius: var(--semi-border-radius-small);
|
|
141
|
+
color: var(--semi-color-text-2);
|
|
142
|
+
}
|
|
143
|
+
.semi-json-viewer-search-options-item:hover {
|
|
144
|
+
background-color: var(--semi-color-default);
|
|
145
|
+
}
|
|
146
|
+
.semi-json-viewer-search-options-item-active {
|
|
147
|
+
color: var(--semi-color-primary);
|
|
148
|
+
background-color: var(--semi-color-primary-light-default);
|
|
149
|
+
}
|
|
150
|
+
.semi-json-viewer-complete-suggestions-container {
|
|
151
|
+
border-radius: var(--semi-border-radius-medium);
|
|
152
|
+
background-color: var(--semi-color-bg-3);
|
|
153
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
154
|
+
z-index: 1000;
|
|
155
|
+
min-width: 200px;
|
|
156
|
+
max-width: 400px;
|
|
157
|
+
list-style: none;
|
|
158
|
+
padding: 4px 0;
|
|
159
|
+
}
|
|
160
|
+
.semi-json-viewer-complete-container {
|
|
161
|
+
position: absolute;
|
|
162
|
+
z-index: 1000;
|
|
163
|
+
}
|
|
164
|
+
.semi-json-viewer-complete-suggestions-item {
|
|
165
|
+
padding: 8px 16px;
|
|
166
|
+
color: var(--semi-color-text-0);
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
@import './variables.scss';
|
|
2
|
+
|
|
3
|
+
$module: #{$prefix}-json-viewer;
|
|
4
|
+
|
|
5
|
+
.#{$module} {
|
|
6
|
+
&-background {
|
|
7
|
+
background-color: $color-json-viewer-background;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
&-string-key {
|
|
11
|
+
color: $color-json-viewer-key;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&-string-value {
|
|
15
|
+
color: $color-json-viewer-value;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&-keyword {
|
|
19
|
+
color: $color-json-viewer-keyword;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&-number {
|
|
23
|
+
color: $color-json-viewer-number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&-delimiter-comma {
|
|
27
|
+
color: $color-json-viewer-delimiter-comma;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&-delimiter-bracket-0 {
|
|
31
|
+
color: rgba(var(--semi-blue-7), 1);
|
|
32
|
+
}
|
|
33
|
+
&-delimiter-bracket-1 {
|
|
34
|
+
color: rgba(var(--semi-green-7), 1);
|
|
35
|
+
}
|
|
36
|
+
&-delimiter-bracket-2 {
|
|
37
|
+
color: rgba(var(--semi-orange-7), 1);
|
|
38
|
+
}
|
|
39
|
+
&-delimiter-array-0 {
|
|
40
|
+
color: rgba(var(--semi-blue-7), 1);
|
|
41
|
+
}
|
|
42
|
+
&-delimiter-array-1 {
|
|
43
|
+
color: rgba(var(--semi-green-7), 1);
|
|
44
|
+
}
|
|
45
|
+
&-delimiter-array-2 {
|
|
46
|
+
color: rgba(var(--semi-orange-7), 1);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&-search-result {
|
|
50
|
+
background-color: $color-json-viewer-search-result-background;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&-current-search-result {
|
|
54
|
+
background-color: $color-json-viewer-current-search-result-background !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&-folding-icon {
|
|
58
|
+
opacity: 0.7;
|
|
59
|
+
transition: opacity 0.8s;
|
|
60
|
+
color: $color-json-viewer-folding-icon;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&-view-line {
|
|
64
|
+
font-family: Menlo, Firecode, Monaco, 'Courier New', monospace;
|
|
65
|
+
font-weight: normal;
|
|
66
|
+
font-size: 12px;
|
|
67
|
+
font-feature-settings: 'liga' 0, 'calt' 0;
|
|
68
|
+
font-variation-settings: normal;
|
|
69
|
+
letter-spacing: 0px;
|
|
70
|
+
color: #237893;
|
|
71
|
+
word-wrap: break-word;
|
|
72
|
+
white-space: pre-wrap;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&-line-number {
|
|
76
|
+
font-family: Menlo, Firecode, Monaco, 'Courier New', monospace;
|
|
77
|
+
font-weight: normal;
|
|
78
|
+
font-size: 12px;
|
|
79
|
+
font-feature-settings: 'liga' 0, 'calt' 0;
|
|
80
|
+
font-variation-settings: normal;
|
|
81
|
+
letter-spacing: 0px;
|
|
82
|
+
color: $color-json-viewer-line-number;
|
|
83
|
+
text-align: center;
|
|
84
|
+
width: 50px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
&-content-container {
|
|
88
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
89
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
&-content-container::-webkit-scrollbar {
|
|
93
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&-search-bar-container {
|
|
97
|
+
width: 458px;
|
|
98
|
+
box-sizing: border-box;
|
|
99
|
+
border: 1px solid var(--semi-color-border);
|
|
100
|
+
border-radius: var(--semi-border-radius-small);
|
|
101
|
+
display: flex;
|
|
102
|
+
flex-direction: column;
|
|
103
|
+
padding: 8px;
|
|
104
|
+
gap: 8px;
|
|
105
|
+
background-color: var(--semi-color-bg-0);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&-search-bar {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: flex-start;
|
|
111
|
+
gap: 8px;
|
|
112
|
+
&-input {
|
|
113
|
+
width: 200px;
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
}
|
|
116
|
+
.#{$prefix}-button-group {
|
|
117
|
+
flex-wrap: nowrap;
|
|
118
|
+
}
|
|
119
|
+
// next icon btn
|
|
120
|
+
.#{$prefix}-button:nth-of-type(1) {
|
|
121
|
+
width: 40px;
|
|
122
|
+
}
|
|
123
|
+
// prev icon btn
|
|
124
|
+
.#{$prefix}-button:nth-of-type(2) {
|
|
125
|
+
width: 40px;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
&-replace-bar {
|
|
130
|
+
display: flex;
|
|
131
|
+
align-items: flex-start;
|
|
132
|
+
gap: 8px;
|
|
133
|
+
&-input {
|
|
134
|
+
width: 261px;
|
|
135
|
+
}
|
|
136
|
+
// replace btn
|
|
137
|
+
.#{$prefix}-button:nth-of-type(1) {
|
|
138
|
+
width: 52px;
|
|
139
|
+
}
|
|
140
|
+
// all replace btn
|
|
141
|
+
.#{$prefix}-button:nth-of-type(2) {
|
|
142
|
+
width: 80px;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&-search-options {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
list-style: none;
|
|
151
|
+
padding-inline-start: 0;
|
|
152
|
+
margin-block-start: 0;
|
|
153
|
+
margin-block-end: 0;
|
|
154
|
+
gap: 8px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
&-search-options-item {
|
|
158
|
+
min-width: 32px;
|
|
159
|
+
height: 32px;
|
|
160
|
+
display: flex;
|
|
161
|
+
align-items: center;
|
|
162
|
+
justify-content: center;
|
|
163
|
+
cursor: pointer;
|
|
164
|
+
border-radius: var(--semi-border-radius-small);
|
|
165
|
+
color: var(--semi-color-text-2);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
&-search-options-item:hover {
|
|
169
|
+
background-color: var(--semi-color-default);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
&-search-options-item-active {
|
|
173
|
+
color: var(--semi-color-primary);
|
|
174
|
+
background-color: var(--semi-color-primary-light-default);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&-complete-suggestions-container {
|
|
178
|
+
border-radius: var(--semi-border-radius-medium);
|
|
179
|
+
background-color: var(--semi-color-bg-3);
|
|
180
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
181
|
+
z-index: 1000;
|
|
182
|
+
min-width: 200px;
|
|
183
|
+
max-width: 400px;
|
|
184
|
+
list-style: none;
|
|
185
|
+
padding: 4px 0;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
&-complete-container {
|
|
189
|
+
position: absolute;
|
|
190
|
+
z-index: 1000;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
&-complete-suggestions-item {
|
|
194
|
+
padding: 8px 16px;
|
|
195
|
+
color: var(--semi-color-text-0);
|
|
196
|
+
cursor: pointer;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
$color-json-viewer-background: var(--semi-color-default); // JSON背景颜色
|
|
2
|
+
$color-json-viewer-key: rgba(var(--semi-red-5), 1); // JSON key 颜色
|
|
3
|
+
$color-json-viewer-value: rgba(var(--semi-blue-5), 1);
|
|
4
|
+
$color-json-viewer-number: rgba(var(--semi-green-5), 1); // JSON number 颜色
|
|
5
|
+
$color-json-viewer-keyword: rgba(var(--semi-blue-5), 1); // JSON keyword 颜色
|
|
6
|
+
$color-json-viewer-delimiter-comma: rgba(var(--semi-blue-6), 1); // JSON delimiter comma 颜色
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
$color-json-viewer-search-result-background: rgba(var(--semi-green-2), 1); // JSON search result background 颜色
|
|
10
|
+
$color-json-viewer-current-search-result-background: rgba(var(--semi-yellow-4), 1); // JSON current search result background 颜色
|
|
11
|
+
|
|
12
|
+
$color-json-viewer-folding-icon: rgba(var(--semi-blue-7), 1); // JSON folding icon 颜色
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
$color-json-viewer-line-number: rgba(var(--semi-grey-5), 1); // JSON line number 颜色
|
|
@@ -8,7 +8,7 @@ export interface LottieAdapter<P = Record<string, any>, S = Record<string, any>>
|
|
|
8
8
|
export interface LottieBaseProps {
|
|
9
9
|
width?: string;
|
|
10
10
|
height?: string;
|
|
11
|
-
params: ArgsType<typeof lottie.loadAnimation>[0]
|
|
11
|
+
params: Partial<ArgsType<typeof lottie.loadAnimation>[0]>;
|
|
12
12
|
getAnimationInstance?: (instance: AnimationItem | null) => void;
|
|
13
13
|
getLottie?: (lottiePKG: typeof lottie) => void;
|
|
14
14
|
}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { ResizableHandlerFoundation, ResizableFoundation } from './single';
|
|
2
|
+
import { ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation } from './group';
|
|
3
|
+
import type { ResizableHandlerAdapter, ResizableAdapter } from './single';
|
|
4
|
+
import type { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter } from './group';
|
|
5
|
+
export type { ResizableHandlerAdapter, ResizableAdapter, ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, };
|
|
6
|
+
export { ResizableHandlerFoundation, ResizableFoundation, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|