cardbuddy 0.9.1 → 0.11.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/README.md +21 -6
- package/dist/cli.js +17 -6
- package/dist/config.js +20 -2
- package/dist/portGuard.js +293 -0
- package/dist/preview-editor/assets/index-B4VZgNSK.css +1 -0
- package/dist/preview-editor/assets/index-jl4YJzKv.js +180 -0
- package/dist/preview-editor/index.html +2 -2
- package/dist/server-core/_vendor/finmall-env.mjs +4 -4
- package/dist/server-core/ai-chat.js +3710 -0
- package/dist/server-core/assetProxy.js +3 -22
- package/dist/server-core/buildDataFromSchema.js +36 -4
- package/dist/server-core/cardFiles.js +95 -2
- package/dist/server-core/cardImage.js +14 -0
- package/dist/server-core/cardListCache.js +0 -17
- package/dist/server-core/cardSave.js +2 -0
- package/dist/server-core/cardValidate.js +3 -0
- package/dist/server-core/index.js +6 -5
- package/dist/server-core/logStream.js +1 -6
- package/dist/server-core/sliceUpload.js +8 -1
- package/dist/standalone.js +24 -8
- package/dist/vendored/App.vue +405 -125
- package/dist/vendored/api.js +4 -4
- package/dist/vendored/assets/svgIcons/icons.svg +28 -0
- package/dist/vendored/components/AiSettings.vue +392 -0
- package/dist/vendored/components/CardGallery.vue +51 -5
- package/dist/vendored/components/ChatComposer.vue +413 -0
- package/dist/vendored/components/ChatMessage.vue +383 -0
- package/dist/vendored/components/ChatPanel.vue +937 -0
- package/dist/vendored/components/ComponentPalette.vue +1 -1
- package/dist/vendored/components/DebugPanel.vue +732 -90
- package/dist/vendored/components/Dropdown.vue +4 -2
- package/dist/vendored/components/MarkdownBody.vue +64 -0
- package/dist/vendored/components/NewCardDialog.vue +132 -0
- package/dist/vendored/components/NumberStepper.vue +125 -0
- package/dist/vendored/components/ProgressSlider.vue +9 -1
- package/dist/vendored/components/RemotePreview.vue +1 -1
- package/dist/vendored/components/StructureTree.vue +2 -2
- package/dist/vendored/main.js +1 -0
- package/dist/vendored/runtime/adapter.js +1 -1
- package/dist/vendored/runtime/ai-api.js +165 -0
- package/dist/vendored/runtime/clipboard-node.js +0 -5
- package/dist/vendored/runtime/markdown.js +140 -0
- package/dist/vendored/skills/.manifest.json +1101 -0
- package/dist/vendored/skills/dsl-card-generator/scripts/autofix_schema.py +249 -0
- package/dist/vendored/skills/dsl-card-generator/scripts/check_topology.py +678 -0
- package/dist/vendored/skills/dsl-card-generator/scripts/derive_data_json.py +81 -0
- package/dist/vendored/skills/dsl-card-generator/scripts/lib/paths.py +105 -0
- package/dist/vendored/skills/dsl-card-generator/scripts/validate_schema.py +624 -0
- package/dist/vendored/skills/finmall-card-sync/scripts/api_batch_sync.mjs +900 -0
- package/dist/vendored/skills/finmall-card-sync/scripts/slice_upload.mjs +699 -0
- package/dist/vendored/skills/shared/finmall-config.mjs +124 -0
- package/dist/vendored/styles/ai-chat.css +1850 -0
- package/dist/vendored/styles/app.css +725 -213
- package/dist/vendored/styles/card-gallery.css +48 -10
- package/dist/vendored/styles/card-select.css +13 -6
- package/dist/vendored/styles/dropdown.css +1 -2
- package/dist/vendored/styles/json-tree.css +3 -3
- package/dist/vendored/styles/node-inspector.css +13 -289
- package/dist/vendored/styles/setters.css +48 -49
- package/dist/vendored/styles/structure-tree.css +6 -11
- package/package.json +1 -1
- package/dist/preview-editor/assets/index-B9MOriNv.js +0 -80
- package/dist/preview-editor/assets/index-CwD14gm3.css +0 -1
- package/dist/vendored/assets/logo.png +0 -0
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
/* ------------------------------ 通用输入 ------------------------------ */
|
|
9
9
|
|
|
10
|
-
.st-input,
|
|
11
10
|
.st-textarea {
|
|
12
11
|
width: 100%;
|
|
13
12
|
min-width: 0;
|
|
@@ -30,17 +29,14 @@
|
|
|
30
29
|
line-height: 1.5;
|
|
31
30
|
resize: none; /* 隐藏原生拖拽手柄,统一外观 */
|
|
32
31
|
}
|
|
33
|
-
.st-input:focus,
|
|
34
32
|
.st-textarea:focus {
|
|
35
33
|
border-color: var(--accent-border);
|
|
36
34
|
box-shadow: 0 0 0 2px var(--accent-soft);
|
|
37
35
|
}
|
|
38
|
-
.st-input:disabled,
|
|
39
36
|
.st-textarea:disabled {
|
|
40
37
|
opacity: 0.5;
|
|
41
38
|
cursor: not-allowed;
|
|
42
39
|
}
|
|
43
|
-
.st-input::placeholder,
|
|
44
40
|
.st-textarea::placeholder {
|
|
45
41
|
color: var(--text-faint);
|
|
46
42
|
}
|
|
@@ -114,7 +110,7 @@
|
|
|
114
110
|
display: inline-flex;
|
|
115
111
|
align-items: center;
|
|
116
112
|
justify-content: center;
|
|
117
|
-
border-left:
|
|
113
|
+
border-left: var(--hairline) solid var(--border);
|
|
118
114
|
background: var(--overlay-tint);
|
|
119
115
|
color: var(--text-dim);
|
|
120
116
|
font-size: 11px;
|
|
@@ -135,7 +131,7 @@
|
|
|
135
131
|
display: inline-flex;
|
|
136
132
|
align-items: center;
|
|
137
133
|
justify-content: center;
|
|
138
|
-
border-left:
|
|
134
|
+
border-left: var(--hairline) solid var(--border);
|
|
139
135
|
color: var(--text-faint);
|
|
140
136
|
cursor: pointer;
|
|
141
137
|
}
|
|
@@ -148,6 +144,45 @@
|
|
|
148
144
|
cursor: not-allowed;
|
|
149
145
|
opacity: 0.55;
|
|
150
146
|
}
|
|
147
|
+
/* − / + 步进按钮(NumberStepper.vue):与 __symbol / __caret 同一附属件语言
|
|
148
|
+
(--overlay-tint 底 + 发丝线分隔 + hover 提亮),只是分落在输入框两侧。 */
|
|
149
|
+
.st-number__step {
|
|
150
|
+
flex: 0 0 26px;
|
|
151
|
+
width: 26px;
|
|
152
|
+
height: 100%;
|
|
153
|
+
display: inline-flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
justify-content: center;
|
|
156
|
+
padding: 0;
|
|
157
|
+
background: var(--overlay-tint);
|
|
158
|
+
border: 0;
|
|
159
|
+
border-right: var(--hairline) solid var(--border);
|
|
160
|
+
color: var(--text-dim);
|
|
161
|
+
cursor: pointer;
|
|
162
|
+
user-select: none;
|
|
163
|
+
transition: background 0.12s, color 0.12s;
|
|
164
|
+
}
|
|
165
|
+
/* 加号在右侧,发丝线换到左边 */
|
|
166
|
+
.st-number__step--inc {
|
|
167
|
+
border-right: 0;
|
|
168
|
+
border-left: var(--hairline) solid var(--border);
|
|
169
|
+
}
|
|
170
|
+
.st-number__step:hover:not(:disabled) {
|
|
171
|
+
background: var(--bg-hover);
|
|
172
|
+
color: var(--text);
|
|
173
|
+
}
|
|
174
|
+
.st-number__step:active:not(:disabled) {
|
|
175
|
+
background: var(--bg-active);
|
|
176
|
+
}
|
|
177
|
+
.st-number__step:disabled {
|
|
178
|
+
opacity: 0.4;
|
|
179
|
+
cursor: default;
|
|
180
|
+
}
|
|
181
|
+
/* 步进变体:数值夹在 − / + 之间,居中比左对齐更像读数 */
|
|
182
|
+
.st-number--step .st-number__field {
|
|
183
|
+
padding: 0 4px;
|
|
184
|
+
text-align: center;
|
|
185
|
+
}
|
|
151
186
|
|
|
152
187
|
/* 下拉浮层容器:与 .st-number 同宽、相对定位,浮层挂在它下面而不被 .st-number 的
|
|
153
188
|
overflow:hidden 裁切。此前 .st-pop / .st-pop__item 完全没有样式,单位切换菜单不可见。 */
|
|
@@ -203,7 +238,6 @@
|
|
|
203
238
|
width: 100%;
|
|
204
239
|
min-width: 0;
|
|
205
240
|
border-radius: 2px;
|
|
206
|
-
/* overflow: hidden; */
|
|
207
241
|
border: 1px solid var(--border);
|
|
208
242
|
}
|
|
209
243
|
.st-seg__item {
|
|
@@ -218,14 +252,13 @@
|
|
|
218
252
|
gap: 3px;
|
|
219
253
|
padding: 0 4px;
|
|
220
254
|
background: var(--bg-input);
|
|
221
|
-
border-left:
|
|
255
|
+
border-left: var(--hairline) solid var(--border);
|
|
222
256
|
color: var(--text-dim);
|
|
223
257
|
font-size: 12px;
|
|
224
258
|
line-height: 1;
|
|
225
259
|
cursor: pointer;
|
|
226
260
|
user-select: none;
|
|
227
261
|
white-space: nowrap;
|
|
228
|
-
/* overflow: hidden; */
|
|
229
262
|
transition: background 0.12s, color 0.12s;
|
|
230
263
|
}
|
|
231
264
|
.st-seg__item:first-child {
|
|
@@ -484,7 +517,7 @@
|
|
|
484
517
|
border-radius: 50%;
|
|
485
518
|
background: var(--on-accent);
|
|
486
519
|
border: 2px solid var(--border-strong);
|
|
487
|
-
box-shadow: 0 1px 3px
|
|
520
|
+
box-shadow: 0 1px 3px var(--shadow-toast);
|
|
488
521
|
cursor: pointer;
|
|
489
522
|
}
|
|
490
523
|
.st-color__alpha-slider::-moz-range-thumb {
|
|
@@ -493,7 +526,7 @@
|
|
|
493
526
|
border-radius: 50%;
|
|
494
527
|
background: var(--on-accent);
|
|
495
528
|
border: 2px solid var(--border-strong);
|
|
496
|
-
box-shadow: 0 1px 3px
|
|
529
|
+
box-shadow: 0 1px 3px var(--shadow-toast);
|
|
497
530
|
cursor: pointer;
|
|
498
531
|
}
|
|
499
532
|
.st-color__alpha-val {
|
|
@@ -636,7 +669,8 @@
|
|
|
636
669
|
margin-top: 6px;
|
|
637
670
|
}
|
|
638
671
|
.st-iconsel__cell {
|
|
639
|
-
|
|
672
|
+
/* 图标格取正方:高随列宽(1fr)走,避免 8 列网格下出现扁格 */
|
|
673
|
+
aspect-ratio: 1;
|
|
640
674
|
display: inline-flex;
|
|
641
675
|
align-items: center;
|
|
642
676
|
justify-content: center;
|
|
@@ -695,20 +729,12 @@
|
|
|
695
729
|
gap: 6px;
|
|
696
730
|
padding: 4px 8px;
|
|
697
731
|
background: var(--overlay-tint);
|
|
698
|
-
border-bottom:
|
|
732
|
+
border-bottom: var(--hairline) solid var(--border);
|
|
699
733
|
font-size: 11px;
|
|
700
734
|
color: var(--text-dim);
|
|
701
735
|
cursor: pointer;
|
|
702
736
|
user-select: none;
|
|
703
737
|
}
|
|
704
|
-
.st-list__title {
|
|
705
|
-
flex: 1 1 auto;
|
|
706
|
-
min-width: 0;
|
|
707
|
-
overflow: hidden;
|
|
708
|
-
text-overflow: ellipsis;
|
|
709
|
-
white-space: nowrap;
|
|
710
|
-
color: var(--text);
|
|
711
|
-
}
|
|
712
738
|
.st-list__op {
|
|
713
739
|
flex: 0 0 auto;
|
|
714
740
|
width: 22px;
|
|
@@ -899,11 +925,6 @@
|
|
|
899
925
|
line-height: normal;
|
|
900
926
|
}
|
|
901
927
|
|
|
902
|
-
.st-code__warn {
|
|
903
|
-
margin-left: auto;
|
|
904
|
-
color: var(--code-warn);
|
|
905
|
-
}
|
|
906
|
-
|
|
907
928
|
/* Prism 高亮配色(变量驱动,随主题切换;暗色默认=原硬编码值) */
|
|
908
929
|
.st-code__editor .token.comment,
|
|
909
930
|
.st-code__editor .token.prolog,
|
|
@@ -967,7 +988,7 @@
|
|
|
967
988
|
padding: 2px 8px;
|
|
968
989
|
font-size: 11px;
|
|
969
990
|
color: var(--text-dim);
|
|
970
|
-
border-top:
|
|
991
|
+
border-top: var(--hairline) solid var(--border);
|
|
971
992
|
background: var(--bg-soft);
|
|
972
993
|
user-select: none;
|
|
973
994
|
line-height: 1.5;
|
|
@@ -1027,25 +1048,3 @@
|
|
|
1027
1048
|
width: 100%;
|
|
1028
1049
|
min-width: 0;
|
|
1029
1050
|
}
|
|
1030
|
-
|
|
1031
|
-
.st-raw {
|
|
1032
|
-
width: 100%;
|
|
1033
|
-
min-width: 0;
|
|
1034
|
-
font-size: 11px;
|
|
1035
|
-
color: var(--text-dim);
|
|
1036
|
-
word-break: break-all;
|
|
1037
|
-
background: var(--bg-input);
|
|
1038
|
-
border: 1px dashed var(--border);
|
|
1039
|
-
border-radius: 5px;
|
|
1040
|
-
padding: 4px 8px;
|
|
1041
|
-
}
|
|
1042
|
-
.st-raw__type {
|
|
1043
|
-
color: var(--text-faint);
|
|
1044
|
-
margin-right: 4px;
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
/* Inspector / 抽屉内 setter 升一档(28 → 32),与节点面板控件高度对齐 */
|
|
1048
|
-
.ni-body .st-input,
|
|
1049
|
-
.ee-detail-body .st-input {
|
|
1050
|
-
height: var(--ctrl-md);
|
|
1051
|
-
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 参考编辑器「结构」面板的视觉风格。
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
/*
|
|
6
|
+
/* 与变量 tab 的 mock 二级视图(.debug__scope-wrap)同款:min-height 撑满,
|
|
7
7
|
滚动交给外层 .debug__body,顶部工具条 sticky 在其中 */
|
|
8
8
|
.st {
|
|
9
9
|
position: relative;
|
|
@@ -54,11 +54,6 @@
|
|
|
54
54
|
display: block;
|
|
55
55
|
pointer-events: none;
|
|
56
56
|
}
|
|
57
|
-
.st__toolbar--act {
|
|
58
|
-
position: static;
|
|
59
|
-
padding-top: 0;
|
|
60
|
-
flex-wrap: wrap;
|
|
61
|
-
}
|
|
62
57
|
/* 结构树搜索框:置于展开/折叠与+添加之间,flex:1 在中间撑开占满剩余宽度(单行) */
|
|
63
58
|
.st__search {
|
|
64
59
|
flex: 1 1 auto;
|
|
@@ -114,7 +109,7 @@
|
|
|
114
109
|
border: 1px solid var(--border-strong);
|
|
115
110
|
border-radius: 50%;
|
|
116
111
|
cursor: pointer;
|
|
117
|
-
box-shadow: 0 2px 8px
|
|
112
|
+
box-shadow: 0 2px 8px var(--shadow-toast);
|
|
118
113
|
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
|
119
114
|
}
|
|
120
115
|
.st__help svg {
|
|
@@ -149,14 +144,14 @@
|
|
|
149
144
|
background: var(--bg-panel);
|
|
150
145
|
border: 1px solid var(--border-strong);
|
|
151
146
|
border-radius: 10px;
|
|
152
|
-
box-shadow: 0 8px 24px
|
|
147
|
+
box-shadow: 0 8px 24px var(--shadow-pop);
|
|
153
148
|
}
|
|
154
149
|
.st__help-pop-head {
|
|
155
150
|
display: flex;
|
|
156
151
|
align-items: center;
|
|
157
152
|
justify-content: space-between;
|
|
158
153
|
padding: 8px 12px;
|
|
159
|
-
border-bottom:
|
|
154
|
+
border-bottom: var(--hairline) solid var(--border);
|
|
160
155
|
}
|
|
161
156
|
.st__help-pop-title {
|
|
162
157
|
font-size: 12px;
|
|
@@ -417,7 +412,7 @@
|
|
|
417
412
|
margin: 0;
|
|
418
413
|
padding: 0 0 0 16px;
|
|
419
414
|
list-style: none;
|
|
420
|
-
border-left:
|
|
415
|
+
border-left: var(--hairline) solid var(--border);
|
|
421
416
|
margin-left: 14px;
|
|
422
417
|
}
|
|
423
418
|
|
|
@@ -459,7 +454,7 @@
|
|
|
459
454
|
color: var(--danger);
|
|
460
455
|
}
|
|
461
456
|
.st__ctx-sep {
|
|
462
|
-
height:
|
|
457
|
+
height: var(--hairline);
|
|
463
458
|
margin: 4px 2px;
|
|
464
459
|
background: var(--border);
|
|
465
460
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cardbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Local dev service for the CardBuddy card editor — decouples card CRUD (sync/save/validate/render-status/screenshot) from the static public editor, so the editor can be deployed to any static host while each developer runs a local service against their own card source.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|