@usgb/forms 1.0.1 → 1.0.3

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 (42) hide show
  1. package/README.md +139 -104
  2. package/dist/forms-manifest.1.0.3.json +439 -0
  3. package/dist/forms-manifest.json +252 -64
  4. package/dist/index.js +747 -670
  5. package/dist/src/contract/createIdempotencyKey.d.ts +2 -0
  6. package/dist/src/contract/createIdempotencyKey.d.ts.map +1 -0
  7. package/dist/src/contract/createStubAdapter.d.ts.map +1 -1
  8. package/dist/src/contract/types.d.ts +21 -25
  9. package/dist/src/contract/types.d.ts.map +1 -1
  10. package/dist/src/definitions/consents.d.ts +63 -20
  11. package/dist/src/definitions/consents.d.ts.map +1 -1
  12. package/dist/src/definitions/index.d.ts +5 -4
  13. package/dist/src/definitions/index.d.ts.map +1 -1
  14. package/dist/src/definitions/manifest.d.ts +14 -1
  15. package/dist/src/definitions/manifest.d.ts.map +1 -1
  16. package/dist/src/definitions/types.d.ts +44 -9
  17. package/dist/src/definitions/types.d.ts.map +1 -1
  18. package/dist/src/form/FormShell.d.ts +2 -1
  19. package/dist/src/form/FormShell.d.ts.map +1 -1
  20. package/dist/src/form/UsgbForm.d.ts +5 -4
  21. package/dist/src/form/UsgbForm.d.ts.map +1 -1
  22. package/dist/src/form/chunkFields.d.ts +1 -1
  23. package/dist/src/form/kinds/LeadKindForm.d.ts +1 -1
  24. package/dist/src/form/kinds/LeadKindForm.d.ts.map +1 -1
  25. package/dist/src/form/kinds/NewsletterKindForm.d.ts +1 -1
  26. package/dist/src/form/kinds/NewsletterKindForm.d.ts.map +1 -1
  27. package/dist/src/form/kinds/types.d.ts +3 -1
  28. package/dist/src/form/kinds/types.d.ts.map +1 -1
  29. package/dist/src/form/useUsgbFormSession.d.ts +7 -8
  30. package/dist/src/form/useUsgbFormSession.d.ts.map +1 -1
  31. package/dist/src/index.d.ts +5 -5
  32. package/dist/src/index.d.ts.map +1 -1
  33. package/dist/src/ui/Button.d.ts.map +1 -1
  34. package/dist/src/ui/ConsentField.d.ts.map +1 -1
  35. package/dist/usgb-forms.1.0.3.js +44 -0
  36. package/dist/usgb-forms.css +98 -15
  37. package/dist/usgb-forms.js +11 -11
  38. package/forms-manifest.json +252 -64
  39. package/package.json +2 -2
  40. package/dist/src/contract/collectContext.d.ts +0 -9
  41. package/dist/src/contract/collectContext.d.ts.map +0 -1
  42. package/dist/usgb-forms.1.0.1.js +0 -44
@@ -32,7 +32,7 @@
32
32
  --usgb-field-background: var(--usgb-primary);
33
33
  --usgb-field-border: var(--usgb-secondary);
34
34
  --usgb-field-text: var(--usgb-secondary);
35
- --usgb-field-placeholder: var(--usgb-grey-3);
35
+ --usgb-field-placeholder: var(--usgb-grey-2);
36
36
  --usgb-link: var(--usgb-blue-1);
37
37
  --usgb-link-hover: var(--usgb-hover);
38
38
  --usgb-checkbox-background: var(--usgb-primary);
@@ -48,13 +48,14 @@
48
48
  --usgb-group-gap: 1.5rem;
49
49
  --usgb-grid-gap: 1rem;
50
50
  --usgb-grid-margin-bottom: 0;
51
- --usgb-heading-font-size: 1.75rem;
51
+ --usgb-heading-font-size: 2rem;
52
52
  --usgb-heading-font-weight: 700;
53
- --usgb-heading-line-height: 1.2;
53
+ --usgb-heading-line-height: 2.75rem;
54
54
  --usgb-heading-letter-spacing: 0;
55
55
  --usgb-heading-transform: none;
56
56
  --usgb-heading-margin: 0 0 0.75rem;
