@vertebr/react 0.2.0 → 0.4.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 (89) hide show
  1. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  2. package/dist/components/admin/VertebrAdmin.js +26 -4
  3. package/dist/components/config/ConfigForm.d.ts +2 -18
  4. package/dist/components/config/ConfigForm.d.ts.map +1 -1
  5. package/dist/components/config/ConfigForm.js +1 -281
  6. package/dist/components/config/DescriptionInput.d.ts +18 -0
  7. package/dist/components/config/DescriptionInput.d.ts.map +1 -0
  8. package/dist/components/config/DescriptionInput.js +152 -0
  9. package/dist/components/config/EnumInput.d.ts +10 -0
  10. package/dist/components/config/EnumInput.d.ts.map +1 -0
  11. package/dist/components/config/EnumInput.js +19 -0
  12. package/dist/components/config/EnumListInput.d.ts +10 -0
  13. package/dist/components/config/EnumListInput.d.ts.map +1 -0
  14. package/dist/components/config/EnumListInput.js +46 -0
  15. package/dist/components/config/ImagePickerModal.d.ts +18 -0
  16. package/dist/components/config/ImagePickerModal.d.ts.map +1 -0
  17. package/dist/components/config/ImagePickerModal.js +120 -0
  18. package/dist/components/config/PriceInput.d.ts +12 -0
  19. package/dist/components/config/PriceInput.d.ts.map +1 -0
  20. package/dist/components/config/PriceInput.js +20 -0
  21. package/dist/components/config/VisibilityEye.d.ts +8 -0
  22. package/dist/components/config/VisibilityEye.d.ts.map +1 -0
  23. package/dist/components/config/VisibilityEye.js +18 -0
  24. package/dist/components/config/form/ConfigField.d.ts +22 -0
  25. package/dist/components/config/form/ConfigField.d.ts.map +1 -0
  26. package/dist/components/config/form/ConfigField.js +53 -0
  27. package/dist/components/config/form/ConfigForm.d.ts +4 -0
  28. package/dist/components/config/form/ConfigForm.d.ts.map +1 -0
  29. package/dist/components/config/form/ConfigForm.js +75 -0
  30. package/dist/components/config/form/ConfigFormActions.d.ts +11 -0
  31. package/dist/components/config/form/ConfigFormActions.d.ts.map +1 -0
  32. package/dist/components/config/form/ConfigFormActions.js +4 -0
  33. package/dist/components/config/form/RecordConfigForm.d.ts +22 -0
  34. package/dist/components/config/form/RecordConfigForm.d.ts.map +1 -0
  35. package/dist/components/config/form/RecordConfigForm.js +45 -0
  36. package/dist/components/config/form/SettingsConfigForm.d.ts +22 -0
  37. package/dist/components/config/form/SettingsConfigForm.d.ts.map +1 -0
  38. package/dist/components/config/form/SettingsConfigForm.js +7 -0
  39. package/dist/components/config/form/helpers/fields.d.ts +7 -0
  40. package/dist/components/config/form/helpers/fields.d.ts.map +1 -0
  41. package/dist/components/config/form/helpers/fields.js +31 -0
  42. package/dist/components/config/form/helpers/groups.d.ts +4 -0
  43. package/dist/components/config/form/helpers/groups.d.ts.map +1 -0
  44. package/dist/components/config/form/helpers/groups.js +107 -0
  45. package/dist/components/config/form/helpers/images.d.ts +4 -0
  46. package/dist/components/config/form/helpers/images.d.ts.map +1 -0
  47. package/dist/components/config/form/helpers/images.js +27 -0
  48. package/dist/components/config/form/helpers/index.d.ts +7 -0
  49. package/dist/components/config/form/helpers/index.d.ts.map +1 -0
  50. package/dist/components/config/form/helpers/index.js +6 -0
  51. package/dist/components/config/form/helpers/labels.d.ts +5 -0
  52. package/dist/components/config/form/helpers/labels.d.ts.map +1 -0
  53. package/dist/components/config/form/helpers/labels.js +28 -0
  54. package/dist/components/config/form/helpers/schema.d.ts +8 -0
  55. package/dist/components/config/form/helpers/schema.d.ts.map +1 -0
  56. package/dist/components/config/form/helpers/schema.js +30 -0
  57. package/dist/components/config/form/helpers/visibility.d.ts +13 -0
  58. package/dist/components/config/form/helpers/visibility.d.ts.map +1 -0
  59. package/dist/components/config/form/helpers/visibility.js +86 -0
  60. package/dist/components/config/form/types.d.ts +29 -0
  61. package/dist/components/config/form/types.d.ts.map +1 -0
  62. package/dist/components/config/form/types.js +1 -0
  63. package/dist/components/resources/ResourceCell.d.ts.map +1 -1
  64. package/dist/components/resources/ResourceCell.js +5 -19
  65. package/dist/components/resources/ResourceCreateModal.d.ts +18 -0
  66. package/dist/components/resources/ResourceCreateModal.d.ts.map +1 -0
  67. package/dist/components/resources/ResourceCreateModal.js +22 -0
  68. package/dist/components/resources/ResourceTable.d.ts +7 -2
  69. package/dist/components/resources/ResourceTable.d.ts.map +1 -1
  70. package/dist/components/resources/ResourceTable.js +92 -7
  71. package/dist/hooks/useVertebrControls.d.ts.map +1 -1
  72. package/dist/hooks/useVertebrControls.js +5 -4
  73. package/dist/index.d.ts +11 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +6 -1
  76. package/dist/lib/description.d.ts +18 -0
  77. package/dist/lib/description.d.ts.map +1 -0
  78. package/dist/lib/description.js +85 -0
  79. package/dist/lib/images.d.ts +14 -0
  80. package/dist/lib/images.d.ts.map +1 -0
  81. package/dist/lib/images.js +63 -0
  82. package/dist/lib/price.d.ts +15 -0
  83. package/dist/lib/price.d.ts.map +1 -0
  84. package/dist/lib/price.js +50 -0
  85. package/dist/styles/form.css +420 -0
  86. package/dist/styles/modal.css +133 -0
  87. package/dist/styles/panel.css +18 -1
  88. package/dist/styles/table.css +10 -1
  89. package/package.json +10 -3
