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.
Files changed (64) hide show
  1. package/README.md +21 -6
  2. package/dist/cli.js +17 -6
  3. package/dist/config.js +20 -2
  4. package/dist/portGuard.js +293 -0
  5. package/dist/preview-editor/assets/index-B4VZgNSK.css +1 -0
  6. package/dist/preview-editor/assets/index-jl4YJzKv.js +180 -0
  7. package/dist/preview-editor/index.html +2 -2
  8. package/dist/server-core/_vendor/finmall-env.mjs +4 -4
  9. package/dist/server-core/ai-chat.js +3710 -0
  10. package/dist/server-core/assetProxy.js +3 -22
  11. package/dist/server-core/buildDataFromSchema.js +36 -4
  12. package/dist/server-core/cardFiles.js +95 -2
  13. package/dist/server-core/cardImage.js +14 -0
  14. package/dist/server-core/cardListCache.js +0 -17
  15. package/dist/server-core/cardSave.js +2 -0
  16. package/dist/server-core/cardValidate.js +3 -0
  17. package/dist/server-core/index.js +6 -5
  18. package/dist/server-core/logStream.js +1 -6
  19. package/dist/server-core/sliceUpload.js +8 -1
  20. package/dist/standalone.js +24 -8
  21. package/dist/vendored/App.vue +405 -125
  22. package/dist/vendored/api.js +4 -4
  23. package/dist/vendored/assets/svgIcons/icons.svg +28 -0
  24. package/dist/vendored/components/AiSettings.vue +392 -0
  25. package/dist/vendored/components/CardGallery.vue +51 -5
  26. package/dist/vendored/components/ChatComposer.vue +413 -0
  27. package/dist/vendored/components/ChatMessage.vue +383 -0
  28. package/dist/vendored/components/ChatPanel.vue +937 -0
  29. package/dist/vendored/components/ComponentPalette.vue +1 -1
  30. package/dist/vendored/components/DebugPanel.vue +732 -90
  31. package/dist/vendored/components/Dropdown.vue +4 -2
  32. package/dist/vendored/components/MarkdownBody.vue +64 -0
  33. package/dist/vendored/components/NewCardDialog.vue +132 -0
  34. package/dist/vendored/components/NumberStepper.vue +125 -0
  35. package/dist/vendored/components/ProgressSlider.vue +9 -1
  36. package/dist/vendored/components/RemotePreview.vue +1 -1
  37. package/dist/vendored/components/StructureTree.vue +2 -2
  38. package/dist/vendored/main.js +1 -0
  39. package/dist/vendored/runtime/adapter.js +1 -1
  40. package/dist/vendored/runtime/ai-api.js +165 -0
  41. package/dist/vendored/runtime/clipboard-node.js +0 -5
  42. package/dist/vendored/runtime/markdown.js +140 -0
  43. package/dist/vendored/skills/.manifest.json +1101 -0
  44. package/dist/vendored/skills/dsl-card-generator/scripts/autofix_schema.py +249 -0
  45. package/dist/vendored/skills/dsl-card-generator/scripts/check_topology.py +678 -0
  46. package/dist/vendored/skills/dsl-card-generator/scripts/derive_data_json.py +81 -0
  47. package/dist/vendored/skills/dsl-card-generator/scripts/lib/paths.py +105 -0
  48. package/dist/vendored/skills/dsl-card-generator/scripts/validate_schema.py +624 -0
  49. package/dist/vendored/skills/finmall-card-sync/scripts/api_batch_sync.mjs +900 -0
  50. package/dist/vendored/skills/finmall-card-sync/scripts/slice_upload.mjs +699 -0
  51. package/dist/vendored/skills/shared/finmall-config.mjs +124 -0
  52. package/dist/vendored/styles/ai-chat.css +1850 -0
  53. package/dist/vendored/styles/app.css +725 -213
  54. package/dist/vendored/styles/card-gallery.css +48 -10
  55. package/dist/vendored/styles/card-select.css +13 -6
  56. package/dist/vendored/styles/dropdown.css +1 -2
  57. package/dist/vendored/styles/json-tree.css +3 -3
  58. package/dist/vendored/styles/node-inspector.css +13 -289
  59. package/dist/vendored/styles/setters.css +48 -49
  60. package/dist/vendored/styles/structure-tree.css +6 -11
  61. package/package.json +1 -1
  62. package/dist/preview-editor/assets/index-B9MOriNv.js +0 -80
  63. package/dist/preview-editor/assets/index-CwD14gm3.css +0 -1
  64. 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: 1px solid var(--border);
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: 1px solid var(--border);
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: 1px solid var(--border);
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 rgba(0,0,0,.3);
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 rgba(0,0,0,.3);
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
- height: 26px;
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: 1px solid var(--border);
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: 1px solid var(--border);
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
- /* 与数据绑定 tab 的 .debug__scope-wrap 同款:min-height 擑满,
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 rgba(0, 0, 0, 0.25);
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 rgba(0, 0, 0, 0.35);
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: 1px solid var(--border);
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: 1px solid var(--border);
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: 1px;
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.9.1",
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": {