cardbuddy 0.6.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 (167) hide show
  1. package/README.md +211 -0
  2. package/dist/cli.js +76 -0
  3. package/dist/config.js +63 -0
  4. package/dist/core.js +2 -0
  5. package/dist/preview-editor/assets/apple-touch-icon-BQcES9QK.png +0 -0
  6. package/dist/preview-editor/assets/default-image-wzZYQ86K.png +0 -0
  7. package/dist/preview-editor/assets/favicon-16-Cg6Nrosk.png +0 -0
  8. package/dist/preview-editor/assets/favicon-32-B_1744sp.png +0 -0
  9. package/dist/preview-editor/assets/index-BYB0hngG.js +72 -0
  10. package/dist/preview-editor/assets/index-CpBZEQDy.css +1 -0
  11. package/dist/preview-editor/assets/site-icon-CFMif8z4.png +0 -0
  12. package/dist/preview-editor/assets/svg-symbols-B2exBrAr.svg +118 -0
  13. package/dist/preview-editor/index.html +17 -0
  14. package/dist/server-core/_vendor/finmall-env.mjs +96 -0
  15. package/dist/server-core/assetProxy.js +154 -0
  16. package/dist/server-core/bbox.js +153 -0
  17. package/dist/server-core/browser.js +108 -0
  18. package/dist/server-core/buildDataFromSchema.js +50 -0
  19. package/dist/server-core/cardFiles.js +188 -0
  20. package/dist/server-core/cardHistory.js +156 -0
  21. package/dist/server-core/cardImage.js +85 -0
  22. package/dist/server-core/cardImportMeta.js +139 -0
  23. package/dist/server-core/cardListCache.js +68 -0
  24. package/dist/server-core/cardOpenFolder.js +135 -0
  25. package/dist/server-core/cardSave.js +127 -0
  26. package/dist/server-core/cardSidecar.js +72 -0
  27. package/dist/server-core/cardSync.js +259 -0
  28. package/dist/server-core/cardValidate.js +134 -0
  29. package/dist/server-core/index.js +82 -0
  30. package/dist/server-core/logger.js +241 -0
  31. package/dist/server-core/nodeModels.js +52 -0
  32. package/dist/server-core/renderStatus.js +207 -0
  33. package/dist/server-core/screenshot.js +123 -0
  34. package/dist/server-core/sliceStatic.js +44 -0
  35. package/dist/standalone.js +447 -0
  36. package/dist/vendored/App.vue +2330 -0
  37. package/dist/vendored/api.js +142 -0
  38. package/dist/vendored/assets/apple-touch-icon.png +0 -0
  39. package/dist/vendored/assets/default-image.png +0 -0
  40. package/dist/vendored/assets/favicon-16.png +0 -0
  41. package/dist/vendored/assets/favicon-32.png +0 -0
  42. package/dist/vendored/assets/logo.png +0 -0
  43. package/dist/vendored/assets/site-icon.png +0 -0
  44. package/dist/vendored/assets/svg-symbols.svg +118 -0
  45. package/dist/vendored/assets/svgIcons/icons.svg +54 -0
  46. package/dist/vendored/assets/svgIcons/index.js +39 -0
  47. package/dist/vendored/components/AbsoluteLayout.vue +42 -0
  48. package/dist/vendored/components/AlertCardInstance.vue +58 -0
  49. package/dist/vendored/components/AlertCardLayer.vue +59 -0
  50. package/dist/vendored/components/ApiPayloadTree.vue +168 -0
  51. package/dist/vendored/components/AppToast.vue +37 -0
  52. package/dist/vendored/components/Button.vue +37 -0
  53. package/dist/vendored/components/Canvas.vue +65 -0
  54. package/dist/vendored/components/CardGallery.vue +243 -0
  55. package/dist/vendored/components/CardPreview.vue +72 -0
  56. package/dist/vendored/components/CardSelect.vue +200 -0
  57. package/dist/vendored/components/CheckGroup.vue +131 -0
  58. package/dist/vendored/components/Column.vue +25 -0
  59. package/dist/vendored/components/ComponentPalette.vue +294 -0
  60. package/dist/vendored/components/ConfirmDialog.vue +39 -0
  61. package/dist/vendored/components/CustomPlaceholder.vue +33 -0
  62. package/dist/vendored/components/DatePickerOverlay.vue +345 -0
  63. package/dist/vendored/components/DebugPanel.vue +806 -0
  64. package/dist/vendored/components/DeviceOverlay.vue +70 -0
  65. package/dist/vendored/components/Divider.vue +22 -0
  66. package/dist/vendored/components/Dropdown.vue +191 -0
  67. package/dist/vendored/components/EventEditor.vue +247 -0
  68. package/dist/vendored/components/GridLayout.vue +67 -0
  69. package/dist/vendored/components/HoverGuides.vue +122 -0
  70. package/dist/vendored/components/Icon.vue +34 -0
  71. package/dist/vendored/components/Image.vue +34 -0
  72. package/dist/vendored/components/Input.vue +90 -0
  73. package/dist/vendored/components/JsonTree.vue +516 -0
  74. package/dist/vendored/components/ListLayout.vue +68 -0
  75. package/dist/vendored/components/LogValue.vue +51 -0
  76. package/dist/vendored/components/Map.vue +110 -0
  77. package/dist/vendored/components/MultiColumn.vue +49 -0
  78. package/dist/vendored/components/MultiText.vue +58 -0
  79. package/dist/vendored/components/NodeInspector.vue +295 -0
  80. package/dist/vendored/components/PickerOverlay.vue +131 -0
  81. package/dist/vendored/components/ProgressSlider.vue +167 -0
  82. package/dist/vendored/components/PropControl.vue +241 -0
  83. package/dist/vendored/components/PropTree.vue +128 -0
  84. package/dist/vendored/components/RadioButton.vue +74 -0
  85. package/dist/vendored/components/RemotePreview.vue +171 -0
  86. package/dist/vendored/components/RenderTree.vue +437 -0
  87. package/dist/vendored/components/Root.vue +30 -0
  88. package/dist/vendored/components/Row.vue +25 -0
  89. package/dist/vendored/components/SelectionOverlay.vue +105 -0
  90. package/dist/vendored/components/StructureTree.vue +949 -0
  91. package/dist/vendored/components/SvgCode.vue +19 -0
  92. package/dist/vendored/components/SvgSymbols.vue +30 -0
  93. package/dist/vendored/components/Switch.vue +38 -0
  94. package/dist/vendored/components/Text.vue +32 -0
  95. package/dist/vendored/components/Video.vue +70 -0
  96. package/dist/vendored/components/ViewContainer.vue +52 -0
  97. package/dist/vendored/components/base.js +12 -0
  98. package/dist/vendored/components/icons.js +47 -0
  99. package/dist/vendored/components/index.js +58 -0
  100. package/dist/vendored/components/setters/SetBgPosition.vue +64 -0
  101. package/dist/vendored/components/setters/SetBgSize.vue +90 -0
  102. package/dist/vendored/components/setters/SetCode.vue +90 -0
  103. package/dist/vendored/components/setters/SetColor.vue +244 -0
  104. package/dist/vendored/components/setters/SetCustomSelect.vue +58 -0
  105. package/dist/vendored/components/setters/SetExpr.vue +107 -0
  106. package/dist/vendored/components/setters/SetGradient.vue +125 -0
  107. package/dist/vendored/components/setters/SetGrid9.vue +68 -0
  108. package/dist/vendored/components/setters/SetIconSelect.vue +67 -0
  109. package/dist/vendored/components/setters/SetIfForm.vue +61 -0
  110. package/dist/vendored/components/setters/SetImage.vue +43 -0
  111. package/dist/vendored/components/setters/SetList.vue +139 -0
  112. package/dist/vendored/components/setters/SetNumber.vue +118 -0
  113. package/dist/vendored/components/setters/SetNumberStyle.vue +113 -0
  114. package/dist/vendored/components/setters/SetPadding.vue +77 -0
  115. package/dist/vendored/components/setters/SetSegment.vue +160 -0
  116. package/dist/vendored/components/setters/SetSelect.vue +51 -0
  117. package/dist/vendored/components/setters/SetSwitch.vue +49 -0
  118. package/dist/vendored/components/setters/SetText.vue +52 -0
  119. package/dist/vendored/components/setters/props.js +23 -0
  120. package/dist/vendored/fidelity/baseline-messageOverview.json +87 -0
  121. package/dist/vendored/fidelity/calibration.json +29 -0
  122. package/dist/vendored/fidelity/fidelity-messageOverview-after.html +114 -0
  123. package/dist/vendored/fidelity/fidelity-messageOverview-after.json +272 -0
  124. package/dist/vendored/fidelity/fidelity-messageOverview.html +185 -0
  125. package/dist/vendored/fidelity/fidelity-messageOverview.json +336 -0
  126. package/dist/vendored/fidelity/fidelity-messageOverview_v2.html +262 -0
  127. package/dist/vendored/fidelity/fidelity-messageOverview_v2.json +502 -0
  128. package/dist/vendored/fidelity/fidelity-messageOverview_v3.html +201 -0
  129. package/dist/vendored/fidelity/fidelity-messageOverview_v3.json +417 -0
  130. package/dist/vendored/fidelity/fidelity-messageOverview_visual.html +125 -0
  131. package/dist/vendored/fidelity/fidelity-messageOverview_visual.json +338 -0
  132. package/dist/vendored/index.html +16 -0
  133. package/dist/vendored/main.js +36 -0
  134. package/dist/vendored/meta/action-meta.json +141 -0
  135. package/dist/vendored/meta/component-meta.json +2714 -0
  136. package/dist/vendored/meta/directive-meta.json +40 -0
  137. package/dist/vendored/meta/style-meta.json +1086 -0
  138. package/dist/vendored/runtime/StyleParser.js +179 -0
  139. package/dist/vendored/runtime/adapter.js +166 -0
  140. package/dist/vendored/runtime/alert-card.js +125 -0
  141. package/dist/vendored/runtime/app-toast.js +33 -0
  142. package/dist/vendored/runtime/assets.js +16 -0
  143. package/dist/vendored/runtime/canvas-context.js +141 -0
  144. package/dist/vendored/runtime/card-runtime.js +289 -0
  145. package/dist/vendored/runtime/clipboard-node.js +83 -0
  146. package/dist/vendored/runtime/clipboard.js +29 -0
  147. package/dist/vendored/runtime/evaluate.js +152 -0
  148. package/dist/vendored/runtime/event-model.js +300 -0
  149. package/dist/vendored/runtime/hoverGuide.js +31 -0
  150. package/dist/vendored/runtime/jsapi-mock.js +256 -0
  151. package/dist/vendored/runtime/node-model.js +217 -0
  152. package/dist/vendored/runtime/property.js +364 -0
  153. package/dist/vendored/runtime/selectionOverlay.js +53 -0
  154. package/dist/vendored/runtime/toPreview.js +648 -0
  155. package/dist/vendored/standalone-main.js +36 -0
  156. package/dist/vendored/standalone.html +12 -0
  157. package/dist/vendored/styles/app.css +2565 -0
  158. package/dist/vendored/styles/card-gallery.css +234 -0
  159. package/dist/vendored/styles/card-select.css +281 -0
  160. package/dist/vendored/styles/components.css +383 -0
  161. package/dist/vendored/styles/dropdown.css +337 -0
  162. package/dist/vendored/styles/json-tree.css +308 -0
  163. package/dist/vendored/styles/node-inspector.css +1003 -0
  164. package/dist/vendored/styles/setters.css +962 -0
  165. package/dist/vendored/styles/standalone.css +27 -0
  166. package/dist/vendored/styles/structure-tree.css +320 -0
  167. package/package.json +42 -0