@@ -84,6 +84,23 @@
84
84
  gap: 0.65rem;
85
85
  }
86
86
 
87
+ .vertebr-form-fields[data-layout="specs"] {
88
+ grid-template-columns: 1fr 1fr;
89
+ }
90
+
91
+ .vertebr-form-fields[data-layout="specs"] .vertebr-field[data-span="full"] {
92
+ grid-column: 1 / -1;
93
+ }
94
+
95
+ .vertebr-form-fields[data-layout="specs"] .vertebr-field-head {
96
+ min-height: 1.55rem;
97
+ }
98
+
99
+ .vertebr-form-fields[data-layout="specs"] .vertebr-visibility-btn {
100
+ width: 1.85rem;
101
+ height: 1.85rem;
102
+ }
103
+
87
104
  .vertebr-form-fields[data-layout="chips"] .vertebr-field label {
88
105
  font-family: var(--vb-mono);
89
106
  font-size: 0.7rem;
@@ -164,6 +181,10 @@
164
181
  }
165
182
 
166
183
  .vertebr-record-block-label {
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: space-between;
187
+ gap: 0.5rem;
167
188
  font-family: var(--vb-mono);
168
189
  font-size: 0.68rem;
169
190
  font-weight: 500;
@@ -174,6 +195,40 @@
174
195
  border-bottom: 1px solid var(--vb-border);
175
196
  }
176
197
 
198
+ .vertebr-record-block[data-storefront="off"] {
199
+ opacity: 0.55;
200
+ }
201
+
202
+ .vertebr-visibility-btn {
203
+ appearance: none;
204
+ flex: none;
205
+ display: inline-flex;
206
+ align-items: center;
207
+ justify-content: center;
208
+ width: 1.7rem;
209
+ height: 1.7rem;
210
+ margin: -0.25rem 0;
211
+ padding: 0;
212
+ border: 0;
213
+ border-radius: 6px;
214
+ background: transparent;
215
+ color: var(--vb-text-subtle);
216
+ cursor: pointer;
217
+ }
218
+
219
+ .vertebr-visibility-btn:hover {
220
+ color: var(--vb-text);
221
+ background: var(--vb-surface-tint);
222
+ }
223
+
224
+ .vertebr-visibility-btn[aria-pressed="true"] {
225
+ color: var(--vb-accent);
226
+ }
227
+
228
+ .vertebr-visibility-btn[aria-pressed="false"] {
229
+ color: var(--vb-text-subtle);
230
+ }
231
+
177
232
  .vertebr-form[data-variant="record"] .vertebr-form-fields {
178
233
  padding: 0;
179
234
  gap: 0.75rem 0.9rem;
@@ -199,6 +254,96 @@
199
254
  grid-column: 1 / -1;
200
255
  }
