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,27 @@
1
+ /* 自包含卡片截图页:只保留卡片渲染所需的外壳,避免 editor 布局影响截图。 */
2
+ html,
3
+ body,
4
+ #app {
5
+ margin: 0;
6
+ padding: 0;
7
+ width: 100%;
8
+ height: 100%;
9
+ }
10
+
11
+ .card-preview {
12
+ width: 100%;
13
+ min-height: 100%;
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: flex-start;
17
+ background: #ffffff;
18
+ }
19
+
20
+ /* 独立截图页没有 phone-viewport,屏幕高度应跟随真实卡片内容,便于截取整卡。 */
21
+ .card-preview .phone__screen {
22
+ height: auto;
23
+ min-height: 100%;
24
+ padding: 0;
25
+ margin: 0 auto;
26
+ overflow: hidden;
27
+ }
@@ -0,0 +1,320 @@
1
+ /**
2
+ * 组件结构树样式(StructureTree.vue)
3
+ * 参考编辑器「结构」面板的视觉风格。
4
+ */
5
+
6
+ /* 与数据绑定 tab 的 .debug__scope-wrap 同款:min-height 擑满,
7
+ 滚动交给外层 .debug__body,顶部工具条 sticky 在其中 */
8
+ .st {
9
+ position: relative;
10
+ min-height: 100%;
11
+ }
12
+
13
+ /* 顶部工具条:与 JsonTree 的 .jt__toolbar 同款(sticky 顶部),
14
+ 按钮直接复用 .jt__tool */
15
+ .st__toolbar {
16
+ display: flex;
17
+ justify-content: flex-start;
18
+ gap: 12px;
19
+ padding: 4px 0 8px;
20
+ position: sticky;
21
+ top: 0;
22
+ z-index: var(--z-sticky);
23
+ }
24
+ /* 操作工具条(复制/粘贴/副本):置于搜索+展开/折叠/添加条之下,不吸顶 */
25
+ .st__toolbar--top {
26
+ flex-wrap: nowrap;
27
+ align-items: center;
28
+ }
29
+ /* 工具条按钮不压缩:搜索框 flex:1 撑开时,展开/折叠/+添加 保持原宽并分别贴左/贴右 */
30
+ .st__toolbar--top .jt__tool {
31
+ flex: 0 0 auto;
32
+ }
33
+ /* 定位开关图标按钮:无文字,仅靶心图标;激活态高亮 accent */
34
+ .st__locate {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ padding: 6px;
39
+ color: var(--text-dim);
40
+ }
41
+ .st__locate:hover {
42
+ color: var(--text);
43
+ }
44
+ .st__locate--active {
45
+ color: var(--accent);
46
+ border-color: var(--accent-border);
47
+ background: var(--accent-soft);
48
+ backdrop-filter: blur(10px);
49
+ }
50
+ .st__locate svg {
51
+ display: block;
52
+ pointer-events: none;
53
+ }
54
+ .st__toolbar--act {
55
+ position: static;
56
+ padding-top: 0;
57
+ flex-wrap: wrap;
58
+ }
59
+ /* 结构树搜索框:置于展开/折叠与+添加之间,flex:1 在中间撑开占满剩余宽度(单行) */
60
+ .st__search {
61
+ flex: 1 1 auto;
62
+ min-width: 0;
63
+ box-sizing: border-box;
64
+ height: 28px;
65
+ padding: 0 8px;
66
+ font-size: 12px;
67
+ color: var(--text);
68
+ background: var(--bg-input);
69
+ border: 1px solid var(--border);
70
+ border-radius: 6px;
71
+ outline: none;
72
+ }
73
+ .st__search:focus {
74
+ border-color: var(--accent);
75
+ }
76
+ /* 搜索命中节点:高亮标签 */
77
+ .st__label--hl {
78
+ background: var(--st-hl-bg);
79
+ border-radius: 3px;
80
+ padding: 0 2px;
81
+ }
82
+
83
+ .st__list {
84
+ margin: 0;
85
+ padding: 4px 0;
86
+ list-style: none;
87
+ }
88
+
89
+ /* 操作提示:淡色弱文案,提示 Ctrl/⌘ 点击画布可定位节点 */
90
+ .st__tip {
91
+ margin: 0;
92
+ padding: 6px 8px 8px;
93
+ color: var(--text-faint);
94
+ font-size: 11px;
95
+ line-height: 1.5;
96
+ border-bottom: 1px solid var(--border);
97
+ }
98
+
99
+ .st__node {
100
+ list-style: none;
101
+ }
102
+
103
+ .st__row {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 4px;
107
+ padding: 0 8px;
108
+ cursor: pointer;
109
+ user-select: none;
110
+ white-space: nowrap;
111
+ transition: background 0.1s;
112
+ height: var(--row-h);
113
+ }
114
+
115
+ .st__row:hover {
116
+ background: var(--bg-hover);
117
+ }
118
+
119
+ .st__row--selected {
120
+ background: var(--accent-soft) !important;
121
+ }
122
+
123
+ .st__row--selected .st__label {
124
+ color: var(--accent);
125
+ font-weight: 500;
126
+ }
127
+
128
+ /* 拖拽手柄(六点):行最左侧,hover 行时显现,提示可拖拽 */
129
+ .st__handle {
130
+ flex: 0 0 12px;
131
+ display: inline-flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ width: 12px;
135
+ height: 14px;
136
+ color: var(--text-faint);
137
+ cursor: grab;
138
+ opacity: 0;
139
+ transition: opacity 0.15s, color 0.15s;
140
+ margin-right: -2px;
141
+ }
142
+ .st__row:hover .st__handle {
143
+ opacity: 0.75;
144
+ }
145
+ .st__handle:hover {
146
+ color: var(--text);
147
+ opacity: 1;
148
+ }
149
+ .st__handle:active {
150
+ cursor: grabbing;
151
+ }
152
+ .st__handle svg {
153
+ display: block;
154
+ pointer-events: none;
155
+ }
156
+
157
+ /* 拖拽进行中:源行弱化显示 */
158
+ .st__row--dragging {
159
+ opacity: 0.4;
160
+ }
161
+
162
+ /* 放置指示 · 同级重排(行上/下边缘插入线) */
163
+ .st__row--drop-before {
164
+ box-shadow: inset 0 2px 0 0 var(--accent);
165
+ }
166
+ .st__row--drop-after {
167
+ box-shadow: inset 0 -2px 0 0 var(--accent);
168
+ }
169
+ /* 放置指示 · 嵌套(拖入容器:整行高亮轮廓) */
170
+ .st__row--drop-inside {
171
+ background: var(--accent-soft);
172
+ outline: 1px dashed var(--accent);
173
+ outline-offset: -1px;
174
+ }
175
+ /* 非法放置目标(自身 / 后代 / 非容器被当作嵌套目标) */
176
+ .st__row--drop-blocked {
177
+ cursor: no-drop;
178
+ }
179
+
180
+ /* 统一折叠箭头:与 ni-caret / ptree__caret 同形态(12px、右尖三角、展开旋转 90°) */
181
+ .st__caret {
182
+ flex: 0 0 12px;
183
+ display: inline-flex;
184
+ align-items: center;
185
+ justify-content: center;
186
+ width: 12px;
187
+ height: 12px;
188
+ font-size: 10px;
189
+ line-height: 1;
190
+ color: var(--text-dim);
191
+ transition: transform 0.15s ease;
192
+ user-select: none;
193
+ }
194
+
195
+ .st__caret--open {
196
+ transform: rotate(90deg);
197
+ }
198
+
199
+ .st__caret--leaf {
200
+ visibility: hidden;
201
+ }
202
+
203
+ .st__label {
204
+ font-size: 12px;
205
+ color: var(--st-label);
206
+ }
207
+
208
+ .st__id {
209
+ font-size: 11px;
210
+ color: var(--st-id);
211
+ font-family: 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace;
212
+ }
213
+
214
+ .st__badge {
215
+ flex: 0 0 auto;
216
+ margin-left: auto;
217
+ padding: 0 6px;
218
+ font-size: 11px;
219
+ line-height: 18px;
220
+ color: var(--st-badge-fg);
221
+ background: var(--st-badge-bg);
222
+ border-radius: var(--radius-xs);
223
+ }
224
+
225
+ .st__badge--clickable {
226
+ cursor: pointer;
227
+ transition: opacity 0.15s, transform 0.1s;
228
+ }
229
+ .st__badge--clickable:hover {
230
+ opacity: 0.85;
231
+ transform: scale(1.05);
232
+ }
233
+ .st__badge--muted {
234
+ cursor: pointer;
235
+ background: var(--border-strong);
236
+ color: var(--text-faint);
237
+ opacity: 0.7;
238
+ transition: opacity 0.15s, color 0.15s;
239
+ }
240
+ .st__badge--muted:hover {
241
+ opacity: 1;
242
+ color: var(--text-dim);
243
+ }
244
+
245
+ /* 行最右侧「齿轮」:打开节点属性面板(替代原双击行为)。
246
+ 事件徽章已 margin-left:auto 推到最右,齿轮紧随其后(gap 4px),始终钉在最右侧。 */
247
+ .st__gear {
248
+ flex: 0 0 auto;
249
+ display: inline-flex;
250
+ align-items: center;
251
+ justify-content: center;
252
+ width: 20px;
253
+ height: 20px;
254
+ padding: 0;
255
+ margin-left: 2px;
256
+ border: none;
257
+ background: transparent;
258
+ color: var(--text-faint);
259
+ cursor: pointer;
260
+ border-radius: var(--radius-xs);
261
+ transition: background 0.15s, color 0.15s;
262
+ }
263
+ .st__gear:hover {
264
+ background: var(--bg-hover);
265
+ color: var(--text);
266
+ }
267
+ .st__gear svg {
268
+ display: block;
269
+ }
270
+
271
+ .st__children {
272
+ margin: 0;
273
+ padding: 0 0 0 16px;
274
+ list-style: none;
275
+ border-left: 1px solid var(--border);
276
+ margin-left: 14px;
277
+ }
278
+
279
+ /* 右键上下文菜单 */
280
+ .st__ctx {
281
+ position: fixed;
282
+ z-index: var(--z-overlay);
283
+ min-width: 132px;
284
+ padding: 4px;
285
+ background: var(--bg-pop);
286
+ border: 1px solid var(--border);
287
+ border-radius: var(--radius-md);
288
+ box-shadow: var(--shadow-3);
289
+ user-select: none;
290
+ }
291
+ .st__ctx-item {
292
+ display: block;
293
+ width: 100%;
294
+ text-align: left;
295
+ padding: 6px 10px;
296
+ font-size: 12px;
297
+ color: var(--text);
298
+ background: transparent;
299
+ border: none;
300
+ border-radius: var(--radius-xs);
301
+ cursor: pointer;
302
+ }
303
+ .st__ctx-item:hover:not(:disabled) {
304
+ background: var(--accent-soft);
305
+ color: var(--accent);
306
+ }
307
+ .st__ctx-item:disabled {
308
+ color: var(--text-faint);
309
+ cursor: not-allowed;
310
+ opacity: 0.6;
311
+ }
312
+ .st__ctx-item--danger:hover:not(:disabled) {
313
+ background: var(--danger-soft);
314
+ color: var(--danger);
315
+ }
316
+ .st__ctx-sep {
317
+ height: 1px;
318
+ margin: 4px 2px;
319
+ background: var(--border);
320
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "cardbuddy",
3
+ "version": "0.6.0",
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
+ "type": "module",
6
+ "bin": {
7
+ "cardbuddy": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "engines": {
14
+ "node": ">=20"
15
+ },
16
+ "publishConfig": {
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "scripts": {
20
+ "start": "node src/cli.js",
21
+ "build": "node build.mjs",
22
+ "prepublishOnly": "node build.mjs"
23
+ },
24
+ "dependencies": {
25
+ "@ckpack/vue-color": "^1.6.0",
26
+ "@vitejs/plugin-vue": "^6.0.8",
27
+ "@vue/server-renderer": "^3.5.40",
28
+ "chalk": "^6.0.0",
29
+ "chokidar": "^3.6.0",
30
+ "codejar": "^4.3.0",
31
+ "connect": "^3.7.0",
32
+ "dotenv": "^16.6.1",
33
+ "prismjs": "^1.30.0",
34
+ "qrcode": "^1.5.4",
35
+ "selfsigned": "^2.4.1",
36
+ "vite": "^8.2.0",
37
+ "vue": "^3.5.40"
38
+ },
39
+ "optionalDependencies": {
40
+ "playwright": "^1.62.1"
41
+ }
42
+ }