@nextbridgehq/payload-block-builder 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.
@@ -0,0 +1,361 @@
1
+ /* ── Schema Builder Field — Payload light theme tokens ───────────────────── */
2
+
3
+ /* ── Input ──────────────────────────────────────────────────────────────── */
4
+ .sbf-input {
5
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);
6
+ font-family: var(--font-body);
7
+ width: 100%;
8
+ border: 1px solid var(--theme-elevation-150);
9
+ border-radius: var(--style-radius-s, 4px);
10
+ background: var(--theme-input-bg, var(--theme-elevation-0));
11
+ color: var(--theme-elevation-800);
12
+ font-size: 1rem;
13
+ height: 40px;
14
+ line-height: 20px;
15
+ padding: 8px 15px;
16
+ -webkit-appearance: none;
17
+ transition-property: border, box-shadow, background-color;
18
+ transition-duration: 0.1s, 0.1s, 0.5s;
19
+ transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
20
+ box-sizing: border-box;
21
+ }
22
+ .sbf-input:hover:not(:disabled) {
23
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.2);
24
+ border-color: var(--theme-elevation-250);
25
+ }
26
+ .sbf-input:focus,
27
+ .sbf-input:focus-within,
28
+ .sbf-input:active {
29
+ border-color: var(--theme-elevation-400);
30
+ outline: 0;
31
+ }
32
+ .sbf-input:disabled {
33
+ background: var(--theme-elevation-100);
34
+ color: var(--theme-elevation-400);
35
+ box-shadow: none;
36
+ cursor: not-allowed;
37
+ }
38
+ .sbf-input:disabled:hover {
39
+ border-color: var(--theme-elevation-150);
40
+ box-shadow: none;
41
+ }
42
+ .sbf-input::placeholder {
43
+ color: var(--theme-elevation-400);
44
+ font-weight: 400;
45
+ font-size: 1rem;
46
+ }
47
+
48
+ /* ── Select ─────────────────────────────────────────────────────────────── */
49
+ .sbf-select {
50
+ cursor: pointer;
51
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
52
+ background-repeat: no-repeat;
53
+ background-position: right 12px center;
54
+ padding-right: 32px;
55
+ }
56
+
57
+ /* ── Field label — mirrors Payload .field-label ─────────────────────────── */
58
+ .sbf-label {
59
+ display: flex;
60
+ align-items: center;
61
+ padding-bottom: 5px;
62
+ color: var(--theme-elevation-800);
63
+ font-family: var(--font-body);
64
+ font-size: 13px;
65
+ line-height: 20px;
66
+ font-weight: 400;
67
+ }
68
+ .sbf-label--required::after {
69
+ content: '*';
70
+ color: var(--theme-error-500, #ef4444);
71
+ margin-left: 5px;
72
+ }
73
+
74
+ /* ── Field description — mirrors .field-description ─────────────────────── */
75
+ .sbf-description {
76
+ display: flex;
77
+ color: var(--theme-elevation-400);
78
+ font-size: 0.75rem;
79
+ line-height: 1.4;
80
+ margin-top: calc(var(--base, 16px) / 4);
81
+ font-family: var(--font-body);
82
+ }
83
+
84
+ /* ── Collapsible row — mirrors .collapsible--style-default ──────────────── */
85
+ .sbf-row {
86
+ border: 1px solid var(--theme-elevation-200);
87
+ border-radius: var(--style-radius-s, 4px);
88
+ overflow: hidden;
89
+ transition: border-color 0.1s;
90
+ }
91
+ .sbf-row:hover { border-color: var(--theme-elevation-300); }
92
+
93
+ /* Row header — mirrors .collapsible__toggle-wrap */
94
+ .sbf-row__header {
95
+ position: relative;
96
+ padding: 8px 8px 8px 16px;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ background: var(--theme-elevation-50);
101
+ line-height: 24px;
102
+ gap: 4px;
103
+ border-top-right-radius: var(--style-radius-s, 4px);
104
+ border-top-left-radius: var(--style-radius-s, 4px);
105
+ cursor: pointer;
106
+ user-select: none;
107
+ width: 100%;
108
+ border: none;
109
+ text-align: left;
110
+ font-family: var(--font-body);
111
+ transition: background 0.1s;
112
+ }
113
+ .sbf-row__header:hover { background: var(--theme-elevation-100); }
114
+ .sbf-row--collapsed .sbf-row__header {
115
+ border-bottom-right-radius: var(--style-radius-s, 4px);
116
+ border-bottom-left-radius: var(--style-radius-s, 4px);
117
+ }
118
+
119
+ /* Row content — mirrors .collapsible__content */
120
+ .sbf-row__content {
121
+ background: var(--theme-elevation-0);
122
+ border-bottom-left-radius: var(--style-radius-s, 4px);
123
+ border-bottom-right-radius: var(--style-radius-s, 4px);
124
+ padding: var(--base, 16px);
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: calc(var(--base, 16px) * 0.75);
128
+ border-top: 1px solid var(--theme-elevation-150);
129
+ }
130
+
131
+ /* ── Row label & badge ──────────────────────────────────────────────────── */
132
+ .sbf-row__label {
133
+ flex: 1;
134
+ font-size: 13px;
135
+ line-height: 20px;
136
+ font-weight: 400;
137
+ color: var(--theme-text, var(--theme-elevation-800));
138
+ font-family: var(--font-body);
139
+ overflow: hidden;
140
+ text-overflow: ellipsis;
141
+ white-space: nowrap;
142
+ }
143
+ .sbf-row__label--empty {
144
+ color: var(--theme-elevation-400);
145
+ font-style: italic;
146
+ }
147
+
148
+ .sbf-type-badge {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ padding: 2px 8px;
152
+ border-radius: 3px;
153
+ font-size: 11px;
154
+ font-weight: 500;
155
+ font-family: var(--font-body);
156
+ letter-spacing: 0.02em;
157
+ white-space: nowrap;
158
+ background: var(--theme-elevation-150);
159
+ color: var(--theme-elevation-600);
160
+ flex-shrink: 0;
161
+ }
162
+
163
+ /* ── Icon action button — mirrors .collapsible__actions ─────────────────── */
164
+ .sbf-icon-btn {
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ width: 24px;
169
+ height: 24px;
170
+ background: transparent;
171
+ border: none;
172
+ border-radius: var(--style-radius-s, 4px);
173
+ cursor: pointer;
174
+ color: var(--theme-elevation-500);
175
+ font-size: 13px;
176
+ padding: 0;
177
+ flex-shrink: 0;
178
+ font-family: var(--font-body);
179
+ transition: background 0.1s, color 0.1s;
180
+ line-height: 1;
181
+ }
182
+ .sbf-icon-btn:hover {
183
+ background: var(--theme-elevation-150);
184
+ color: var(--theme-elevation-900);
185
+ }
186
+ .sbf-icon-btn--danger:hover {
187
+ background: var(--theme-error-50, rgba(239, 68, 68, 0.08));
188
+ color: var(--theme-error-500, #ef4444);
189
+ }
190
+
191
+ /* ── 2-column grid ──────────────────────────────────────────────────────── */
192
+ .sbf-grid-2 {
193
+ display: grid;
194
+ grid-template-columns: 1fr 1fr;
195
+ gap: calc(var(--base, 16px) * 0.75);
196
+ }
197
+
198
+ /* ── Checkbox row ───────────────────────────────────────────────────────── */
199
+ .sbf-checkbox-wrap {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 8px;
203
+ cursor: pointer;
204
+ }
205
+ .sbf-checkbox-wrap input[type='checkbox'] {
206
+ width: 16px;
207
+ height: 16px;
208
+ flex-shrink: 0;
209
+ cursor: pointer;
210
+ border: 1px solid var(--theme-elevation-300);
211
+ border-radius: 2px;
212
+ accent-color: var(--theme-success-500, #22c55e);
213
+ }
214
+ .sbf-checkbox-label {
215
+ font-size: 13px;
216
+ line-height: 20px;
217
+ color: var(--theme-elevation-800);
218
+ font-family: var(--font-body);
219
+ cursor: pointer;
220
+ }
221
+
222
+ /* ── Flags row ──────────────────────────────────────────────────────────── */
223
+ .sbf-flags-row {
224
+ display: flex;
225
+ gap: calc(var(--base, 16px) * 1.5);
226
+ flex-wrap: wrap;
227
+ }
228
+
229
+ /* ── Section accordion (Admin settings / Conditions) ────────────────────── */
230
+ .sbf-section {
231
+ border: 1px solid var(--theme-elevation-100);
232
+ border-radius: var(--style-radius-s, 4px);
233
+ overflow: hidden;
234
+ }
235
+ .sbf-section__toggle {
236
+ width: 100%;
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: space-between;
240
+ padding: 8px 12px;
241
+ background: var(--theme-elevation-50);
242
+ border: none;
243
+ cursor: pointer;
244
+ font-size: 13px;
245
+ font-weight: 400;
246
+ font-family: var(--font-body);
247
+ color: var(--theme-elevation-600);
248
+ line-height: 20px;
249
+ text-align: left;
250
+ transition: background 0.1s;
251
+ gap: 8px;
252
+ }
253
+ .sbf-section__toggle:hover { background: var(--theme-elevation-100); }
254
+ .sbf-section__toggle-icon {
255
+ font-size: 10px;
256
+ color: var(--theme-elevation-400);
257
+ flex-shrink: 0;
258
+ transition: transform 0.15s;
259
+ }
260
+ .sbf-section__toggle--open .sbf-section__toggle-icon { transform: rotate(90deg); }
261
+ .sbf-section__body {
262
+ padding: 12px;
263
+ background: var(--theme-elevation-0);
264
+ display: flex;
265
+ flex-direction: column;
266
+ gap: calc(var(--base, 16px) * 0.75);
267
+ border-top: 1px solid var(--theme-elevation-100);
268
+ }
269
+
270
+ /* ── Nested fields ──────────────────────────────────────────────────────── */
271
+ .sbf-nested {
272
+ border-left: 2px solid var(--theme-elevation-200);
273
+ padding-left: 12px;
274
+ margin-top: 4px;
275
+ display: flex;
276
+ flex-direction: column;
277
+ gap: calc(var(--base, 16px) / 2);
278
+ }
279
+
280
+ /* ── Options row ────────────────────────────────────────────────────────── */
281
+ .sbf-options-row {
282
+ display: grid;
283
+ grid-template-columns: 1fr 1fr auto;
284
+ gap: calc(var(--base, 16px) * 0.5);
285
+ align-items: center;
286
+ }
287
+
288
+ /* ── Conditions grid ────────────────────────────────────────────────────── */
289
+ .sbf-conditions-grid {
290
+ display: grid;
291
+ grid-template-columns: 1fr 1fr 1fr auto;
292
+ gap: calc(var(--base, 16px) * 0.5);
293
+ align-items: end;
294
+ }
295
+
296
+ /* ── Add Field button — mirrors Payload array add-row ───────────────────── */
297
+ .sbf-add-btn {
298
+ display: inline-flex;
299
+ align-items: center;
300
+ gap: 6px;
301
+ padding: 0;
302
+ background: none;
303
+ border: none;
304
+ cursor: pointer;
305
+ color: var(--theme-elevation-400);
306
+ font-size: 13px;
307
+ font-family: var(--font-body);
308
+ line-height: 24px;
309
+ transition: color 0.1s;
310
+ margin-top: 2px;
311
+ }
312
+ .sbf-add-btn:hover:not(:disabled) { color: var(--theme-elevation-800); }
313
+ .sbf-add-btn:disabled { cursor: not-allowed; opacity: 0.5; }
314
+ .sbf-add-btn__icon {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: center;
318
+ width: 24px;
319
+ height: 24px;
320
+ border: 1px solid currentColor;
321
+ border-radius: 50%;
322
+ font-size: 14px;
323
+ font-weight: 600;
324
+ flex-shrink: 0;
325
+ line-height: 1;
326
+ transition: border-color 0.1s;
327
+ }
328
+
329
+ .sbf-add-btn--small { font-size: 12px; gap: 5px; }
330
+ .sbf-add-btn--small .sbf-add-btn__icon { width: 18px; height: 18px; font-size: 12px; }
331
+
332
+ /* ── Section heading ────────────────────────────────────────────────────── */
333
+ .sbf-section-heading {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ margin-bottom: calc(var(--base, 16px) / 2);
338
+ }
339
+ .sbf-section-label {
340
+ display: flex;
341
+ align-items: center;
342
+ color: var(--theme-elevation-800);
343
+ font-family: var(--font-body);
344
+ font-size: 13px;
345
+ line-height: 20px;
346
+ font-weight: 400;
347
+ }
348
+
349
+ /* ── Empty state ────────────────────────────────────────────────────────── */
350
+ .sbf-empty {
351
+ padding: calc(var(--base, 16px) * 1.5) var(--base, 16px);
352
+ border: 1px dashed var(--theme-elevation-200);
353
+ border-radius: var(--style-radius-s, 4px);
354
+ text-align: center;
355
+ color: var(--theme-elevation-400);
356
+ font-size: 13px;
357
+ font-family: var(--font-body);
358
+ line-height: 20px;
359
+ }
360
+
361
+