201
256
 
257
+ .vertebr-field-head {
258
+ display: flex;
259
+ align-items: center;
260
+ justify-content: space-between;
261
+ gap: 0.35rem;
262
+ min-height: 1.4rem;
263
+ }
264
+
265
+ .vertebr-field-head label {
266
+ min-width: 0;
267
+ flex: 1 1 auto;
268
+ }
269
+
270
+ .vertebr-field[data-storefront="off"] {
271
+ opacity: 0.55;
272
+ }
273
+
274
+ .vertebr-enum-list {
275
+ margin: 0;
276
+ padding: 0;
277
+ list-style: none;
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 0.35rem;
281
+ border: 1px solid var(--vb-border);
282
+ border-radius: var(--vb-radius-sm);
283
+ background: var(--vb-bg);
284
+ overflow: hidden;
285
+ }
286
+
287
+ .vertebr-enum-list-row {
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: space-between;
291
+ gap: 0.5rem;
292
+ padding: 0.45rem 0.55rem;
293
+ border-bottom: 1px solid var(--vb-border);
294
+ }
295
+
296
+ .vertebr-enum-list-row:last-child {
297
+ border-bottom: 0;
298
+ }
299
+
300
+ .vertebr-enum-list-row[data-on="false"] {
301
+ opacity: 0.55;
302
+ }
303
+
304
+ .vertebr-enum-list-label {
305
+ display: flex;
306
+ align-items: center;
307
+ gap: 0.55rem;
308
+ min-width: 0;
309
+ font-size: 0.86rem;
310
+ font-weight: 500;
311
+ color: var(--vb-text);
312
+ cursor: pointer;
313
+ }
314
+
315
+ .vertebr-enum-list-label input {
316
+ width: 0.95rem;
317
+ height: 0.95rem;
318
+ accent-color: var(--vb-accent);
319
+ }
320
+
321
+ .vertebr-enum-list-move {
322
+ display: flex;
323
+ gap: 0.2rem;
324
+ }
325
+
326
+ .vertebr-enum-list-move button {
327
+ appearance: none;
328
+ width: 1.7rem;
329
+ height: 1.7rem;
330
+ border: 1px solid var(--vb-border);
331
+ border-radius: 6px;
332
+ background: var(--vb-bg-elevated);
333
+ color: var(--vb-text-muted);
334
+ cursor: pointer;
335
+ }
336
+
337
+ .vertebr-enum-list-move button:hover:not(:disabled) {
338
+ color: var(--vb-text);
339
+ border-color: var(--vb-border-strong);
340
+ }
341
+
342
+ .vertebr-enum-list-move button:disabled {
343
+ opacity: 0.4;
344
+ cursor: default;
345
+ }
346
+
202
347
  .vertebr-field label,
203
348
  .vertebr-field > span {
204
349
  font-size: 0.78rem;
@@ -234,6 +379,252 @@
234
379
  padding-top: 0.65rem;
235
380
  }
236
381
 