57
57
  --usgb-subheading-font-size: 0.875rem;
58
+ --usgb-subheading-font-weight: 400;
58
59
  --usgb-subheading-line-height: 1.5rem;
59
60
  --usgb-subheading-margin: 0 0 1.25rem;
60
61
  --usgb-label-margin-bottom: 0.375rem;
@@ -86,6 +87,7 @@
86
87
  --usgb-consent-color: var(--usgb-form-content);
87
88
  --usgb-consent-transform: none;
88
89
  --usgb-button-padding: 0.625rem 1.875rem;
90
+ --usgb-button-margin-top: 0;
89
91
  --usgb-button-min-height: 2.1875rem;
90
92
  --usgb-button-radius: 3.125rem;
91
93
  --usgb-button-font-size: 0.75rem;
@@ -104,6 +106,15 @@
104
106
  container: usgb-form / inline-size;
105
107
  }
106
108
 
109
+ /* Landing-page heading steps up on desktop; sidebar and newsletter set
110
+ their own sizes and are unaffected. */
111
+ @media (min-width: 768px) {
112
+ .usgb-form {
113
+ --usgb-heading-font-size: 2.5rem;
114
+ --usgb-heading-line-height: 3.25rem;
115
+ }
116
+ }
117
+
107
118
  .usgb-form *,
108
119
  .usgb-form *::before,
109
120
  .usgb-form *::after {
@@ -113,6 +124,7 @@
113
124
  /* Layout */
114
125
 
115
126
  .usgb-form .usgb-form-group {
127
+ position: relative;
116
128
  margin-bottom: var(--usgb-group-gap);
117
129
  }
118
130
 
@@ -129,7 +141,7 @@
129
141
  }
130
142
 
