aw-wizard-forms 4.0.0 → 4.2.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.
@@ -762,7 +762,7 @@ function e(e2, r2) {
762
762
  } });
763
763
  };
764
764
  }
765
- i$3`
765
+ const designTokens = i$3`
766
766
  /* Colors */
767
767
  --wf-color-primary: #8040f0;
768
768
  --wf-color-primary-border: #602cbb;
@@ -774,13 +774,20 @@ i$3`
774
774
  --wf-color-text-secondary: #404040;
775
775
  --wf-color-text-muted: #646464;
776
776
  --wf-color-error: #dc3545;
777
+ --wf-color-error-light: rgba(220, 53, 69, 0.1);
777
778
  --wf-color-badge-bg: #fcfcfc;
778
779
  --wf-color-badge-border: #d4d4d4;
779
780
  --wf-color-badge-text: #5f5f5f;
780
781
  --wf-color-progress-active: rgba(0, 0, 0, 0.1);
781
782
  --wf-color-progress-inactive: rgba(0, 0, 0, 0.05);
782
783
 
784
+ /* Focus ring */
785
+ --wf-focus-ring-width: 3px;
786
+ --wf-focus-ring-primary: rgba(128, 64, 240, 0.2);
787
+ --wf-focus-ring-error: rgba(220, 53, 69, 0.2);
788
+
783
789
  /* Spacing scale */
790
+ --wf-spacing-05: 2px;
784
791
  --wf-spacing-1: 4px;
785
792
  --wf-spacing-2: 8px;
786
793
  --wf-spacing-3: 12px;
@@ -803,16 +810,33 @@ i$3`
803
810
  --wf-font-size-xl: 1.5rem;
804
811
  --wf-font-size-2xl: 2rem;
805
812
  --wf-font-size-3xl: 2.5rem;
813
+ --wf-font-family-mono: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
814
+ --wf-font-weight-input: 400;
815
+ --wf-font-weight-label: 500;
816
+ --wf-font-weight-heading: 600;
817
+ --wf-font-weight-button: 400;
806
818
 
807
819
  /* Input dimensions */
808
820
  --wf-input-min-height: 56px;
821
+ --wf-textarea-min-height: 100px;
822
+
823
+ /* Component dimensions */
824
+ --wf-btn-min-height: 48px;
825
+ --wf-badge-size: 24px;
826
+ --wf-spinner-size: 20px;
827
+ --wf-progress-height: 4px;
809
828
 
810
829
  /* Frosted glass effect (iOS-style) */
811
830
  --wf-glass-bg: rgba(255, 255, 255, 0.7);
812
831
  --wf-glass-bg-hover: rgba(255, 255, 255, 0.85);
813
832
  --wf-glass-border: rgba(0, 0, 0, 0.1);
814
833
  --wf-glass-blur: 20px;
815
- --wf-glass-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
834
+ --wf-glass-shadow: 0 2px 4px rgba(0, 0, 0, 0.03);
835
+ `;
836
+ const hostTokens = i$3`
837
+ :host {
838
+ ${designTokens}
839
+ }
816
840
  `;
817
841
  i$3`
818
842
  --wf-color-surface: #2d2d2d;
@@ -833,8 +857,8 @@ i$3`
833
857
  --wf-glass-border: rgba(255, 255, 255, 0.1);
834
858
  `;
835
859
  const sharedAnimations = i$3`@keyframes wf-spin{to{transform:rotate(360deg)}}@keyframes wf-blink{0%,to{opacity:1}50%{opacity:.5}}@keyframes wf-stepFadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes wf-stepFadeOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-10px)}}@keyframes wf-stepSlideInRight{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@keyframes wf-stepSlideInLeft{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}`;
