@douyinfe/semi-foundation 2.69.0 → 2.70.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jsonViewer/constants.ts +7 -0
- package/jsonViewer/foundation.ts +67 -0
- package/jsonViewer/jsonViewer.scss +152 -0
- package/jsonViewer/script/build.js +51 -0
- package/jsonViewer/variables.scss +27 -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 +21 -0
- package/lib/cjs/jsonViewer/foundation.js +78 -0
- package/lib/cjs/jsonViewer/jsonViewer.css +136 -0
- package/lib/cjs/jsonViewer/jsonViewer.scss +152 -0
- package/lib/cjs/jsonViewer/variables.scss +27 -0
- package/lib/cjs/resizable/foundation.d.ts +4 -5
- package/lib/es/jsonViewer/constants.d.ts +4 -0
- package/lib/es/jsonViewer/constants.js +5 -0
- package/lib/es/jsonViewer/foundation.d.ts +21 -0
- package/lib/es/jsonViewer/foundation.js +60 -0
- package/lib/es/jsonViewer/jsonViewer.css +136 -0
- package/lib/es/jsonViewer/jsonViewer.scss +152 -0
- package/lib/es/jsonViewer/variables.scss +27 -0
- package/lib/es/resizable/foundation.d.ts +4 -5
- package/lib/es/resizable/foundation.js +2 -1
- package/package.json +5 -3
- package/resizable/foundation.ts +15 -10
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
export * from '@douyinfe/semi-json-viewer-core';
|
|
3
|
+
import { JsonViewer, JsonViewerOptions } from '@douyinfe/semi-json-viewer-core';
|
|
4
|
+
import BaseFoundation, { DefaultAdapter, noopFunction } from '../base/foundation';
|
|
5
|
+
|
|
6
|
+
export interface JsonViewerAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
7
|
+
getJsonViewerRef: () => HTMLElement;
|
|
8
|
+
onValueChange: (value: string) => void;
|
|
9
|
+
onValueHover: (value: string, el: HTMLElement) => HTMLElement | undefined
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class JsonViewerFoundation extends BaseFoundation<JsonViewerAdapter> {
|
|
14
|
+
constructor(adapter: JsonViewerAdapter) {
|
|
15
|
+
super({ ...JsonViewerFoundation, ...adapter });
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
jsonViewer: JsonViewer | null = null;
|
|
19
|
+
|
|
20
|
+
init() {
|
|
21
|
+
const props = this.getProps();
|
|
22
|
+
const jsonViewerRef = this._adapter.getJsonViewerRef();
|
|
23
|
+
this.jsonViewer = new JsonViewer(jsonViewerRef, props.value, props.options);
|
|
24
|
+
this.jsonViewer.layout();
|
|
25
|
+
this.jsonViewer.emitter.on('contentChanged', (e) => {
|
|
26
|
+
this.onValueChange(this.jsonViewer?.getModel().getValue());
|
|
27
|
+
});
|
|
28
|
+
this.jsonViewer.emitter.on('hoverNode', (e) => {
|
|
29
|
+
const el = this.onValueHover(e.value, e.target);
|
|
30
|
+
if (el) {
|
|
31
|
+
this.jsonViewer.emitter.emit('renderHoverNode', { el });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onValueChange(value: string) {
|
|
37
|
+
this._adapter.onValueChange(value);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
onValueHover(value: string, el: HTMLElement): HTMLElement | undefined {
|
|
41
|
+
return this._adapter.onValueHover(value, el);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
search(searchText: string) {
|
|
45
|
+
const state = this.getState('searchOptions');
|
|
46
|
+
const { caseSensitive, wholeWord, regex } = state;
|
|
47
|
+
this.jsonViewer?.getSearchWidget().search(searchText, caseSensitive, wholeWord, regex);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
prevSearch() {
|
|
51
|
+
this.jsonViewer?.getSearchWidget().navigateResults(-1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
nextSearch() {
|
|
55
|
+
this.jsonViewer?.getSearchWidget().navigateResults(1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
replace(replaceText: string) {
|
|
59
|
+
this.jsonViewer?.getSearchWidget().replace(replaceText);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
replaceAll(replaceText: string) {
|
|
63
|
+
this.jsonViewer?.getSearchWidget().replaceAll(replaceText);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default JsonViewerFoundation;
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
@each $type, $colors in $semi-json-viewer-delimiter-colors {
|
|
31
|
+
@each $level, $color in $colors {
|
|
32
|
+
&-delimiter-#{$type}-#{$level} {
|
|
33
|
+
color: $color;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&-search-result {
|
|
39
|
+
background-color: $semi-json-viewer-search-result-background;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&-current-search-result {
|
|
43
|
+
background-color: $semi-json-viewer-current-search-result-background !important;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&-folding-icon {
|
|
47
|
+
opacity: 0.7;
|
|
48
|
+
transition: opacity 0.8s;
|
|
49
|
+
color: $semi-json-viewer-folding-icon-color;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&-view-line {
|
|
53
|
+
font-family: Menlo, Firecode, Monaco, 'Courier New', monospace;
|
|
54
|
+
font-weight: normal;
|
|
55
|
+
font-size: 12px;
|
|
56
|
+
font-feature-settings: 'liga' 0, 'calt' 0;
|
|
57
|
+
font-variation-settings: normal;
|
|
58
|
+
letter-spacing: 0px;
|
|
59
|
+
color: #237893;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&-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: $semi-json-viewer-line-number-color;
|
|
70
|
+
text-align: center;
|
|
71
|
+
width: 50px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&-line-number-container {
|
|
75
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
76
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&-line-number-container::-webkit-scrollbar {
|
|
80
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&-search-bar-container {
|
|
84
|
+
width: 440px;
|
|
85
|
+
border: 1px solid var(--semi-color-border);
|
|
86
|
+
border-radius: var(--semi-border-radius-small);
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
padding: 8px;
|
|
90
|
+
gap: 8px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
&-replace-bar,
|
|
95
|
+
&-search-bar {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: flex-start;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&-search-options {
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
justify-content: center;
|
|
105
|
+
list-style: none;
|
|
106
|
+
padding-inline-start: 0;
|
|
107
|
+
margin-block-start: 0;
|
|
108
|
+
margin-block-end: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&-search-options-item {
|
|
112
|
+
min-width: 32px;
|
|
113
|
+
height: 32px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
margin: 0 4px;
|
|
119
|
+
border-radius: var(--semi-border-radius-small);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&-search-options-item:hover {
|
|
123
|
+
background-color: var(--semi-color-default);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&-search-options-item-active {
|
|
127
|
+
color: var(--semi-color-primary);
|
|
128
|
+
background-color: var(--semi-color-primary-light-default);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&-complete-suggestions-container {
|
|
132
|
+
border-radius: var(--semi-border-radius-medium);
|
|
133
|
+
background-color: var(--semi-color-bg-3);
|
|
134
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
135
|
+
z-index: 1000;
|
|
136
|
+
min-width: 200px;
|
|
137
|
+
max-width: 400px;
|
|
138
|
+
list-style: none;
|
|
139
|
+
padding: 4px 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&-complete-container {
|
|
143
|
+
position: absolute;
|
|
144
|
+
z-index: 1000;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
&-complete-suggestions-item {
|
|
148
|
+
padding: 8px 16px;
|
|
149
|
+
color: var(--semi-color-text-0);
|
|
150
|
+
cursor: pointer;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const esbuild = require('esbuild');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const compileWorker = async ()=>{
|
|
9
|
+
const workerEntry = path.join(__dirname, "..", "core/src/worker/json.worker.ts");
|
|
10
|
+
|
|
11
|
+
const result = await esbuild.build({
|
|
12
|
+
entryPoints: [workerEntry],
|
|
13
|
+
bundle: true,
|
|
14
|
+
write: false,
|
|
15
|
+
});
|
|
16
|
+
return result.outputFiles[0].text;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const buildMain = async ()=>{
|
|
21
|
+
const mainEntry = path.join(__dirname, "..", "core/src/index.ts");
|
|
22
|
+
|
|
23
|
+
const result = await esbuild.build({
|
|
24
|
+
entryPoints: [mainEntry],
|
|
25
|
+
bundle: true,
|
|
26
|
+
packages: 'external',
|
|
27
|
+
write: false,
|
|
28
|
+
format: 'esm'
|
|
29
|
+
});
|
|
30
|
+
return result.outputFiles[0].text;
|
|
31
|
+
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
const compile = async ()=>{
|
|
37
|
+
const workerRaw = await compileWorker();
|
|
38
|
+
|
|
39
|
+
const mainRaw = await buildMain();
|
|
40
|
+
|
|
41
|
+
const finalRaw = mainRaw.replaceAll("%WORKER_RAW%", encodeURIComponent(workerRaw));
|
|
42
|
+
|
|
43
|
+
const saveDir = path.join(__dirname, "..", "core/lib");
|
|
44
|
+
|
|
45
|
+
if (!fs.existsSync(saveDir)) {
|
|
46
|
+
fs.mkdirSync(saveDir);
|
|
47
|
+
}
|
|
48
|
+
fs.writeFileSync(path.join(saveDir, "index.js"), finalRaw, 'utf8');
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
compile();
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
$semi-json-viewer-delimiter-colors: (
|
|
9
|
+
bracket: (
|
|
10
|
+
0: rgba(var(--semi-blue-7), 1), // 括号层级 0 颜色
|
|
11
|
+
1: rgba(var(--semi-green-7), 1), // 括号层级 1 颜色
|
|
12
|
+
2: rgba(var(--semi-orange-7), 1), // 括号层级 2 颜色
|
|
13
|
+
),
|
|
14
|
+
array: (
|
|
15
|
+
0: rgba(var(--semi-blue-7), 1), // 数组层级 0 颜色
|
|
16
|
+
1: rgba(var(--semi-green-7), 1), // 数组层级 1 颜色
|
|
17
|
+
2: rgba(var(--semi-orange-7), 1), // 数组层级 2 颜色
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
$semi-json-viewer-search-result-background: rgba(var(--semi-green-2), 1); // JSON search result background 颜色
|
|
22
|
+
$semi-json-viewer-current-search-result-background: rgba(var(--semi-yellow-4), 1); // JSON current search result background 颜色
|
|
23
|
+
|
|
24
|
+
$semi-json-viewer-folding-icon-color: rgba(var(--semi-blue-7), 1); // JSON folding icon 颜色
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
$semi-json-viewer-line-number-color: rgba(var(--semi-grey-5), 1); // JSON line number 颜色
|
|
@@ -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,21 @@
|
|
|
1
|
+
export * from '@douyinfe/semi-json-viewer-core';
|
|
2
|
+
import { JsonViewer } from '@douyinfe/semi-json-viewer-core';
|
|
3
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
4
|
+
export interface JsonViewerAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
5
|
+
getJsonViewerRef: () => HTMLElement;
|
|
6
|
+
onValueChange: (value: string) => void;
|
|
7
|
+
onValueHover: (value: string, el: HTMLElement) => HTMLElement | undefined;
|
|
8
|
+
}
|
|
9
|
+
declare class JsonViewerFoundation extends BaseFoundation<JsonViewerAdapter> {
|
|
10
|
+
constructor(adapter: JsonViewerAdapter);
|
|
11
|
+
jsonViewer: JsonViewer | null;
|
|
12
|
+
init(): void;
|
|
13
|
+
onValueChange(value: string): void;
|
|
14
|
+
onValueHover(value: string, el: HTMLElement): HTMLElement | undefined;
|
|
15
|
+
search(searchText: string): void;
|
|
16
|
+
prevSearch(): void;
|
|
17
|
+
nextSearch(): void;
|
|
18
|
+
replace(replaceText: string): void;
|
|
19
|
+
replaceAll(replaceText: string): void;
|
|
20
|
+
}
|
|
21
|
+
export default JsonViewerFoundation;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {};
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _semiJsonViewerCore = require("@douyinfe/semi-json-viewer-core");
|
|
9
|
+
Object.keys(_semiJsonViewerCore).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
12
|
+
if (key in exports && exports[key] === _semiJsonViewerCore[key]) return;
|
|
13
|
+
Object.defineProperty(exports, key, {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _semiJsonViewerCore[key];
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
var _foundation = _interopRequireDefault(require("../base/foundation"));
|
|
21
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
|
+
class JsonViewerFoundation extends _foundation.default {
|
|
23
|
+
constructor(adapter) {
|
|
24
|
+
super(Object.assign(Object.assign({}, JsonViewerFoundation), adapter));
|
|
25
|
+
this.jsonViewer = null;
|
|
26
|
+
}
|
|
27
|
+
init() {
|
|
28
|
+
const props = this.getProps();
|
|
29
|
+
const jsonViewerRef = this._adapter.getJsonViewerRef();
|
|
30
|
+
this.jsonViewer = new _semiJsonViewerCore.JsonViewer(jsonViewerRef, props.value, props.options);
|
|
31
|
+
this.jsonViewer.layout();
|
|
32
|
+
this.jsonViewer.emitter.on('contentChanged', e => {
|
|
33
|
+
var _a;
|
|
34
|
+
this.onValueChange((_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getModel().getValue());
|
|
35
|
+
});
|
|
36
|
+
this.jsonViewer.emitter.on('hoverNode', e => {
|
|
37
|
+
const el = this.onValueHover(e.value, e.target);
|
|
38
|
+
if (el) {
|
|
39
|
+
this.jsonViewer.emitter.emit('renderHoverNode', {
|
|
40
|
+
el
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
onValueChange(value) {
|
|
46
|
+
this._adapter.onValueChange(value);
|
|
47
|
+
}
|
|
48
|
+
onValueHover(value, el) {
|
|
49
|
+
return this._adapter.onValueHover(value, el);
|
|
50
|
+
}
|
|
51
|
+
search(searchText) {
|
|
52
|
+
var _a;
|
|
53
|
+
const state = this.getState('searchOptions');
|
|
54
|
+
const {
|
|
55
|
+
caseSensitive,
|
|
56
|
+
wholeWord,
|
|
57
|
+
regex
|
|
58
|
+
} = state;
|
|
59
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().search(searchText, caseSensitive, wholeWord, regex);
|
|
60
|
+
}
|
|
61
|
+
prevSearch() {
|
|
62
|
+
var _a;
|
|
63
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(-1);
|
|
64
|
+
}
|
|
65
|
+
nextSearch() {
|
|
66
|
+
var _a;
|
|
67
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(1);
|
|
68
|
+
}
|
|
69
|
+
replace(replaceText) {
|
|
70
|
+
var _a;
|
|
71
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replace(replaceText);
|
|
72
|
+
}
|
|
73
|
+
replaceAll(replaceText) {
|
|
74
|
+
var _a;
|
|
75
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replaceAll(replaceText);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
var _default = exports.default = JsonViewerFoundation;
|
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
}
|
|
60
|
+
.semi-json-viewer-line-number {
|
|
61
|
+
font-family: Menlo, Firecode, Monaco, "Courier New", monospace;
|
|
62
|
+
font-weight: normal;
|
|
63
|
+
font-size: 12px;
|
|
64
|
+
font-feature-settings: "liga" 0, "calt" 0;
|
|
65
|
+
font-variation-settings: normal;
|
|
66
|
+
letter-spacing: 0px;
|
|
67
|
+
color: rgba(var(--semi-grey-5), 1);
|
|
68
|
+
text-align: center;
|
|
69
|
+
width: 50px;
|
|
70
|
+
}
|
|
71
|
+
.semi-json-viewer-line-number-container {
|
|
72
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
73
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
74
|
+
}
|
|
75
|
+
.semi-json-viewer-line-number-container::-webkit-scrollbar {
|
|
76
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
77
|
+
}
|
|
78
|
+
.semi-json-viewer-search-bar-container {
|
|
79
|
+
width: 440px;
|
|
80
|
+
border: 1px solid var(--semi-color-border);
|
|
81
|
+
border-radius: var(--semi-border-radius-small);
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
padding: 8px;
|
|
85
|
+
gap: 8px;
|
|
86
|
+
}
|
|
87
|
+
.semi-json-viewer-replace-bar, .semi-json-viewer-search-bar {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: flex-start;
|
|
90
|
+
gap: 8px;
|
|
91
|
+
}
|
|
92
|
+
.semi-json-viewer-search-options {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
list-style: none;
|
|
97
|
+
padding-inline-start: 0;
|
|
98
|
+
margin-block-start: 0;
|
|
99
|
+
margin-block-end: 0;
|
|
100
|
+
}
|
|
101
|
+
.semi-json-viewer-search-options-item {
|
|
102
|
+
min-width: 32px;
|
|
103
|
+
height: 32px;
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
margin: 0 4px;
|
|
109
|
+
border-radius: var(--semi-border-radius-small);
|
|
110
|
+
}
|
|
111
|
+
.semi-json-viewer-search-options-item:hover {
|
|
112
|
+
background-color: var(--semi-color-default);
|
|
113
|
+
}
|
|
114
|
+
.semi-json-viewer-search-options-item-active {
|
|
115
|
+
color: var(--semi-color-primary);
|
|
116
|
+
background-color: var(--semi-color-primary-light-default);
|
|
117
|
+
}
|
|
118
|
+
.semi-json-viewer-complete-suggestions-container {
|
|
119
|
+
border-radius: var(--semi-border-radius-medium);
|
|
120
|
+
background-color: var(--semi-color-bg-3);
|
|
121
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
122
|
+
z-index: 1000;
|
|
123
|
+
min-width: 200px;
|
|
124
|
+
max-width: 400px;
|
|
125
|
+
list-style: none;
|
|
126
|
+
padding: 4px 0;
|
|
127
|
+
}
|
|
128
|
+
.semi-json-viewer-complete-container {
|
|
129
|
+
position: absolute;
|
|
130
|
+
z-index: 1000;
|
|
131
|
+
}
|
|
132
|
+
.semi-json-viewer-complete-suggestions-item {
|
|
133
|
+
padding: 8px 16px;
|
|
134
|
+
color: var(--semi-color-text-0);
|
|
135
|
+
cursor: pointer;
|
|
136
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
@each $type, $colors in $semi-json-viewer-delimiter-colors {
|
|
31
|
+
@each $level, $color in $colors {
|
|
32
|
+
&-delimiter-#{$type}-#{$level} {
|
|
33
|
+
color: $color;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&-search-result {
|
|
39
|
+
background-color: $semi-json-viewer-search-result-background;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&-current-search-result {
|
|
43
|
+
background-color: $semi-json-viewer-current-search-result-background !important;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&-folding-icon {
|
|
47
|
+
opacity: 0.7;
|
|
48
|
+
transition: opacity 0.8s;
|
|
49
|
+
color: $semi-json-viewer-folding-icon-color;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&-view-line {
|
|
53
|
+
font-family: Menlo, Firecode, Monaco, 'Courier New', monospace;
|
|
54
|
+
font-weight: normal;
|
|
55
|
+
font-size: 12px;
|
|
56
|
+
font-feature-settings: 'liga' 0, 'calt' 0;
|
|
57
|
+
font-variation-settings: normal;
|
|
58
|
+
letter-spacing: 0px;
|
|
59
|
+
color: #237893;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&-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: $semi-json-viewer-line-number-color;
|
|
70
|
+
text-align: center;
|
|
71
|
+
width: 50px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&-line-number-container {
|
|
75
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
76
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&-line-number-container::-webkit-scrollbar {
|
|
80
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&-search-bar-container {
|
|
84
|
+
width: 440px;
|
|
85
|
+
border: 1px solid var(--semi-color-border);
|
|
86
|
+
border-radius: var(--semi-border-radius-small);
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
padding: 8px;
|
|
90
|
+
gap: 8px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
&-replace-bar,
|
|
95
|
+
&-search-bar {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: flex-start;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&-search-options {
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
justify-content: center;
|
|
105
|
+
list-style: none;
|
|
106
|
+
padding-inline-start: 0;
|
|
107
|
+
margin-block-start: 0;
|
|
108
|
+
margin-block-end: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&-search-options-item {
|
|
112
|
+
min-width: 32px;
|
|
113
|
+
height: 32px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
margin: 0 4px;
|
|
119
|
+
border-radius: var(--semi-border-radius-small);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&-search-options-item:hover {
|
|
123
|
+
background-color: var(--semi-color-default);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&-search-options-item-active {
|
|
127
|
+
color: var(--semi-color-primary);
|
|
128
|
+
background-color: var(--semi-color-primary-light-default);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&-complete-suggestions-container {
|
|
132
|
+
border-radius: var(--semi-border-radius-medium);
|
|
133
|
+
background-color: var(--semi-color-bg-3);
|
|
134
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
135
|
+
z-index: 1000;
|
|
136
|
+
min-width: 200px;
|
|
137
|
+
max-width: 400px;
|
|
138
|
+
list-style: none;
|
|
139
|
+
padding: 4px 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&-complete-container {
|
|
143
|
+
position: absolute;
|
|
144
|
+
z-index: 1000;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
&-complete-suggestions-item {
|
|
148
|
+
padding: 8px 16px;
|
|
149
|
+
color: var(--semi-color-text-0);
|
|
150
|
+
cursor: pointer;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
$semi-json-viewer-delimiter-colors: (
|
|
9
|
+
bracket: (
|
|
10
|
+
0: rgba(var(--semi-blue-7), 1), // 括号层级 0 颜色
|
|
11
|
+
1: rgba(var(--semi-green-7), 1), // 括号层级 1 颜色
|
|
12
|
+
2: rgba(var(--semi-orange-7), 1), // 括号层级 2 颜色
|
|
13
|
+
),
|
|
14
|
+
array: (
|
|
15
|
+
0: rgba(var(--semi-blue-7), 1), // 数组层级 0 颜色
|
|
16
|
+
1: rgba(var(--semi-green-7), 1), // 数组层级 1 颜色
|
|
17
|
+
2: rgba(var(--semi-orange-7), 1), // 数组层级 2 颜色
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
$semi-json-viewer-search-result-background: rgba(var(--semi-green-2), 1); // JSON search result background 颜色
|
|
22
|
+
$semi-json-viewer-current-search-result-background: rgba(var(--semi-yellow-4), 1); // JSON current search result background 颜色
|
|
23
|
+
|
|
24
|
+
$semi-json-viewer-folding-icon-color: rgba(var(--semi-blue-7), 1); // JSON folding icon 颜色
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
$semi-json-viewer-line-number-color: rgba(var(--semi-grey-5), 1); // JSON line number 颜色
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ResizableHandlerFoundation, ResizableFoundation } from './single';
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter, ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|
|
1
|
+
import { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter } from './single';
|
|
2
|
+
export { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter };
|
|
3
|
+
import { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation } from './group';
|
|
4
|
+
export { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export * from '@douyinfe/semi-json-viewer-core';
|
|
2
|
+
import { JsonViewer } from '@douyinfe/semi-json-viewer-core';
|
|
3
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
4
|
+
export interface JsonViewerAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
5
|
+
getJsonViewerRef: () => HTMLElement;
|
|
6
|
+
onValueChange: (value: string) => void;
|
|
7
|
+
onValueHover: (value: string, el: HTMLElement) => HTMLElement | undefined;
|
|
8
|
+
}
|
|
9
|
+
declare class JsonViewerFoundation extends BaseFoundation<JsonViewerAdapter> {
|
|
10
|
+
constructor(adapter: JsonViewerAdapter);
|
|
11
|
+
jsonViewer: JsonViewer | null;
|
|
12
|
+
init(): void;
|
|
13
|
+
onValueChange(value: string): void;
|
|
14
|
+
onValueHover(value: string, el: HTMLElement): HTMLElement | undefined;
|
|
15
|
+
search(searchText: string): void;
|
|
16
|
+
prevSearch(): void;
|
|
17
|
+
nextSearch(): void;
|
|
18
|
+
replace(replaceText: string): void;
|
|
19
|
+
replaceAll(replaceText: string): void;
|
|
20
|
+
}
|
|
21
|
+
export default JsonViewerFoundation;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export * from '@douyinfe/semi-json-viewer-core';
|
|
2
|
+
import { JsonViewer } from '@douyinfe/semi-json-viewer-core';
|
|
3
|
+
import BaseFoundation from '../base/foundation';
|
|
4
|
+
class JsonViewerFoundation extends BaseFoundation {
|
|
5
|
+
constructor(adapter) {
|
|
6
|
+
super(Object.assign(Object.assign({}, JsonViewerFoundation), adapter));
|
|
7
|
+
this.jsonViewer = null;
|
|
8
|
+
}
|
|
9
|
+
init() {
|
|
10
|
+
const props = this.getProps();
|
|
11
|
+
const jsonViewerRef = this._adapter.getJsonViewerRef();
|
|
12
|
+
this.jsonViewer = new JsonViewer(jsonViewerRef, props.value, props.options);
|
|
13
|
+
this.jsonViewer.layout();
|
|
14
|
+
this.jsonViewer.emitter.on('contentChanged', e => {
|
|
15
|
+
var _a;
|
|
16
|
+
this.onValueChange((_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getModel().getValue());
|
|
17
|
+
});
|
|
18
|
+
this.jsonViewer.emitter.on('hoverNode', e => {
|
|
19
|
+
const el = this.onValueHover(e.value, e.target);
|
|
20
|
+
if (el) {
|
|
21
|
+
this.jsonViewer.emitter.emit('renderHoverNode', {
|
|
22
|
+
el
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
onValueChange(value) {
|
|
28
|
+
this._adapter.onValueChange(value);
|
|
29
|
+
}
|
|
30
|
+
onValueHover(value, el) {
|
|
31
|
+
return this._adapter.onValueHover(value, el);
|
|
32
|
+
}
|
|
33
|
+
search(searchText) {
|
|
34
|
+
var _a;
|
|
35
|
+
const state = this.getState('searchOptions');
|
|
36
|
+
const {
|
|
37
|
+
caseSensitive,
|
|
38
|
+
wholeWord,
|
|
39
|
+
regex
|
|
40
|
+
} = state;
|
|
41
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().search(searchText, caseSensitive, wholeWord, regex);
|
|
42
|
+
}
|
|
43
|
+
prevSearch() {
|
|
44
|
+
var _a;
|
|
45
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(-1);
|
|
46
|
+
}
|
|
47
|
+
nextSearch() {
|
|
48
|
+
var _a;
|
|
49
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().navigateResults(1);
|
|
50
|
+
}
|
|
51
|
+
replace(replaceText) {
|
|
52
|
+
var _a;
|
|
53
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replace(replaceText);
|
|
54
|
+
}
|
|
55
|
+
replaceAll(replaceText) {
|
|
56
|
+
var _a;
|
|
57
|
+
(_a = this.jsonViewer) === null || _a === void 0 ? void 0 : _a.getSearchWidget().replaceAll(replaceText);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export default JsonViewerFoundation;
|
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
}
|
|
60
|
+
.semi-json-viewer-line-number {
|
|
61
|
+
font-family: Menlo, Firecode, Monaco, "Courier New", monospace;
|
|
62
|
+
font-weight: normal;
|
|
63
|
+
font-size: 12px;
|
|
64
|
+
font-feature-settings: "liga" 0, "calt" 0;
|
|
65
|
+
font-variation-settings: normal;
|
|
66
|
+
letter-spacing: 0px;
|
|
67
|
+
color: rgba(var(--semi-grey-5), 1);
|
|
68
|
+
text-align: center;
|
|
69
|
+
width: 50px;
|
|
70
|
+
}
|
|
71
|
+
.semi-json-viewer-line-number-container {
|
|
72
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
73
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
74
|
+
}
|
|
75
|
+
.semi-json-viewer-line-number-container::-webkit-scrollbar {
|
|
76
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
77
|
+
}
|
|
78
|
+
.semi-json-viewer-search-bar-container {
|
|
79
|
+
width: 440px;
|
|
80
|
+
border: 1px solid var(--semi-color-border);
|
|
81
|
+
border-radius: var(--semi-border-radius-small);
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
padding: 8px;
|
|
85
|
+
gap: 8px;
|
|
86
|
+
}
|
|
87
|
+
.semi-json-viewer-replace-bar, .semi-json-viewer-search-bar {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: flex-start;
|
|
90
|
+
gap: 8px;
|
|
91
|
+
}
|
|
92
|
+
.semi-json-viewer-search-options {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
list-style: none;
|
|
97
|
+
padding-inline-start: 0;
|
|
98
|
+
margin-block-start: 0;
|
|
99
|
+
margin-block-end: 0;
|
|
100
|
+
}
|
|
101
|
+
.semi-json-viewer-search-options-item {
|
|
102
|
+
min-width: 32px;
|
|
103
|
+
height: 32px;
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
margin: 0 4px;
|
|
109
|
+
border-radius: var(--semi-border-radius-small);
|
|
110
|
+
}
|
|
111
|
+
.semi-json-viewer-search-options-item:hover {
|
|
112
|
+
background-color: var(--semi-color-default);
|
|
113
|
+
}
|
|
114
|
+
.semi-json-viewer-search-options-item-active {
|
|
115
|
+
color: var(--semi-color-primary);
|
|
116
|
+
background-color: var(--semi-color-primary-light-default);
|
|
117
|
+
}
|
|
118
|
+
.semi-json-viewer-complete-suggestions-container {
|
|
119
|
+
border-radius: var(--semi-border-radius-medium);
|
|
120
|
+
background-color: var(--semi-color-bg-3);
|
|
121
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
122
|
+
z-index: 1000;
|
|
123
|
+
min-width: 200px;
|
|
124
|
+
max-width: 400px;
|
|
125
|
+
list-style: none;
|
|
126
|
+
padding: 4px 0;
|
|
127
|
+
}
|
|
128
|
+
.semi-json-viewer-complete-container {
|
|
129
|
+
position: absolute;
|
|
130
|
+
z-index: 1000;
|
|
131
|
+
}
|
|
132
|
+
.semi-json-viewer-complete-suggestions-item {
|
|
133
|
+
padding: 8px 16px;
|
|
134
|
+
color: var(--semi-color-text-0);
|
|
135
|
+
cursor: pointer;
|
|
136
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
@each $type, $colors in $semi-json-viewer-delimiter-colors {
|
|
31
|
+
@each $level, $color in $colors {
|
|
32
|
+
&-delimiter-#{$type}-#{$level} {
|
|
33
|
+
color: $color;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&-search-result {
|
|
39
|
+
background-color: $semi-json-viewer-search-result-background;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&-current-search-result {
|
|
43
|
+
background-color: $semi-json-viewer-current-search-result-background !important;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&-folding-icon {
|
|
47
|
+
opacity: 0.7;
|
|
48
|
+
transition: opacity 0.8s;
|
|
49
|
+
color: $semi-json-viewer-folding-icon-color;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&-view-line {
|
|
53
|
+
font-family: Menlo, Firecode, Monaco, 'Courier New', monospace;
|
|
54
|
+
font-weight: normal;
|
|
55
|
+
font-size: 12px;
|
|
56
|
+
font-feature-settings: 'liga' 0, 'calt' 0;
|
|
57
|
+
font-variation-settings: normal;
|
|
58
|
+
letter-spacing: 0px;
|
|
59
|
+
color: #237893;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&-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: $semi-json-viewer-line-number-color;
|
|
70
|
+
text-align: center;
|
|
71
|
+
width: 50px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&-line-number-container {
|
|
75
|
+
scrollbar-width: none; /* 隐藏滚动条(Firefox) */
|
|
76
|
+
-ms-overflow-style: none; /* 隐藏滚动条(IE 和 Edge) */
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&-line-number-container::-webkit-scrollbar {
|
|
80
|
+
display: none; /* 隐藏滚动条(Webkit 浏览器) */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&-search-bar-container {
|
|
84
|
+
width: 440px;
|
|
85
|
+
border: 1px solid var(--semi-color-border);
|
|
86
|
+
border-radius: var(--semi-border-radius-small);
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
padding: 8px;
|
|
90
|
+
gap: 8px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
&-replace-bar,
|
|
95
|
+
&-search-bar {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: flex-start;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&-search-options {
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
justify-content: center;
|
|
105
|
+
list-style: none;
|
|
106
|
+
padding-inline-start: 0;
|
|
107
|
+
margin-block-start: 0;
|
|
108
|
+
margin-block-end: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&-search-options-item {
|
|
112
|
+
min-width: 32px;
|
|
113
|
+
height: 32px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
margin: 0 4px;
|
|
119
|
+
border-radius: var(--semi-border-radius-small);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&-search-options-item:hover {
|
|
123
|
+
background-color: var(--semi-color-default);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&-search-options-item-active {
|
|
127
|
+
color: var(--semi-color-primary);
|
|
128
|
+
background-color: var(--semi-color-primary-light-default);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&-complete-suggestions-container {
|
|
132
|
+
border-radius: var(--semi-border-radius-medium);
|
|
133
|
+
background-color: var(--semi-color-bg-3);
|
|
134
|
+
box-shadow: var(--semi-shadow-elevated);
|
|
135
|
+
z-index: 1000;
|
|
136
|
+
min-width: 200px;
|
|
137
|
+
max-width: 400px;
|
|
138
|
+
list-style: none;
|
|
139
|
+
padding: 4px 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&-complete-container {
|
|
143
|
+
position: absolute;
|
|
144
|
+
z-index: 1000;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
&-complete-suggestions-item {
|
|
148
|
+
padding: 8px 16px;
|
|
149
|
+
color: var(--semi-color-text-0);
|
|
150
|
+
cursor: pointer;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
$semi-json-viewer-delimiter-colors: (
|
|
9
|
+
bracket: (
|
|
10
|
+
0: rgba(var(--semi-blue-7), 1), // 括号层级 0 颜色
|
|
11
|
+
1: rgba(var(--semi-green-7), 1), // 括号层级 1 颜色
|
|
12
|
+
2: rgba(var(--semi-orange-7), 1), // 括号层级 2 颜色
|
|
13
|
+
),
|
|
14
|
+
array: (
|
|
15
|
+
0: rgba(var(--semi-blue-7), 1), // 数组层级 0 颜色
|
|
16
|
+
1: rgba(var(--semi-green-7), 1), // 数组层级 1 颜色
|
|
17
|
+
2: rgba(var(--semi-orange-7), 1), // 数组层级 2 颜色
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
$semi-json-viewer-search-result-background: rgba(var(--semi-green-2), 1); // JSON search result background 颜色
|
|
22
|
+
$semi-json-viewer-current-search-result-background: rgba(var(--semi-yellow-4), 1); // JSON current search result background 颜色
|
|
23
|
+
|
|
24
|
+
$semi-json-viewer-folding-icon-color: rgba(var(--semi-blue-7), 1); // JSON folding icon 颜色
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
$semi-json-viewer-line-number-color: rgba(var(--semi-grey-5), 1); // JSON line number 颜色
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ResizableHandlerFoundation, ResizableFoundation } from './single';
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter, ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|
|
1
|
+
import { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter } from './single';
|
|
2
|
+
export { ResizableHandlerAdapter, ResizableHandlerFoundation, ResizableFoundation, ResizableAdapter };
|
|
3
|
+
import { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation } from './group';
|
|
4
|
+
export { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter, ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { ResizableHandlerFoundation, ResizableFoundation } from './single';
|
|
2
|
+
export { ResizableHandlerFoundation, ResizableFoundation };
|
|
2
3
|
import { ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation } from './group';
|
|
3
|
-
export {
|
|
4
|
+
export { ResizeGroupFoundation, ResizeItemFoundation, ResizeHandlerFoundation };
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@douyinfe/semi-foundation",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.70.0-alpha.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.
|
|
10
|
+
"@douyinfe/semi-animation": "2.70.0-alpha.0",
|
|
11
|
+
"@douyinfe/semi-json-viewer-core": "2.70.0-alpha.0",
|
|
11
12
|
"@mdx-js/mdx": "^3.0.1",
|
|
12
13
|
"async-validator": "^3.5.0",
|
|
13
14
|
"classnames": "^2.2.6",
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
"*.scss",
|
|
29
30
|
"*.css"
|
|
30
31
|
],
|
|
31
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "40eda115f7dde920c5bc2954ada4f1a1c38cb8d8",
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@babel/plugin-transform-runtime": "^7.15.8",
|
|
34
35
|
"@babel/preset-env": "^7.15.8",
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"@types/prismjs": "^1.26.3",
|
|
38
39
|
"babel-plugin-lodash": "^3.3.4",
|
|
39
40
|
"del": "^6.0.0",
|
|
41
|
+
"esbuild": "0.24.0",
|
|
40
42
|
"gulp": "^4.0.2",
|
|
41
43
|
"gulp-babel": "^8.0.0",
|
|
42
44
|
"gulp-replace": "^1.1.3",
|
package/resizable/foundation.ts
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ResizableHandlerAdapter,
|
|
2
3
|
ResizableHandlerFoundation,
|
|
3
4
|
ResizableFoundation,
|
|
4
|
-
}
|
|
5
|
+
ResizableAdapter }
|
|
6
|
+
from './single';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
ResizableHandlerAdapter,
|
|
10
|
+
ResizableHandlerFoundation,
|
|
11
|
+
ResizableFoundation,
|
|
12
|
+
ResizableAdapter
|
|
13
|
+
};
|
|
5
14
|
|
|
6
15
|
import {
|
|
16
|
+
ResizeGroupAdapter,
|
|
17
|
+
ResizeItemAdapter,
|
|
18
|
+
ResizeHandlerAdapter,
|
|
7
19
|
ResizeGroupFoundation,
|
|
8
20
|
ResizeItemFoundation,
|
|
9
21
|
ResizeHandlerFoundation
|
|
10
22
|
} from './group';
|
|
11
23
|
|
|
12
|
-
|
|
13
|
-
import type { ResizeGroupAdapter, ResizeItemAdapter, ResizeHandlerAdapter } from './group';
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
ResizableHandlerAdapter,
|
|
17
|
-
ResizableHandlerFoundation,
|
|
18
|
-
ResizableFoundation,
|
|
19
|
-
ResizableAdapter,
|
|
24
|
+
export {
|
|
20
25
|
ResizeGroupAdapter,
|
|
21
26
|
ResizeItemAdapter,
|
|
22
27
|
ResizeHandlerAdapter,
|
|
23
28
|
ResizeGroupFoundation,
|
|
24
29
|
ResizeItemFoundation,
|
|
25
30
|
ResizeHandlerFoundation
|
|
26
|
-
};
|
|
31
|
+
};
|