@sparqjs/schema-designer 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.
Files changed (167) hide show
  1. package/README.md +40 -0
  2. package/dist/app/root.d.ts +63 -0
  3. package/dist/app/root.d.ts.map +1 -0
  4. package/dist/app/toolbar.d.ts +36 -0
  5. package/dist/app/toolbar.d.ts.map +1 -0
  6. package/dist/canvas/adapter.d.ts +47 -0
  7. package/dist/canvas/adapter.d.ts.map +1 -0
  8. package/dist/canvas/canvas.d.ts +20 -0
  9. package/dist/canvas/canvas.d.ts.map +1 -0
  10. package/dist/canvas/node-frame.d.ts +121 -0
  11. package/dist/canvas/node-frame.d.ts.map +1 -0
  12. package/dist/canvas/sortable-list.d.ts +44 -0
  13. package/dist/canvas/sortable-list.d.ts.map +1 -0
  14. package/dist/dialogs/dialogs.d.ts +58 -0
  15. package/dist/dialogs/dialogs.d.ts.map +1 -0
  16. package/dist/dialogs/resource-tree-model.d.ts +62 -0
  17. package/dist/dialogs/resource-tree-model.d.ts.map +1 -0
  18. package/dist/extensions/context.d.ts +76 -0
  19. package/dist/extensions/context.d.ts.map +1 -0
  20. package/dist/extensions/instance.d.ts +56 -0
  21. package/dist/extensions/instance.d.ts.map +1 -0
  22. package/dist/extensions/material.d.ts +49 -0
  23. package/dist/extensions/material.d.ts.map +1 -0
  24. package/dist/index.d.ts +14 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +10190 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/inspector/boolean-checkbox.d.ts +26 -0
  29. package/dist/inspector/boolean-checkbox.d.ts.map +1 -0
  30. package/dist/inspector/capabilities/adapters.d.ts +16 -0
  31. package/dist/inspector/capabilities/adapters.d.ts.map +1 -0
  32. package/dist/inspector/capabilities/cards/color-palette.d.ts +4 -0
  33. package/dist/inspector/capabilities/cards/color-palette.d.ts.map +1 -0
  34. package/dist/inspector/capabilities/cards/component-settings.d.ts +8 -0
  35. package/dist/inspector/capabilities/cards/component-settings.d.ts.map +1 -0
  36. package/dist/inspector/capabilities/cards/input-slots.d.ts +4 -0
  37. package/dist/inspector/capabilities/cards/input-slots.d.ts.map +1 -0
  38. package/dist/inspector/capabilities/cards/interaction-rules.d.ts +4 -0
  39. package/dist/inspector/capabilities/cards/interaction-rules.d.ts.map +1 -0
  40. package/dist/inspector/capabilities/cards/option-source.d.ts +4 -0
  41. package/dist/inspector/capabilities/cards/option-source.d.ts.map +1 -0
  42. package/dist/inspector/capabilities/cards/validation-rules.d.ts +4 -0
  43. package/dist/inspector/capabilities/cards/validation-rules.d.ts.map +1 -0
  44. package/dist/inspector/capabilities/cards/value-strategy.d.ts +4 -0
  45. package/dist/inspector/capabilities/cards/value-strategy.d.ts.map +1 -0
  46. package/dist/inspector/capabilities/index.d.ts +5 -0
  47. package/dist/inspector/capabilities/index.d.ts.map +1 -0
  48. package/dist/inspector/capabilities/keys.d.ts +20 -0
  49. package/dist/inspector/capabilities/keys.d.ts.map +1 -0
  50. package/dist/inspector/capabilities/register-built-ins.d.ts +4 -0
  51. package/dist/inspector/capabilities/register-built-ins.d.ts.map +1 -0
  52. package/dist/inspector/capabilities/registry.d.ts +7 -0
  53. package/dist/inspector/capabilities/registry.d.ts.map +1 -0
  54. package/dist/inspector/capabilities/types.d.ts +44 -0
  55. package/dist/inspector/capabilities/types.d.ts.map +1 -0
  56. package/dist/inspector/color-palette-editor.d.ts +10 -0
  57. package/dist/inspector/color-palette-editor.d.ts.map +1 -0
  58. package/dist/inspector/commands/component-migration.d.ts +25 -0
  59. package/dist/inspector/commands/component-migration.d.ts.map +1 -0
  60. package/dist/inspector/commands/field-property.d.ts +51 -0
  61. package/dist/inspector/commands/field-property.d.ts.map +1 -0
  62. package/dist/inspector/commands/form-property.d.ts +25 -0
  63. package/dist/inspector/commands/form-property.d.ts.map +1 -0
  64. package/dist/inspector/component-settings-editor.d.ts +37 -0
  65. package/dist/inspector/component-settings-editor.d.ts.map +1 -0
  66. package/dist/inspector/computed-expression-editor.d.ts +20 -0
  67. package/dist/inspector/computed-expression-editor.d.ts.map +1 -0
  68. package/dist/inspector/condition-editor-model.d.ts +63 -0
  69. package/dist/inspector/condition-editor-model.d.ts.map +1 -0
  70. package/dist/inspector/condition-visual-editor.d.ts +30 -0
  71. package/dist/inspector/condition-visual-editor.d.ts.map +1 -0
  72. package/dist/inspector/container-items-editor.d.ts +42 -0
  73. package/dist/inspector/container-items-editor.d.ts.map +1 -0
  74. package/dist/inspector/date-time-format-editor.d.ts +30 -0
  75. package/dist/inspector/date-time-format-editor.d.ts.map +1 -0
  76. package/dist/inspector/default-value-editor.d.ts +30 -0
  77. package/dist/inspector/default-value-editor.d.ts.map +1 -0
  78. package/dist/inspector/field-property-view.d.ts +44 -0
  79. package/dist/inspector/field-property-view.d.ts.map +1 -0
  80. package/dist/inspector/field-schema/build-sections.d.ts +9 -0
  81. package/dist/inspector/field-schema/build-sections.d.ts.map +1 -0
  82. package/dist/inspector/field-schema/component-options.d.ts +14 -0
  83. package/dist/inspector/field-schema/component-options.d.ts.map +1 -0
  84. package/dist/inspector/field-schema/fields.d.ts +21 -0
  85. package/dist/inspector/field-schema/fields.d.ts.map +1 -0
  86. package/dist/inspector/field-schema/index.d.ts +5 -0
  87. package/dist/inspector/field-schema/index.d.ts.map +1 -0
  88. package/dist/inspector/field-schema/keys.d.ts +15 -0
  89. package/dist/inspector/field-schema/keys.d.ts.map +1 -0
  90. package/dist/inspector/field-schema/registry.d.ts +99 -0
  91. package/dist/inspector/field-schema/registry.d.ts.map +1 -0
  92. package/dist/inspector/field-schema/types.d.ts +113 -0
  93. package/dist/inspector/field-schema/types.d.ts.map +1 -0
  94. package/dist/inspector/form-property-view.d.ts +14 -0
  95. package/dist/inspector/form-property-view.d.ts.map +1 -0
  96. package/dist/inspector/form-schema.d.ts +64 -0
  97. package/dist/inspector/form-schema.d.ts.map +1 -0
  98. package/dist/inspector/input-slots-editor.d.ts +11 -0
  99. package/dist/inspector/input-slots-editor.d.ts.map +1 -0
  100. package/dist/inspector/inspector.d.ts +34 -0
  101. package/dist/inspector/inspector.d.ts.map +1 -0
  102. package/dist/inspector/interaction-rules-editor.d.ts +24 -0
  103. package/dist/inspector/interaction-rules-editor.d.ts.map +1 -0
  104. package/dist/inspector/option-source-editor.d.ts +35 -0
  105. package/dist/inspector/option-source-editor.d.ts.map +1 -0
  106. package/dist/inspector/option-source-summary.d.ts +4 -0
  107. package/dist/inspector/option-source-summary.d.ts.map +1 -0
  108. package/dist/inspector/property-commit.d.ts +23 -0
  109. package/dist/inspector/property-commit.d.ts.map +1 -0
  110. package/dist/inspector/property-section.d.ts +4 -0
  111. package/dist/inspector/property-section.d.ts.map +1 -0
  112. package/dist/inspector/property-ui-adapter.d.ts +4 -0
  113. package/dist/inspector/property-ui-adapter.d.ts.map +1 -0
  114. package/dist/inspector/required-validation.d.ts +16 -0
  115. package/dist/inspector/required-validation.d.ts.map +1 -0
  116. package/dist/inspector/validation-rule-editor.d.ts +25 -0
  117. package/dist/inspector/validation-rule-editor.d.ts.map +1 -0
  118. package/dist/inspector/value-strategy-editor.d.ts +31 -0
  119. package/dist/inspector/value-strategy-editor.d.ts.map +1 -0
  120. package/dist/services/registry.d.ts +68 -0
  121. package/dist/services/registry.d.ts.map +1 -0
  122. package/dist/shared/clone.d.ts +8 -0
  123. package/dist/shared/clone.d.ts.map +1 -0
  124. package/dist/shared/component-registry.d.ts +10 -0
  125. package/dist/shared/component-registry.d.ts.map +1 -0
  126. package/dist/shared/icons.d.ts +8 -0
  127. package/dist/shared/icons.d.ts.map +1 -0
  128. package/dist/shared/object-path.d.ts +14 -0
  129. package/dist/shared/object-path.d.ts.map +1 -0
  130. package/dist/shared/ui-adapter.d.ts +12 -0
  131. package/dist/shared/ui-adapter.d.ts.map +1 -0
  132. package/dist/shared/view-node.d.ts +9 -0
  133. package/dist/shared/view-node.d.ts.map +1 -0
  134. package/dist/sidebar/components.d.ts +24 -0
  135. package/dist/sidebar/components.d.ts.map +1 -0
  136. package/dist/sidebar/sidebar.d.ts +25 -0
  137. package/dist/sidebar/sidebar.d.ts.map +1 -0
  138. package/dist/state/component-config.d.ts +41 -0
  139. package/dist/state/component-config.d.ts.map +1 -0
  140. package/dist/state/create-state.d.ts +8 -0
  141. package/dist/state/create-state.d.ts.map +1 -0
  142. package/dist/state/draft.d.ts +12 -0
  143. package/dist/state/draft.d.ts.map +1 -0
  144. package/dist/state/field.d.ts +10 -0
  145. package/dist/state/field.d.ts.map +1 -0
  146. package/dist/state/form-actions.d.ts +17 -0
  147. package/dist/state/form-actions.d.ts.map +1 -0
  148. package/dist/state/form-view.d.ts +6 -0
  149. package/dist/state/form-view.d.ts.map +1 -0
  150. package/dist/state/history.d.ts +16 -0
  151. package/dist/state/history.d.ts.map +1 -0
  152. package/dist/state/node-actions.d.ts +66 -0
  153. package/dist/state/node-actions.d.ts.map +1 -0
  154. package/dist/state/node-permissions.d.ts +17 -0
  155. package/dist/state/node-permissions.d.ts.map +1 -0
  156. package/dist/state/output.d.ts +5 -0
  157. package/dist/state/output.d.ts.map +1 -0
  158. package/dist/state/schema.d.ts +10 -0
  159. package/dist/state/schema.d.ts.map +1 -0
  160. package/dist/state/tree.d.ts +28 -0
  161. package/dist/state/tree.d.ts.map +1 -0
  162. package/dist/state/types.d.ts +81 -0
  163. package/dist/state/types.d.ts.map +1 -0
  164. package/dist/state/visibility.d.ts +17 -0
  165. package/dist/state/visibility.d.ts.map +1 -0
  166. package/package.json +46 -0
  167. package/src/style.css +2129 -0