382
+ .vertebr-field-money {
383
+ display: grid;
384
+ grid-template-columns: auto minmax(0, 1fr);
385
+ align-items: stretch;
386
+ }
387
+
388
+ .vertebr-field-money-prefix {
389
+ display: grid;
390
+ place-items: center;
391
+ padding: 0 0.7rem;
392
+ border: 1px solid var(--vb-border);
393
+ border-right: 0;
394
+ border-radius: var(--vb-radius-sm) 0 0 var(--vb-radius-sm);
395
+ background: var(--vb-surface-tint);
396
+ color: var(--vb-text-muted);
397
+ font-family: var(--vb-mono);
398
+ font-size: 0.86rem;
399
+ }
400
+
401
+ .vertebr-field-money input {
402
+ border-top-left-radius: 0;
403
+ border-bottom-left-radius: 0;
404
+ font-variant-numeric: tabular-nums;
405
+ font-family: var(--vb-mono);
406
+ }
407
+
408
+ .vertebr-field-prose {
409
+ display: grid;
410
+ gap: 0;
411
+ border: 1px solid var(--vb-border);
412
+ border-radius: var(--vb-radius-sm);
413
+ background: var(--vb-bg);
414
+ overflow: hidden;
415
+ }
416
+
417
+ .vertebr-md-toolbar {
418
+ display: flex;
419
+ flex-wrap: wrap;
420
+ align-items: center;
421
+ gap: 0.15rem;
422
+ padding: 0.35rem 0.4rem;
423
+ border-bottom: 1px solid var(--vb-border);
424
+ background: var(--vb-surface-tint);
425
+ }
426
+
427
+ .vertebr-md-btn {
428
+ appearance: none;
429
+ border: 0;
430
+ background: transparent;
431
+ color: var(--vb-text-muted);
432
+ border-radius: 5px;
433
+ min-width: 1.7rem;
434
+ height: 1.7rem;
435
+ padding: 0 0.4rem;
436
+ font: inherit;
437
+ font-size: 0.78rem;
438
+ font-weight: 600;
439
+ cursor: pointer;
440
+ }
441
+
442
+ .vertebr-md-btn:hover:not(:disabled) {
443
+ background: var(--vb-bg-hover);
444
+ color: var(--vb-text);
445
+ }
446
+
447
+ .vertebr-md-btn[data-active="true"] {
448
+ background: var(--vb-bg-hover);
449
+ color: var(--vb-text);
450
+ }
451
+
452
+ .vertebr-md-btn:disabled {
453
+ opacity: 0.45;
454
+ cursor: not-allowed;
455
+ }
456
+
457
+ .vertebr-md-glyph {
458
+ font-weight: 700;
459
+ }
460
+
461
+ .vertebr-md-italic {
462
+ font-style: italic;
463
+ font-family: Georgia, "Times New Roman", serif;
464
+ }
465
+
466
+ .vertebr-md-strike {
467
+ text-decoration: line-through;
468
+ }
469
+
470
+ .vertebr-md-sep {
471
+ width: 1px;
472
+ height: 1rem;
473
+ margin: 0 0.25rem;
474
+ background: var(--vb-border);
475
+ }
476
+
477
+ .vertebr-field-prose textarea,
478
+ .vertebr-md-content {
479
+ resize: none;
480
+ min-height: 7.5rem;
481
+ overflow: hidden;
482
+ line-height: 1.55;
483
+ border: 0;
484
+ border-radius: 0;
485
+ box-shadow: none;
486
+ }
487
+
488
+ .vertebr-md-content {
489
+ padding: 0.65rem 0.75rem;
490
+ outline: none;
491
+ color: var(--vb-text);
492
+ }
493
+
494
+ .vertebr-md-content p {
495
+ margin: 0 0 0.65em;
496
+ }
497
+
498
+ .vertebr-md-content p:last-child {
499
+ margin-bottom: 0;
500
+ }
501
+
502
+ .vertebr-md-content h2,
503
+ .vertebr-md-content h3 {
504
+ margin: 0.85em 0 0.4em;
505
+ font-size: 1.05em;
506
+ font-weight: 650;
507
+ line-height: 1.3;
508
+ }
509
+
510
+ .vertebr-md-content ul,
511
+ .vertebr-md-content ol {
512
+ margin: 0.35em 0 0.65em;
513
+ padding-left: 1.3rem;
514
+ }
515
+
516
+ .vertebr-md-content a {
517
+ color: var(--vb-accent);
518
+ }
519
+
520
+ .vertebr-md-content s {
521
+ text-decoration: line-through;
522
+ }
523
+
524
+ .vertebr-md-content code {
525
+ font-family: var(--vb-mono);
526
+ font-size: 0.86em;
527
+ padding: 0.08em 0.32em;
528
+ border-radius: 4px;
529
+ background: var(--vb-surface-tint);
530
+ border: 1px solid var(--vb-border);
531
+ }
532
+
533
+ .vertebr-md-content pre {
534
+ margin: 0.45em 0 0.7em;
535
+ padding: 0.65rem 0.75rem;
536
+ overflow: auto;
537
+ border-radius: 6px;
538
+ background: var(--vb-surface-tint);
539
+ border: 1px solid var(--vb-border);
540
+ }
541
+
542
+ .vertebr-md-content pre code {
543
+ padding: 0;
544
+ border: 0;
545
+ background: transparent;
546
+ }
547
+
548
+ .vertebr-md-content blockquote {
549
+ margin: 0.45em 0 0.7em;
550
+ padding: 0.15rem 0 0.15rem 0.75rem;
551
+ border-left: 2px solid var(--vb-accent-dim);
552
+ color: var(--vb-text-muted);
553
+ }
554
+
555
+ .vertebr-md-content img {
556
+ display: block;
557
+ max-width: 100%;
558
+ height: auto;
559
+ margin: 0.5em 0;
560
+ border-radius: 8px;
561
+ border: 1px solid var(--vb-border);
562
+ }
563
+
564
+ .vertebr-md-content table {
565
+ width: 100%;
566
+ border-collapse: collapse;
567
+ margin: 0.5em 0 0.75em;
568
+ font-size: 0.88em;
569
+ }
570
+
571
+ .vertebr-md-content th,
572
+ .vertebr-md-content td {
573
+ border: 1px solid var(--vb-border);
574
+ padding: 0.35rem 0.5rem;
575
+ vertical-align: top;
576
+ min-width: 4rem;
577
+ }
578
+
579
+ .vertebr-md-content th {
580
+ background: var(--vb-surface-tint);
581
+ font-weight: 650;
582
+ text-align: left;
583
+ }
584
+
585
+ .vertebr-md-content .selectedCell::after {
586
+ content: "";
587
+ position: absolute;
588
+ inset: 0;
589
+ background: var(--vb-accent-soft);
590
+ pointer-events: none;
591
+ }
592
+
593
+ .vertebr-md-content td,
594
+ .vertebr-md-content th {
595
+ position: relative;
596
+ }
597
+
598
+ .vertebr-md-content p.is-editor-empty:first-child::before {
599
+ color: var(--vb-text-subtle);
600
+ content: attr(data-placeholder);
601
+ float: left;
602
+ height: 0;
603
+ pointer-events: none;
604
+ }
605
+
606
+ .vertebr-field-prose textarea:focus,
607
+ .vertebr-md-content:focus {
608
+ box-shadow: none;
609
+ outline: none;
610
+ }
611
+
612
+ .vertebr-field-prose:focus-within {
613
+ border-color: var(--vb-accent-dim);
614
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
615
+ }
616
+
617
+ .vertebr-field-prose-meta {
618
+ margin: 0;
619
+ padding: 0.35rem 0.7rem 0.45rem;
620
+ border-top: 1px solid var(--vb-border);
621
+ font-family: var(--vb-mono);
622
+ font-size: 0.68rem;
623
+ letter-spacing: 0.04em;
624
+ color: var(--vb-text-subtle);
625
+ background: var(--vb-surface-tint);
626
+ }
627
+
237
628
  .vertebr-field input:hover,