@@ -0,0 +1,383 @@
1
+ /**
2
+ * 官方 inner_card 组件基础样式(自动生成,请勿手改)
3
+ * 来源: https://uat-pkg.finmall.com/ubomp-h5-sub/inner_card/js/4.d98aa90b.js
4
+ * 生成: node tools/extract-css.mjs
5
+ * 片段 25 段 / 规则约 51 条
6
+ */
7
+
8
+ .ce_divider{
9
+ width: 100%;
10
+ height: 1px;
11
+ background-color: rgba(0,0,0,0.15);
12
+ }
13
+
14
+
15
+ .ce_image{
16
+ display: -webkit-box;
17
+ display: -webkit-flex;
18
+ display: flex;
19
+ aspect-ratio: 16/9;
20
+ }
21
+ .ce_image_fill{
22
+ width: 100%;
23
+ height: 100%;
24
+ background-repeat: no-repeat;
25
+ background-position: center center;
26
+ background-size: 100% 100%;
27
+ }
28
+
29
+
30
+ .ce_input{
31
+ width: 100%;
32
+ border: 0;
33
+ }
34
+ .ce_input:focus{
35
+ outline: none;
36
+ }
37
+
38
+
39
+ .ce_text{
40
+ overflow: hidden;
41
+ text-overflow: ellipsis;
42
+ display: -webkit-box;
43
+ display: -ms-flexbox;
44
+ box-orient: vertical;
45
+ -webkit-box-orient: vertical;
46
+ width: -webkit-fit-content;
47
+ width: fit-content;
48
+ word-wrap: break-word;
49
+ word-break: break-all;
50
+ white-space: pre-line;
51
+ text-align: left;
52
+ }
53
+
54
+
55
+ .ce_multitext{
56
+ display: -webkit-box;
57
+ display: -webkit-flex;
58
+ display: flex;
59
+ width: -webkit-fit-content;
60
+ width: fit-content;
61
+ }
62
+
63
+
64
+ .ce_svgsymbols{
65
+ fill: black;
66
+ width: 100%;
67
+ height: 100%;
68
+ }
69
+
70
+
71
+ .ce_svgcode{
72
+ fill: black;
73
+ width: 100%;
74
+ height: 100%;
75
+ }
76
+ .ce_svgcode svg{
77
+ width: 100%;
78
+ height: 100%;
79
+ fill: inherit;
80
+ }
81
+
82
+
83
+ .ce_icon{
84
+ font-size: 0;
85
+ }
86
+
87
+
88
+ .ce_button{
89
+ background-color: rgba(0, 0, 0, 0);
90
+ -webkit-user-select: none;
91
+ user-select: none;
92
+ border: 0;
93
+ }
94
+ .ce_button.ce_button_disabled{
95
+ color: #9a9a9a !important;
96
+ background-color: #e6e6e6 !important;
97
+ border: none !important;
98
+ }
99
+
100
+
101
+ .ce_map{
102
+ position: relative;
103
+ }
104
+ .ce_map .ce_map_view {
105
+ width: 100%;
106
+ height: 100%;
107
+ background-repeat: no-repeat;
108
+ background-position: center center;
109
+ background-size: 100% 100%;
110
+ }
111
+ .ce_map .ce_map_view svg{
112
+ width: 100%;
113
+ height: 100%;
114
+ }
115
+ .ce_map .ce_map_placeholder{
116
+ position: absolute;
117
+ top: 0;
118
+ left: 0;
119
+ right: 0;
120
+ bottom: 0;
121
+ width: 100%;
122
+ height: 100%;
123
+ z-index: 1000;
124
+ }
125
+
126
+
127
+ .ce_svgcheckstyle{
128
+ width: 100%;
129
+ height: 100%;
130
+ }
131
+
132
+
133
+ .ce_check_group .ce_check_list{
134
+ display: -webkit-box;
135
+ display: -webkit-flex;
136
+ display: flex;
137
+ -webkit-flex-wrap: wrap;
138
+ flex-wrap: wrap;
139
+ overflow: hidden;
140
+ }
141
+ .ce_check_group .ce_check_item{
142
+ display: -webkit-box;
143
+ display: -webkit-flex;
144
+ display: flex;
145
+ -webkit-box-align: center;
146
+ -webkit-align-items: center;
147
+ align-items: center;
148
+ cursor: pointer;
149
+ }
150
+ .ce_check_group .ce_check_icon{
151
+ font-size: 0;
152
+ -webkit-box-flex: 0;
153
+ -webkit-flex: 0 0 auto;
154
+ flex: 0 0 auto;
155
+ }
156
+ .ce_check_group .ce_check_text{
157
+ -webkit-box-flex: 1;
158
+ -webkit-flex: 1 1 auto;
159
+ flex: 1 1 auto;
160
+ overflow: hidden;
161
+ text-overflow: ellipsis;
162
+ white-space: nowrap;
163
+ }
164
+
165
+
166
+ .ce_svgradiostyle{
167
+ width: 100%;
168
+ height: 100%;
169
+ }
170
+
171
+
172
+ .ce_radio_button .ce_radio_item{
173
+ display: -webkit-box;
174
+ display: -webkit-flex;
175
+ display: flex;
176
+ -webkit-box-align: center;
177
+ -webkit-align-items: center;
178
+ align-items: center;
179
+ cursor: pointer;
180
+ }
181
+ .ce_radio_button .ce_radio_icon{
182
+ font-size: 0;
183
+ }
184
+
185
+
186
+ .ce_slider{
187
+ display: -webkit-box;
188
+ display: -webkit-flex;
189
+ display: flex;
190
+ -webkit-box-align: center;
191
+ -webkit-align-items: center;
192
+ align-items: center;
193
+ }
194
+ .ce_slider .ce_slider_rect{
195
+ width: 100%;
196
+ position: relative;
197
+ }
198
+ .ce_slider .ce_slider_bar{
199
+ width: 0;
200
+ height: 100%;
201
+ position: absolute;
202
+ left: 0;
203
+ top: 0;
204
+ }
205
+ .ce_slider .ce_slider_con{
206
+ position: absolute;
207
+ left: 0;
208
+ top: 50%;
209
+ -webkit-transform: translateY(-50%) translateX(-50%);
210
+ transform: translateY(-50%) translateX(-50%);
211
+ }
212
+ .ce_slider .ce_slider_block{
213
+ background-size: 100% 100%;
214
+ background-repeat: no-repeat;
215
+ }
216
+ .ce_slider .ce_hover,
217
+ .ce_slider .ce_dragging {
218
+ -webkit-transform: scale(1.2);
219
+ transform: scale(1.2);
220
+ }
221
+
222
+
223
+ .ce_video{
224
+ position: relative;
225
+ }
226
+ .ce_video .ce_video_elem{
227
+ width: 100%;
228
+ height: 100%;
229
+ }
230
+ .ce_video .ce_video_poster{
231
+ position: absolute;
232
+ top: 0;
233
+ left: 0;
234
+ width: 100%;
235
+ height: 100%;
236
+ cursor: pointer;
237
+ }
238
+
239
+
240
+ .ce_viewcontainer{
241
+ width: 100%;
242
+ }
243
+
244
+
245
+ .ce_root{
246
+ display: -webkit-box;
247
+ display: -webkit-flex;
248
+ display: flex;
249
+ -webkit-box-orient: vertical;
250
+ -webkit-box-direction: normal;
251
+ -webkit-flex-direction: column;
252
+ flex-direction: column;
253
+ color: #000;
254
+ line-height: 1.5;
255
+ position: relative;
256
+ overflow: hidden;
257
+ }
258
+
259
+
260
+ .ce_row{
261
+ display: -webkit-box;
262
+ display: -webkit-flex;
263
+ display: flex;
264
+ }
265
+
266
+
267
+ .ce_column{
268
+ display: -webkit-box;
269
+ display: -webkit-flex;
270
+ display: flex;
271
+ max-width: 100%;
272
+ -webkit-box-orient: vertical;
273
+ -webkit-box-direction: normal;
274
+ -webkit-flex-direction: column;
275
+ flex-direction: column;
276
+ }
277
+
278
+
279
+ .ce_singlecolumn{
280
+ display: -webkit-box;
281
+ display: -webkit-flex;
282
+ display: flex;
283
+ -webkit-box-orient: vertical;
284
+ -webkit-box-direction: normal;
285
+ -webkit-flex-direction: column;
286
+ flex-direction: column;
287
+ width: 100%;
288
+ }
289
+
290
+
291
+ .ce_multicolumn{
292
+ display: -webkit-box;
293
+ display: -webkit-flex;
294
+ display: flex;
295
+ -webkit-box-pack: justify;
296
+ -webkit-justify-content: space-between;
297
+ justify-content: space-between;
298
+ width: 100%;
299
+ }
300
+
301
+
302
+ .ce_listlayout{
303
+ width: 100%;
304
+ }
305
+ .ce_listlayout .ce_listlayout_con{
306
+ display: -webkit-box;
307
+ display: -webkit-flex;
308
+ display: flex;
309
+ -webkit-box-orient: vertical;
310
+ -webkit-box-direction: normal;
311
+ -webkit-flex-direction: column;
312
+ flex-direction: column;
313
+ width: 100%;
314
+ box-sizing: border-box;
315
+ }
316
+ .ce_listlayout .ce_listlayout_item{
317
+ display: -webkit-box;
318
+ display: -webkit-flex;
319
+ display: flex;
320
+ width: 100%;
321
+ }
322
+ .ce_listlayout .ce_listlayout_horizontal{
323
+ display: -webkit-box;
324
+ display: -webkit-flex;
325
+ display: flex;
326
+ -webkit-box-orient: horizontal;
327
+ -webkit-box-direction: normal;
328
+ -webkit-flex-direction: row;
329
+ flex-direction: row;
330
+ -webkit-flex-wrap: nowrap;
331
+ flex-wrap: nowrap;
332
+ width: 100%;
333
+ height: 100%;
334
+ overflow-x: auto;
335
+ overflow-y: hidden;
336
+ }
337
+ .ce_listlayout .ce_listlayout_horizontal::-webkit-scrollbar{
338
+ display: none;
339
+ }
340
+ .ce_listlayout .ce_listlayout_horizontal .ce_listlayout_item{
341
+ display: -webkit-box;
342
+ display: -webkit-flex;
343
+ display: flex;
344
+ width: auto;
345
+ height: 100%;
346
+ }
347
+
348
+
349
+ .ce_gridlayout{
350
+ display: -webkit-box;
351
+ display: -webkit-flex;
352
+ display: flex;
353
+ -webkit-flex-wrap: wrap;
354
+ flex-wrap: wrap;
355
+ width: 100%;
356
+ }
357
+ .ce_gridlayout .ce_gridlayout_item{
358
+ width: 100%;
359
+ display: -webkit-box;
360
+ display: -webkit-flex;
361
+ display: flex;
362
+ }
363
+
364
+
365
+ .ce_absolutelayout{
366
+ display: -webkit-box;
367
+ display: -webkit-flex;
368
+ display: flex;
369
+ -webkit-box-orient: vertical;
370
+ -webkit-box-direction: normal;
371
+ -webkit-flex-direction: column;
372
+ flex-direction: column;
373
+ position: relative;
374
+ }
375
+ .ce_absolutelayout > * {
376
+ position: absolute;
377
+ z-index: 1;
378
+ }
379
+ .ce_absolutelayout_bottomright > * {
380
+ position: static;
381
+ z-index: 1;
382
+ }
383
+
@@ -0,0 +1,337 @@
1
+ /**
2
+ * 通用下拉组件(Dropdown.vue)。
3
+ * 全局类 .dd 前缀,不使用 scoped,与 card-select / node-inspector 保持同一约定。
4
+ * 尺寸变体:--xs(表单 24px)/ --sm(28px)/ --md(顶栏 32px)/ --lg(36px)。
5
+ */
6
+
7
+ .dd {
8
+ position: relative;
9
+ display: inline-flex;
10
+ flex-direction: column;
11
+ min-width: 0;
12
+ }
13
+
14
+ .dd--block {
15
+ display: flex;
16
+ width: 100%;
17
+ }
18
+
19
+ .dd--disabled {
20
+ opacity: 0.6;
21
+ pointer-events: none;
22
+ }
23
+
24
+ /* ---- 触发器(默认:标签 + 箭头按钮) ---- */
25
+ .dd__trigger {
26
+ position: relative;
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ gap: 8px;
31
+ width: 100%;
32
+ box-sizing: border-box;
33
+ padding: 0 10px 0 12px;
34
+ background: var(--bg-input);
35
+ border: 1px solid var(--border);
36
+ border-radius: var(--radius-sm, 6px);
37
+ color: var(--text);
38
+ font-size: 12px;
39
+ font-family: inherit;
40
+ line-height: 1;
41
+ cursor: pointer;
42
+ transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
43
+ appearance: none;
44
+ }
45
+
46
+ .dd__trigger:hover {
47
+ border-color: var(--border-strong);
48
+ background: var(--bg-hover);
49
+ }
50
+
51
+ .dd__trigger--active {
52
+ border-color: var(--accent-border);
53
+ box-shadow: 0 0 0 2px var(--accent-soft);
54
+ background: var(--bg-hover);
55
+ }
56
+
57
+ /* 无边框模式:不显示边框,且去掉选中/展开时的高亮(边框色 + 光晕)。
58
+ 仅保留极轻的 hover/展开背景,作为可点击的弱反馈,不引入边框与高亮。 */
59
+ .dd--borderless .dd__trigger {
60
+ background: transparent;
61
+ border-color: transparent;
62
+ }
63
+ .dd--borderless .dd__trigger:hover {
64
+ background: var(--bg-hover);
65
+ border-color: transparent;
66
+ }
67
+ .dd--borderless .dd__trigger--active {
68
+ border-color: transparent;
69
+ box-shadow: none;
70
+ background: var(--bg-hover);
71
+ }
72
+
73
+ .dd__trigger:disabled {
74
+ opacity: 0.5;
75
+ cursor: not-allowed;
76
+ }
77
+
78
+ .dd__trigger--slot {
79
+ padding: 0;
80
+ background: transparent;
81
+ border: 0;
82
+ }
83
+
84
+ .dd--xs .dd__trigger {
85
+ height: 28px;
86
+ font-size: 11px;
87
+ padding: 0 6px 0 8px;
88
+ }
89
+
90
+ .dd--sm .dd__trigger {
91
+ height: 28px;
92
+ font-size: 12px;
93
+ }
94
+
95
+ .dd--md .dd__trigger {
96
+ height: 32px;
97
+ font-size: 14px;
98
+ padding: 0 10px 0 12px;
99
+ border-radius: var(--radius, 8px);
100
+ }
101
+
102
+ .dd--lg .dd__trigger {
103
+ height: 40px;
104
+ font-size: 14px;
105
+ padding: 0 12px 0 14px;
106
+ border-radius: var(--radius, 8px);
107
+ }
108
+
109
+ .dd__label {
110
+ flex: 1 1 auto;
111
+ min-width: 0;
112
+ overflow: hidden;
113
+ white-space: nowrap;
114
+ text-overflow: ellipsis;
115
+ color: var(--text);
116
+ }
117
+
118
+ .dd__chev {
119
+ flex: 0 0 auto;
120
+ color: var(--text-dim);
121
+ transition: transform 0.18s ease;
122
+ }
123
+
124
+ /* 可清空:选中值后触发器内的 ✕ 清除按钮(仅 clearable 且有值时存在)。
125
+ 绝对定位于触发器内(right 紧贴箭头左侧),默认隐藏,悬停时才显示;
126
+ 脱离文档流,故出现/消失都不会撑动标签文本与箭头位置(避免跳动)。
127
+ 用 span 而非 button,避免 button 嵌套 button 的非法结构;@click.stop 阻止冒泡到触发器导致展开。 */
128
+ .dd__clear {
129
+ position: absolute;
130
+ top: 50%;
131
+ right: 22px;
132
+ transform: translateY(-50%);
133
+ display: none;
134
+ align-items: center;
135
+ justify-content: center;
136
+ width: 16px;
137
+ height: 16px;
138
+ border: 0;
139
+ border-radius: 50%;
140
+ background: transparent;
141
+ color: var(--text-faint);
142
+ font-size: 12px;
143
+ line-height: 1;
144
+ cursor: pointer;
145
+ transition: background 0.15s, color 0.15s;
146
+ }
147
+ .dd__trigger:hover .dd__clear {
148
+ display: inline-flex;
149
+ }
150
+ .dd__clear:hover {
151
+ background: var(--bg-hover);
152
+ color: var(--text);
153
+ }
154
+
155
+ .dd--open .dd__chev {
156
+ transform: rotate(180deg);
157
+ }
158
+
159
+ /* ---- 弹层 ---- */
160
+ .dd__pop {
161
+ position: absolute;
162
+ /* 须高于手机预览内的节点选中遮罩 .ce-sel-overlay(--z-overlay-low),否则顶栏下拉会被遮罩盖住 */
163
+ z-index: var(--z-pop);
164
+ top: calc(100% + 6px);
165
+ min-width: 100%;
166
+ background: var(--bg-pop);
167
+ border: 1px solid var(--border-strong);
168
+ border-radius: var(--radius, 8px);
169
+ box-shadow: var(--shadow-3);
170
+ overflow: hidden;
171
+ /* 浮层内文本需恢复行高:祖先 .pc-body 因开关居中被置为 line-height:0,
172
+ 弹层(绝对定位)会继承该值导致选项文字行高塌缩被裁切、显示为空。 */
173
+ line-height: normal;
174
+ }
175
+
176
+ .dd__pop--bottom-start {
177
+ left: 0;
178
+ }
179
+
180
+ .dd__pop--bottom-end {
181
+ right: 0;
182
+ }
183
+
184
+ /* 智能翻转:触发器位于容器底部、下方放不下时,弹层翻转到触发器上方显示。
185
+ 向上时取消 top、改用 bottom 贴住触发器顶部外侧,避免被滚动/裁剪容器裁掉。 */
186
+ .dd--dropup .dd__pop {
187
+ top: auto;
188
+ bottom: calc(100% + 6px);
189
+ }
190
+
191
+ .dd__list {
192
+ list-style: none;
193
+ margin: 0;
194
+ padding: 4px;
195
+ max-height: 280px;
196
+ overflow-y: auto;
197
+ }
198
+
199
+ .dd__item {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 8px;
203
+ padding: 8px 12px;
204
+ border-radius: 6px;
205
+ cursor: pointer;
206
+ color: var(--text-dim);
207
+ font-size: 13px;
208
+ }
209
+
210
+ .dd--xs .dd__item,
211
+ .dd--sm .dd__item {
212
+ font-size: 12px;
213
+ padding: 6px 9px;
214
+ }
215
+
216
+ .dd__item:hover,
217
+ .dd__item--active {
218
+ background: var(--bg-hover);
219
+ color: var(--text);
220
+ }
221
+
222
+ .dd__item--selected {
223
+ color: var(--accent);
224
+ }
225
+
226
+ .dd__item--selected .dd__item-text {
227
+ color: var(--accent);
228
+ font-weight: 500;
229
+ }
230
+
231
+ .dd__item--disabled {
232
+ opacity: 0.45;
233
+ cursor: not-allowed;
234
+ }
235
+
236
+ .dd__item--disabled:hover {
237
+ background: transparent;
238
+ }
239
+
240
+ .dd__item-text {
241
+ flex: 1 1 auto;
242
+ min-width: 0;
243
+ overflow: hidden;
244
+ white-space: nowrap;
245
+ text-overflow: ellipsis;
246
+ }
247
+
248
+ .dd__check {
249
+ flex: 0 0 auto;
250
+ color: var(--accent);
251
+ }
252
+
253
+ .dd__empty {
254
+ padding: 12px;
255
+ text-align: center;
256
+ color: var(--text-faint);
257
+ font-size: 12px;
258
+ cursor: default;
259
+ }
260
+
261
+ /* 滚动条 */
262
+ .dd__list::-webkit-scrollbar {
263
+ width: 8px;
264
+ }
265
+ .dd__list::-webkit-scrollbar-thumb {
266
+ background: var(--scroll-thumb);
267
+ border-radius: 4px;
268
+ }
269
+ .dd__list::-webkit-scrollbar-thumb:hover {
270
+ background: var(--scroll-thumb-hover);
271
+ }
272
+ .dd__list::-webkit-scrollbar-track {
273
+ background: transparent;
274
+ }
275
+
276
+ /* 弹出动画 */
277
+ .dd-fade-enter-active,
278
+ .dd-fade-leave-active {
279
+ transition: opacity 0.14s ease, transform 0.14s ease;
280
+ }
281
+ .dd-fade-enter-from,
282
+ .dd-fade-leave-to {
283
+ opacity: 0;
284
+ transform: translateY(-4px);
285
+ }
286
+
287
+ /* ---- 应用菜单适配(顶栏分组下拉复用 Dropdown,触发器为 slot 按钮) ---- */
288
+ .dd__menu {
289
+ list-style: none;
290
+ margin: 0;
291
+ padding: 4px;
292
+ min-width: 168px;
293
+ }
294
+ .app__remote-pop.dd__menu {
295
+ min-width: 120px;
296
+ padding: 4px;
297
+ }
298
+ .app__remote-item {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 8px;
302
+ padding: 6px 9px;
303
+ border-radius: 6px;
304
+ cursor: pointer;
305
+ color: var(--text-dim);
306
+ font-size: 12px;
307
+ }
308
+ .app__remote-item.is-disabled {
309
+ opacity: 0.4;
310
+ cursor: not-allowed;
311
+ pointer-events: none;
312
+ }
313
+ .app__remote-item .app__icon {
314
+ flex: 0 0 16px;
315
+ width: 16px;
316
+ height: 16px;
317
+ }
318
+ /* 保存类项 hover 蓝、同步类项 hover 绿(见 app.css .app__remote-item--save/--sync) */
319
+
320
+ /* slot 触发器:按钮自身负责视觉,Dropdown 容器不画框。
321
+ 必须用各尺寸变体选择器覆盖 .dd--md .dd__trigger 等的 padding/height,
322
+ 否则透明包裹层仍会残留 10/12px 内边距(#3 反馈的「多出的 padding 间距」)。 */
323
+ .dd__trigger--slot,
324
+ .dd--xs .dd__trigger--slot,
325
+ .dd--sm .dd__trigger--slot,
326
+ .dd--md .dd__trigger--slot,
327
+ .dd--lg .dd__trigger--slot {
328
+ background: transparent;
329
+ border: 0;
330
+ padding: 0;
331
+ height: auto;
332
+ }
333
+
334
+ /* 触发器内的 chev 跟随 Dropdown 开合旋转(替代旧 menu --open chev 旋转) */
335
+ .app__icon--chev--open {
336
+ transform: rotate(180deg);
337
+ }