@tuidom/elements 0.1.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/dist/body/bodyElement.d.ts +33 -0
- package/dist/body/bodyElement.js +87 -0
- package/dist/button/buttonElement.d.ts +18 -0
- package/dist/button/buttonElement.js +68 -0
- package/dist/completionlist/completionDetailsElement.d.ts +49 -0
- package/dist/completionlist/completionDetailsElement.js +165 -0
- package/dist/completionlist/completionItemKindIcon.d.ts +2 -0
- package/dist/completionlist/completionItemKindIcon.js +43 -0
- package/dist/completionlist/completionListElement.d.ts +102 -0
- package/dist/completionlist/completionListElement.js +309 -0
- package/dist/completionlist/completionWidgetElement.d.ts +41 -0
- package/dist/completionlist/completionWidgetElement.js +102 -0
- package/dist/contextview/contextMenuController.d.ts +23 -0
- package/dist/contextview/contextMenuController.js +75 -0
- package/dist/contextview/overlayHostElement.d.ts +23 -0
- package/dist/contextview/overlayHostElement.js +47 -0
- package/dist/editorgroup/editorTabItemElement.d.ts +41 -0
- package/dist/editorgroup/editorTabItemElement.js +186 -0
- package/dist/editorgroup/editorTabStripElement.d.ts +33 -0
- package/dist/editorgroup/editorTabStripElement.js +118 -0
- package/dist/editorpart/editorPartElement.d.ts +95 -0
- package/dist/editorpart/editorPartElement.js +285 -0
- package/dist/inputbox/inputElement.d.ts +34 -0
- package/dist/inputbox/inputElement.js +207 -0
- package/dist/inputbox/inputState.d.ts +69 -0
- package/dist/inputbox/inputState.js +326 -0
- package/dist/layout/boxContainerElement.d.ts +27 -0
- package/dist/layout/boxContainerElement.js +121 -0
- package/dist/layout/boxElement.d.ts +4 -0
- package/dist/layout/boxElement.js +30 -0
- package/dist/layout/fillerElement.d.ts +12 -0
- package/dist/layout/fillerElement.js +16 -0
- package/dist/layout/fitContentElement.d.ts +18 -0
- package/dist/layout/fitContentElement.js +46 -0
- package/dist/layout/hFlexElement.d.ts +26 -0
- package/dist/layout/hFlexElement.js +134 -0
- package/dist/layout/paddingContainerElement.d.ts +30 -0
- package/dist/layout/paddingContainerElement.js +88 -0
- package/dist/layout/sizedBoxElement.d.ts +30 -0
- package/dist/layout/sizedBoxElement.js +74 -0
- package/dist/layout/vFlexElement.d.ts +32 -0
- package/dist/layout/vFlexElement.js +136 -0
- package/dist/layout/vStackElement.d.ts +18 -0
- package/dist/layout/vStackElement.js +74 -0
- package/dist/list/listViewElement.d.ts +232 -0
- package/dist/list/listViewElement.js +944 -0
- package/dist/menu/menuBarElement.d.ts +47 -0
- package/dist/menu/menuBarElement.js +285 -0
- package/dist/menu/menuBarItemElement.d.ts +20 -0
- package/dist/menu/menuBarItemElement.js +68 -0
- package/dist/menu/popupMenuElement.d.ts +81 -0
- package/dist/menu/popupMenuElement.js +318 -0
- package/dist/menu/popupMenuItemElement.d.ts +24 -0
- package/dist/menu/popupMenuItemElement.js +89 -0
- package/dist/panel/panelContainerElement.d.ts +64 -0
- package/dist/panel/panelContainerElement.js +219 -0
- package/dist/quickpick/quickPickElement.d.ts +161 -0
- package/dist/quickpick/quickPickElement.js +561 -0
- package/dist/sash/sashElement.d.ts +30 -0
- package/dist/sash/sashElement.js +78 -0
- package/dist/scrollbar/iScrollable.d.ts +8 -0
- package/dist/scrollbar/iScrollable.js +1 -0
- package/dist/scrollbar/scrollBarRenderer.d.ts +36 -0
- package/dist/scrollbar/scrollBarRenderer.js +76 -0
- package/dist/scrollbar/scrollContainerElement.d.ts +39 -0
- package/dist/scrollbar/scrollContainerElement.js +91 -0
- package/dist/scrollbar/scrollViewport.d.ts +28 -0
- package/dist/scrollbar/scrollViewport.js +65 -0
- package/dist/scrollbar/scrollableElement.d.ts +22 -0
- package/dist/scrollbar/scrollableElement.js +42 -0
- package/dist/selectbox/selectBoxElement.d.ts +48 -0
- package/dist/selectbox/selectBoxElement.js +161 -0
- package/dist/terminal/encodeKeyForPty.d.ts +3 -0
- package/dist/terminal/encodeKeyForPty.js +56 -0
- package/dist/terminal/terminalViewElement.d.ts +17 -0
- package/dist/terminal/terminalViewElement.js +172 -0
- package/dist/text/textBlockElement.d.ts +13 -0
- package/dist/text/textBlockElement.js +35 -0
- package/dist/text/textLabelElement.d.ts +28 -0
- package/dist/text/textLabelElement.js +77 -0
- package/dist/titledpanel/titledPanelElement.d.ts +14 -0
- package/dist/titledpanel/titledPanelElement.js +40 -0
- package/dist/tree/iTreeDataProvider.d.ts +19 -0
- package/dist/tree/iTreeDataProvider.js +1 -0
- package/dist/tree/treeViewElement.d.ts +116 -0
- package/dist/tree/treeViewElement.js +748 -0
- package/dist/workbenchlayout/workbenchLayoutElement.d.ts +60 -0
- package/dist/workbenchlayout/workbenchLayoutElement.js +203 -0
- package/package.json +33 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { BoxConstraints, Size } from "@tuidom/core/common/geometryPromitives";
|
|
2
|
+
import { TUIElement } from "@tuidom/core/dom/tuiElement";
|
|
3
|
+
/**
|
|
4
|
+
* Workbench layout: a full-height left panel (sidebar), the center content
|
|
5
|
+
* (editor), and — aligned to the center's width, à la VS Code's default
|
|
6
|
+
* `center` panel alignment — a bottom panel (Problems/Output/…) below the
|
|
7
|
+
* editor. A vertical sash resizes the sidebar; a horizontal sash resizes the
|
|
8
|
+
* bottom panel. The bottom panel is hidden by default (like VS Code).
|
|
9
|
+
*/
|
|
10
|
+
export declare class WorkbenchLayoutElement extends TUIElement {
|
|
11
|
+
private leftPanel;
|
|
12
|
+
private centerContent;
|
|
13
|
+
private bottomPanel;
|
|
14
|
+
private leftPanelVisible;
|
|
15
|
+
private leftPanelWidth;
|
|
16
|
+
private bottomPanelVisible;
|
|
17
|
+
private bottomPanelHeight;
|
|
18
|
+
/**
|
|
19
|
+
* Уведомление о смене layout по действию пользователя (drag сэша или команда):
|
|
20
|
+
* ширина/высота/видимость панелей. Плейн-колбэк (без DI) — TUIDom не знает про
|
|
21
|
+
* сервисы; подписчик (`LayoutService` через `attachLayout`)
|
|
22
|
+
* персистит состояние. НЕ вызывается из `performLayout` (display-клампы — не
|
|
23
|
+
* действие пользователя).
|
|
24
|
+
*/
|
|
25
|
+
onDidChangeLayout?: () => void;
|
|
26
|
+
private sash;
|
|
27
|
+
private bottomSash;
|
|
28
|
+
constructor();
|
|
29
|
+
setLeftPanel(element: TUIElement | null): void;
|
|
30
|
+
setCenterContent(element: TUIElement | null): void;
|
|
31
|
+
setBottomPanel(element: TUIElement | null): void;
|
|
32
|
+
setLeftPanelVisible(visible: boolean): void;
|
|
33
|
+
getLeftPanelVisible(): boolean;
|
|
34
|
+
setBottomPanelVisible(visible: boolean): void;
|
|
35
|
+
getBottomPanelVisible(): boolean;
|
|
36
|
+
setLeftPanelWidth(width: number): void;
|
|
37
|
+
getLeftPanelWidth(): number;
|
|
38
|
+
setBottomPanelHeight(height: number): void;
|
|
39
|
+
getBottomPanelHeight(): number;
|
|
40
|
+
/** Grow/shrink the left panel by `delta` columns, clamped to the current container. */
|
|
41
|
+
nudgeLeftPanelWidth(delta: number): void;
|
|
42
|
+
/** Restore the left panel to its default width. */
|
|
43
|
+
resetLeftPanelWidth(): void;
|
|
44
|
+
getLeftPanel(): TUIElement | null;
|
|
45
|
+
getCenterContent(): TUIElement | null;
|
|
46
|
+
getBottomPanel(): TUIElement | null;
|
|
47
|
+
/**
|
|
48
|
+
* Пересобирает список детей и их видимость. Скрытая панель ОСТАЁТСЯ в
|
|
49
|
+
* дереве с hidden=true (root и стили доходят — раньше её исключали из
|
|
50
|
+
* getChildren() и руками чинили пропагацию при показе). Sashes are added
|
|
51
|
+
* last so they sit on top of the neighbouring content at the boundary for
|
|
52
|
+
* hit-testing; каждый скрыт вместе со своей панелью.
|
|
53
|
+
*/
|
|
54
|
+
private syncChildren;
|
|
55
|
+
private clampWidth;
|
|
56
|
+
private clampWidthTo;
|
|
57
|
+
private clampHeight;
|
|
58
|
+
private clampHeightTo;
|
|
59
|
+
protected performLayout(constraints: BoxConstraints): Size;
|
|
60
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { BoxConstraints, Offset, Point, Rect, Size } from "@tuidom/core/common/geometryPromitives";
|
|
2
|
+
import { RenderContext, TUIElement } from "@tuidom/core/dom/tuiElement";
|
|
3
|
+
import { SashElement } from "../sash/sashElement.js";
|
|
4
|
+
/** Default/reset width of the left panel (file explorer), in columns. */
|
|
5
|
+
const DEFAULT_LEFT_WIDTH = 30;
|
|
6
|
+
/** Minimum left-panel width — fits the " EXPLORER" title without clipping. */
|
|
7
|
+
const MIN_LEFT_WIDTH = 12;
|
|
8
|
+
/** Minimum width left for the center (editor) so a wide sidebar can't starve it. */
|
|
9
|
+
const MIN_CENTER_WIDTH = 20;
|
|
10
|
+
/** Default/reset height of the bottom panel (Problems, Output, …), in rows. */
|
|
11
|
+
const DEFAULT_PANEL_HEIGHT = 12;
|
|
12
|
+
/** Minimum bottom-panel height — fits the tab header + a couple of content rows. */
|
|
13
|
+
const MIN_PANEL_HEIGHT = 3;
|
|
14
|
+
/** Minimum height left for the editor so a tall panel can't starve it. */
|
|
15
|
+
const MIN_EDITOR_HEIGHT = 3;
|
|
16
|
+
/**
|
|
17
|
+
* Workbench layout: a full-height left panel (sidebar), the center content
|
|
18
|
+
* (editor), and — aligned to the center's width, à la VS Code's default
|
|
19
|
+
* `center` panel alignment — a bottom panel (Problems/Output/…) below the
|
|
20
|
+
* editor. A vertical sash resizes the sidebar; a horizontal sash resizes the
|
|
21
|
+
* bottom panel. The bottom panel is hidden by default (like VS Code).
|
|
22
|
+
*/
|
|
23
|
+
export class WorkbenchLayoutElement extends TUIElement {
|
|
24
|
+
leftPanel = null;
|
|
25
|
+
centerContent = null;
|
|
26
|
+
bottomPanel = null;
|
|
27
|
+
leftPanelVisible = true;
|
|
28
|
+
leftPanelWidth = DEFAULT_LEFT_WIDTH;
|
|
29
|
+
bottomPanelVisible = false;
|
|
30
|
+
bottomPanelHeight = DEFAULT_PANEL_HEIGHT;
|
|
31
|
+
/**
|
|
32
|
+
* Уведомление о смене layout по действию пользователя (drag сэша или команда):
|
|
33
|
+
* ширина/высота/видимость панелей. Плейн-колбэк (без DI) — TUIDom не знает про
|
|
34
|
+
* сервисы; подписчик (`LayoutService` через `attachLayout`)
|
|
35
|
+
* персистит состояние. НЕ вызывается из `performLayout` (display-клампы — не
|
|
36
|
+
* действие пользователя).
|
|
37
|
+
*/
|
|
38
|
+
onDidChangeLayout;
|
|
39
|
+
// Draggable dividers: vertical between sidebar and editor, horizontal between
|
|
40
|
+
// editor and bottom panel.
|
|
41
|
+
sash = new SashElement("vertical");
|
|
42
|
+
bottomSash = new SashElement("horizontal");
|
|
43
|
+
constructor() {
|
|
44
|
+
super();
|
|
45
|
+
this.syncChildren();
|
|
46
|
+
this.sash.onDrag = (boundaryScreenX) => {
|
|
47
|
+
// Translate the absolute boundary column to a panel width and clamp it.
|
|
48
|
+
this.leftPanelWidth = this.clampWidth(boundaryScreenX - this.globalPosition.x);
|
|
49
|
+
this.markDirty();
|
|
50
|
+
this.onDidChangeLayout?.();
|
|
51
|
+
};
|
|
52
|
+
this.bottomSash.onDrag = (boundaryScreenY) => {
|
|
53
|
+
// The panel's bottom is pinned to the container bottom; the boundary row
|
|
54
|
+
// is its top, so the height is (containerBottom - boundaryRow).
|
|
55
|
+
const containerBottom = this.globalPosition.y + this.layoutSize.height;
|
|
56
|
+
this.bottomPanelHeight = this.clampHeight(containerBottom - boundaryScreenY);
|
|
57
|
+
this.markDirty();
|
|
58
|
+
this.onDidChangeLayout?.();
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
setLeftPanel(element) {
|
|
62
|
+
this.leftPanel = element;
|
|
63
|
+
this.syncChildren();
|
|
64
|
+
}
|
|
65
|
+
setCenterContent(element) {
|
|
66
|
+
this.centerContent = element;
|
|
67
|
+
this.syncChildren();
|
|
68
|
+
}
|
|
69
|
+
setBottomPanel(element) {
|
|
70
|
+
this.bottomPanel = element;
|
|
71
|
+
this.syncChildren();
|
|
72
|
+
}
|
|
73
|
+
setLeftPanelVisible(visible) {
|
|
74
|
+
this.leftPanelVisible = visible;
|
|
75
|
+
this.syncChildren();
|
|
76
|
+
this.onDidChangeLayout?.();
|
|
77
|
+
}
|
|
78
|
+
getLeftPanelVisible() {
|
|
79
|
+
return this.leftPanelVisible;
|
|
80
|
+
}
|
|
81
|
+
setBottomPanelVisible(visible) {
|
|
82
|
+
this.bottomPanelVisible = visible;
|
|
83
|
+
this.syncChildren();
|
|
84
|
+
this.onDidChangeLayout?.();
|
|
85
|
+
}
|
|
86
|
+
getBottomPanelVisible() {
|
|
87
|
+
return this.bottomPanelVisible;
|
|
88
|
+
}
|
|
89
|
+
setLeftPanelWidth(width) {
|
|
90
|
+
// Context-free lower clamp; the upper bound depends on the container and is
|
|
91
|
+
// enforced in performLayout (and by clampWidth for interactive changes).
|
|
92
|
+
this.leftPanelWidth = Math.max(MIN_LEFT_WIDTH, Math.round(width));
|
|
93
|
+
this.onDidChangeLayout?.();
|
|
94
|
+
}
|
|
95
|
+
getLeftPanelWidth() {
|
|
96
|
+
return this.leftPanelWidth;
|
|
97
|
+
}
|
|
98
|
+
setBottomPanelHeight(height) {
|
|
99
|
+
this.bottomPanelHeight = Math.max(MIN_PANEL_HEIGHT, Math.round(height));
|
|
100
|
+
this.onDidChangeLayout?.();
|
|
101
|
+
}
|
|
102
|
+
getBottomPanelHeight() {
|
|
103
|
+
return this.bottomPanelHeight;
|
|
104
|
+
}
|
|
105
|
+
/** Grow/shrink the left panel by `delta` columns, clamped to the current container. */
|
|
106
|
+
nudgeLeftPanelWidth(delta) {
|
|
107
|
+
this.leftPanelWidth = this.clampWidth(this.leftPanelWidth + delta);
|
|
108
|
+
this.markDirty();
|
|
109
|
+
this.onDidChangeLayout?.();
|
|
110
|
+
}
|
|
111
|
+
/** Restore the left panel to its default width. */
|
|
112
|
+
resetLeftPanelWidth() {
|
|
113
|
+
this.leftPanelWidth = DEFAULT_LEFT_WIDTH;
|
|
114
|
+
this.markDirty();
|
|
115
|
+
this.onDidChangeLayout?.();
|
|
116
|
+
}
|
|
117
|
+
getLeftPanel() {
|
|
118
|
+
return this.leftPanel;
|
|
119
|
+
}
|
|
120
|
+
getCenterContent() {
|
|
121
|
+
return this.centerContent;
|
|
122
|
+
}
|
|
123
|
+
getBottomPanel() {
|
|
124
|
+
return this.bottomPanel;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Пересобирает список детей и их видимость. Скрытая панель ОСТАЁТСЯ в
|
|
128
|
+
* дереве с hidden=true (root и стили доходят — раньше её исключали из
|
|
129
|
+
* getChildren() и руками чинили пропагацию при показе). Sashes are added
|
|
130
|
+
* last so they sit on top of the neighbouring content at the boundary for
|
|
131
|
+
* hit-testing; каждый скрыт вместе со своей панелью.
|
|
132
|
+
*/
|
|
133
|
+
syncChildren() {
|
|
134
|
+
const showLeft = this.leftPanel !== null && this.leftPanelVisible;
|
|
135
|
+
const showBottom = this.bottomPanel !== null && this.bottomPanelVisible;
|
|
136
|
+
const children = [];
|
|
137
|
+
if (this.leftPanel !== null) {
|
|
138
|
+
this.leftPanel.hidden = !this.leftPanelVisible;
|
|
139
|
+
children.push(this.leftPanel);
|
|
140
|
+
}
|
|
141
|
+
if (this.centerContent !== null) {
|
|
142
|
+
children.push(this.centerContent);
|
|
143
|
+
}
|
|
144
|
+
if (this.bottomPanel !== null) {
|
|
145
|
+
this.bottomPanel.hidden = !this.bottomPanelVisible;
|
|
146
|
+
children.push(this.bottomPanel);
|
|
147
|
+
}
|
|
148
|
+
this.sash.hidden = !showLeft;
|
|
149
|
+
children.push(this.sash);
|
|
150
|
+
this.bottomSash.hidden = !showBottom;
|
|
151
|
+
children.push(this.bottomSash);
|
|
152
|
+
this.setChildren(children);
|
|
153
|
+
}
|
|
154
|
+
clampWidth(width) {
|
|
155
|
+
return this.clampWidthTo(width, this.layoutSize.width);
|
|
156
|
+
}
|
|
157
|
+
clampWidthTo(width, containerWidth) {
|
|
158
|
+
const maxLeft = Math.max(MIN_LEFT_WIDTH, containerWidth - MIN_CENTER_WIDTH);
|
|
159
|
+
const clamped = Math.max(MIN_LEFT_WIDTH, Math.min(Math.round(width), maxLeft));
|
|
160
|
+
// Never exceed the container itself (degenerate, very narrow terminals).
|
|
161
|
+
return Math.min(clamped, containerWidth);
|
|
162
|
+
}
|
|
163
|
+
clampHeight(height) {
|
|
164
|
+
return this.clampHeightTo(height, this.layoutSize.height);
|
|
165
|
+
}
|
|
166
|
+
clampHeightTo(height, containerHeight) {
|
|
167
|
+
const maxPanel = Math.max(MIN_PANEL_HEIGHT, containerHeight - MIN_EDITOR_HEIGHT);
|
|
168
|
+
const clamped = Math.max(MIN_PANEL_HEIGHT, Math.min(Math.round(height), maxPanel));
|
|
169
|
+
return Math.min(clamped, containerHeight);
|
|
170
|
+
}
|
|
171
|
+
performLayout(constraints) {
|
|
172
|
+
const containerSize = super.performLayout(constraints);
|
|
173
|
+
const showLeft = this.leftPanel !== null && this.leftPanelVisible;
|
|
174
|
+
const showBottom = this.bottomPanel !== null && this.bottomPanelVisible;
|
|
175
|
+
// Display-only clamps — do NOT mutate the stored width/height, so absolute
|
|
176
|
+
// sizes survive terminal resizes (a temporary shrink is not permanent).
|
|
177
|
+
const leftWidth = showLeft ? this.clampWidthTo(this.leftPanelWidth, containerSize.width) : 0;
|
|
178
|
+
const centerWidth = Math.max(0, containerSize.width - leftWidth);
|
|
179
|
+
const panelHeight = showBottom ? this.clampHeightTo(this.bottomPanelHeight, containerSize.height) : 0;
|
|
180
|
+
const centerHeight = Math.max(0, containerSize.height - panelHeight);
|
|
181
|
+
if (showLeft && this.leftPanel) {
|
|
182
|
+
this.layoutChild(this.leftPanel, 0, 0, BoxConstraints.tight(new Size(leftWidth, containerSize.height)));
|
|
183
|
+
}
|
|
184
|
+
if (this.centerContent) {
|
|
185
|
+
this.layoutChild(this.centerContent, leftWidth, 0, BoxConstraints.tight(new Size(centerWidth, centerHeight)));
|
|
186
|
+
}
|
|
187
|
+
if (showBottom && this.bottomPanel) {
|
|
188
|
+
this.layoutChild(this.bottomPanel, leftWidth, centerHeight, BoxConstraints.tight(new Size(centerWidth, panelHeight)));
|
|
189
|
+
}
|
|
190
|
+
if (showLeft) {
|
|
191
|
+
// 1-column hit target sitting on the boundary between the sidebar and center.
|
|
192
|
+
// Must be laid out explicitly, otherwise its lazy layoutSize would report a
|
|
193
|
+
// stale box at (0,0) and break hit-testing.
|
|
194
|
+
this.layoutChild(this.sash, leftWidth, 0, BoxConstraints.tight(new Size(1, containerSize.height)));
|
|
195
|
+
}
|
|
196
|
+
if (showBottom) {
|
|
197
|
+
// 1-row hit target on the boundary between the editor and the bottom panel,
|
|
198
|
+
// spanning the center width at the panel's top row.
|
|
199
|
+
this.layoutChild(this.bottomSash, leftWidth, centerHeight, BoxConstraints.tight(new Size(centerWidth, 1)));
|
|
200
|
+
}
|
|
201
|
+
return containerSize;
|
|
202
|
+
}
|
|
203
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tuidom/elements",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Experimental terminal UI DOM — widgets: lists, trees, menus, inputs, quick pick. API is unstable.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/tuidom/tuidom.git",
|
|
10
|
+
"directory": "packages/elements"
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=24.0.0"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"tui",
|
|
17
|
+
"terminal",
|
|
18
|
+
"ui",
|
|
19
|
+
"dom",
|
|
20
|
+
"widgets"
|
|
21
|
+
],
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"exports": {
|
|
26
|
+
"./package.json": "./package.json",
|
|
27
|
+
"./*.js": "./dist/*.js",
|
|
28
|
+
"./*": "./dist/*.js"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@tuidom/core": "0.1.0"
|
|
32
|
+
}
|
|
33
|
+
}
|