238
629
  .vertebr-field textarea:hover {
239
630
  border-color: var(--vb-border-strong);
@@ -269,6 +660,35 @@
269
660
  background: var(--vb-bg-muted);
270
661
  }
271
662
 
663
+ .vertebr-field-files-list {
664
+ margin: 0;
665
+ padding: 0;
666
+ list-style: none;
667
+ display: grid;
668
+ grid-template-columns: repeat(auto-fill, minmax(92px, 1fr));
669
+ gap: 0.55rem;
670
+ }
671
+
672
+ .vertebr-field-files-list li {
673
+ display: grid;
674
+ gap: 0.35rem;
675
+ }
676
+
677
+ .vertebr-field-files-list img {
678
+ width: 100%;
679
+ aspect-ratio: 1;
680
+ object-fit: cover;
681
+ border-radius: var(--vb-radius);
682
+ border: 1px solid var(--vb-border);
683
+ background: var(--vb-bg-muted);
684
+ }
685
+
686
+ .vertebr-field-files-empty {
687
+ margin: 0;
688
+ font-size: 0.82rem;
689
+ color: var(--vb-text-subtle);
690
+ }
691
+
272
692
  .vertebr-field[data-kind="image"] {
273
693
  grid-column: 1 / -1;
274
694
  }
@@ -25,6 +25,24 @@
25
25
  font-family: var(--vb-font);
26
26
  }
27
27
 