package/src/style.css ADDED
@@ -0,0 +1,2129 @@
1
+ .sparq-designer {
2
+ --designer-border: #dbe3ef;
3
+ --designer-surface: #ffffff;
4
+ --designer-muted: #64748b;
5
+ --designer-bg: #f5f7fb;
6
+ --designer-primary: #4f46e5;
7
+ --designer-primary-soft: rgb(79 70 229 / 10%);
8
+ /* 校验失败等危险状态的前景色。 */
9
+ --designer-danger: #991b1b;
10
+ /* 校验失败等危险状态的弱背景色。 */
11
+ --designer-danger-soft: #fef2f2;
12
+ display: grid;
13
+ grid-template-rows: minmax(0, 1fr);
14
+ height: 100%;
15
+ width: 100%;
16
+ min-width: 0;
17
+ min-height: 0;
18
+ overflow: hidden;
19
+ background: var(--designer-bg);
20
+ }
21
+
22
+ .sparq-designer-toolbar,
23
+ .sparq-designer-sidebar,
24
+ .sparq-designer-inspector,
25
+ .sparq-designer-node__bar,
26
+ .sparq-designer-node-list__empty,
27
+ .sparq-designer-resource-tree,
28
+ .sparq-designer-empty {
29
+ color: #0f172a;
30
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
31
+ }
32
+
33
+ .sparq-designer-toolbar button,
34
+ .sparq-designer-tabs button,
35
+ .sparq-designer-component,
36
+ .sparq-designer-template,
37
+ .sparq-designer-node__bar button,
38
+ .sparq-designer-inspector-tabs button,
39
+ .sparq-designer-form input,
40
+ .sparq-designer-form select,
41
+ .sparq-designer-form textarea {
42
+ font: inherit;
43
+ }
44
+
45
+ .sparq-designer-toolbar {
46
+ display: grid;
47
+ grid-template-columns: 1fr auto 1fr;
48
+ align-items: center;
49
+ gap: 12px;
50
+ border-bottom: 1px solid var(--designer-border);
51
+ background: var(--designer-surface);
52
+ padding: 0 12px;
53
+ }
54
+
55
+ .sparq-designer-toolbar__group {
56
+ display: flex;
57
+ align-items: center;
58
+ min-width: 0;
59
+ }
60
+
61
+ .sparq-designer-toolbar__group:first-child {
62
+ justify-self: start;
63
+ }
64
+
65
+ .sparq-designer-toolbar__group.is-center {
66
+ justify-self: center;
67
+ }
68
+
69
+ .sparq-designer-toolbar__group:last-child {
70
+ justify-self: end;
71
+ }
72
+
73
+ .sparq-designer-toolbar button,
74
+ .sparq-designer-tabs button,
75
+ .sparq-designer-node__bar button {
76
+ display: inline-flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ gap: 6px;
80
+ min-height: 30px;
81
+ border: 1px solid var(--designer-border);
82
+ border-radius: 6px;
83
+ background: #ffffff;
84
+ color: #334155;
85
+ cursor: pointer;
86
+ padding: 0 10px;
87
+ }
88
+
89
+ .sparq-designer-toolbar button.is-active,
90
+ .sparq-designer-tabs button.is-active {
91
+ border-color: var(--designer-primary);
92
+ background: var(--designer-primary-soft);
93
+ color: var(--designer-primary);
94
+ }
95
+
96
+ .sparq-designer-toolbar button:disabled {
97
+ color: #94a3b8;
98
+ cursor: not-allowed;
99
+ }
100
+
101
+ .sparq-designer-toolbar button.is-loading {
102
+ position: relative;
103
+ cursor: wait;
104
+ }
105
+
106
+ .sparq-designer-toolbar button.is-loading svg {
107
+ visibility: hidden;
108
+ }
109
+
110
+ .sparq-designer-toolbar button.is-loading::before {
111
+ position: absolute;
112
+ top: 50%;
113
+ left: 50%;
114
+ width: 14px;
115
+ height: 14px;
116
+ box-sizing: border-box;
117
+ border: 2px solid #cbd5e1;
118
+ border-top-color: var(--designer-primary);
119
+ border-radius: 50%;
120
+ margin: -7px 0 0 -7px;
121
+ animation: sparq-designer-loading-spin 700ms linear infinite;
122
+ content: '';
123
+ }
124
+
125
+ .sparq-designer-toolbar button svg {
126
+ width: 16px;
127
+ height: 16px;
128
+ flex: 0 0 auto;
129
+ stroke: currentColor;
130
+ stroke-linecap: round;
131
+ stroke-linejoin: round;
132
+ stroke-width: 1.8;
133
+ }
134
+
135
+ .sparq-designer-icon-button {
136
+ width: 32px;
137
+ padding: 0 !important;
138
+ }
139
+
140
+ .sparq-designer-button-group {
141
+ display: inline-flex;
142
+ width: fit-content;
143
+ overflow: hidden;
144
+ border: 1px solid var(--designer-border);
145
+ border-radius: 6px;
146
+ background: #ffffff;
147
+ }
148
+
149
+ .sparq-designer-button-group button {
150
+ width: 34px;
151
+ height: 32px;
152
+ min-height: 32px;
153
+ border: 0;
154
+ border-radius: 0;
155
+ background: transparent;
156
+ }
157
+
158
+ .sparq-designer-button-group button + button {
159
+ border-left: 1px solid var(--designer-border);
160
+ }
161
+
162
+ .sparq-designer-button-group button.is-active {
163
+ background: var(--designer-primary-soft);
164
+ color: var(--designer-primary);
165
+ }
166
+
167
+ .sparq-designer__body {
168
+ display: grid;
169
+ grid-template-columns: 280px minmax(0, 1fr) 320px;
170
+ height: 100%;
171
+ min-width: 0;
172
+ min-height: 0;
173
+ overflow: hidden;
174
+ }
175
+
176
+ .sparq-designer-center {
177
+ display: grid;
178
+ grid-template-rows: 48px minmax(0, 1fr);
179
+ min-width: 0;
180
+ min-height: 0;
181
+ overflow: hidden;
182
+ }
183
+
184
+ .sparq-designer-sidebar,
185
+ .sparq-designer-inspector {
186
+ display: grid;
187
+ grid-template-rows: auto minmax(0, 1fr);
188
+ min-width: 0;
189
+ min-height: 0;
190
+ overflow: hidden;
191
+ border-right: 1px solid var(--designer-border);
192
+ background: var(--designer-surface);
193
+ }
194
+
195
+ .sparq-designer-inspector {
196
+ border-right: 0;
197
+ border-left: 1px solid var(--designer-border);
198
+ }
199
+
200
+ .sparq-designer-tabs {
201
+ display: grid;
202
+ grid-template-columns: 1fr 1fr;
203
+ gap: 6px;
204
+ border-bottom: 1px solid var(--designer-border);
205
+ padding: 10px;
206
+ }
207
+
208
+ .sparq-designer-sidebar__scroll {
209
+ display: grid;
210
+ align-content: start;
211
+ gap: 14px;
212
+ min-height: 0;
213
+ overflow: auto;
214
+ padding: 12px;
215
+ }
216
+
217
+ .sparq-designer-category {
218
+ display: grid;
219
+ gap: 8px;
220
+ }
221
+
222
+ .sparq-designer-group {
223
+ display: grid;
224
+ gap: 6px;
225
+ }
226
+
227
+ .sparq-designer-category h3,
228
+ .sparq-designer-group h3,
229
+ .sparq-designer-inspector h2 {
230
+ margin: 0;
231
+ color: #475569;
232
+ font-size: 12px;
233
+ font-weight: 600;
234
+ line-height: 18px;
235
+ }
236
+
237
+ .sparq-designer-group h4 {
238
+ margin: 0;
239
+ color: #64748b;
240
+ font-size: 11px;
241
+ font-weight: 600;
242
+ line-height: 16px;
243
+ }
244
+
245
+ .sparq-designer-component,
246
+ .sparq-designer-template {
247
+ display: grid;
248
+ align-items: start;
249
+ gap: 5px;
250
+ border: 1px solid var(--designer-border);
251
+ border-radius: 8px;
252
+ background: #ffffff;
253
+ cursor: grab;
254
+ min-height: 58px;
255
+ padding: 6px 4px;
256
+ text-align: center;
257
+ user-select: none;
258
+ }
259
+
260
+ .sparq-designer-palette-list {
261
+ display: grid;
262
+ grid-template-columns: repeat(3, minmax(0, 1fr));
263
+ gap: 6px;
264
+ }
265
+
266
+ .sparq-designer-template {
267
+ grid-template-columns: minmax(0, 1fr);
268
+ cursor: not-allowed;
269
+ text-align: left;
270
+ }
271
+
272
+ .sparq-designer-component__icon {
273
+ display: grid;
274
+ width: 26px;
275
+ height: 26px;
276
+ place-items: center;
277
+ border-radius: 6px;
278
+ background: #eef2ff;
279
+ color: var(--designer-primary);
280
+ justify-self: center;
281
+ }
282
+
283
+ .sparq-designer-component__icon svg {
284
+ width: 17px;
285
+ height: 17px;
286
+ stroke: currentColor;
287
+ stroke-linecap: round;
288
+ stroke-linejoin: round;
289
+ stroke-width: 1.8;
290
+ }
291
+
292
+ .sparq-designer-component strong,
293
+ .sparq-designer-template strong {
294
+ display: block;
295
+ overflow: hidden;
296
+ font-size: 11px;
297
+ line-height: 16px;
298
+ text-overflow: ellipsis;
299
+ white-space: nowrap;
300
+ }
301
+
302
+ .sparq-designer-template small,
303
+ .sparq-designer-inspector p {
304
+ display: block;
305
+ overflow: hidden;
306
+ color: var(--designer-muted);
307
+ font-size: 10px;
308
+ line-height: 14px;
309
+ text-overflow: ellipsis;
310
+ white-space: nowrap;
311
+ }
312
+
313
+ .sparq-designer-canvas {
314
+ min-width: 0;
315
+ min-height: 0;
316
+ overflow: auto;
317
+ padding: 24px;
318
+ }
319
+
320
+ .sparq-designer-stage {
321
+ width: min(100%, 1200px);
322
+ min-height: 100%;
323
+ margin: 0 auto;
324
+ border: 1px solid var(--designer-border);
325
+ background: #ffffff;
326
+ padding: 18px;
327
+ transition: width 160ms ease;
328
+ }
329
+
330
+ .sparq-designer-stage.is-phone {
331
+ width: 390px;
332
+ }
333
+
334
+ .sparq-designer-stage.is-pad {
335
+ width: 768px;
336
+ }
337
+
338
+ .sparq-designer-form-canvas {
339
+ min-height: 420px;
340
+ }
341
+
342
+ .sparq-designer-form-canvas__header {
343
+ display: grid;
344
+ gap: 4px;
345
+ border-bottom: 1px solid var(--designer-border);
346
+ padding-bottom: 12px;
347
+ }
348
+
349
+ .sparq-designer-form-canvas__header h2 {
350
+ margin: 0;
351
+ font-size: 16px;
352
+ }
353
+
354
+ .sparq-designer-form-canvas__help {
355
+ color: var(--designer-muted);
356
+ font-size: 13px;
357
+ }
358
+
359
+ .sparq-designer-node-list {
360
+ display: grid;
361
+ grid-template-columns: repeat(24, minmax(0, 1fr));
362
+ align-content: start;
363
+ gap: 8px;
364
+ min-height: 320px;
365
+ }
366
+
367
+ .sparq-designer-node-list.is-nested {
368
+ min-height: 96px;
369
+ padding: 8px;
370
+ }
371
+
372
+ .sparq-designer-node-list__empty {
373
+ grid-column: 1 / -1;
374
+ display: grid;
375
+ min-height: 220px;
376
+ place-items: center;
377
+ border: 1px dashed var(--designer-border);
378
+ border-radius: 8px;
379
+ color: var(--designer-muted);
380
+ font-size: 13px;
381
+ }
382
+
383
+ .sparq-designer-node-list.is-nested .sparq-designer-node-list__empty {
384
+ min-height: 72px;
385
+ border-radius: 6px;
386
+ background: #ffffff;
387
+ font-size: 12px;
388
+ }
389
+
390
+ .sparq-designer-node-list > .sparq-designer-component {
391
+ grid-column: 1 / -1;
392
+ width: 100%;
393
+ min-height: 48px;
394
+ align-items: center;
395
+ }
396
+
397
+ .sparq-designer-node {
398
+ position: relative;
399
+ grid-column: span var(--sparq-designer-node-span, 24);
400
+ min-width: 0;
401
+ }
402
+
403
+ .sparq-designer-node__overlay {
404
+ position: absolute;
405
+ inset: 0;
406
+ z-index: 2;
407
+ pointer-events: none;
408
+ border-radius: 2px;
409
+ transition:
410
+ box-shadow 160ms ease,
411
+ background-color 160ms ease;
412
+ }
413
+
414
+ .sparq-designer-node:hover > .sparq-designer-node__overlay {
415
+ background: rgb(148 163 184 / 5%);
416
+ box-shadow: 0 0 0 1px rgb(148 163 184 / 8%);
417
+ }
418
+
419
+ .sparq-designer-node.is-selected > .sparq-designer-node__overlay {
420
+ background: rgb(79 70 229 / 5%);
421
+ box-shadow: 0 0 0 1px rgb(79 70 229 / 12%);
422
+ }
423
+
424
+ .sparq-designer-node.is-readonly > .sparq-designer-node__overlay {
425
+ background: rgb(100 116 139 / 4%);
426
+ box-shadow: 0 0 0 1px rgb(100 116 139 / 18%);
427
+ }
428
+
429
+ .sparq-designer-node__readonly {
430
+ position: absolute;
431
+ top: 4px;
432
+ right: 4px;
433
+ z-index: 4;
434
+ display: inline-flex;
435
+ min-height: 22px;
436
+ align-items: center;
437
+ gap: 4px;
438
+ border: 1px solid #cbd5e1;
439
+ border-radius: 4px;
440
+ background: #ffffff;
441
+ color: #475569;
442
+ font-size: 11px;
443
+ line-height: 1;
444
+ padding: 0 6px;
445
+ pointer-events: none;
446
+ }
447
+
448
+ .sparq-designer-node__readonly svg {
449
+ width: 13px;
450
+ height: 13px;
451
+ stroke: currentColor;
452
+ stroke-linecap: round;
453
+ stroke-linejoin: round;
454
+ stroke-width: 1.9;
455
+ }
456
+
457
+ .sparq-designer-node__bar {
458
+ position: absolute;
459
+ top: -18px;
460
+ right: -4px;
461
+ z-index: 5;
462
+ display: flex;
463
+ align-items: center;
464
+ overflow: hidden;
465
+ border: 1px solid var(--designer-border);
466
+ border-radius: 6px;
467
+ background: #ffffff;
468
+ box-shadow: 0 8px 22px rgb(15 23 42 / 12%);
469
+ opacity: 0;
470
+ pointer-events: none;
471
+ transform: translateY(2px);
472
+ transition:
473
+ opacity 140ms ease,
474
+ transform 140ms ease;
475
+ }
476
+
477
+ .sparq-designer-node:hover > .sparq-designer-node__bar,
478
+ .sparq-designer-node.is-selected > .sparq-designer-node__bar {
479
+ opacity: 1;
480
+ pointer-events: auto;
481
+ transform: translateY(0);
482
+ }
483
+
484
+ .sparq-designer-stage:has(.sparq-designer-node.is-selected)
485
+ .sparq-designer-node:not(.is-selected):hover
486
+ > .sparq-designer-node__bar {
487
+ opacity: 0;
488
+ pointer-events: none;
489
+ transform: translateY(2px);
490
+ }
491
+
492
+ .sparq-designer-node__bar button {
493
+ display: inline-grid;
494
+ width: 28px;
495
+ height: 28px;
496
+ min-width: 28px;
497
+ min-height: 28px;
498
+ place-items: center;
499
+ border: 0;
500
+ border-radius: 0;
501
+ background: transparent;
502
+ color: #475569;
503
+ cursor: pointer;
504
+ padding: 0;
505
+ }
506
+
507
+ .sparq-designer-node__bar button + button {
508
+ border-left: 1px solid var(--designer-border);
509
+ }
510
+
511
+ .sparq-designer-node__move-actions,
512
+ .sparq-designer-resource-tree-node__move-actions {
513
+ display: contents;
514
+ }
515
+
516
+ .sparq-designer-node__bar button:hover {
517
+ background: #f8fafc;
518
+ color: #0f172a;
519
+ }
520
+
521
+ .sparq-designer-node__bar button:disabled {
522
+ color: #cbd5e1;
523
+ cursor: not-allowed;
524
+ }
525
+
526
+ .sparq-designer-node__bar button:disabled:hover {
527
+ background: transparent;
528
+ color: #cbd5e1;
529
+ }
530
+
531
+ .sparq-designer-node__bar button.is-danger:hover {
532
+ background: #fef2f2;
533
+ color: #dc2626;
534
+ }
535
+
536
+ .sparq-designer-node__bar svg {
537
+ width: 15px;
538
+ height: 15px;
539
+ stroke: currentColor;
540
+ stroke-linecap: round;
541
+ stroke-linejoin: round;
542
+ stroke-width: 1.9;
543
+ }
544
+
545
+ .sparq-designer-node__drag {
546
+ cursor: grab;
547
+ }
548
+
549
+ .sparq-designer-node__drag:active {
550
+ cursor: grabbing;
551
+ }
552
+
553
+ .sparq-designer-node__body {
554
+ min-width: 0;
555
+ }
556
+
557
+ .sparq-designer-node.is-ghost {
558
+ opacity: 0.45;
559
+ }
560
+
561
+ .sparq-designer-node.is-chosen,
562
+ .sparq-designer-node.sortable-chosen {
563
+ z-index: 4;
564
+ }
565
+
566
+ .sparq-designer-node.is-chosen > .sparq-designer-node__overlay,
567
+ .sparq-designer-node.sortable-chosen > .sparq-designer-node__overlay {
568
+ box-shadow: 0 0 0 3px rgb(79 70 229 / 12%);
569
+ }
570
+
571
+ .sparq-designer-inspector {
572
+ min-height: 0;
573
+ }
574
+
575
+ .sparq-designer-inspector-tabs {
576
+ display: grid;
577
+ grid-template-columns: 1fr 1fr;
578
+ gap: 4px;
579
+ border-bottom: 1px solid var(--designer-border);
580
+ padding: 8px;
581
+ }
582
+
583
+ .sparq-designer-inspector-tabs button {
584
+ min-height: 32px;
585
+ border: 1px solid var(--designer-border);
586
+ border-radius: 6px;
587
+ background: #ffffff;
588
+ color: #334155;
589
+ cursor: pointer;
590
+ }
591
+
592
+ .sparq-designer-inspector-tabs button.is-active {
593
+ border-color: var(--designer-primary);
594
+ background: var(--designer-primary-soft);
595
+ color: var(--designer-primary);
596
+ }
597
+
598
+ .sparq-designer-inspector-tabs button:focus-visible,
599
+ .sparq-designer-property-section__summary:focus-visible {
600
+ outline: 2px solid var(--designer-primary);
601
+ outline-offset: -2px;
602
+ }
603
+
604
+ .sparq-designer-form {
605
+ display: grid;
606
+ align-content: start;
607
+ gap: 12px;
608
+ min-height: 0;
609
+ overflow: auto;
610
+ padding: 14px;
611
+ }
612
+
613
+ .sparq-designer-property-view {
614
+ min-height: 0;
615
+ overflow: auto;
616
+ padding: 0;
617
+ scrollbar-gutter: stable;
618
+ }
619
+
620
+ .sparq-designer-property-view .sparq-view-container--form {
621
+ border: 0;
622
+ border-radius: 0;
623
+ box-shadow: none;
624
+ }
625
+
626
+ .sparq-designer-property-view [data-sparq-element-plus-container='form'] {
627
+ display: grid;
628
+ gap: 0;
629
+ }
630
+
631
+ .sparq-designer-property-section {
632
+ border-bottom: 1px solid var(--designer-border);
633
+ }
634
+
635
+ .sparq-designer-property-section:last-child {
636
+ border-bottom: 0;
637
+ }
638
+
639
+ .sparq-designer-property-section__summary {
640
+ min-height: 36px;
641
+ padding: 0 12px;
642
+ color: #334155;
643
+ cursor: pointer;
644
+ font-size: 12px;
645
+ font-weight: 600;
646
+ line-height: 36px;
647
+ user-select: none;
648
+ }
649
+
650
+ .sparq-designer-property-section__summary::marker {
651
+ color: var(--designer-muted);
652
+ }
653
+
654
+ .sparq-designer-property-section__summary:hover {
655
+ background: var(--designer-bg);
656
+ }
657
+
658
+ .sparq-designer-property-section__body {
659
+ padding: 4px 12px 12px;
660
+ }
661
+
662
+ .sparq-designer-property-view .sparq-designer-property-group {
663
+ display: grid;
664
+ gap: 8px;
665
+ }
666
+
667
+ .sparq-designer-property-view .sparq-designer-property-group > .el-row {
668
+ row-gap: 10px;
669
+ }
670
+
671
+ .sparq-designer-property-view .el-form-item {
672
+ margin-bottom: 0;
673
+ }
674
+
675
+ .sparq-designer-property-view .el-form-item__label {
676
+ min-width: 0;
677
+ color: #64748b;
678
+ font-size: 12px;
679
+ line-height: 28px;
680
+ }
681
+
682
+ .sparq-designer-property-view .el-form-item__content {
683
+ min-width: 0;
684
+ }
685
+
686
+ .sparq-designer-property-view .sparq-designer-property-switch-item .el-form-item__label {
687
+ padding-right: 6px;
688
+ }
689
+
690
+ .sparq-designer-property-view .sparq-designer-property-switch-item {
691
+ margin-bottom: 0;
692
+ }
693
+
694
+ .sparq-designer-property-view .sparq-designer-property-checkbox-item .el-form-item__label {
695
+ display: none;
696
+ }
697
+
698
+ .sparq-designer-property-view .sparq-designer-property-checkbox-item .el-form-item__content {
699
+ margin-left: 0 !important;
700
+ }
701
+
702
+ .sparq-designer-property-checkbox {
703
+ display: inline-flex;
704
+ min-height: 28px;
705
+ align-items: center;
706
+ gap: 6px;
707
+ color: #334155;
708
+ cursor: pointer;
709
+ font-size: 12px;
710
+ line-height: 18px;
711
+ }
712
+
713
+ .sparq-designer-property-checkbox.is-disabled {
714
+ cursor: not-allowed;
715
+ opacity: 0.6;
716
+ }
717
+
718
+ .sparq-designer-form-section {
719
+ display: grid;
720
+ gap: 10px;
721
+ padding-bottom: 14px;
722
+ border-bottom: 1px solid #eef2f7;
723
+ }
724
+
725
+ .sparq-designer-form-section:last-child {
726
+ padding-bottom: 0;
727
+ border-bottom: 0;
728
+ }
729
+
730
+ .sparq-designer-form-section h3 {
731
+ margin: 0;
732
+ color: #334155;
733
+ font-size: 12px;
734
+ font-weight: 600;
735
+ line-height: 18px;
736
+ }
737
+
738
+ .sparq-designer-form-section__body {
739
+ display: grid;
740
+ gap: 12px;
741
+ }
742
+
743
+ .sparq-designer-form label {
744
+ display: grid;
745
+ gap: 6px;
746
+ color: var(--designer-muted);
747
+ font-size: 12px;
748
+ }
749
+
750
+ .sparq-designer-form input,
751
+ .sparq-designer-form select,
752
+ .sparq-designer-form textarea {
753
+ min-height: 32px;
754
+ border: 1px solid var(--designer-border);
755
+ border-radius: 6px;
756
+ padding: 0 8px;
757
+ color: #0f172a;
758
+ }
759
+
760
+ .sparq-designer-form textarea {
761
+ min-height: 72px;
762
+ resize: vertical;
763
+ padding: 8px;
764
+ }
765
+
766
+ .sparq-designer-checks {
767
+ display: flex;
768
+ gap: 8px;
769
+ }
770
+
771
+ .sparq-designer-check {
772
+ display: inline-flex !important;
773
+ align-items: center;
774
+ gap: 8px;
775
+ color: #334155 !important;
776
+ }
777
+
778
+ .sparq-designer-check input {
779
+ min-height: auto;
780
+ margin: 0;
781
+ }
782
+
783
+ .sparq-designer-check span {
784
+ color: #334155;
785
+ }
786
+
787
+ .sparq-designer-empty {
788
+ color: var(--designer-muted);
789
+ padding: 16px;
790
+ font-size: 13px;
791
+ }
792
+
793
+ .sparq-designer-json-viewer {
794
+ max-height: 68vh;
795
+ overflow: auto;
796
+ margin: 0;
797
+ background: #0f172a;
798
+ color: #e2e8f0;
799
+ padding: 16px;
800
+ font-size: 12px;
801
+ }
802
+
803
+ .sparq-designer-preview {
804
+ overflow: auto;
805
+ margin: 18px auto;
806
+ padding: 18px;
807
+ }
808
+
809
+ .sparq-designer-preview-loading {
810
+ display: grid;
811
+ min-height: min(420px, 60vh);
812
+ place-items: center;
813
+ align-content: center;
814
+ gap: 12px;
815
+ color: var(--designer-muted);
816
+ font-size: 13px;
817
+ }
818
+
819
+ .sparq-designer-preview-loading__spinner {
820
+ width: 28px;
821
+ height: 28px;
822
+ box-sizing: border-box;
823
+ border: 3px solid #dbe3ef;
824
+ border-top-color: var(--designer-primary);
825
+ border-radius: 50%;
826
+ animation: sparq-designer-loading-spin 700ms linear infinite;
827
+ }
828
+
829
+ @keyframes sparq-designer-loading-spin {
830
+ to {
831
+ transform: rotate(360deg);
832
+ }
833
+ }
834
+
835
+ @media (prefers-reduced-motion: reduce) {
836
+ .sparq-designer-toolbar button.is-loading::before,
837
+ .sparq-designer-preview-loading__spinner {
838
+ animation: none;
839
+ }
840
+ }
841
+
842
+ .sparq-designer-preview.is-phone {
843
+ width: 390px;
844
+ }
845
+
846
+ .sparq-designer-preview.is-pad {
847
+ width: 768px;
848
+ }
849
+
850
+ .sparq-designer-preview.is-pc {
851
+ width: min(1200px, 100%);
852
+ }
853
+
854
+ .sparq-designer-resource-drawer .el-drawer__body {
855
+ padding: 0;
856
+ }
857
+
858
+ .sparq-designer-resource-tree {
859
+ display: grid;
860
+ align-content: start;
861
+ height: 100%;
862
+ overflow: auto;
863
+ padding: 10px 8px 28px;
864
+ }
865
+
866
+ .sparq-designer-resource-tree .el-tree {
867
+ --el-tree-node-hover-bg-color: #f9fafb;
868
+ background: transparent;
869
+ color: #334155;
870
+ }
871
+
872
+ .sparq-designer-resource-tree .el-tree-node__content {
873
+ position: relative;
874
+ height: auto;
875
+ min-height: 42px;
876
+ border-radius: 6px;
877
+ padding: 3px 6px 3px 4px;
878
+ transition:
879
+ background-color 140ms ease,
880
+ color 140ms ease;
881
+ }
882
+
883
+ .sparq-designer-resource-tree .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
884
+ background: rgb(79 70 229 / 7%);
885
+ color: var(--designer-primary);
886
+ }
887
+
888
+ .sparq-designer-resource-tree .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content::before {
889
+ position: absolute;
890
+ top: 7px;
891
+ bottom: 7px;
892
+ left: 0;
893
+ width: 2px;
894
+ border-radius: 999px;
895
+ background: var(--designer-primary);
896
+ content: '';
897
+ }
898
+
899
+ .sparq-designer-resource-tree-node {
900
+ display: grid;
901
+ width: 100%;
902
+ min-width: 0;
903
+ gap: 1px;
904
+ padding: 2px 0;
905
+ }
906
+
907
+ .sparq-designer-resource-tree-node__main {
908
+ display: grid;
909
+ grid-template-columns: minmax(0, 1fr) auto auto;
910
+ min-width: 0;
911
+ align-items: center;
912
+ gap: 6px;
913
+ }
914
+
915
+ .sparq-designer-resource-tree-node__label {
916
+ overflow: hidden;
917
+ color: currentColor;
918
+ font-size: 13px;
919
+ font-weight: 600;
920
+ line-height: 18px;
921
+ text-overflow: ellipsis;
922
+ white-space: nowrap;
923
+ }
924
+
925
+ .sparq-designer-resource-tree-node__tags {
926
+ display: inline-flex;
927
+ min-width: 0;
928
+ align-items: center;
929
+ gap: 4px;
930
+ overflow: hidden;
931
+ }
932
+
933
+ .sparq-designer-resource-tree-node__tag {
934
+ min-width: max-content;
935
+ border-radius: 3px;
936
+ background: rgb(14 165 233 / 9%);
937
+ color: #0369a1;
938
+ font-size: 10px;
939
+ font-weight: 600;
940
+ line-height: 14px;
941
+ padding: 0 4px;
942
+ text-transform: uppercase;
943
+ }
944
+
945
+ .sparq-designer-resource-tree-node__tag.is-field {
946
+ background: rgb(14 165 233 / 9%);
947
+ color: #0369a1;
948
+ }
949
+
950
+ .sparq-designer-resource-tree-node__tag.is-container {
951
+ background: rgb(16 185 129 / 10%);
952
+ color: #047857;
953
+ }
954
+
955
+ .sparq-designer-resource-tree-node__tag.is-layout {
956
+ background: rgb(100 116 139 / 10%);
957
+ color: #475569;
958
+ }
959
+
960
+ .sparq-designer-resource-tree-node__tag.is-view {
961
+ background: rgb(168 85 247 / 10%);
962
+ color: #7e22ce;
963
+ }
964
+
965
+ .sparq-designer-resource-tree-node__tag.is-virtual {
966
+ background: rgb(245 158 11 / 10%);
967
+ color: #b45309;
968
+ }
969
+
970
+ .sparq-designer-resource-tree-node__tag.is-conditional {
971
+ background: rgb(99 102 241 / 10%);
972
+ color: #4f46e5;
973
+ }
974
+
975
+ .sparq-designer-resource-tree-node__tag.is-count {
976
+ background: #f1f5f9;
977
+ color: #64748b;
978
+ }
979
+
980
+ .sparq-designer-resource-tree-node__tag.is-readonly {
981
+ display: inline-flex;
982
+ align-items: center;
983
+ gap: 2px;
984
+ background: rgb(100 116 139 / 10%);
985
+ color: #475569;
986
+ text-transform: none;
987
+ }
988
+
989
+ .sparq-designer-resource-tree-node__tag.is-readonly svg {
990
+ width: 10px;
991
+ height: 10px;
992
+ fill: none;
993
+ stroke: currentColor;
994
+ stroke-linecap: round;
995
+ stroke-linejoin: round;
996
+ stroke-width: 1.9;
997
+ }
998
+
999
+ .sparq-designer-resource-tree-node__actions {
1000
+ display: inline-flex;
1001
+ min-width: 0;
1002
+ justify-content: flex-end;
1003
+ opacity: 0;
1004
+ transition: opacity 120ms ease;
1005
+ }
1006
+
1007
+ .sparq-designer-resource-tree .el-tree-node__content:hover .sparq-designer-resource-tree-node__actions,
1008
+ .sparq-designer-resource-tree
1009
+ .el-tree-node.is-current
1010
+ > .el-tree-node__content
1011
+ .sparq-designer-resource-tree-node__actions {
1012
+ opacity: 1;
1013
+ }
1014
+
1015
+ .sparq-designer-resource-tree-node__actions button {
1016
+ display: inline-grid;
1017
+ width: 22px;
1018
+ height: 22px;
1019
+ place-items: center;
1020
+ border: 0;
1021
+ border-radius: 4px;
1022
+ background: transparent;
1023
+ color: #64748b;
1024
+ cursor: pointer;
1025
+ padding: 0;
1026
+ }
1027
+
1028
+ .sparq-designer-resource-tree-node__actions button:hover:not(:disabled) {
1029
+ background: #eef2ff;
1030
+ color: var(--designer-primary);
1031
+ }
1032
+
1033
+ .sparq-designer-resource-tree-node__actions button:disabled {
1034
+ color: #cbd5e1;
1035
+ cursor: not-allowed;
1036
+ }
1037
+
1038
+ .sparq-designer-resource-tree-node__actions svg {
1039
+ width: 14px;
1040
+ height: 14px;
1041
+ stroke: currentColor;
1042
+ stroke-linecap: round;
1043
+ stroke-linejoin: round;
1044
+ stroke-width: 1.9;
1045
+ }
1046
+
1047
+ .sparq-designer-resource-tree-node__meta {
1048
+ display: flex;
1049
+ min-width: 0;
1050
+ flex-wrap: wrap;
1051
+ column-gap: 0;
1052
+ color: #64748b;
1053
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1054
+ font-size: 10px;
1055
+ line-height: 14px;
1056
+ }
1057
+
1058
+ .sparq-designer-resource-tree-node__meta span {
1059
+ overflow: hidden;
1060
+ max-width: 152px;
1061
+ text-overflow: ellipsis;
1062
+ white-space: nowrap;
1063
+ }
1064
+
1065
+ .sparq-designer-resource-tree-node__meta span + span::before {
1066
+ color: #cbd5e1;
1067
+ content: '/';
1068
+ padding: 0 5px;
1069
+ }
1070
+
1071
+ .sparq-validation-dialog button {
1072
+ border: 1px solid #dbe3ef;
1073
+ border-radius: 4px;
1074
+ background: #fff;
1075
+ color: #334155;
1076
+ cursor: pointer;
1077
+ font-size: 12px;
1078
+ line-height: 1;
1079
+ padding: 7px 10px;
1080
+ }
1081
+
1082
+ .sparq-validation-dialog button:hover {
1083
+ border-color: #9db2d0;
1084
+ color: var(--designer-primary);
1085
+ }
1086
+
1087
+ .sparq-validation-dialog {
1088
+ position: fixed;
1089
+ z-index: 80;
1090
+ inset: 0;
1091
+ }
1092
+
1093
+ .sparq-validation-dialog__mask {
1094
+ position: absolute;
1095
+ inset: 0;
1096
+ background: rgb(15 23 42 / 42%);
1097
+ }
1098
+
1099
+ .sparq-validation-dialog__panel {
1100
+ position: absolute;
1101
+ top: 50%;
1102
+ left: 50%;
1103
+ display: flex;
1104
+ width: min(720px, calc(100vw - 48px));
1105
+ max-height: min(720px, calc(100vh - 48px));
1106
+ flex-direction: column;
1107
+ border: 1px solid #dbe3ef;
1108
+ border-radius: 8px;
1109
+ background: #fff;
1110
+ box-shadow: 0 24px 64px rgb(15 23 42 / 20%);
1111
+ transform: translate(-50%, -50%);
1112
+ }
1113
+
1114
+ .sparq-validation-dialog__header,
1115
+ .sparq-validation-dialog__footer {
1116
+ display: flex;
1117
+ align-items: center;
1118
+ justify-content: space-between;
1119
+ gap: 12px;
1120
+ padding: 14px 16px;
1121
+ }
1122
+
1123
+ .sparq-validation-dialog__header {
1124
+ border-bottom: 1px solid #e2e8f0;
1125
+ }
1126
+
1127
+ .sparq-validation-dialog__header h3 {
1128
+ margin: 0;
1129
+ color: #0f172a;
1130
+ font-size: 15px;
1131
+ }
1132
+
1133
+ .sparq-validation-dialog__header p {
1134
+ margin: 4px 0 0;
1135
+ color: #64748b;
1136
+ font-size: 12px;
1137
+ }
1138
+
1139
+ .sparq-validation-dialog__body {
1140
+ display: grid;
1141
+ gap: 12px;
1142
+ overflow: auto;
1143
+ padding: 16px;
1144
+ }
1145
+
1146
+ .sparq-validation-dialog__footer {
1147
+ justify-content: flex-end;
1148
+ border-top: 1px solid #e2e8f0;
1149
+ }
1150
+
1151
+ .sparq-validation-dialog__footer .is-primary {
1152
+ border-color: var(--designer-primary);
1153
+ background: var(--designer-primary);
1154
+ color: #fff;
1155
+ }
1156
+
1157
+ .sparq-validation-dialog__error {
1158
+ margin: 0;
1159
+ border-left: 3px solid var(--designer-danger);
1160
+ background: var(--designer-danger-soft);
1161
+ color: var(--designer-danger);
1162
+ font-size: 12px;
1163
+ line-height: 1.5;
1164
+ padding: 8px 10px;
1165
+ }
1166
+
1167
+ .sparq-validation-rule {
1168
+ display: grid;
1169
+ gap: 10px;
1170
+ border: 1px solid #e2e8f0;
1171
+ border-radius: 6px;
1172
+ padding: 12px;
1173
+ }
1174
+
1175
+ .sparq-validation-rule header {
1176
+ display: flex;
1177
+ align-items: center;
1178
+ justify-content: space-between;
1179
+ gap: 8px;
1180
+ }
1181
+
1182
+ .sparq-validation-rule strong {
1183
+ color: #0f172a;
1184
+ font-size: 13px;
1185
+ }
1186
+
1187
+ .sparq-validation-rule label {
1188
+ display: grid;
1189
+ gap: 5px;
1190
+ color: #64748b;
1191
+ font-size: 12px;
1192
+ }
1193
+
1194
+ .sparq-validation-boundary small {
1195
+ color: var(--designer-muted);
1196
+ line-height: 1.5;
1197
+ }
1198
+
1199
+ .sparq-validation-rule__control {
1200
+ width: 100%;
1201
+ min-width: 0;
1202
+ }
1203
+
1204
+ .sparq-validation-options {
1205
+ display: flex;
1206
+ flex-wrap: wrap;
1207
+ gap: 8px;
1208
+ }
1209
+
1210
+ .sparq-validation-options button.is-active {
1211
+ border-color: var(--designer-primary);
1212
+ background: rgb(37 99 235 / 8%);
1213
+ color: var(--designer-primary);
1214
+ }
1215
+
1216
+ .sparq-validation-grid {
1217
+ display: grid;
1218
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1219
+ gap: 10px;
1220
+ }
1221
+
1222
+ .sparq-validation-condition {
1223
+ display: grid;
1224
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.9fr) minmax(0, 1fr);
1225
+ gap: 10px;
1226
+ }
1227
+
1228
+ .sparq-validation-rule__hint {
1229
+ margin: 0;
1230
+ color: #64748b;
1231
+ font-size: 12px;
1232
+ }
1233
+
1234
+ .sparq-validation-rule__error {
1235
+ color: var(--designer-danger);
1236
+ font-size: 11px;
1237
+ line-height: 1.4;
1238
+ }
1239
+
1240
+ .sparq-date-time-format-editor {
1241
+ display: grid;
1242
+ width: 100%;
1243
+ gap: 6px;
1244
+ }
1245
+
1246
+ .sparq-date-time-format-editor__control {
1247
+ width: 100%;
1248
+ min-width: 0;
1249
+ }
1250
+
1251
+ .sparq-static-options-inline {
1252
+ width: 100%;
1253
+ min-width: 0;
1254
+ }
1255
+
1256
+ .sparq-static-options-table {
1257
+ display: grid;
1258
+ gap: 8px;
1259
+ }
1260
+
1261
+ .sparq-static-options-table__head {
1262
+ display: grid;
1263
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 214px;
1264
+ gap: 8px;
1265
+ align-items: center;
1266
+ }
1267
+
1268
+ .sparq-static-options-table__head {
1269
+ color: #64748b;
1270
+ font-size: 12px;
1271
+ font-weight: 600;
1272
+ }
1273
+
1274
+ .sparq-static-options-row {
1275
+ display: grid;
1276
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 214px;
1277
+ gap: 8px;
1278
+ align-items: center;
1279
+ padding-bottom: 8px;
1280
+ }
1281
+
1282
+ .sparq-static-options-row__field {
1283
+ min-width: 0;
1284
+ }
1285
+
1286
+ .sparq-static-options-row__label {
1287
+ position: absolute;
1288
+ width: 1px;
1289
+ height: 1px;
1290
+ padding: 0;
1291
+ margin: -1px;
1292
+ overflow: hidden;
1293
+ clip: rect(0, 0, 0, 0);
1294
+ white-space: nowrap;
1295
+ }
1296
+
1297
+ .sparq-static-options-row__actions {
1298
+ display: flex;
1299
+ gap: 6px;
1300
+ justify-content: flex-end;
1301
+ }
1302
+
1303
+ .sparq-static-options-toolbar {
1304
+ display: flex;
1305
+ gap: 8px;
1306
+ }
1307
+
1308
+ .sparq-static-options-empty {
1309
+ margin: 0;
1310
+ color: #64748b;
1311
+ font-size: 12px;
1312
+ }
1313
+
1314
+ @media (max-width: 760px) {
1315
+ .sparq-static-options-table__head {
1316
+ display: none;
1317
+ }
1318
+
1319
+ .sparq-static-options-row {
1320
+ grid-template-columns: minmax(0, 1fr);
1321
+ gap: 10px;
1322
+ padding-bottom: 12px;
1323
+ }
1324
+
1325
+ .sparq-static-options-row__field {
1326
+ display: grid;
1327
+ gap: 5px;
1328
+ }
1329
+
1330
+ .sparq-static-options-row__label {
1331
+ position: static;
1332
+ width: auto;
1333
+ height: auto;
1334
+ margin: 0;
1335
+ overflow: visible;
1336
+ clip: auto;
1337
+ color: var(--designer-muted);
1338
+ font-size: 12px;
1339
+ font-weight: 600;
1340
+ white-space: normal;
1341
+ }
1342
+
1343
+ .sparq-static-options-row__actions {
1344
+ justify-content: flex-start;
1345
+ }
1346
+ }
1347
+
1348
+ .sparq-capability-editor {
1349
+ width: 100%;
1350
+ }
1351
+
1352
+ .sparq-capability-editor__summary {
1353
+ display: flex;
1354
+ min-height: 32px;
1355
+ align-items: center;
1356
+ justify-content: space-between;
1357
+ gap: 8px;
1358
+ color: #475569;
1359
+ font-size: 12px;
1360
+ }
1361
+
1362
+ .sparq-capability-editor__status {
1363
+ min-width: 0;
1364
+ color: #334155;
1365
+ overflow: hidden;
1366
+ text-overflow: ellipsis;
1367
+ white-space: nowrap;
1368
+ }
1369
+
1370
+ .sparq-capability-editor__actions {
1371
+ display: flex;
1372
+ flex-wrap: wrap;
1373
+ gap: 6px;
1374
+ justify-content: flex-end;
1375
+ }
1376
+
1377
+ .sparq-capability-editor__readonly {
1378
+ flex: 0 0 auto;
1379
+ color: #64748b;
1380
+ font-size: 11px;
1381
+ }
1382
+
1383
+ .sparq-capability-editor__button,
1384
+ .sparq-value-strategy-dialog button,
1385
+ .sparq-interaction-rules-dialog button {
1386
+ border: 1px solid #dbe3ef;
1387
+ border-radius: 4px;
1388
+ background: #fff;
1389
+ color: #334155;
1390
+ cursor: pointer;
1391
+ font-size: 12px;
1392
+ line-height: 1;
1393
+ padding: 7px 10px;
1394
+ }
1395
+
1396
+ .sparq-capability-editor__button:hover,
1397
+ .sparq-value-strategy-dialog button:hover:not(:disabled),
1398
+ .sparq-interaction-rules-dialog button:hover:not(:disabled) {
1399
+ border-color: #9db2d0;
1400
+ color: var(--designer-primary);
1401
+ }
1402
+
1403
+ .sparq-capability-editor__button:disabled {
1404
+ cursor: not-allowed;
1405
+ opacity: 0.5;
1406
+ }
1407
+
1408
+ .sparq-container-items-editor {
1409
+ display: grid;
1410
+ width: 100%;
1411
+ min-width: 0;
1412
+ gap: 8px;
1413
+ }
1414
+
1415
+ .sparq-container-items-editor__toolbar {
1416
+ display: flex;
1417
+ min-height: 30px;
1418
+ align-items: center;
1419
+ justify-content: space-between;
1420
+ gap: 8px;
1421
+ color: var(--designer-muted);
1422
+ font-size: 12px;
1423
+ }
1424
+
1425
+ .sparq-container-items-editor__add {
1426
+ display: inline-flex;
1427
+ min-height: 28px;
1428
+ align-items: center;
1429
+ gap: 5px;
1430
+ border: 1px solid var(--designer-border);
1431
+ border-radius: 4px;
1432
+ background: #fff;
1433
+ color: #334155;
1434
+ cursor: pointer;
1435
+ font-size: 12px;
1436
+ padding: 0 8px;
1437
+ }
1438
+
1439
+ .sparq-container-items-editor__add:hover:not(:disabled) {
1440
+ border-color: #9db2d0;
1441
+ color: var(--designer-primary);
1442
+ }
1443
+
1444
+ .sparq-container-items-editor__add:disabled,
1445
+ .sparq-container-items-editor__actions button:disabled {
1446
+ cursor: not-allowed;
1447
+ opacity: 0.45;
1448
+ }
1449
+
1450
+ .sparq-container-items-editor__add svg,
1451
+ .sparq-container-items-editor__actions svg {
1452
+ width: 14px;
1453
+ height: 14px;
1454
+ flex: 0 0 auto;
1455
+ stroke: currentColor;
1456
+ stroke-linecap: round;
1457
+ stroke-linejoin: round;
1458
+ stroke-width: 1.9;
1459
+ }
1460
+
1461
+ .sparq-container-items-editor__list {
1462
+ display: grid;
1463
+ min-width: 0;
1464
+ gap: 6px;
1465
+ margin: 0;
1466
+ padding: 0;
1467
+ list-style: none;
1468
+ }
1469
+
1470
+ .sparq-container-items-editor__item {
1471
+ display: grid;
1472
+ min-width: 0;
1473
+ gap: 6px;
1474
+ border-radius: 5px;
1475
+ background: #f8fafc;
1476
+ padding: 6px;
1477
+ }
1478
+
1479
+ .sparq-container-items-editor__row {
1480
+ display: grid;
1481
+ grid-template-columns: minmax(0, 1fr) auto;
1482
+ min-width: 0;
1483
+ align-items: center;
1484
+ gap: 6px;
1485
+ }
1486
+
1487
+ .sparq-container-items-editor__title {
1488
+ width: 100%;
1489
+ min-width: 0;
1490
+ }
1491
+
1492
+ .sparq-container-items-editor button:focus-visible {
1493
+ outline: 2px solid color-mix(in srgb, var(--designer-primary) 38%, transparent);
1494
+ outline-offset: 1px;
1495
+ }
1496
+
1497
+ .sparq-container-items-editor__actions {
1498
+ display: inline-flex;
1499
+ align-items: center;
1500
+ gap: 2px;
1501
+ }
1502
+
1503
+ .sparq-container-items-editor__actions button {
1504
+ display: inline-grid;
1505
+ width: 26px;
1506
+ height: 26px;
1507
+ place-items: center;
1508
+ border: 0;
1509
+ border-radius: 4px;
1510
+ background: transparent;
1511
+ color: #64748b;
1512
+ cursor: pointer;
1513
+ padding: 0;
1514
+ }
1515
+
1516
+ .sparq-container-items-editor__actions button:hover:not(:disabled) {
1517
+ background: #eef2ff;
1518
+ color: var(--designer-primary);
1519
+ }
1520
+
1521
+ .sparq-container-items-editor__actions button.is-danger:hover:not(:disabled) {
1522
+ background: var(--designer-danger-soft);
1523
+ color: var(--designer-danger);
1524
+ }
1525
+
1526
+ .sparq-container-items-editor__confirm {
1527
+ display: flex;
1528
+ align-items: center;
1529
+ justify-content: space-between;
1530
+ gap: 8px;
1531
+ color: var(--designer-danger);
1532
+ font-size: 11px;
1533
+ }
1534
+
1535
+ .sparq-container-items-editor__confirm > div {
1536
+ display: inline-flex;
1537
+ flex: 0 0 auto;
1538
+ gap: 4px;
1539
+ }
1540
+
1541
+ .sparq-container-items-editor__confirm button {
1542
+ border: 0;
1543
+ border-radius: 3px;
1544
+ background: #fff;
1545
+ color: #475569;
1546
+ cursor: pointer;
1547
+ font-size: 11px;
1548
+ padding: 4px 6px;
1549
+ }
1550
+
1551
+ .sparq-container-items-editor__confirm button.is-danger {
1552
+ background: var(--designer-danger-soft);
1553
+ color: var(--designer-danger);
1554
+ }
1555
+
1556
+ .sparq-container-items-editor__empty {
1557
+ display: grid;
1558
+ min-height: 56px;
1559
+ place-items: center;
1560
+ border: 1px dashed var(--designer-border);
1561
+ border-radius: 5px;
1562
+ color: var(--designer-muted);
1563
+ font-size: 12px;
1564
+ }
1565
+
1566
+ .sparq-value-strategy-dialog,
1567
+ .sparq-interaction-rules-dialog {
1568
+ position: fixed;
1569
+ z-index: 80;
1570
+ inset: 0;
1571
+ }
1572
+
1573
+ .sparq-value-strategy-dialog__mask,
1574
+ .sparq-interaction-rules-dialog__mask {
1575
+ position: absolute;
1576
+ inset: 0;
1577
+ background: rgb(15 23 42 / 42%);
1578
+ }
1579
+
1580
+ .sparq-value-strategy-dialog__panel,
1581
+ .sparq-interaction-rules-dialog__panel {
1582
+ position: absolute;
1583
+ top: 50%;
1584
+ left: 50%;
1585
+ display: flex;
1586
+ width: min(720px, calc(100vw - 48px));
1587
+ max-height: min(680px, calc(100vh - 48px));
1588
+ flex-direction: column;
1589
+ border: 1px solid #dbe3ef;
1590
+ border-radius: 8px;
1591
+ background: #fff;
1592
+ box-shadow: 0 24px 64px rgb(15 23 42 / 20%);
1593
+ transform: translate(-50%, -50%);
1594
+ }
1595
+
1596
+ .sparq-value-strategy-dialog__header,
1597
+ .sparq-value-strategy-dialog__footer,
1598
+ .sparq-interaction-rules-dialog__header,
1599
+ .sparq-interaction-rules-dialog__footer {
1600
+ display: flex;
1601
+ align-items: center;
1602
+ justify-content: space-between;
1603
+ gap: 12px;
1604
+ padding: 14px 16px;
1605
+ }
1606
+
1607
+ .sparq-value-strategy-dialog__header,
1608
+ .sparq-interaction-rules-dialog__header {
1609
+ border-bottom: 1px solid #e2e8f0;
1610
+ }
1611
+
1612
+ .sparq-value-strategy-dialog__header h3,
1613
+ .sparq-interaction-rules-dialog__header h3 {
1614
+ margin: 0;
1615
+ color: #0f172a;
1616
+ font-size: 15px;
1617
+ }
1618
+
1619
+ .sparq-value-strategy-dialog__header p,
1620
+ .sparq-interaction-rules-dialog__header p {
1621
+ margin: 4px 0 0;
1622
+ color: #64748b;
1623
+ font-size: 12px;
1624
+ }
1625
+
1626
+ .sparq-value-strategy-dialog__body,
1627
+ .sparq-interaction-rules-dialog__body {
1628
+ overflow: auto;
1629
+ padding: 16px;
1630
+ }
1631
+
1632
+ .sparq-value-strategy-dialog__body {
1633
+ display: grid;
1634
+ gap: 16px;
1635
+ }
1636
+
1637
+ .sparq-computed-expression-editor {
1638
+ display: grid;
1639
+ gap: 12px;
1640
+ border-top: 1px solid #e2e8f0;
1641
+ padding-top: 16px;
1642
+ }
1643
+
1644
+ .sparq-computed-expression-editor__field {
1645
+ display: grid;
1646
+ grid-template-columns: 96px minmax(0, 1fr);
1647
+ align-items: center;
1648
+ gap: 10px;
1649
+ color: #334155;
1650
+ font-size: 12px;
1651
+ }
1652
+
1653
+ .sparq-computed-expression-editor__control {
1654
+ width: 100%;
1655
+ min-width: 0;
1656
+ }
1657
+
1658
+ .sparq-computed-expression-editor__fields {
1659
+ display: grid;
1660
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1661
+ gap: 8px;
1662
+ margin: 0;
1663
+ border: 1px solid #dbe3ef;
1664
+ border-radius: 6px;
1665
+ padding: 10px 12px 12px;
1666
+ }
1667
+
1668
+ .sparq-computed-expression-editor__fields legend {
1669
+ padding: 0 4px;
1670
+ color: #475569;
1671
+ font-size: 12px;
1672
+ }
1673
+
1674
+ .sparq-computed-expression-editor__notice,
1675
+ .sparq-computed-expression-editor__empty {
1676
+ margin: 0;
1677
+ color: #64748b;
1678
+ font-size: 12px;
1679
+ line-height: 1.5;
1680
+ }
1681
+
1682
+ .sparq-computed-expression-editor__notice {
1683
+ border-left: 3px solid #2563eb;
1684
+ background: #eff6ff;
1685
+ color: #1e40af;
1686
+ padding: 8px 10px;
1687
+ }
1688
+
1689
+ @media (max-width: 560px) {
1690
+ .sparq-computed-expression-editor__field {
1691
+ grid-template-columns: minmax(0, 1fr);
1692
+ gap: 6px;
1693
+ }
1694
+ }
1695
+
1696
+ .sparq-value-strategy-dialog__footer,
1697
+ .sparq-interaction-rules-dialog__footer {
1698
+ justify-content: flex-end;
1699
+ border-top: 1px solid #e2e8f0;
1700
+ }
1701
+
1702
+ .sparq-value-strategy-dialog__footer .is-primary,
1703
+ .sparq-interaction-rules-dialog__footer .is-primary {
1704
+ border-color: var(--designer-primary);
1705
+ background: var(--designer-primary);
1706
+ color: #fff;
1707
+ }
1708
+ .sparq-component-migration-dialog__panel {
1709
+ width: min(520px, calc(100vw - 48px));
1710
+ }
1711
+
1712
+ .sparq-component-migration-dialog__notice {
1713
+ margin: 0 0 12px;
1714
+ padding: 10px 12px;
1715
+ border-left: 3px solid #d97706;
1716
+ background: #fffbeb;
1717
+ color: #92400e;
1718
+ font-size: 12px;
1719
+ line-height: 1.6;
1720
+ }
1721
+
1722
+ .sparq-component-migration-dialog__changes {
1723
+ display: grid;
1724
+ gap: 8px;
1725
+ margin: 0;
1726
+ padding: 0;
1727
+ list-style: none;
1728
+ }
1729
+
1730
+ .sparq-component-migration-dialog__changes li {
1731
+ padding: 9px 10px;
1732
+ border-left: 3px solid #94a3b8;
1733
+ background: #f8fafc;
1734
+ color: #334155;
1735
+ font-size: 12px;
1736
+ line-height: 1.5;
1737
+ }
1738
+
1739
+ .sparq-component-migration-dialog__changes .is-remove {
1740
+ border-left-color: #dc2626;
1741
+ background: #fef2f2;
1742
+ color: #991b1b;
1743
+ }
1744
+
1745
+ .sparq-component-migration-dialog__changes .is-change {
1746
+ border-left-color: #d97706;
1747
+ }
1748
+
1749
+ .sparq-component-migration-dialog__changes .is-add {
1750
+ border-left-color: #15803d;
1751
+ }
1752
+
1753
+ .sparq-component-migration-dialog__changes .is-preserve {
1754
+ border-left-color: #2563eb;
1755
+ background: #eff6ff;
1756
+ color: #1e40af;
1757
+ }
1758
+
1759
+ .sparq-capability-editor__service-state {
1760
+ display: flex;
1761
+ align-items: center;
1762
+ justify-content: space-between;
1763
+ gap: 8px;
1764
+ margin: 0 0 8px;
1765
+ padding: 7px 8px;
1766
+ border-left: 3px solid #2563eb;
1767
+ background: #eff6ff;
1768
+ color: #1e40af;
1769
+ font-size: 12px;
1770
+ line-height: 1.5;
1771
+ }
1772
+
1773
+ .sparq-capability-editor__service-state.is-error {
1774
+ border-left-color: #dc2626;
1775
+ background: #fef2f2;
1776
+ color: #991b1b;
1777
+ }
1778
+
1779
+ .sparq-capability-editor__service-state button {
1780
+ flex: 0 0 auto;
1781
+ }
1782
+
1783
+ .sparq-interaction-rules-editor__list {
1784
+ display: grid;
1785
+ gap: 8px;
1786
+ width: 100%;
1787
+ }
1788
+
1789
+ .sparq-interaction-rule-row {
1790
+ display: grid;
1791
+ grid-template-columns: minmax(0, 1fr) auto;
1792
+ gap: 8px;
1793
+ align-items: center;
1794
+ border: 1px solid #dbe3ef;
1795
+ border-radius: 6px;
1796
+ background: #fff;
1797
+ padding: 8px;
1798
+ }
1799
+
1800
+ .sparq-interaction-rule-row.is-configured {
1801
+ border-color: rgb(37 99 235 / 28%);
1802
+ background: rgb(37 99 235 / 4%);
1803
+ }
1804
+
1805
+ .sparq-interaction-rule-row__main {
1806
+ display: grid;
1807
+ min-width: 0;
1808
+ gap: 3px;
1809
+ }
1810
+
1811
+ .sparq-interaction-rule-row__title {
1812
+ display: flex;
1813
+ min-width: 0;
1814
+ align-items: center;
1815
+ gap: 6px;
1816
+ }
1817
+
1818
+ .sparq-interaction-rule-row__title span {
1819
+ color: #334155;
1820
+ font-size: 12px;
1821
+ font-weight: 700;
1822
+ line-height: 18px;
1823
+ }
1824
+
1825
+ .sparq-interaction-rule-row__title strong {
1826
+ border-radius: 3px;
1827
+ background: #eff6ff;
1828
+ color: var(--designer-primary);
1829
+ font-size: 10px;
1830
+ font-weight: 700;
1831
+ line-height: 14px;
1832
+ padding: 0 4px;
1833
+ }
1834
+
1835
+ .sparq-interaction-rule-row p {
1836
+ overflow: hidden;
1837
+ margin: 0;
1838
+ color: #64748b;
1839
+ font-size: 12px;
1840
+ line-height: 17px;
1841
+ text-overflow: ellipsis;
1842
+ white-space: nowrap;
1843
+ }
1844
+
1845
+ .sparq-interaction-rule-row__actions {
1846
+ display: inline-flex;
1847
+ gap: 6px;
1848
+ }
1849
+
1850
+ .sparq-designer-condition-editor,
1851
+ .sparq-designer-condition-visual {
1852
+ display: grid;
1853
+ gap: 10px;
1854
+ }
1855
+
1856
+ .sparq-designer-condition-editor-form {
1857
+ display: grid;
1858
+ gap: 10px;
1859
+ }
1860
+
1861
+ .sparq-designer-condition-visual__toolbar {
1862
+ display: flex;
1863
+ justify-content: flex-end;
1864
+ }
1865
+
1866
+ .sparq-designer-condition-group {
1867
+ display: grid;
1868
+ gap: 10px;
1869
+ border-left: 2px solid #dbe3ef;
1870
+ padding-left: 12px;
1871
+ }
1872
+
1873
+ .sparq-designer-condition-group.is-root {
1874
+ border: 1px solid #dbe3ef;
1875
+ border-radius: 6px;
1876
+ background: #f8fafc;
1877
+ padding: 12px;
1878
+ }
1879
+
1880
+ .sparq-designer-condition-group__head {
1881
+ display: grid;
1882
+ grid-template-columns: minmax(0, 1fr) 220px auto;
1883
+ gap: 8px;
1884
+ align-items: flex-start;
1885
+ }
1886
+
1887
+ .sparq-designer-condition-group__head strong {
1888
+ color: #0f172a;
1889
+ font-size: 12px;
1890
+ line-height: 24px;
1891
+ }
1892
+
1893
+ .sparq-designer-condition-group__logic {
1894
+ min-width: 0;
1895
+ }
1896
+
1897
+ .sparq-designer-condition-group__head > .el-button {
1898
+ justify-self: end;
1899
+ }
1900
+
1901
+ .sparq-designer-condition-group__items {
1902
+ display: grid;
1903
+ gap: 10px;
1904
+ }
1905
+
1906
+ .sparq-designer-condition-group__actions {
1907
+ display: flex;
1908
+ gap: 8px;
1909
+ justify-content: flex-start;
1910
+ }
1911
+
1912
+ .sparq-designer-condition-rule {
1913
+ display: grid;
1914
+ grid-template-columns: minmax(150px, 1fr) minmax(120px, 160px) minmax(180px, 1.2fr) auto;
1915
+ gap: 8px;
1916
+ align-items: flex-start;
1917
+ border: 1px solid #e2e8f0;
1918
+ border-radius: 6px;
1919
+ background: #fff;
1920
+ padding: 8px;
1921
+ }
1922
+
1923
+ .sparq-designer-condition-rule .el-select,
1924
+ .sparq-designer-condition-rule .el-input,
1925
+ .sparq-designer-condition-group__logic .el-select {
1926
+ width: 100%;
1927
+ }
1928
+
1929
+ .sparq-designer-condition-rule .el-select__selected-item,
1930
+ .sparq-designer-condition-rule .el-input__inner,
1931
+ .sparq-designer-condition-group__logic .el-select__selected-item {
1932
+ text-align: left;
1933
+ }
1934
+
1935
+ .sparq-designer-condition-rule__value {
1936
+ min-height: 24px;
1937
+ }
1938
+
1939
+ .sparq-designer-condition-rule__value-placeholder {
1940
+ display: flex;
1941
+ min-height: 24px;
1942
+ align-items: center;
1943
+ color: #94a3b8;
1944
+ font-size: 12px;
1945
+ }
1946
+
1947
+ @media (max-width: 760px) {
1948
+ .sparq-designer-condition-group__head,
1949
+ .sparq-designer-condition-rule {
1950
+ grid-template-columns: minmax(0, 1fr);
1951
+ }
1952
+ }
1953
+
1954
+ .sparq-option-source-dialog button {
1955
+ border: 1px solid #dbe3ef;
1956
+ border-radius: 4px;
1957
+ background: #fff;
1958
+ color: #334155;
1959
+ cursor: pointer;
1960
+ font-size: 12px;
1961
+ line-height: 1;
1962
+ padding: 7px 10px;
1963
+ }
1964
+
1965
+ .sparq-option-source-dialog button:hover:not(:disabled) {
1966
+ border-color: #9db2d0;
1967
+ color: var(--designer-primary);
1968
+ }
1969
+
1970
+ .sparq-option-source-dialog button:disabled {
1971
+ cursor: not-allowed;
1972
+ opacity: 0.48;
1973
+ }
1974
+
1975
+ .sparq-option-source-dialog {
1976
+ position: fixed;
1977
+ z-index: 80;
1978
+ inset: 0;
1979
+ }
1980
+
1981
+ .sparq-option-source-dialog__mask {
1982
+ position: absolute;
1983
+ inset: 0;
1984
+ background: rgb(15 23 42 / 42%);
1985
+ }
1986
+
1987
+ .sparq-option-source-dialog__panel {
1988
+ position: absolute;
1989
+ top: 50%;
1990
+ left: 50%;
1991
+ display: flex;
1992
+ width: min(820px, calc(100vw - 48px));
1993
+ max-height: min(760px, calc(100vh - 48px));
1994
+ flex-direction: column;
1995
+ border: 1px solid #dbe3ef;
1996
+ border-radius: 8px;
1997
+ background: #fff;
1998
+ box-shadow: 0 24px 64px rgb(15 23 42 / 20%);
1999
+ transform: translate(-50%, -50%);
2000
+ }
2001
+
2002
+ .sparq-option-source-dialog__header,
2003
+ .sparq-option-source-dialog__footer {
2004
+ display: flex;
2005
+ align-items: center;
2006
+ justify-content: space-between;
2007
+ gap: 12px;
2008
+ padding: 14px 16px;
2009
+ }
2010
+
2011
+ .sparq-option-source-dialog__header {
2012
+ border-bottom: 1px solid #e2e8f0;
2013
+ }
2014
+
2015
+ .sparq-option-source-dialog__header h3 {
2016
+ margin: 0;
2017
+ color: #0f172a;
2018
+ font-size: 15px;
2019
+ }
2020
+
2021
+ .sparq-option-source-dialog__header p {
2022
+ margin: 4px 0 0;
2023
+ color: #64748b;
2024
+ font-size: 12px;
2025
+ }
2026
+
2027
+ .sparq-option-source-dialog__body {
2028
+ display: grid;
2029
+ gap: 12px;
2030
+ overflow: auto;
2031
+ padding: 16px;
2032
+ }
2033
+
2034
+ .sparq-option-source-dialog__footer {
2035
+ justify-content: flex-end;
2036
+ border-top: 1px solid #e2e8f0;
2037
+ }
2038
+
2039
+ .sparq-option-source-dialog__footer .is-primary {
2040
+ border-color: var(--designer-primary);
2041
+ background: var(--designer-primary);
2042
+ color: #fff;
2043
+ }
2044
+
2045
+ .sparq-option-source-toolbar {
2046
+ display: flex;
2047
+ flex-wrap: wrap;
2048
+ gap: 8px;
2049
+ }
2050
+
2051
+ .sparq-option-source-empty {
2052
+ margin: 0;
2053
+ color: #64748b;
2054
+ font-size: 12px;
2055
+ }
2056
+
2057
+ .sparq-designer-unavailable-component {
2058
+ min-height: 32px;
2059
+ border: 1px dashed var(--designer-border);
2060
+ border-radius: 4px;
2061
+ background: var(--designer-bg);
2062
+ padding: 7px 10px;
2063
+ color: var(--designer-muted);
2064
+ font-size: 13px;
2065
+ }
2066
+
2067
+ .sparq-color-palette-editor__preview {
2068
+ display: flex;
2069
+ min-width: 0;
2070
+ align-items: center;
2071
+ gap: 4px;
2072
+ color: var(--designer-muted);
2073
+ font-size: 12px;
2074
+ }
2075
+
2076
+ .sparq-color-palette-editor__swatch {
2077
+ width: 18px;
2078
+ height: 18px;
2079
+ flex: 0 0 18px;
2080
+ border: 1px solid var(--designer-border);
2081
+ border-radius: 4px;
2082
+ }
2083
+
2084
+ .sparq-color-palette-dialog {
2085
+ width: min(620px, calc(100vw - 48px));
2086
+ }
2087
+
2088
+ .sparq-color-palette-dialog__list {
2089
+ display: grid;
2090
+ gap: 8px;
2091
+ }
2092
+
2093
+ .sparq-color-palette-dialog__row {
2094
+ display: grid;
2095
+ grid-template-columns: 34px minmax(0, 1fr) repeat(3, 30px);
2096
+ align-items: center;
2097
+ gap: 6px;
2098
+ }
2099
+
2100
+ .sparq-color-palette-dialog__swatch {
2101
+ width: 34px;
2102
+ height: 32px;
2103
+ }
2104
+
2105
+ .sparq-color-palette-dialog__value {
2106
+ width: 100%;
2107
+ min-width: 0;
2108
+ }
2109
+
2110
+ .sparq-color-palette-dialog__row button {
2111
+ width: 30px;
2112
+ height: 30px;
2113
+ padding: 0;
2114
+ }
2115
+
2116
+ .sparq-color-palette-dialog__row button:disabled {
2117
+ cursor: not-allowed;
2118
+ opacity: 0.45;
2119
+ }
2120
+
2121
+ .sparq-color-palette-dialog__add {
2122
+ justify-self: start;
2123
+ }
2124
+
2125
+ .sparq-color-palette-dialog__empty {
2126
+ margin: 0;
2127
+ color: var(--designer-muted);
2128
+ font-size: 12px;
2129
+ }