@fogpipe/forma-react 0.17.1 → 0.18.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 (36) hide show
  1. package/README.md +82 -0
  2. package/dist/FormRenderer-D_ZVK44t.d.ts +558 -0
  3. package/dist/chunk-5K4QITFH.js +1276 -0
  4. package/dist/chunk-5K4QITFH.js.map +1 -0
  5. package/dist/defaults/index.d.ts +56 -0
  6. package/dist/defaults/index.js +895 -0
  7. package/dist/defaults/index.js.map +1 -0
  8. package/dist/defaults/styles/forma-defaults.css +696 -0
  9. package/dist/index.d.ts +7 -559
  10. package/dist/index.js +28 -1292
  11. package/dist/index.js.map +1 -1
  12. package/package.json +17 -3
  13. package/src/__tests__/defaults/components.test.tsx +818 -0
  14. package/src/__tests__/defaults/integration.test.tsx +494 -0
  15. package/src/__tests__/defaults/layout.test.tsx +298 -0
  16. package/src/defaults/DefaultFormRenderer.tsx +43 -0
  17. package/src/defaults/componentMap.ts +45 -0
  18. package/src/defaults/components/ArrayField.tsx +183 -0
  19. package/src/defaults/components/BooleanInput.tsx +32 -0
  20. package/src/defaults/components/ComputedDisplay.tsx +26 -0
  21. package/src/defaults/components/DateInput.tsx +59 -0
  22. package/src/defaults/components/DisplayField.tsx +15 -0
  23. package/src/defaults/components/FallbackField.tsx +35 -0
  24. package/src/defaults/components/MatrixField.tsx +98 -0
  25. package/src/defaults/components/MultiSelectInput.tsx +51 -0
  26. package/src/defaults/components/NumberInput.tsx +73 -0
  27. package/src/defaults/components/ObjectField.tsx +22 -0
  28. package/src/defaults/components/SelectInput.tsx +44 -0
  29. package/src/defaults/components/TextInput.tsx +48 -0
  30. package/src/defaults/components/TextareaInput.tsx +46 -0
  31. package/src/defaults/index.ts +33 -0
  32. package/src/defaults/layout/FieldWrapper.tsx +83 -0
  33. package/src/defaults/layout/FormLayout.tsx +34 -0
  34. package/src/defaults/layout/PageWrapper.tsx +18 -0
  35. package/src/defaults/layout/WizardLayout.tsx +130 -0
  36. package/src/defaults/styles/forma-defaults.css +696 -0