836
- const buttonBaseStyles = i$3`.wf-btn{justify-content:center;align-items:center;gap:var(--wf-spacing-2,8px);padding:var(--wf-spacing-3,12px)var(--wf-spacing-4,16px);min-height:48px;font-size:var(--wf-font-size-base,1rem);border-radius:var(--wf-radius-md,8px);cursor:pointer;box-sizing:border-box;border:1px solid #0000;outline:none;font-family:inherit;font-weight:600;transition:all .15s;display:inline-flex}.wf-btn:focus-visible{box-shadow:0 0 0 3px #8040f04d}.wf-btn:disabled{opacity:.5;cursor:not-allowed}`;
837
- i$3`.wf-glass{background:var(--wf-glass-bg,#ffffffb3);-webkit-backdrop-filter:blur(var(--wf-glass-blur,20px));border:1px solid var(--wf-glass-border,#0000001a);box-shadow:var(--wf-glass-shadow,0 4px 6px #0000000d)}.wf-glass:hover{background:var(--wf-glass-bg-hover,#ffffffd9)}`;
860
+ const buttonBaseStyles = i$3`.wf-btn{justify-content:center;align-items:center;gap:var(--wf-spacing-2);padding:var(--wf-spacing-3)var(--wf-spacing-4);min-height:var(--wf-btn-min-height);font-size:var(--wf-font-size-base);font-weight:var(--wf-font-weight-button);border-radius:var(--wf-radius-md);cursor:pointer;box-sizing:border-box;border:1px solid #0000;outline:none;font-family:inherit;transition:all .15s;display:inline-flex}.wf-btn:focus-visible{box-shadow:0 0 0 var(--wf-focus-ring-width)var(--wf-focus-ring-primary)}.wf-btn:disabled{opacity:.5;cursor:not-allowed}`;
861
+ i$3`.wf-glass{background:var(--wf-glass-bg);-webkit-backdrop-filter:blur(var(--wf-glass-blur));border:1px solid var(--wf-glass-border);box-shadow:var(--wf-glass-shadow)}.wf-glass:hover{background:var(--wf-glass-bg-hover)}`;
838
862
  i$3`
839
863
  ${sharedAnimations}
840
864
 
@@ -862,13 +886,20 @@ const wizardFormStyles = [
862
886
  --wf-color-text-secondary: #404040;
863
887
  --wf-color-text-muted: #646464;
864
888
  --wf-color-error: #dc3545;
889
+ --wf-color-error-light: rgba(220, 53, 69, 0.1);
865
890
  --wf-color-badge-bg: #fcfcfc;
866
891
  --wf-color-badge-border: #d4d4d4;
867
892
  --wf-color-badge-text: #5f5f5f;
868
893
  --wf-color-progress-active: rgba(0, 0, 0, 0.1);
869
894
  --wf-color-progress-inactive: rgba(0, 0, 0, 0.05);
870
895
 
896
+ /* Focus ring */
897
+ --wf-focus-ring-width: 3px;
898
+ --wf-focus-ring-primary: rgba(128, 64, 240, 0.2);
899
+ --wf-focus-ring-error: rgba(220, 53, 69, 0.2);
900
+
871
901
  /* Spacing tokens */
902
+ --wf-spacing-05: 2px;
872
903
  --wf-spacing-1: 4px;
873
904
  --wf-spacing-2: 8px;
874
905
  --wf-spacing-3: 12px;
@@ -891,16 +922,28 @@ const wizardFormStyles = [
891
922
  --wf-font-size-xl: 1.5rem;
892
923
  --wf-font-size-2xl: 2rem;
893
924
  --wf-font-size-3xl: 2.5rem;
925
+ --wf-font-family-mono: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
926
+ --wf-font-weight-input: 400;
927
+ --wf-font-weight-label: 500;
928
+ --wf-font-weight-heading: 600;
929
+ --wf-font-weight-button: 400;
894
930
 
895
931
  /* Input tokens */
896
932
  --wf-input-min-height: 56px;
933
+ --wf-textarea-min-height: 100px;
934
+
935
+ /* Component dimensions */
936
+ --wf-btn-min-height: 48px;
937
+ --wf-badge-size: 24px;
938
+ --wf-spinner-size: 20px;
939
+ --wf-progress-height: 4px;
897
940
 
898
941
  /* Frosted glass effect (iOS-style) */
899
942
  --wf-glass-bg: rgba(255, 255, 255, 0.7);
900
943
  --wf-glass-bg-hover: rgba(255, 255, 255, 0.85);
901
944
  --wf-glass-border: rgba(0, 0, 0, 0.1);
902
945
  --wf-glass-blur: 20px;
903
- --wf-glass-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
946
+ --wf-glass-shadow: 0 2px 4px rgba(0, 0, 0, 0.03);
904
947
  }
905
948
 
906
949
  :host([hidden]) {
@@ -961,20 +1004,20 @@ const wizardFormStyles = [
961
1004
  ---------------------------------------- */
962
1005
  .wf-success-screen {
963
1006
  text-align: center;
964
- padding: var(--wf-spacing-6, 24px);
1007
+ padding: var(--wf-spacing-6);
965
1008
  }
966
1009
 
967
1010
  /* ----------------------------------------
968
1011
  Error message
969
1012
  ---------------------------------------- */
970
1013
  .wf-form-error {
971
- padding: var(--wf-spacing-4, 16px);
972
- margin-bottom: var(--wf-spacing-4, 16px);
973
- background-color: rgba(220, 53, 69, 0.1);
974
- border: 1px solid var(--wf-color-error, #dc3545);
975
- border-radius: var(--wf-radius-md, 8px);
976
- color: var(--wf-color-error, #dc3545);
977
- font-size: var(--wf-font-size-base, 1rem);
1014
+ padding: var(--wf-spacing-4);
1015
+ margin-bottom: var(--wf-spacing-4);
1016
+ background-color: var(--wf-color-error-light);
1017
+ border: 1px solid var(--wf-color-error);
1018
+ border-radius: var(--wf-radius-md);
1019
+ color: var(--wf-color-error);
1020
+ font-size: var(--wf-font-size-base);
978
1021
  }
979
1022
 
980
1023
  /* ----------------------------------------
@@ -1360,43 +1403,43 @@ const wfBadgeStyles = i$3`
1360
1403
  align-items: center;
1361
1404
  justify-content: center;
1362
1405
  box-sizing: border-box;
1363
- min-width: 24px;
1364
- height: 24px;
1365
- padding: var(--wf-spacing-1, 4px) var(--wf-spacing-2, 8px);
1366
- font-size: var(--wf-font-size-xs, 0.75rem);
1367
- font-weight: 500;
1368
- font-family: inherit;
1406
+ min-width: var(--wf-badge-size);
1407
+ height: var(--wf-badge-size);
1408
+ padding: var(--wf-spacing-1) var(--wf-spacing-2);
1409
+ font-size: var(--wf-font-size-xs);
1410
+ font-weight: var(--wf-font-weight-label);
1411
+ font-family: var(--wf-font-family-mono);
1369
1412
  text-transform: uppercase;
1370
1413
  flex-shrink: 0;
1371
1414
  line-height: 1;