28
+ .vertebr-modal-form {
29
+ width: min(100%, 960px);
30
+ max-height: min(92vh, 920px);
31
+ }
32
+
33
+ .vertebr-modal-form .vertebr-modal-body {
34
+ padding: 0;
35
+ min-height: 0;
36
+ flex: 1 1 auto;
37
+ display: flex;
38
+ flex-direction: column;
39
+ overflow: hidden;
40
+ }
41
+
42
+ .vertebr-modal-form .vertebr-form {
43
+ min-height: 0;
44
+ }
45
+
28
46
  .vertebr-modal-head {
29
47
  display: flex;
30
48
  align-items: flex-start;
@@ -108,3 +126,118 @@
108
126
  margin: 0;
109
127
  min-width: 0;
110
128
  }
129
+
130
+ .vertebr-picker-body {
131
+ gap: 0.95rem;
132
+ }
133
+
134
+ .vertebr-picker-tabs {
135
+ display: flex;
136
+ gap: 0.35rem;
137
+ padding: 0.2rem;
138
+ border: 1px solid var(--vb-border);
139
+ border-radius: 8px;
140
+ background: var(--vb-surface-tint);
141
+ }
142
+
143
+ .vertebr-picker-tabs button {
144
+ appearance: none;
145
+ flex: 1 1 0;
146
+ display: inline-flex;
147
+ align-items: center;
148
+ justify-content: center;
149
+ gap: 0.4rem;
150
+ border: 0;
151
+ background: transparent;
152
+ color: var(--vb-text-muted);
153
+ border-radius: 6px;
154
+ padding: 0.4rem 0.55rem;
155
+ font: inherit;
156
+ font-size: 0.82rem;
157
+ cursor: pointer;
158
+ }
159
+
160
+ .vertebr-picker-tabs button[data-active="true"] {
161
+ background: var(--vb-bg-elevated);
162
+ color: var(--vb-text);
163
+ box-shadow: 0 1px 0 color-mix(in srgb, var(--vb-text) 8%, transparent);
164
+ }
165
+
166
+ .vertebr-picker-tabs span {
167
+ font-family: var(--vb-mono);
168
+ font-size: 0.68rem;
169
+ color: var(--vb-text-subtle);
170
+ }
171
+
172
+ .vertebr-picker-url {
173
+ display: grid;
174
+ grid-template-columns: minmax(0, 1fr) auto;
175
+ gap: 0.5rem;
176
+ }
177
+
178
+ .vertebr-picker-grid {
179
+ display: grid;
180
+ grid-template-columns: repeat(auto-fill, minmax(128px, 1fr));
181
+ gap: 0.7rem;
182
+ }
183
+
184
+ .vertebr-picker-tile {
185
+ appearance: none;
186
+ display: grid;
187
+ gap: 0.4rem;
188
+ padding: 0.45rem;
189
+ border: 1px solid var(--vb-border);
190
+ border-radius: 10px;
191
+ background: var(--vb-bg);
192
+ color: inherit;
193
+ text-align: left;
194
+ cursor: pointer;
195
+ }
196
+
197
+ .vertebr-picker-tile:hover {
198
+ border-color: var(--vb-border-strong);
199
+ }
200
+
201
+ .vertebr-picker-tile[data-selected="true"] {
202
+ border-color: var(--vb-accent-dim);
203
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
204
+ }
205
+
206
+ .vertebr-picker-thumb {
207
+ display: block;
208
+ aspect-ratio: 1;
209
+ border-radius: 7px;
210
+ overflow: hidden;
211
+ border: 1px solid var(--vb-border);
212
+ background: var(--vb-bg-muted);
213
+ }
214
+
215
+ .vertebr-picker-thumb img {
216
+ display: block;
217
+ width: 100%;
218
+ height: 100%;
219
+ object-fit: cover;
220
+ }
221
+
222
+ .vertebr-picker-name {
223
+ font-size: 0.75rem;
224
+ overflow: hidden;
225
+ text-overflow: ellipsis;
226
+ white-space: nowrap;
227
+ }
228
+
229
+ .vertebr-picker-foot {
230
+ display: flex;
231
+ align-items: center;
232
+ justify-content: space-between;
233
+ gap: 0.75rem;
234
+ padding: 0.85rem 1.25rem 1.05rem;
235
+ border-top: 1px solid var(--vb-border);
236
+ background: var(--vb-surface-tint);
237
+ }
238
+
239
+ .vertebr-picker-count {
240
+ font-family: var(--vb-mono);
241
+ font-size: 0.72rem;
242
+ color: var(--vb-text-subtle);
243
+ }
@@ -33,6 +33,12 @@
33
33
  color: var(--vb-text-subtle);