@@ -0,0 +1,696 @@
1
+ /* ==========================================================================
2
+ Forma Default Component Library — CSS
3
+ ========================================================================== */
4
+
5
+ /* --------------------------------------------------------------------------
6
+ CSS Variables — Semantic Tokens (what consumers override)
7
+ -------------------------------------------------------------------------- */
8
+ :root {
9
+ --forma-font-family: system-ui, -apple-system, sans-serif;
10
+ --forma-font-size: 16px;
11
+ --forma-line-height: 1.5;
12
+ --forma-color-primary: #2563eb;
13
+ --forma-color-primary-hover: #1d4ed8;
14
+ --forma-color-error: #dc2626;
15
+ --forma-color-warning: #d97706;
16
+ --forma-color-border: #d1d5db;
17
+ --forma-color-border-focus: #2563eb;
18
+ --forma-color-bg: #ffffff;
19
+ --forma-color-bg-disabled: #f9fafb;
20
+ --forma-color-text: #111827;
21
+ --forma-color-text-muted: #6b7280;
22
+ --forma-color-text-error: #dc2626;
23
+ --forma-color-text-warning: #d97706;
24
+ --forma-radius: 6px;
25
+ --forma-spacing: 16px;
26
+ --forma-spacing-sm: 8px;
27
+ --forma-spacing-xs: 4px;
28
+ --forma-transition: 150ms ease;
29
+
30
+ /* Component tokens — reference semantic, consumers CAN override */
31
+ --forma-input-bg: var(--forma-color-bg);
32
+ --forma-input-border: var(--forma-color-border);
33
+ --forma-input-border-focus: var(--forma-color-border-focus);
34
+ --forma-input-radius: var(--forma-radius);
35
+ --forma-input-padding: 0.5rem 0.75rem;
36
+ --forma-input-font-size: var(--forma-font-size);
37
+
38
+ --forma-label-font-size: 0.875rem;
39
+ --forma-label-font-weight: 500;
40
+ --forma-label-color: var(--forma-color-text);
41
+
42
+ --forma-focus-ring-color: var(--forma-color-border-focus);
43
+ --forma-focus-ring-width: 2px;
44
+
45
+ --forma-error-font-size: 0.8125rem;
46
+ --forma-error-color: var(--forma-color-text-error);
47
+ --forma-warning-color: var(--forma-color-text-warning);
48
+
49
+ --forma-button-bg: var(--forma-color-primary);
50
+ --forma-button-bg-hover: var(--forma-color-primary-hover);
51
+ --forma-button-color: #ffffff;
52
+ --forma-button-radius: var(--forma-radius);
53
+ --forma-button-padding: 0.625rem 1.25rem;
54
+ }
55
+
56
+ /* --------------------------------------------------------------------------
57
+ Dark Mode
58
+ -------------------------------------------------------------------------- */
59
+ @media (prefers-color-scheme: dark) {
60
+ :root:not([data-theme="light"]) {
61
+ --forma-color-bg: #1f2937;
62
+ --forma-color-text: #f9fafb;
63
+ --forma-color-text-muted: #9ca3af;
64
+ --forma-color-border: #4b5563;
65
+ --forma-color-bg-disabled: #374151;
66
+ }
67
+ }
68
+
69
+ [data-theme="dark"] {
70
+ --forma-color-bg: #1f2937;
71
+ --forma-color-text: #f9fafb;
72
+ --forma-color-text-muted: #9ca3af;
73
+ --forma-color-border: #4b5563;
74
+ --forma-color-bg-disabled: #374151;
75
+ }
76
+
77
+ /* --------------------------------------------------------------------------
78
+ Base / Reset
79
+ -------------------------------------------------------------------------- */
80
+ .forma-form,
81
+ .forma-wizard {
82
+ font-family: var(--forma-font-family);
83
+ font-size: var(--forma-font-size);
84
+ line-height: var(--forma-line-height);
85
+ color: var(--forma-color-text);
86
+ }
87
+
88
+ /* Screen-reader only */
89
+ .forma-sr-only {
90
+ position: absolute;
91
+ width: 1px;
92
+ height: 1px;
93
+ padding: 0;
94
+ margin: -1px;
95
+ overflow: hidden;
96
+ clip: rect(0, 0, 0, 0);
97
+ white-space: nowrap;
98
+ border: 0;
99
+ }
100
+
101
+ /* --------------------------------------------------------------------------
102
+ Field Wrapper
103
+ -------------------------------------------------------------------------- */
104
+ .forma-field {
105
+ margin-bottom: var(--forma-spacing);
106
+ }
107
+
108
+ /* .forma-field--required — applied to required fields, no default visual beyond
109
+ the asterisk. Override to add custom required styling (e.g., left border). */
110
+
111
+ .forma-field__description {
112
+ font-size: var(--forma-error-font-size);
113
+ color: var(--forma-color-text-muted);
114
+ margin: var(--forma-spacing-xs) 0;
115
+ }
116
+
117
+ .forma-field__errors {
118
+ margin-top: var(--forma-spacing-xs);
119
+ }
120
+
121
+ .forma-field__error {
122
+ display: block;
123
+ font-size: var(--forma-error-font-size);
124
+ color: var(--forma-error-color);
125
+ }
126
+
127
+ .forma-field--error .forma-input,
128
+ .forma-field--error .forma-textarea,
129
+ .forma-field--error .forma-select {
130
+ border-color: var(--forma-color-error);
131
+ }
132
+
133
+ .forma-field--warning .forma-input,
134
+ .forma-field--warning .forma-textarea,
135
+ .forma-field--warning .forma-select {
136
+ border-color: var(--forma-color-warning);
137
+ }
138
+
139
+ .forma-field__warning {
140
+ display: block;
141
+ font-size: var(--forma-error-font-size);
142
+ color: var(--forma-warning-color);
143
+ }
144
+
145
+ /* --------------------------------------------------------------------------
146
+ Labels
147
+ -------------------------------------------------------------------------- */
148
+ .forma-label {
149
+ display: block;
150
+ font-size: var(--forma-label-font-size);
151
+ font-weight: var(--forma-label-font-weight);
152
+ color: var(--forma-label-color);
153
+ margin-bottom: var(--forma-spacing-xs);
154
+ }
155
+
156
+ .forma-label__required {
157
+ color: var(--forma-color-error);
158
+ }
159
+
160
+ /* --------------------------------------------------------------------------
161
+ Input
162
+ -------------------------------------------------------------------------- */
163
+ .forma-input,
164
+ .forma-textarea,
165
+ .forma-select {
166
+ display: block;
167
+ width: 100%;
168
+ padding: var(--forma-input-padding);
169
+ font-family: inherit;
170
+ font-size: var(--forma-input-font-size);
171
+ line-height: var(--forma-line-height);
172
+ color: var(--forma-color-text);
173
+ background-color: var(--forma-input-bg);
174
+ border: 1px solid var(--forma-input-border);
175
+ border-radius: var(--forma-input-radius);
176
+ transition:
177
+ border-color var(--forma-transition),
178
+ outline-color var(--forma-transition);
179
+ box-sizing: border-box;
180
+ }
181
+
182
+ .forma-input:focus-visible,
183
+ .forma-textarea:focus-visible,
184
+ .forma-select:focus-visible {
185
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
186
+ outline-offset: 1px;
187
+ border-color: var(--forma-input-border-focus);
188
+ }
189
+
190
+ .forma-input:disabled,
191
+ .forma-textarea:disabled,
192
+ .forma-select:disabled {
193
+ background-color: var(--forma-color-bg-disabled);
194
+ cursor: not-allowed;
195
+ opacity: 0.7;
196
+ }
197
+
198
+ .forma-input[readonly],
199
+ .forma-textarea[readonly] {
200
+ background-color: var(--forma-color-bg-disabled);
201
+ }
202
+
203
+ .forma-textarea {
204
+ resize: vertical;
205
+ min-height: 5rem;
206
+ }
207
+
208
+ /* --------------------------------------------------------------------------
209
+ Input Adorner
210
+ -------------------------------------------------------------------------- */
211
+ .forma-input-adorner {
212
+ display: flex;
213
+ align-items: stretch;
214
+ border: 1px solid var(--forma-input-border);
215
+ border-radius: var(--forma-input-radius);
216
+ overflow: hidden;
217
+ background-color: var(--forma-input-bg);
218
+ transition: border-color var(--forma-transition);
219
+ }
220
+
221
+ .forma-input-adorner:focus-within {
222
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
223
+ outline-offset: 1px;
224
+ border-color: var(--forma-input-border-focus);
225
+ }
226
+
227
+ .forma-input-adorner .forma-input,
228
+ .forma-input-adorner .forma-textarea {
229
+ border: 0;
230
+ outline: none;
231
+ flex: 1;
232
+ min-width: 0;
233
+ }
234
+
235
+ .forma-input-adorner .forma-input:focus,
236
+ .forma-input-adorner .forma-textarea:focus {
237
+ outline: none;
238
+ }
239
+
240
+ .forma-input-adorner__prefix,
241
+ .forma-input-adorner__suffix {
242
+ display: flex;
243
+ align-items: center;
244
+ padding: 0 0.75rem;
245
+ font-size: 0.875rem;
246
+ color: var(--forma-color-text-muted);
247
+ background-color: var(--forma-color-bg-disabled);
248
+ white-space: nowrap;
249
+ user-select: none;
250
+ }
251
+
252
+ .forma-input-adorner__prefix {
253
+ border-right: 1px solid var(--forma-input-border);
254
+ }
255
+
256
+ .forma-input-adorner__suffix {
257
+ border-left: 1px solid var(--forma-input-border);
258
+ }
259
+
260
+ /* --------------------------------------------------------------------------
261
+ Select
262
+ -------------------------------------------------------------------------- */
263
+ .forma-select {
264
+ appearance: none;
265
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
266
+ background-repeat: no-repeat;
267
+ background-position: right 0.75rem center;
268
+ background-size: 12px;
269
+ padding-right: 2.5rem;
270
+ cursor: pointer;
271
+ }
272
+
273
+ .forma-select:disabled {
274
+ cursor: not-allowed;
275
+ }
276
+
277
+ /* --------------------------------------------------------------------------
278
+ Checkbox & Radio
279
+ -------------------------------------------------------------------------- */
280
+ .forma-checkbox {
281
+ display: flex;
282
+ align-items: center;
283
+ gap: var(--forma-spacing-sm);
284
+ }
285
+
286
+ .forma-checkbox__input {
287
+ appearance: none;
288
+ width: 1.125rem;
289
+ height: 1.125rem;
290
+ border: 1px solid var(--forma-input-border);
291
+ border-radius: 3px;
292
+ background-color: var(--forma-input-bg);
293
+ cursor: pointer;
294
+ flex-shrink: 0;
295
+ position: relative;
296
+ transition:
297
+ background-color var(--forma-transition),
298
+ border-color var(--forma-transition);
299
+ }
300
+
301
+ .forma-checkbox__input:checked {
302
+ background-color: var(--forma-color-primary);
303
+ border-color: var(--forma-color-primary);
304
+ }
305
+
306
+ .forma-checkbox__input:checked::before {
307
+ content: "";
308
+ position: absolute;
309
+ top: 1px;
310
+ left: 4px;
311
+ width: 6px;
312
+ height: 10px;
313
+ border: solid #fff;
314
+ border-width: 0 2px 2px 0;
315
+ transform: rotate(45deg);
316
+ }
317
+
318
+ .forma-checkbox__input:focus-visible {
319
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
320
+ outline-offset: 1px;
321
+ }
322
+
323
+ .forma-checkbox__input:disabled {
324
+ cursor: not-allowed;
325
+ opacity: 0.7;
326
+ }
327
+
328
+ .forma-checkbox__label {
329
+ font-size: var(--forma-font-size);
330
+ color: var(--forma-color-text);
331
+ cursor: pointer;
332
+ user-select: none;
333
+ }
334
+
335
+ .forma-radio__input {
336
+ appearance: none;
337
+ width: 1.125rem;
338
+ height: 1.125rem;
339
+ border: 1px solid var(--forma-input-border);
340
+ border-radius: 50%;
341
+ background-color: var(--forma-input-bg);
342
+ cursor: pointer;
343
+ flex-shrink: 0;
344
+ position: relative;
345
+ transition:
346
+ background-color var(--forma-transition),
347
+ border-color var(--forma-transition);
348
+ }
349
+
350
+ .forma-radio__input:checked {
351
+ border-color: var(--forma-color-primary);
352
+ }
353
+
354
+ .forma-radio__input:checked::before {
355
+ content: "";
356
+ position: absolute;
357
+ top: 3px;
358
+ left: 3px;
359
+ width: 10px;
360
+ height: 10px;
361
+ border-radius: 50%;
362
+ background-color: var(--forma-color-primary);
363
+ }
364
+
365
+ .forma-radio__input:focus-visible {
366
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
367
+ outline-offset: 1px;
368
+ }
369
+
370
+ .forma-radio__input:disabled {
371
+ cursor: not-allowed;
372
+ opacity: 0.7;
373
+ }
374
+
375
+ /* --------------------------------------------------------------------------
376
+ Multi-select (checkbox group)
377
+ -------------------------------------------------------------------------- */
378
+ .forma-multiselect {
379
+ border: none;
380
+ padding: 0;
381
+ margin: 0;
382
+ }
383
+
384
+ .forma-multiselect__option {
385
+ display: flex;
386
+ align-items: center;
387
+ gap: var(--forma-spacing-sm);
388
+ padding: var(--forma-spacing-xs) 0;
389
+ }
390
+
391
+ /* --------------------------------------------------------------------------
392
+ Array Field
393
+ -------------------------------------------------------------------------- */
394
+ .forma-array__empty {
395
+ color: var(--forma-color-text-muted);
396
+ font-style: italic;
397
+ margin: var(--forma-spacing-sm) 0;
398
+ }
399
+
400
+ .forma-array__item {
401
+ display: flex;
402
+ gap: var(--forma-spacing-sm);
403
+ align-items: flex-start;
404
+ padding: var(--forma-spacing);
405
+ border: 1px solid var(--forma-input-border);
406
+ border-radius: var(--forma-input-radius);
407
+ margin-bottom: var(--forma-spacing-sm);
408
+ }
409
+
410
+ .forma-array__item-fields {
411
+ flex: 1;
412
+ min-width: 0;
413
+ }
414
+
415
+ .forma-array__item-fields .forma-field {
416
+ margin-bottom: var(--forma-spacing-sm);
417
+ }
418
+
419
+ .forma-array__item-fields .forma-field:last-child {
420
+ margin-bottom: 0;
421
+ }
422
+
423
+ .forma-array__remove {
424
+ flex-shrink: 0;
425
+ align-self: flex-start;
426
+ }
427
+
428
+ .forma-array__add {
429
+ margin-top: var(--forma-spacing-sm);
430
+ }
431
+
432
+ /* --------------------------------------------------------------------------
433
+ Object Field
434
+ -------------------------------------------------------------------------- */
435
+ .forma-object {
436
+ border: 1px solid var(--forma-input-border);
437
+ border-radius: var(--forma-input-radius);
438
+ padding: var(--forma-spacing);
439
+ margin: 0;
440
+ }
441
+
442
+ .forma-object__legend {
443
+ font-weight: var(--forma-label-font-weight);
444
+ font-size: var(--forma-label-font-size);
445
+ color: var(--forma-label-color);
446
+ padding: 0 var(--forma-spacing-xs);
447
+ }
448
+
449
+ .forma-object__description {
450
+ font-size: var(--forma-error-font-size);
451
+ color: var(--forma-color-text-muted);
452
+ margin: var(--forma-spacing-xs) 0 var(--forma-spacing-sm);
453
+ }
454
+
455
+ /* --------------------------------------------------------------------------
456
+ Computed Display
457
+ -------------------------------------------------------------------------- */
458
+ .forma-computed {
459
+ display: block;
460
+ font-weight: 600;
461
+ font-variant-numeric: tabular-nums;
462
+ color: var(--forma-color-text);
463
+ }
464
+
465
+ /* --------------------------------------------------------------------------
466
+ Display Field
467
+ -------------------------------------------------------------------------- */
468
+ .forma-display__content {
469
+ color: var(--forma-color-text-muted);
470
+ margin: 0;
471
+ }
472
+
473
+ /* --------------------------------------------------------------------------
474
+ Matrix / Grid
475
+ -------------------------------------------------------------------------- */
476
+ .forma-matrix__table {
477
+ width: 100%;
478
+ border-collapse: collapse;
479
+ }
480
+
481
+ .forma-matrix__corner {
482
+ width: 1px;
483
+ }
484
+
485
+ .forma-matrix__col-header {
486
+ text-align: center;
487
+ font-size: var(--forma-label-font-size);
488
+ font-weight: var(--forma-label-font-weight);
489
+ padding: var(--forma-spacing-sm);
490
+ color: var(--forma-color-text-muted);
491
+ }
492
+
493
+ .forma-matrix__row-header {
494
+ text-align: left;
495
+ font-size: var(--forma-font-size);
496
+ font-weight: normal;
497
+ padding: var(--forma-spacing-sm);
498
+ color: var(--forma-color-text);
499
+ }
500
+
501
+ .forma-matrix__cell {
502
+ text-align: center;
503
+ padding: var(--forma-spacing-sm);
504
+ }
505
+
506
+ .forma-matrix__row:nth-child(even) {
507
+ background-color: var(--forma-color-bg-disabled);
508
+ }
509
+
510
+ /* --------------------------------------------------------------------------
511
+ Fallback Field
512
+ -------------------------------------------------------------------------- */
513
+ .forma-fallback__warning {
514
+ font-size: var(--forma-error-font-size);
515
+ color: var(--forma-color-error);
516
+ margin: 0 0 var(--forma-spacing-xs);
517
+ }
518
+
519
+ /* --------------------------------------------------------------------------
520
+ Buttons
521
+ -------------------------------------------------------------------------- */
522
+ .forma-button {
523
+ display: inline-flex;
524
+ align-items: center;
525
+ justify-content: center;
526
+ padding: var(--forma-button-padding);
527
+ font-family: inherit;
528
+ font-size: var(--forma-font-size);
529
+ font-weight: 500;
530
+ line-height: 1;
531
+ border: 1px solid transparent;
532
+ border-radius: var(--forma-button-radius);
533
+ cursor: pointer;
534
+ transition:
535
+ background-color var(--forma-transition),
536
+ border-color var(--forma-transition);
537
+ }
538
+
539
+ .forma-button:disabled {
540
+ cursor: not-allowed;
541
+ opacity: 0.6;
542
+ }
543
+
544
+ .forma-button--primary {
545
+ background-color: var(--forma-button-bg);
546
+ color: var(--forma-button-color);
547
+ border-color: var(--forma-button-bg);
548
+ }
549
+
550
+ .forma-button--primary:hover:not(:disabled) {
551
+ background-color: var(--forma-button-bg-hover);
552
+ border-color: var(--forma-button-bg-hover);
553
+ }
554
+
555
+ .forma-button--primary:focus-visible {
556
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
557
+ outline-offset: 2px;
558
+ }
559
+
560
+ .forma-button--secondary {
561
+ background-color: transparent;
562
+ color: var(--forma-color-text);
563
+ border-color: var(--forma-input-border);
564
+ }
565
+
566
+ .forma-button--secondary:hover:not(:disabled) {
567
+ background-color: var(--forma-color-bg-disabled);
568
+ }
569
+
570
+ .forma-button--secondary:focus-visible {
571
+ outline: var(--forma-focus-ring-width) solid var(--forma-focus-ring-color);
572
+ outline-offset: 2px;
573
+ }
574
+
575
+ .forma-button--danger {
576
+ background-color: transparent;
577
+ color: var(--forma-color-error);
578
+ border-color: var(--forma-color-error);
579
+ padding: 0.375rem 0.75rem;
580
+ font-size: 0.8125rem;
581
+ }
582
+
583
+ .forma-button--danger:hover:not(:disabled) {
584
+ background-color: var(--forma-color-error);
585
+ color: #fff;
586
+ }
587
+
588
+ /* Submit button */
589
+ .forma-submit--loading {
590
+ opacity: 0.7;
591
+ }
592
+
593
+ /* --------------------------------------------------------------------------
594
+ Form Layout
595
+ -------------------------------------------------------------------------- */
596
+ .forma-form__actions {
597
+ margin-top: var(--forma-spacing);
598
+ display: flex;
599
+ justify-content: flex-end;
600
+ }
601
+
602
+ /* --------------------------------------------------------------------------
603
+ Wizard Layout
604
+ -------------------------------------------------------------------------- */
605
+ .forma-wizard__steps {
606
+ display: flex;
607
+ gap: var(--forma-spacing-sm);
608
+ align-items: center;
609
+ margin-bottom: calc(var(--forma-spacing) * 1.5);
610
+ padding-bottom: var(--forma-spacing);
611
+ border-bottom: 1px solid var(--forma-input-border);
612
+ overflow-x: auto;
613
+ -webkit-overflow-scrolling: touch;
614
+ }
615
+
616
+ .forma-step {
617
+ display: flex;
618
+ align-items: center;
619
+ gap: var(--forma-spacing-xs);
620
+ flex: 1;
621
+ }
622
+
623
+ .forma-step__indicator {
624
+ display: flex;
625
+ align-items: center;
626
+ justify-content: center;
627
+ width: 2rem;
628
+ height: 2rem;
629
+ border-radius: 50%;
630
+ font-size: 0.8125rem;
631
+ font-weight: 600;
632
+ flex-shrink: 0;
633
+ transition:
634
+ background-color var(--forma-transition),
635
+ color var(--forma-transition);
636
+ }
637
+
638
+ .forma-step__label {
639
+ font-size: var(--forma-label-font-size);
640
+ white-space: nowrap;
641
+ overflow: hidden;
642
+ text-overflow: ellipsis;
643
+ max-width: 10rem;
644
+ }
645
+
646
+ .forma-step--current .forma-step__indicator {
647
+ background-color: var(--forma-color-primary);
648
+ color: #fff;
649
+ }
650
+
651
+ .forma-step--current .forma-step__label {
652
+ color: var(--forma-color-primary);
653
+ font-weight: var(--forma-label-font-weight);
654
+ }
655
+
656
+ .forma-step--completed .forma-step__indicator {
657
+ background-color: var(--forma-color-primary);
658
+ color: #fff;
659
+ }
660
+
661
+ .forma-step--completed .forma-step__label {
662
+ color: var(--forma-color-text-muted);
663
+ }
664
+
665
+ .forma-step--upcoming .forma-step__indicator {
666
+ background-color: var(--forma-color-bg-disabled);
667
+ color: var(--forma-color-text-muted);
668
+ border: 1px solid var(--forma-input-border);
669
+ }
670
+
671
+ .forma-step--upcoming .forma-step__label {
672
+ color: var(--forma-color-text-muted);
673
+ }
674
+
675
+ .forma-wizard__nav {
676
+ display: flex;
677
+ justify-content: space-between;
678
+ margin-top: calc(var(--forma-spacing) * 1.5);
679
+ padding-top: var(--forma-spacing);
680
+ border-top: 1px solid var(--forma-input-border);
681
+ }
682
+
683
+ /* --------------------------------------------------------------------------
684
+ Page Wrapper
685
+ -------------------------------------------------------------------------- */
686
+ .forma-page__title {
687
+ font-size: 1.25rem;
688
+ font-weight: 600;
689
+ color: var(--forma-color-text);
690
+ margin: 0 0 var(--forma-spacing-xs);
691
+ }
692
+
693
+ .forma-page__description {
694
+ color: var(--forma-color-text-muted);
695
+ margin: 0 0 var(--forma-spacing);
696
+ }