1372
1415
  }
1373
1416
 
1374
1417
  .wf-badge--default {
1375
- background-color: var(--wf-color-badge-bg, #fcfcfc);
1376
- border: 1px solid var(--wf-color-badge-border, #d4d4d4);
1377
- border-radius: var(--wf-radius-sm, 4px);
1378
- color: var(--wf-color-badge-text, #5f5f5f);
1418
+ background-color: var(--wf-color-badge-bg);
1419
+ border: 1px solid var(--wf-color-badge-border);
1420
+ border-radius: var(--wf-radius-sm);
1421
+ color: var(--wf-color-badge-text);
1379
1422
  }
1380
1423
 
1381
1424
  .wf-badge--selected {
1382
- background-color: var(--wf-color-primary, #8040f0);
1383
- border: 1px solid var(--wf-color-primary, #8040f0);
1384
- border-radius: var(--wf-radius-sm, 4px);
1425
+ background-color: var(--wf-color-primary);
1426
+ border: 1px solid var(--wf-color-primary);
1427
+ border-radius: var(--wf-radius-sm);
1385
1428
  color: white;
1386
1429
  }
1387
1430
 
1388
1431
  .wf-badge--button {
1389
1432
  background-color: transparent;
1390
1433
  border: none;
1391
- border-radius: var(--wf-radius-sm, 4px);
1434
+ border-radius: var(--wf-radius-sm);
1392
1435
  color: rgba(255, 255, 255, 0.65);
1393
1436
  }
1394
1437
 
1395
1438
  .wf-badge--button-secondary {
1396
1439
  background-color: transparent;
1397
1440
  border: none;
1398
- border-radius: var(--wf-radius-sm, 4px);
1399
- color: var(--wf-color-text-muted, #5f5f5f);
1441
+ border-radius: var(--wf-radius-sm);
1442
+ color: var(--wf-color-text-muted);
1400
1443
  }
1401
1444
  `;
1402
1445
  var __defProp$f = Object.defineProperty;
@@ -1466,6 +1509,7 @@ let WizardForm = class extends i {
1466
1509
  this.submitted = false;
1467
1510
  this._error = "";
1468
1511
  this._otherInputActive = false;
1512
+ this._partialSubmitting = false;
1469
1513
  this._stateController = new FormStateController(this);
1470
1514
  this._handleFieldChange = (e2) => {
1471
1515
  const { name, value, extraFields } = e2.detail;
@@ -1760,8 +1804,9 @@ let WizardForm = class extends i {
1760
1804
  const previousStep = this._currentStep;
1761
1805
  let submitted = false;
1762
1806
  let adapter;
1763
- if (this.submitOnStep && this.hubspotPortal && this.hubspotForm) {
1807
+ if (this.submitOnStep && this.hubspotPortal && this.hubspotForm && direction === "forward" && !this._partialSubmitting) {
1764
1808
  try {
1809
+ this._partialSubmitting = true;
1765
1810
  await this._submitPartialToHubSpot();
1766
1811
  submitted = true;
1767
1812
  adapter = "hubspot";
@@ -1778,6 +1823,8 @@ let WizardForm = class extends i {
1778
1823
  })
1779
1824
  );
1780
1825
  return;
1826
+ } finally {
1827
+ this._partialSubmitting = false;
1781
1828
  }
1782
1829
  }
1783
1830
  const currentStepEl = this._getStepByNumber(this._currentStep);
@@ -1923,6 +1970,7 @@ let WizardForm = class extends i {
1923
1970
  /**
1924
1971
  * Submit partial form data to HubSpot.
1925
1972
  * Only includes fields from steps up to and including the current step.
1973
+ * Filters out empty/blank values to avoid submitting unfilled fields.
1926
1974
  */
1927
1975
  async _submitPartialToHubSpot() {
1928
1976
  const partialData = this._getFieldsUpToStep(this._currentStep);
@@ -1930,7 +1978,18 @@ let WizardForm = class extends i {
1930
1978
  if (this.serialize) {
1931
1979
  submitData = this.serialize(submitData);
1932
1980
  }
1933
- await this._submitToHubSpot(submitData);
1981
+ const filteredData = Object.fromEntries(
1982
+ Object.entries(submitData).filter(([, value]) => {
1983
+ if (value === null || value === void 0 || value === "") {
1984
+ return false;
1985
+ }
1986
+ if (Array.isArray(value) && value.length === 0) {
1987
+ return false;
1988
+ }
1989
+ return true;
1990
+ })
1991
+ );
1992
+ await this._submitToHubSpot(filteredData);
1934
1993
  }
1935
1994
  // ============================================
1936
1995
  // Public API
@@ -2125,7 +2184,7 @@ const wfStepStyles = [
2125
2184
  .wf-step-content {
2126
2185
  display: flex;
2127
2186
  flex-direction: column;
2128
- gap: var(--wf-spacing-4, 16px);
2187
+ gap: var(--wf-spacing-4);
2129
2188
  }
2130
2189
 
2131
2190
  /* Slotted heading styles */
@@ -2133,18 +2192,18 @@ const wfStepStyles = [
2133
2192
  ::slotted(h2),
2134
2193
  ::slotted(h3) {
2135
2194
  margin: 0;
2136
- font-weight: 600;
2137
- color: var(--wf-color-text, #212529);
2195
+ font-weight: var(--wf-font-weight-heading);
2196
+ color: var(--wf-color-text);
2138
2197
  }
2139
2198
 
2140
2199
  ::slotted(h2) {
2141
- font-size: var(--wf-font-size-3xl, 2rem);
2200
+ font-size: var(--wf-font-size-3xl);
2142
2201
  }
2143
2202
 
2144
2203
  ::slotted(p) {
2145
2204
  margin: 0;
2146
- color: var(--wf-color-text-muted, #6c757d);
2147
- font-size: var(--wf-font-size-xl, 1.375rem);
2205
+ color: var(--wf-color-text-muted);
2206
+ font-size: var(--wf-font-size-xl);
2148
2207
  }
2149
2208
  `
2150
2209
  ];
@@ -2653,15 +2712,15 @@ const wfOptionsStyles = i$3`
2653
2712
  .wf-error-message {
2654
2713
  overflow: hidden;
2655
2714
  min-height: 0;
2656
- font-size: var(--wf-font-size-sm, 0.875rem);
2657
- color: var(--wf-color-error, #dc3545);
2715
+ font-size: var(--wf-font-size-sm);
2716
+ color: var(--wf-color-error);
2658
2717
  opacity: 0;
2659
2718
  transform: translateY(-4px);
2660
2719
  transition: opacity 200ms ease-out, transform 200ms ease-out;
2661
2720
  }
2662
2721
 
2663
2722
  .wf-has-error .wf-error-message {
2664
- margin-top: var(--wf-spacing-2, 8px);
2723
+ margin-top: var(--wf-spacing-2);
2665
2724
  opacity: 1;
2666
2725
  transform: translateY(0);
2667
2726
  }
@@ -2682,50 +2741,50 @@ const wfOtherStyles = i$3`
2682
2741
  }
2683
2742
 
2684
2743
  .wf-other-container {
2685
- margin-top: var(--wf-spacing-4, 16px);
2744
+ margin-top: var(--wf-spacing-4);
2686
2745
  }
2687
2746
 
2688
2747
  .wf-other-label {
2689
2748
  display: block;
2690
- margin-bottom: var(--wf-spacing-2, 8px);
2691
- font-size: var(--wf-font-size-sm, 0.875rem);
2692
- font-weight: 500;
2693
- color: var(--wf-color-text, #0a0a0a);
2749
+ margin-bottom: var(--wf-spacing-2);
2750
+ font-size: var(--wf-font-size-sm);
2751
+ font-weight: var(--wf-font-weight-label);
2752
+ color: var(--wf-color-text);
2694
2753
  }
2695
2754
 
2696
2755
  .wf-other-label span {
2697
- font-weight: 400;
2698
- color: var(--wf-color-text-muted, #646464);
2756
+ font-weight: var(--wf-font-weight-input);
2757
+ color: var(--wf-color-text-muted);
2699
2758
  }
2700
2759
 
2701
2760
  .wf-other-input-wrapper {
2702
2761
  display: flex;
2703
2762
  align-items: center;
2704
- gap: var(--wf-spacing-3, 12px);
2705
- min-height: var(--wf-input-min-height, 56px);
2706
- background: var(--wf-glass-bg, rgba(255, 255, 255, 0.7));
2707
- backdrop-filter: blur(var(--wf-glass-blur, 20px));
2708
- -webkit-backdrop-filter: blur(var(--wf-glass-blur, 20px));
2709
- border: 1px solid var(--wf-glass-border, rgba(0, 0, 0, 0.1));
2710
- border-radius: var(--wf-radius-md, 8px);
2711
- box-shadow: var(--wf-glass-shadow, 0 4px 6px rgba(0, 0, 0, 0.05));
2712
- padding-left: var(--wf-spacing-3, 12px);
2763
+ gap: var(--wf-spacing-3);
2764
+ min-height: var(--wf-input-min-height);
2765
+ background: var(--wf-glass-bg);
2766
+ backdrop-filter: blur(var(--wf-glass-blur));
2767
+ -webkit-backdrop-filter: blur(var(--wf-glass-blur));
2768
+ border: 1px solid var(--wf-glass-border);
2769
+ border-radius: var(--wf-radius-md);
2770
+ box-shadow: var(--wf-glass-shadow);
2771
+ padding-left: var(--wf-spacing-3);
2713
2772
  transition: border-color 150ms ease, box-shadow 150ms ease, background 150ms ease;
2714
2773
  }
2715
2774
 
2716
2775
  .wf-other-input-wrapper:focus-within {
2717
- border-color: var(--wf-color-primary, #8040f0);
2718
- box-shadow: 0 0 0 3px rgba(128, 64, 240, 0.1);
2776
+ border-color: var(--wf-color-primary);
2777
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-primary);
2719
2778
  }
2720
2779
 
2721
2780
  .wf-other-input {
2722
2781
  flex: 1;
2723
- min-height: calc(var(--wf-input-min-height, 56px) - 2px);
2724
- padding: var(--wf-spacing-3, 12px);
2782
+ min-height: calc(var(--wf-input-min-height) - 2px);
2783
+ padding: var(--wf-spacing-3);
2725
2784
  padding-left: 0;
2726
- font-size: var(--wf-font-size-base, 1rem);
2727
- font-weight: 500;
2728
- color: var(--wf-color-text, #0a0a0a);
2785
+ font-size: var(--wf-font-size-base);
2786
+ font-weight: var(--wf-font-weight-input);
2787
+ color: var(--wf-color-text);
2729
2788
  background: transparent;
2730
2789
  border: none;
2731
2790
  outline: none;
@@ -2733,8 +2792,8 @@ const wfOtherStyles = i$3`
2733
2792
  }
2734
2793
 
2735
2794
  .wf-other-input::placeholder {
2736
- color: var(--wf-color-text-muted, #646464);
2737
- font-weight: 500;
2795
+ color: var(--wf-color-text-muted);
2796
+ font-weight: var(--wf-font-weight-input);
2738
2797
  }
2739
2798
 
2740
2799
  .wf-other-actions {
@@ -2763,6 +2822,7 @@ let WfOther = class extends i {
2763
2822
  super(...arguments);
2764
2823
  this.label = "Others, please specify:";
2765
2824
  this.placeholder = "";
2825
+ this.parentValue = "Others";
2766
2826
  this.required = false;
2767
2827
  this.disabled = false;
2768
2828
  this.shortcut = "";
@@ -2860,6 +2920,9 @@ __decorateClass$b([
2860
2920
  __decorateClass$b([
2861
2921
  n2({ type: String })
2862
2922
  ], WfOther.prototype, "name", 2);
2923
+ __decorateClass$b([
2924
+ n2({ type: String, attribute: "parent-value" })
2925
+ ], WfOther.prototype, "parentValue", 2);
2863
2926
  __decorateClass$b([
2864
2927
  n2({ type: Boolean })
2865
2928
  ], WfOther.prototype, "required", 2);
@@ -3122,6 +3185,13 @@ let WfOptions = class extends WfLayout {
3122
3185
  value: this.value,
3123
3186
  selected: selectedArray
3124
3187
  };
3188
+ if (this._hasComposableOther() && this._otherValue.trim() && this._selected.size === 0) {
3189
+ const otherName = this._composableOther?.name || `${this.name}_other`;
3190
+ detail.extraFields = {
3191
+ [otherName]: this._otherValue
3192
+ };
3193
+ detail.value = this._composableOther?.parentValue || "Others";
3194
+ }
3125
3195
  this.dispatchEvent(
3126
3196
  new CustomEvent("wf-change", {
3127
3197
  detail,
@@ -3301,40 +3371,40 @@ const wfOptionStyles = i$3`
3301
3371
  .wf-option-card {
3302
3372
  display: flex;
3303
3373
  align-items: center;
3304
- gap: var(--wf-spacing-3, 12px);
3374
+ gap: var(--wf-spacing-3);
3305
3375
  width: 100%;
3306
- min-height: var(--wf-input-min-height, 56px);
3307
- padding: var(--wf-spacing-3, 12px);
3308
- background: var(--wf-glass-bg, rgba(255, 255, 255, 0.7));
3309
- backdrop-filter: blur(var(--wf-glass-blur, 20px));
3310
- -webkit-backdrop-filter: blur(var(--wf-glass-blur, 20px));
3311
- border: 1px solid var(--wf-glass-border, rgba(0, 0, 0, 0.1));
3312
- border-radius: var(--wf-radius-md, 8px);
3313
- box-shadow: var(--wf-glass-shadow, 0 4px 6px rgba(0, 0, 0, 0.05));
3376
+ min-height: var(--wf-input-min-height);
3377
+ padding: var(--wf-spacing-3);
3378
+ background: var(--wf-glass-bg);
3379
+ backdrop-filter: blur(var(--wf-glass-blur));
3380
+ -webkit-backdrop-filter: blur(var(--wf-glass-blur));
3381
+ border: 1px solid var(--wf-glass-border);
3382
+ border-radius: var(--wf-radius-md);
3383
+ box-shadow: var(--wf-glass-shadow);
3314
3384
  cursor: pointer;
3315
3385
  text-align: left;
3316
3386
  font-family: inherit;
3317
- font-size: var(--wf-font-size-base, 1rem);
3318
- font-weight: 500;
3319
- color: var(--wf-color-text, #0a0a0a);
3387
+ font-size: var(--wf-font-size-base);
3388
+ font-weight: var(--wf-font-weight-input);
3389
+ color: var(--wf-color-text);
3320
3390
  transition: border-color 150ms ease, background 150ms ease, transform 100ms ease;
3321
3391
  outline: none;
3322
3392
  box-sizing: border-box;
3323
3393
  }
3324
3394
 
3325
3395
  .wf-option-card:hover:not(:disabled) {
3326
- border-color: var(--wf-color-primary, #8040f0);
3327
- background: var(--wf-glass-bg-hover, rgba(255, 255, 255, 0.85));
3396
+ border-color: var(--wf-color-primary);
3397
+ background: var(--wf-glass-bg-hover);
3328
3398
  }
3329
3399
 
3330
3400
  .wf-option-card:focus-visible {
3331
- border-color: var(--wf-color-primary, #8040f0);
3332
- box-shadow: 0 0 0 3px rgba(128, 64, 240, 0.2);
3401
+ border-color: var(--wf-color-primary);
3402
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-primary);
3333
3403
  }
3334
3404
 
3335
3405
  .wf-option-card[aria-selected='true'] {
3336
- border-color: var(--wf-color-primary, #8040f0);
3337
- background-color: var(--wf-color-primary-light, rgba(128, 64, 240, 0.1));
3406
+ border-color: var(--wf-color-primary);
3407
+ background-color: var(--wf-color-primary-light);
3338
3408
  }
3339
3409
 
3340
3410
  .wf-option-card:disabled {
@@ -3369,16 +3439,16 @@ const wfOptionStyles = i$3`
3369
3439
  ::slotted(h3),
3370
3440
  ::slotted(h4) {
3371
3441
  display: block;
3372
- font-weight: 600;
3442
+ font-weight: var(--wf-font-weight-heading);
3373
3443
  margin: 0;
3374
3444
  }
3375
3445
 
3376
3446
  ::slotted(span),
3377
3447
  ::slotted(p) {
3378
3448
  display: block;
3379
- font-size: var(--wf-font-size-sm, 0.875rem);
3380
- color: var(--wf-color-text-muted, #646464);
3381
- margin: 4px 0 0 0;
3449
+ font-size: var(--wf-font-size-sm);
3450
+ color: var(--wf-color-text-muted);
3451
+ margin: var(--wf-spacing-1) 0 0 0;
3382
3452
  }
3383
3453
  `;
3384
3454
  var __defProp$9 = Object.defineProperty;
@@ -3501,15 +3571,15 @@ const formInputBaseStyles = i$3`
3501
3571
  }
3502
3572
 
3503
3573
  .wf-label {
3504
- font-size: var(--wf-font-size-sm, 0.875rem);
3505
- font-weight: 500;
3506
- color: var(--wf-color-text, #0a0a0a);
3507
- margin-bottom: var(--wf-spacing-2, 8px);
3574
+ font-size: var(--wf-font-size-sm);
3575
+ font-weight: var(--wf-font-weight-label);
3576
+ color: var(--wf-color-text);
3577
+ margin-bottom: var(--wf-spacing-2);
3508
3578
  }
3509
3579
 
3510
3580
  .wf-label-required::after {
3511
3581
  content: ' *';
3512
- color: var(--wf-color-error, #dc3545);
3582
+ color: var(--wf-color-error);
3513
3583
  }
3514
3584
 
3515
3585
  /* Error wrapper for animated expand/collapse */
@@ -3526,52 +3596,52 @@ const formInputBaseStyles = i$3`
3526
3596
  .wf-error-message {
3527
3597
  overflow: hidden;
3528
3598
  min-height: 0;
3529
- font-size: var(--wf-font-size-sm, 0.875rem);
3530
- color: var(--wf-color-error, #dc3545);
3599
+ font-size: var(--wf-font-size-sm);
3600
+ color: var(--wf-color-error);
3531
3601
  opacity: 0;
3532
3602
  transform: translateY(-4px);
3533
3603
  transition: opacity 200ms ease-out, transform 200ms ease-out;
3534
3604
  }
3535
3605
 
3536
3606
  .wf-has-error .wf-error-message {
3537
- margin-top: var(--wf-spacing-2, 8px);
3607
+ margin-top: var(--wf-spacing-2);
3538
3608
  opacity: 1;
3539
3609
  transform: translateY(0);
3540
3610
  }
3541
3611
 
3542
3612
  .wf-hint {
3543
- font-size: var(--wf-font-size-sm, 0.875rem);
3544
- color: var(--wf-color-text-muted, #646464);
3545
- margin-top: var(--wf-spacing-2, 8px);
3613
+ font-size: var(--wf-font-size-sm);
3614
+ color: var(--wf-color-text-muted);
3615
+ margin-top: var(--wf-spacing-2);
3546
3616
  }
3547
3617
 
3548
3618
  .wf-input {
3549
3619
  width: 100%;
3550
- min-height: var(--wf-input-min-height, 56px);
3551
- padding: var(--wf-spacing-4, 16px);
3552
- font-size: var(--wf-font-size-base, 1rem);
3553
- font-weight: 400;
3620
+ min-height: var(--wf-input-min-height);
3621
+ padding: var(--wf-spacing-4);
3622
+ font-size: var(--wf-font-size-base);
3623
+ font-weight: var(--wf-font-weight-input);
3554
3624
  font-family: inherit;
3555
- background: var(--wf-glass-bg, rgba(255, 255, 255, 0.7));
3556
- backdrop-filter: blur(var(--wf-glass-blur, 20px));
3557
- -webkit-backdrop-filter: blur(var(--wf-glass-blur, 20px));
3558
- border: 1px solid var(--wf-glass-border, rgba(0, 0, 0, 0.1));
3559
- border-radius: var(--wf-radius-md, 8px);
3560
- box-shadow: var(--wf-glass-shadow, 0 4px 6px rgba(0, 0, 0, 0.05));
3561
- color: var(--wf-color-text, #0a0a0a);
3625
+ background: var(--wf-glass-bg);
3626
+ backdrop-filter: blur(var(--wf-glass-blur));
3627
+ -webkit-backdrop-filter: blur(var(--wf-glass-blur));
3628
+ border: 1px solid var(--wf-glass-border);
3629
+ border-radius: var(--wf-radius-md);
3630
+ box-shadow: var(--wf-glass-shadow);
3631
+ color: var(--wf-color-text);
3562
3632
  transition: border-color 150ms ease, box-shadow 150ms ease, background 150ms ease;
3563
3633
  outline: none;
3564
3634
  box-sizing: border-box;
3565
3635
  }
3566
3636
 
3567
3637
  .wf-input::placeholder {
3568
- color: var(--wf-color-text-muted, #646464);
3569
- font-weight: 500;
3638
+ color: var(--wf-color-text-muted);
3639
+ font-weight: var(--wf-font-weight-input);
3570
3640
  }
3571
3641
 
3572
3642
  .wf-input:focus {
3573
- border-color: var(--wf-color-primary, #8040f0);
3574
- box-shadow: 0 0 0 3px rgba(128, 64, 240, 0.2);
3643
+ border-color: var(--wf-color-primary);
3644
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-primary);
3575
3645
  }
3576
3646
 
3577
3647
  .wf-input:disabled {
@@ -3580,40 +3650,40 @@ const formInputBaseStyles = i$3`
3580
3650
  }
3581
3651
 
3582
3652
  .wf-input.wf-input-error {
3583
- border-color: var(--wf-color-error, #dc3545);
3653
+ border-color: var(--wf-color-error);
3584
3654
  }
3585
3655
 
3586
3656
  .wf-input.wf-input-error:focus {
3587
- box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.2);
3657
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-error);
3588
3658
  }
3589
3659
 
3590
3660
  /* Textarea-specific styles */
3591
3661
  .wf-textarea {
3592
3662
  width: 100%;
3593
- padding: var(--wf-spacing-4, 16px);
3594
- font-size: var(--wf-font-size-base, 1rem);
3663
+ padding: var(--wf-spacing-4);
3664
+ font-size: var(--wf-font-size-base);
3595
3665
  font-family: inherit;
3596
- background: var(--wf-glass-bg, rgba(255, 255, 255, 0.7));
3597
- backdrop-filter: blur(var(--wf-glass-blur, 20px));
3598
- -webkit-backdrop-filter: blur(var(--wf-glass-blur, 20px));
3599
- border: 1px solid var(--wf-glass-border, rgba(0, 0, 0, 0.1));
3600
- border-radius: var(--wf-radius-lg, 12px);
3601
- box-shadow: var(--wf-glass-shadow, 0 4px 6px rgba(0, 0, 0, 0.05));
3602
- color: var(--wf-color-text, #212529);
3666
+ background: var(--wf-glass-bg);
3667
+ backdrop-filter: blur(var(--wf-glass-blur));
3668
+ -webkit-backdrop-filter: blur(var(--wf-glass-blur));
3669
+ border: 1px solid var(--wf-glass-border);
3670
+ border-radius: var(--wf-radius-lg);
3671
+ box-shadow: var(--wf-glass-shadow);
3672
+ color: var(--wf-color-text);
3603
3673
  transition: border-color 150ms ease, box-shadow 150ms ease, background 150ms ease;
3604
3674
  outline: none;
3605
3675
  box-sizing: border-box;
3606
3676
  resize: vertical;
3607
- min-height: 100px;
3677
+ min-height: var(--wf-textarea-min-height);
3608
3678
  }
3609
3679
 
3610
3680
  .wf-textarea::placeholder {
3611
- color: var(--wf-color-text-muted, #6c757d);
3681
+ color: var(--wf-color-text-muted);
3612
3682
  }
3613
3683
 
3614
3684
  .wf-textarea:focus {
3615
- border-color: var(--wf-color-primary, #8b5cf6);
3616
- box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2);
3685
+ border-color: var(--wf-color-primary);
3686
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-primary);
3617
3687
  }
3618
3688
 
3619
3689
  .wf-textarea:disabled {
@@ -3622,21 +3692,21 @@ const formInputBaseStyles = i$3`
3622
3692
  }
3623
3693
 
3624
3694
  .wf-textarea.wf-textarea-error {
3625
- border-color: var(--wf-color-error, #dc3545);
3695
+ border-color: var(--wf-color-error);
3626
3696
  }
3627
3697
 
3628
3698
  .wf-textarea.wf-textarea-error:focus {
3629
- box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.2);
3699
+ box-shadow: 0 0 0 var(--wf-focus-ring-width) var(--wf-focus-ring-error);
3630
3700
  }
3631
3701
 
3632
3702
  .wf-char-count {
3633
- font-size: var(--wf-font-size-sm, 0.875rem);
3634
- color: var(--wf-color-text-muted, #6c757d);
3703
+ font-size: var(--wf-font-size-sm);
3704
+ color: var(--wf-color-text-muted);
3635
3705
  text-align: right;
3636
3706
  }
3637
3707
 
3638
3708
  .wf-char-count.wf-char-limit {
3639
- color: var(--wf-color-error, #dc3545);
3709
+ color: var(--wf-color-error);
3640
3710
  }
3641
3711
 
3642
3712
  /* wf-field slotted input styles */
@@ -4719,33 +4789,36 @@ function init(config) {
4719
4789
  return instance;
4720
4790
  }
4721
4791
  const init_default = { init };
4722
- const wfProgressStyles = i$3`
4723
- :host {
4724
- display: block;
4725
- }
4792
+ const wfProgressStyles = [
4793
+ hostTokens,
4794
+ i$3`
4795
+ :host {
4796
+ display: block;
4797
+ }
4726
4798
 
4727
- :host([hidden]) {
4728
- display: none;
4729
- }
4799
+ :host([hidden]) {
4800
+ display: none;
4801
+ }
4730
4802
 
4731
- .wf-progress {
4732
- display: flex;
4733
- gap: var(--wf-spacing-4, 16px);
4734
- }
4803
+ .wf-progress {
4804
+ display: flex;
4805
+ gap: var(--wf-spacing-2);
4806
+ }
4735
4807
 
4736
- .wf-progress-segment {
4737
- width: 32px;
4738
- height: 8px;
4739
- background-color: var(--wf-color-progress-inactive, rgba(0, 0, 0, 0.05));
4740
- border-radius: var(--wf-radius-full, 99px);
4741
- transition: background-color 300ms ease;
4742
- }
4808
+ .wf-progress-segment {
4809
+ width: 100%;
4810
+ height: var(--wf-progress-height);
4811
+ background-color: var(--wf-color-progress-inactive);
4812
+ border-radius: var(--wf-radius-full);
4813
+ transition: background-color 300ms ease;
4814
+ }
4743
4815
 
4744
- .wf-progress-segment.completed,
4745
- .wf-progress-segment.active {
4746
- background-color: var(--wf-color-progress-active, rgba(0, 0, 0, 0.1));
4747
- }
4748
- `;
4816
+ .wf-progress-segment.completed,
4817
+ .wf-progress-segment.active {
4818
+ background-color: var(--wf-color-progress-active);
4819
+ }
4820
+ `
4821
+ ];
4749
4822
  var __defProp$3 = Object.defineProperty;
4750
4823
  var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
4751
4824
  var __decorateClass$3 = (decorators, target, key, kind) => {
@@ -4955,8 +5028,8 @@ const wfNextBtnStyles = [
4955
5028
  .wf-btn-next {
4956
5029
  width: 100%;
4957
5030
  flex: 1;
4958
- background-color: var(--wf-color-primary, #8040f0);
4959
- border: 1px solid var(--wf-color-primary-border, #602cbb);
5031
+ background-color: var(--wf-color-primary);
5032
+ border: 1px solid var(--wf-color-primary-border);
4960
5033
  color: white;
4961
5034
  position: relative;
4962
5035
  }
@@ -4966,17 +5039,15 @@ const wfNextBtnStyles = [
4966
5039
  }
4967
5040
 
4968
5041
  .wf-btn-shortcut {
4969
- position: absolute;
4970
- right: var(--wf-spacing-4, 16px);
4971
5042
  display: inline-flex;
4972
5043
  align-items: center;
4973
- gap: 2px;
5044
+ gap: var(--wf-spacing-05);
4974
5045
  }
4975
5046
 
4976
5047
  .wf-loading {
4977
5048
  display: inline-block;
4978
- width: 20px;
4979
- height: 20px;
5049
+ width: var(--wf-spinner-size);
5050
+ height: var(--wf-spinner-size);
4980
5051
  border: 2px solid rgba(0, 0, 0, 0.1);
4981
5052
  border-radius: 50%;
4982
5053
  border-top-color: white;
@@ -4990,14 +5061,9 @@ const wfNextBtnStyles = [
4990
5061
  }
4991
5062
 
4992
5063
  :host([inline]) .wf-btn {
4993
- min-height: var(--wf-input-min-height, 56px);
5064
+ min-height: var(--wf-input-min-height);
4994
5065
  width: auto;
4995
- padding: var(--wf-spacing-3, 12px) var(--wf-spacing-5, 20px);
4996
- }
4997
-
4998
- :host([inline]) .wf-btn-shortcut {
4999
- position: static;
5000
- margin-left: var(--wf-spacing-2, 8px);
5066
+ padding: var(--wf-spacing-3) var(--wf-spacing-5);
5001
5067
  }
5002
5068
  `
5003
5069
  ];
@@ -5061,7 +5127,7 @@ let WfNextBtn = class extends NavigationButtonBase {
5061
5127
  ${buttonLabel}
5062
5128
  ${this.showShortcut ? b`
5063
5129
  <span class="wf-btn-shortcut ${this.inline ? "wf-btn-shortcut-inline" : ""}">
5064
- <wf-badge variant="button" shortcut="↵"></wf-badge>
5130
+ <wf-badge variant="button" shortcut="Enter ↵"></wf-badge>
5065
5131
  </span>
5066
5132
  ` : A}
5067
5133
  `}
@@ -5100,22 +5166,22 @@ const wfBackBtnStyles = [
5100
5166
  }
5101
5167
 
5102
5168
  .wf-btn-back {
5103
- background: var(--wf-glass-bg, rgba(255, 255, 255, 0.7));
5104
- backdrop-filter: blur(var(--wf-glass-blur, 20px));
5105
- -webkit-backdrop-filter: blur(var(--wf-glass-blur, 20px));
5106
- border: 1px solid var(--wf-glass-border, rgba(0, 0, 0, 0.1));
5107
- box-shadow: var(--wf-glass-shadow, 0 4px 6px rgba(0, 0, 0, 0.05));
5108
- color: var(--wf-color-text, #0a0a0a);
5169
+ background: var(--wf-glass-bg);
5170
+ backdrop-filter: blur(var(--wf-glass-blur));
5171
+ -webkit-backdrop-filter: blur(var(--wf-glass-blur));
5172
+ border: 1px solid var(--wf-glass-border);
5173
+ box-shadow: var(--wf-glass-shadow);
5174
+ color: var(--wf-color-text);
5109
5175
  }
5110
5176
 
5111
5177
  .wf-btn-back:hover:not(:disabled) {
5112
- background: var(--wf-glass-bg-hover, rgba(255, 255, 255, 0.85));
5178
+ background: var(--wf-glass-bg-hover);
5113
5179
  }
5114
5180
 
5115
5181
  .wf-btn-shortcut {
5116
5182
  display: inline-flex;
5117
5183
  align-items: center;
5118
- gap: 2px;
5184
+ gap: var(--wf-spacing-05);
5119
5185
  }
5120
5186
  `
5121
5187
  ];