131
143
  @container usgb-form (min-width: 20rem) {
132
- .usgb-form[data-variant~='two-column'] .usgb-form-grid {
144
+ .usgb-form[data-layout='two-column'] .usgb-form-grid {
133
145
  grid-template-columns: 1fr 1fr;
134
146
  }
135
147
  }
@@ -138,7 +150,7 @@
138
150
  viewport so those browsers still get a two-up name row on desktop. */
139
151
  @supports not (container-type: inline-size) {
140
152
  @media (min-width: 768px) {
141
- .usgb-form[data-variant~='two-column'] .usgb-form-grid {
153
+ .usgb-form[data-layout='two-column'] .usgb-form-grid {
142
154
  grid-template-columns: 1fr 1fr;
143
155
  }
144
156
  }
@@ -159,6 +171,7 @@
159
171
 
160
172
  .usgb-form .usgb-form-subheading {
161
173
  font-size: var(--usgb-subheading-font-size);
174
+ font-weight: var(--usgb-subheading-font-weight);
162
175
  line-height: var(--usgb-subheading-line-height);
163
176
  margin: var(--usgb-subheading-margin);
164
177
  color: var(--usgb-form-muted);
@@ -205,6 +218,7 @@
205
218
  margin: -1px;
206
219
  overflow: hidden;
207
220
  clip: rect(0, 0, 0, 0);
221
+ clip-path: inset(50%);
208
222
  white-space: nowrap;
209
223
  border: 0;
210
224
  }
@@ -254,6 +268,13 @@
254
268
  outline: none;
255
269
  }
256
270
 
271
+ /* Focus must stay visible when the field is also invalid (2.4.7). */
272
+ .usgb-form .usgb-field-control.usgb-field-invalid:focus {
273
+ border-color: var(--usgb-alert-danger);
274
+ box-shadow: inset 0 0 0 1px var(--usgb-gold-1);
275
+ outline: none;
276
+ }
277
+
257
278
  .usgb-form .usgb-field-control:disabled {
258
279
  outline: none;
259
280
  border-color: var(--usgb-grey-9);
@@ -310,6 +331,15 @@
310
331
  flex-shrink: 0;
311
332
  }
312
333
 
334
+ .usgb-form .usgb-form-checkbox:focus {
335
+ outline: none;
336
+ }
337
+
338
+ .usgb-form .usgb-form-checkbox:focus-visible {
339
+ outline: var(--usgb-outline-focused);
340
+ outline-offset: 2px;
341
+ }
342
+
313
343
  .usgb-form .usgb-form-checkbox-mark {
314
344
  position: absolute;
315
345
  inset: 0;
@@ -335,10 +365,12 @@
335
365
 
336
366
  .usgb-form .usgb-consent-notice {
337
367
  margin: 0 0 var(--usgb-consent-margin-bottom);
368
+ cursor: default;
338
369
  }
339
370
 
340
371
  .usgb-form .usgb-consent-copy a {
341
372
  color: var(--usgb-link);
373
+ font-weight: var(--usgb-consent-link-font-weight, inherit);
342
374
  text-decoration: underline;
343
375
  }
344
376
 
@@ -352,6 +384,7 @@
352
384
  cursor: pointer;
353
385
  display: inline-flex;
354
386
  padding: var(--usgb-button-padding);
387
+ margin-top: var(--usgb-button-margin-top);
355
388
  min-height: var(--usgb-button-min-height);
356
389
  border-radius: var(--usgb-button-radius);
357
390
  line-height: var(--usgb-button-line-height);
@@ -375,7 +408,7 @@
375
408
  border-color: var(--usgb-button-background);
376
409
  }
377
410
 
378
- .usgb-form .usgb-btn-primary:hover:not(:disabled) {
411
+ .usgb-form .usgb-btn-primary:hover:not(:disabled):not([aria-disabled='true']) {
379
412
  background: var(--usgb-button-hover-background);
380
413
  color: var(--usgb-button-text);
381
414
  border-color: var(--usgb-button-hover-background);
@@ -389,12 +422,17 @@
389
422
  outline: var(--usgb-outline-focused);
390
423
  }
391
424
 
392
- .usgb-form .usgb-btn:disabled {
425
+ .usgb-form .usgb-btn:disabled,
426
+ .usgb-form .usgb-btn[aria-disabled='true'] {
393
427
  cursor: not-allowed;
428
+ }
429
+
430
+ .usgb-form .usgb-btn:disabled {
394
431
  pointer-events: none;
395
432
  }
396
433
 
397
- .usgb-form .usgb-btn-primary:disabled {
434
+ .usgb-form .usgb-btn-primary:disabled,
435
+ .usgb-form .usgb-btn-primary[aria-disabled='true'] {
398
436
  background: var(--usgb-button-disabled-background);
399
437
  color: var(--usgb-button-disabled-text);
400
438
  border-color: var(--usgb-button-disabled-background);
@@ -423,21 +461,36 @@
423
461
  /* Inverse hover keeps the white fill and gains a 3px ring. Two of those
424
462
  pixels are an inset shadow over the 1px border so the button does not
425
463
  change size between rest and hover. */
426
- .usgb-form[data-appearance='on-dark'] .usgb-btn-primary:hover:not(:disabled) {
464
+ .usgb-form[data-appearance='on-dark']
465
+ .usgb-btn-primary:hover:not(:disabled):not([aria-disabled='true']) {
427
466
  border-color: var(--usgb-hover);
428
467
  box-shadow: inset 0 0 0 2px var(--usgb-hover);
429
468
  }
430
469
 
431
470
  /* Variants */
432
471
 
472
+ /* Dense shares the landing-page type scale with large; spacing stays dense. */
433
473
  .usgb-form[data-variant~='dense'] {
434
474
  --usgb-group-gap: 1.25rem;
435
475
  --usgb-grid-gap: 1rem;
436
476
  --usgb-grid-margin-bottom: 1.25rem;
477
+ --usgb-subheading-font-size: 1.125rem;
478
+ --usgb-subheading-font-weight: 500;
479
+ --usgb-subheading-line-height: 1.75rem;
437
480
  --usgb-consent-font-size: 0.75rem;
438
481
  --usgb-consent-font-weight: 400;
439
482
  --usgb-consent-line-height: 1.4;
440
483
  --usgb-consent-transform: none;
484
+ --usgb-button-font-size: 1.125rem;
485
+ --usgb-button-line-height: 1.125rem;
486
+ }
487
+
488
+ @media (min-width: 768px) {
489
+ .usgb-form[data-variant~='dense'] {
490
+ --usgb-subheading-line-height: 1.8125rem;
491
+ --usgb-button-font-size: 1.25rem;
492
+ --usgb-button-line-height: 0.875rem;
493
+ }
441
494
  }
442
495
 
443
496
  /* Compact blog/sidebar kit — match live HubSpot density, design-sheet tokens. */
@@ -488,22 +541,31 @@
488
541
  float: none;
489
542
  }
490
543
 
544
+ /* Large: landing-page form. Figma draws the 1px field and button strokes
545
+ inside the box, so paddings below are the design values minus 1px and
546
+ the rendered boxes land on the designed 53px field / 50px (62px desktop)
547
+ button. */
491
548
  .usgb-form[data-variant~='large'] {
492
549
  --usgb-group-gap: 1.25rem;
493
550
  --usgb-grid-gap: 1.25rem;
494
551
  --usgb-grid-margin-bottom: 1.25rem;
495
552
  --usgb-heading-font-size: 2rem;
496
553
  --usgb-heading-font-weight: 700;
497
- --usgb-heading-line-height: 3rem;
554
+ --usgb-heading-line-height: 2.75rem;
498
555
  --usgb-heading-letter-spacing: -0.03125rem;
499
556
  --usgb-heading-transform: uppercase;
557
+ --usgb-heading-margin: 0 0 0.875rem;
558
+ --usgb-subheading-font-size: 1.125rem;
559
+ --usgb-subheading-font-weight: 500;
560
+ --usgb-subheading-line-height: 1.75rem;
561
+ --usgb-subheading-margin: 0 0 1.5rem;
500
562
  --usgb-label-margin-bottom: 0.125rem;
501
563
  --usgb-label-font-size: 1rem;
502
564
  --usgb-label-font-weight: 400;
503
565
  --usgb-label-letter-spacing: 0;
504
566
  --usgb-label-line-height: 1.32;
505
567
  --usgb-label-transform: none;
506
- --usgb-field-padding: 1rem 1.25rem;
568
+ --usgb-field-padding: 0.9375rem 1.0625rem 0.9375rem 1.1875rem;
507
569
  --usgb-field-font-size: 1rem;
508
570
  --usgb-field-font-weight: 400;
509
571
  --usgb-field-line-height: 1.32;
@@ -514,8 +576,29 @@
514
576
  --usgb-checkbox-margin: 0;
515
577
  --usgb-consent-font-size: 1.125rem;
516
578
  --usgb-consent-line-height: 1.75rem;
517
- --usgb-button-min-height: 3.4375rem;
518
- --usgb-button-font-size: 1rem;
579
+ --usgb-consent-link-font-weight: 600;
580
+ /* Preceding field already contributes the 20px group gap; this tops it
581
+ up to the designed 24px (32px desktop) between last field and CTA. */
582
+ --usgb-button-margin-top: 0.25rem;
583
+ --usgb-button-padding: 0.9375rem 3.4375rem;
584
+ --usgb-button-min-height: 3.125rem;
585
+ --usgb-button-font-size: 1.125rem;
586
+ --usgb-button-line-height: 1.125rem;
587
+ }
588
+
589
+ @media (min-width: 768px) {
590
+ .usgb-form[data-variant~='large'] {
591
+ --usgb-heading-font-size: 2.5rem;
592
+ --usgb-heading-line-height: 3.25rem;
593
+ --usgb-subheading-line-height: 1.8125rem;
594
+ --usgb-subheading-margin: 0 0 1.6875rem;
595
+ --usgb-button-margin-top: 0.75rem;
596
+ --usgb-button-padding: 1.4375rem 3.4375rem;
597
+ --usgb-button-min-height: 3.875rem;
598
+ --usgb-button-font-size: 1.25rem;
599
+ --usgb-button-line-height: 0.875rem;
600
+ --usgb-button-width: auto;
601
+ }
519
602
  }
520
603
 
521
604
  /* Newsletter kind: underline email + side CTA */
@@ -565,13 +648,13 @@
565
648
  margin-bottom: 0;
566
649
  box-shadow: none;
567
650
  }
568
-
651
+ /*
569
652
  .usgb-form[data-kind='newsletter']
570
653
  .usgb-form-inline
571
654
  .usgb-field-control::placeholder {
572
655
  color: var(--usgb-grey-9);
573
656
  text-transform: none;
574
- }
657
+ } */
575
658
 
576
659
  .usgb-form[data-kind='newsletter'] .usgb-form-inline .usgb-field-control:focus {
577
660
  border-color: var(--usgb-gold-1);