34
34
  }
35
35
 
36
+ .vertebr-panel-head-actions {
37
+ display: inline-flex;
38
+ align-items: center;
39
+ gap: 0.55rem;
40
+ }
41
+
36
42
  .vertebr-count {
37
43
  font-family: var(--vb-mono);
38
44
  font-size: 0.7rem;
@@ -53,7 +59,7 @@
53
59
  flex: 0 0 auto;
54
60
  display: flex;
55
61
  align-items: center;
56
- justify-content: flex-start;
62
+ justify-content: space-between;
57
63
  gap: 0.5rem;
58
64
  padding: 0.55rem 1rem;
59
65
  border-bottom: 1px solid var(--vb-border);
@@ -67,6 +73,17 @@
67
73
  flex-wrap: wrap;
68
74
  }
69
75
 
76
+ .vertebr-table-scroll-controls {
77
+ display: inline-flex;
78
+ align-items: center;
79
+ gap: 0.15rem;
80
+ margin-left: auto;
81
+ }
82
+
83
+ .vertebr-table-scroll-btn {
84
+ padding: 0.3rem 0.45rem;
85
+ }
86
+
70
87
  .vertebr-btn-icon {
71
88
  display: inline-flex;
72
89
  align-items: center;
@@ -3,12 +3,16 @@
3
3
  .vertebr-table-wrap {
4
4
  flex: 1 1 auto;
5
5
  min-height: 0;
6
+ min-width: 0;
6
7
  max-width: 100%;
7
8
  overflow: auto;
9
+ overscroll-behavior-inline: contain;
10
+ scrollbar-gutter: stable;
8
11
  }
9
12
 
10
13
  .vertebr-table {
11
- width: 100%;
14
+ width: max-content;
15
+ min-width: 100%;
12
16
  border-collapse: separate;
13
17
  border-spacing: 0;
14
18
  font-size: 0.9rem;
@@ -24,6 +28,11 @@
24
28
  white-space: nowrap;
25
29
  }
26
30
 
31
+ .vertebr-table th:not(.vertebr-col-actions),
32
+ .vertebr-table td:not(.vertebr-col-actions) {
33
+ min-width: 6.5rem;
34
+ }
35
+
27
36
  .vertebr-table th {
28
37
  position: sticky;
29
38
  top: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertebr/react",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Vertebr admin dashboard UI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,7 @@
18
18
  "dist"
19
19
  ],
20
20
  "scripts": {
21
- "build": "tsc -p tsconfig.json && rm -rf dist/styles dist/themes && cp src/styles.css dist/styles.css && cp -R src/styles dist/styles && cp -R src/themes dist/themes",
21
+ "build": "rm -rf dist && tsc -p tsconfig.json && cp src/styles.css dist/styles.css && cp -R src/styles dist/styles && cp -R src/themes dist/themes",
22
22
  "typecheck": "tsc -p tsconfig.json --noEmit",
23
23
  "prepublishOnly": "npm run typecheck && npm run build"
24
24
  },
@@ -36,13 +36,20 @@
36
36
  "react-dom": "^18.0.0 || ^19.0.0"
37
37
  },
38
38
  "dependencies": {
39
- "@vertebr/client": "*",
40
39
  "@hookform/resolvers": "^5.2.1",
41
40
  "@radix-ui/react-label": "^2.1.7",
42
41
  "@radix-ui/react-select": "^2.3.7",
43
42
  "@radix-ui/react-separator": "^1.1.7",
44
43
  "@radix-ui/react-switch": "^1.2.5",
45
44
  "@tanstack/react-table": "^8.21.3",
45
+ "@tiptap/extension-image": "^3.29.2",
46
+ "@tiptap/extension-table": "^3.29.2",
47
+ "@tiptap/extensions": "^3.29.2",
48
+ "@tiptap/markdown": "^3.29.2",
49
+ "@tiptap/pm": "^3.29.2",
50
+ "@tiptap/react": "^3.29.2",
51
+ "@tiptap/starter-kit": "^3.29.2",
52
+ "@vertebr/client": "*",
46
53
  "react-hook-form": "^7.62.0",
47
54
  "zod": "^3.25.76"
48
55
  },