@verbb/formie-browser 1.0.8 → 1.0.10

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 (85) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/chunks/_survey-presentations-RbSqcQph.js +4 -0
  3. package/dist/chunks/{address-state-BQ0xGV9n.js → address-state-BwE01m2_.js} +1 -1
  4. package/dist/chunks/{api-C8wyLC-s.js → api-BYe9YPko.js} +10 -3
  5. package/dist/chunks/{bpoint-CwSw_p7A.js → bpoint-C0VOftX9.js} +1 -1
  6. package/dist/chunks/{calculations-CeDgB9jt.js → calculations-HAZ8wUrT.js} +1 -1
  7. package/dist/chunks/checkbox-radio-BY2aTCOG.js +177 -0
  8. package/dist/chunks/{combobox-D-2b42wn.js → combobox-C0EuExSI.js} +1 -1
  9. package/dist/chunks/{conditions-B6_nzpeE.js → conditions-BiA_uANV.js} +1 -1
  10. package/dist/chunks/{dist-BQ4a9hmy.js → dist-BaHXfvBO.js} +1 -1
  11. package/dist/chunks/{eway-B30BMlDp.js → eway-CS6Y1Yvo.js} +1 -1
  12. package/dist/chunks/{file-upload-D49m8-DR.js → file-upload-rqfZNqlH.js} +1 -1
  13. package/dist/chunks/{go-cardless-BiF3iLel.js → go-cardless-BTPD668l.js} +1 -1
  14. package/dist/chunks/{mollie-D__SwtcH.js → mollie-CXgBwvo6.js} +1 -1
  15. package/dist/chunks/{moneris-KJS1BKx7.js → moneris-B6oLu7nj.js} +1 -1
  16. package/dist/chunks/{opayo-A_LIkc-v.js → opayo-DPUA5CKr.js} +1 -1
  17. package/dist/chunks/{paddle-BjbOOb0m.js → paddle-GRlsm5mm.js} +1 -1
  18. package/dist/chunks/password-validation-D5AirwUM.js +49 -0
  19. package/dist/chunks/{paypal-CyjHIV8v.js → paypal-CdcZnf6r.js} +2 -2
  20. package/dist/chunks/{payway-a_cyrr3j.js → payway-CfmYOS__.js} +2 -2
  21. package/dist/chunks/{repeater-B5leVxZU.js → repeater-BVnPUqTj.js} +1 -1
  22. package/dist/chunks/rich-text-Bg_--4TG.js +349 -0
  23. package/dist/chunks/{square-Bga6WXHV.js → square-BY--5M-X.js} +1 -1
  24. package/dist/chunks/{stripe-BlqVocl3.js → stripe-uusYjWty.js} +2 -2
  25. package/dist/chunks/{survey-likert-DmJ3klhP.js → survey-likert-DkE6bR7B.js} +1 -1
  26. package/dist/chunks/{survey-rank-DeUenftw.js → survey-rank-DN6x4IZM.js} +1 -1
  27. package/dist/chunks/{survey-rating-BPUYDgBJ.js → survey-rating-BnsNL9U5.js} +1 -1
  28. package/dist/chunks/{table-C-lkQN6I.js → table-CAjCJHrL.js} +1 -1
  29. package/dist/chunks/{text-limit-DbgEFHLO.js → text-limit-nSATKyhp.js} +1 -1
  30. package/dist/chunks/{upload-manager-BpqWSHmU.js → upload-manager-W-QDgxKD.js} +1 -1
  31. package/dist/css/theme/_tokens.css +10 -5
  32. package/dist/css/theme/fields/_check-radio.css +26 -1
  33. package/dist/css/theme/fields/_combobox.css +1 -1
  34. package/dist/css/theme/fields/_file.css +3 -3
  35. package/dist/css/theme/fields/_input.css +1 -1
  36. package/dist/css/theme/fields/_repeater.css +1 -1
  37. package/dist/css/theme/fields/_rich-text.css +1 -1
  38. package/dist/css/theme/fields/_select.css +1 -1
  39. package/dist/css/theme/fields/_survey-presentations.css +1 -1
  40. package/dist/css/theme/fields/_table.css +1 -1
  41. package/dist/css/theme/fields/_upload-manager.css +3 -3
  42. package/dist/css/theme/integrations/_paypal.css +1 -1
  43. package/dist/css/theme/integrations/_payway.css +1 -1
  44. package/dist/css/theme/integrations/_stripe.css +1 -1
  45. package/dist/index.js +520 -505
  46. package/dist/js/core/create-formie-client.d.ts.map +1 -1
  47. package/dist/js/core/submit-flow.d.ts.map +1 -1
  48. package/dist/js/core/submit-result-state.d.ts.map +1 -1
  49. package/dist/js/core/submit-result-ui.d.ts +1 -0
  50. package/dist/js/core/submit-result-ui.d.ts.map +1 -1
  51. package/dist/js/modules/fields/checkbox-radio.d.ts.map +1 -1
  52. package/dist/js/modules/fields/index.d.ts.map +1 -1
  53. package/dist/js/modules/fields/password-validation.d.ts +3 -0
  54. package/dist/js/modules/fields/password-validation.d.ts.map +1 -0
  55. package/dist/js/utils/fields.d.ts.map +1 -1
  56. package/dist/js/validation/rules/match.d.ts.map +1 -1
  57. package/package.json +2 -2
  58. package/src/css/theme/_tokens.css +10 -5
  59. package/src/css/theme/fields/_check-radio.css +26 -1
  60. package/src/css/theme/fields/_combobox.css +1 -1
  61. package/src/css/theme/fields/_file.css +3 -3
  62. package/src/css/theme/fields/_input.css +1 -1
  63. package/src/css/theme/fields/_repeater.css +1 -1
  64. package/src/css/theme/fields/_rich-text.css +1 -1
  65. package/src/css/theme/fields/_select.css +1 -1
  66. package/src/css/theme/fields/_survey-presentations.css +1 -1
  67. package/src/css/theme/fields/_table.css +1 -1
  68. package/src/css/theme/fields/_upload-manager.css +3 -3
  69. package/src/css/theme/integrations/_paypal.css +1 -1
  70. package/src/css/theme/integrations/_payway.css +1 -1
  71. package/src/css/theme/integrations/_stripe.css +1 -1
  72. package/src/js/core/create-formie-client.ts +9 -1
  73. package/src/js/core/submit-flow.ts +3 -1
  74. package/src/js/core/submit-result-state.ts +12 -0
  75. package/src/js/core/submit-result-ui.ts +47 -9
  76. package/src/js/modules/fields/checkbox-radio.ts +133 -4
  77. package/src/js/modules/fields/index.ts +1 -0
  78. package/src/js/modules/fields/password-validation.ts +132 -0
  79. package/src/js/utils/fields.ts +14 -2
  80. package/src/js/validation/rules/match.ts +5 -4
  81. package/src/js/validation/rules/minmax.ts +2 -2
  82. package/src/js/validation/rules/number.ts +1 -1
  83. package/dist/chunks/_survey-presentations-CFsgToRT.js +0 -4
  84. package/dist/chunks/checkbox-radio-DQ0H67Tj.js +0 -125
  85. package/dist/chunks/rich-text-D0sb8bmX.js +0 -349
@@ -1 +1 @@
1
- {"version":3,"file":"create-formie-client.d.ts","sourceRoot":"","sources":["../../../src/js/core/create-formie-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EAGf,MAAM,mBAAmB,CAAC;AAs1B3B,wBAAgB,kBAAkB,IAAI,YAAY,CAysBjD"}
1
+ {"version":3,"file":"create-formie-client.d.ts","sourceRoot":"","sources":["../../../src/js/core/create-formie-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EAGf,MAAM,mBAAmB,CAAC;AA81B3B,wBAAgB,kBAAkB,IAAI,YAAY,CAysBjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit-flow.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAMhF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAchF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAK/D;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,0BAA0B,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,oBAAoB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC5D,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2D5B"}
1
+ {"version":3,"file":"submit-flow.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAMhF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAchF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAK/D;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,0BAA0B,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,oBAAoB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC5D,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6D5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit-result-state.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-result-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA6H1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAqB/E;AA4GD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CA0B5F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA0B9D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAwD9E;AAkKD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsGhH"}
1
+ {"version":3,"file":"submit-result-state.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-result-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA6H1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAqB/E;AA4GD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CA0B5F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA0B9D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAoE9E;AAkKD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsGhH"}
@@ -5,6 +5,7 @@ export declare function clearFormSuccess(form: HTMLFormElement): void;
5
5
  export declare function clearAriaInvalid(form: HTMLFormElement): void;
6
6
  export declare function renderFieldErrors(form: HTMLFormElement, fieldErrors: Record<string, string[]>): void;
7
7
  export declare function renderFormErrors(form: HTMLFormElement, formErrors: string[]): void;
8
+ export declare function renderFormNotice(form: HTMLFormElement, message: string): void;
8
9
  export declare function renderFormSuccess(form: HTMLFormElement, message: string): void;
9
10
  export declare function applySubmitResultUi(form: HTMLFormElement, result: FormSubmitResult): void;
10
11
  //# sourceMappingURL=submit-result-ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"submit-result-ui.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-result-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA+L1D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAqC5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAmB3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA6B5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAI5D;AAaD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAoDpG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAclF;AAgBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmC9E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAyBzF"}
1
+ {"version":3,"file":"submit-result-ui.d.ts","sourceRoot":"","sources":["../../../src/js/core/submit-result-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA+L1D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAqC5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAmB3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA6B5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAI5D;AAaD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAoDpG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAclF;AAaD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY7E;AAgBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmC9E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAsCzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-radio.d.ts","sourceRoot":"","sources":["../../../../src/js/modules/fields/checkbox-radio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AA6PjE,eAAO,MAAM,mBAAmB,EAAE,sBA+CjC,CAAC"}
1
+ {"version":3,"file":"checkbox-radio.d.ts","sourceRoot":"","sources":["../../../../src/js/modules/fields/checkbox-radio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AA8XjE,eAAO,MAAM,mBAAmB,EAAE,sBA+CjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/js/modules/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CA0B3F,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/js/modules/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CA2B3F,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FormieModuleDefinition } from '#contracts/modules';
2
+ export declare const passwordValidationModule: FormieModuleDefinition;
3
+ //# sourceMappingURL=password-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-validation.d.ts","sourceRoot":"","sources":["../../../../src/js/modules/fields/password-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAwGjE,eAAO,MAAM,wBAAwB,EAAE,sBAyBtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/js/utils/fields.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAatE;AAED,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAgB9D"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/js/utils/fields.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAatE;AAED,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CA4B9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../../src/js/validation/rules/match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,QAAA,MAAM,KAAK,EAAE,wBAoBZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../../src/js/validation/rules/match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,QAAA,MAAM,KAAK,EAAE,wBAqBZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verbb/formie-browser",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -70,7 +70,7 @@
70
70
  "@placekit/autocomplete-js": "^2.2.1",
71
71
  "@uppy/core": "^5.2.0",
72
72
  "@uppy/xhr-upload": "^5.2.0",
73
- "@verbb/formie-core": "1.0.8",
73
+ "@verbb/formie-core": "1.0.10",
74
74
  "expression-language": "^2.5.4",
75
75
  "flatpickr": "^4.6.13",
76
76
  "friendly-challenge": "^0.9.19",
@@ -52,6 +52,8 @@
52
52
  --formie-neutral-200: #e2e8f0;
53
53
  --formie-neutral-300: #cbd5e1;
54
54
  --formie-neutral-400: #94a3b8;
55
+ /* Lightest slate step that meets ~3:1 non-text contrast on white (WCAG 1.4.11). */
56
+ --formie-neutral-450: #8796ac;
55
57
  --formie-neutral-500: #64748b;
56
58
  --formie-neutral-600: #475569;
57
59
  --formie-neutral-700: #334155;
@@ -101,16 +103,19 @@
101
103
  --formie-color-surface-subtle: var(--formie-neutral-50);
102
104
  --formie-color-surface-muted: var(--formie-neutral-100);
103
105
  --formie-color-text: var(--formie-neutral-700);
104
- --formie-color-text-muted: var(--formie-neutral-500);
106
+ --formie-color-text-muted: var(--formie-neutral-600);
105
107
  --formie-color-heading: var(--formie-neutral-900);
108
+ /* Structural chrome: tabs, groups, dividers. */
106
109
  --formie-color-border: var(--formie-neutral-300);
110
+ /* Interactive controls: inputs, selects, checkboxes. Border-only; use focus ring for interaction contrast. */
111
+ --formie-color-border-control: var(--formie-neutral-400);
107
112
  --formie-color-border-soft: var(--formie-neutral-200);
108
113
  --formie-color-primary: var(--formie-primary-400);
109
114
  --formie-color-primary-hover: var(--formie-primary-500);
110
115
  --formie-color-primary-border: var(--formie-primary-500);
111
116
  --formie-color-primary-soft: var(--formie-primary-100);
112
117
  --formie-color-focus-ring: var(--formie-primary-300);
113
- --formie-color-danger: var(--formie-danger-500);
118
+ --formie-color-danger: var(--formie-danger-600);
114
119
  --formie-color-danger-soft: var(--formie-danger-50);
115
120
  --formie-color-danger-dark: var(--formie-danger-900);
116
121
  --formie-color-success: var(--formie-success-500);
@@ -158,8 +163,8 @@
158
163
  --formie-button-icon-border-radius: var(--formie-radius-full);
159
164
  --formie-button-icon-background: var(--formie-neutral-100);
160
165
  --formie-button-icon-background-hover: var(--formie-neutral-200);
161
- --formie-button-icon-border: var(--formie-border-width) solid var(--formie-neutral-300);
162
- --formie-button-icon-border-hover: var(--formie-border-width) solid var(--formie-neutral-400);
166
+ --formie-button-icon-border: var(--formie-border-width) solid var(--formie-color-border-control);
167
+ --formie-button-icon-border-hover: var(--formie-border-width) solid var(--formie-neutral-450);
163
168
  --formie-button-icon-color: var(--formie-neutral-950);
164
169
  --formie-button-opacity-disabled: 0.7;
165
170
  --formie-button-shadow-focus: 0 0 0 3px var(--formie-color-border-soft);
@@ -273,7 +278,7 @@
273
278
  --formie-signature-width: 100%;
274
279
  --formie-signature-height: 8rem;
275
280
  --formie-signature-background: var(--formie-color-surface-subtle);
276
- --formie-signature-border: 1px solid var(--formie-color-border);
281
+ --formie-signature-border: 1px solid var(--formie-color-border-control);
277
282
  --formie-signature-border-radius: var(--formie-radius-sm);
278
283
 
279
284
  --formie-signature-remove-button-top: 0;
@@ -51,7 +51,7 @@
51
51
  height: var(--formie-check-size);
52
52
  content: "";
53
53
  cursor: pointer;
54
- border: var(--formie-border-width) solid var(--formie-color-border);
54
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
55
55
  background-color: var(--formie-check-label-background-color);
56
56
  background-repeat: no-repeat;
57
57
  background-position: center center;
@@ -105,4 +105,29 @@
105
105
  .formie-field-has-error .formie-radio-input:focus-visible+.formie-radio-option-label::before {
106
106
  box-shadow: var(--formie-shadow-danger-focus);
107
107
  }
108
+
109
+ .formie-other-option-text {
110
+ display: none;
111
+ flex: 0 0 100%;
112
+ width: 100%;
113
+ max-width: 100%;
114
+ margin-top: var(--formie-space-1);
115
+ }
116
+
117
+ .formie-field-option:has(> input[data-formie-other-option]),
118
+ .formie-other-option {
119
+ flex-wrap: wrap;
120
+ align-items: flex-start;
121
+ }
122
+
123
+ .formie-field-option:has(> input[data-formie-other-option]:checked) > .formie-other-option-text,
124
+ .formie-field-option:has(> input[data-formie-other-option]:checked) > label ~ .formie-other-option-text,
125
+ .formie-other-option:has(> input[data-formie-other-option]:checked) > .formie-other-option-text {
126
+ display: block;
127
+ }
128
+
129
+ .formie-layout-horizontal .formie-field-option:has(> input[data-formie-other-option]),
130
+ .formie-layout-horizontal .formie-other-option {
131
+ flex: 1 1 100%;
132
+ }
108
133
  }
@@ -32,7 +32,7 @@
32
32
  overflow: hidden;
33
33
  z-index: 1;
34
34
  width: 100%;
35
- border: var(--formie-border-width) solid var(--formie-color-border);
35
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
36
36
  border-radius: var(--formie-radius-sm);
37
37
  background-color: var(--formie-color-surface);
38
38
  background-image: none;
@@ -12,7 +12,7 @@
12
12
  margin-inline-end: var(--formie-space-2);
13
13
  padding: calc(var(--formie-control-padding-y) - 1px) var(--formie-space-2);
14
14
  min-height: calc(var(--formie-control-height) - (var(--formie-space-1) * 2));
15
- border: var(--formie-border-width) solid var(--formie-color-border);
15
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
16
16
  border-radius: calc(var(--formie-radius-sm) - 1px);
17
17
  background: var(--formie-color-surface-subtle);
18
18
  color: var(--formie-color-heading);
@@ -26,7 +26,7 @@
26
26
 
27
27
  .formie-file-input:hover::file-selector-button,
28
28
  .formie-file-input:hover::-webkit-file-upload-button {
29
- border-color: color-mix(in srgb, var(--formie-color-border) 70%, var(--formie-color-heading) 30%);
29
+ border-color: color-mix(in srgb, var(--formie-color-border-control) 70%, var(--formie-color-heading) 30%);
30
30
  background: var(--formie-color-surface-muted);
31
31
  }
32
32
 
@@ -47,7 +47,7 @@
47
47
  .formie-file-summary {
48
48
  padding: var(--formie-file-summary-padding);
49
49
  gap: var(--formie-gap-file-summary);
50
- border: var(--formie-border-width) solid var(--formie-color-border);
50
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
51
51
  border-radius: var(--formie-radius-sm);
52
52
  }
53
53
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  .formie-input,
4
4
  .formie-textarea {
5
- border: var(--formie-border-width) solid var(--formie-color-border);
5
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
6
6
  border-radius: var(--formie-radius-sm);
7
7
  background: var(--formie-color-surface);
8
8
  transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease;
@@ -9,7 +9,7 @@
9
9
  display: grid;
10
10
  gap: var(--formie-space-4);
11
11
  padding: var(--formie-space-4);
12
- border: var(--formie-border-width) solid var(--formie-color-border);
12
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
13
13
  border-radius: var(--formie-radius-md);
14
14
  transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease;
15
15
  }
@@ -1,6 +1,6 @@
1
1
  @layer formie-theme {
2
2
  .formie-rich-text {
3
- border: var(--formie-border-width) solid var(--formie-color-border);
3
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
4
4
  border-radius: var(--formie-radius-sm);
5
5
  background: var(--formie-color-surface);
6
6
  box-sizing: border-box;
@@ -1,6 +1,6 @@
1
1
  @layer formie-theme {
2
2
  .formie-select {
3
- border: var(--formie-border-width) solid var(--formie-color-border);
3
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
4
4
  border-radius: var(--formie-radius-sm);
5
5
  background: var(--formie-color-surface);
6
6
  transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease;
@@ -263,7 +263,7 @@
263
263
  gap: var(--formie-space-2);
264
264
  margin: 0;
265
265
  padding: var(--formie-space-2) var(--formie-space-3);
266
- border: var(--formie-border-width) solid var(--formie-survey-rank-item-border-color, var(--formie-color-border));
266
+ border: var(--formie-border-width) solid var(--formie-survey-rank-item-border-color, var(--formie-color-border-control));
267
267
  border-radius: var(--formie-border-radius);
268
268
  background: var(--formie-survey-rank-item-background, var(--formie-color-surface));
269
269
  cursor: move;
@@ -17,7 +17,7 @@
17
17
  text-align: var(--formie-table-th-text-align);
18
18
  font-size: var(--formie-table-th-font-size);
19
19
  font-weight: var(--formie-table-th-font-weight);
20
- color: var(--formie-table-th-color, var(--formie-gray-500));
20
+ color: var(--formie-table-th-color, var(--formie-color-text-muted));
21
21
  }
22
22
 
23
23
  .formie-table th,
@@ -13,7 +13,7 @@
13
13
  gap: var(--formie-space-2);
14
14
  padding: var(--formie-space-4);
15
15
  min-height: calc(var(--formie-control-height) * 3);
16
- border: var(--formie-border-width) dashed var(--formie-color-border);
16
+ border: var(--formie-border-width) dashed var(--formie-color-border-control);
17
17
  border-radius: var(--formie-radius-sm);
18
18
  background: var(--formie-color-surface-subtle);
19
19
  color: var(--formie-color-text);
@@ -61,7 +61,7 @@
61
61
  align-items: center;
62
62
  gap: var(--formie-space-2);
63
63
  padding: var(--formie-space-2) var(--formie-space-3);
64
- border: var(--formie-border-width) solid var(--formie-color-border);
64
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
65
65
  border-radius: var(--formie-radius-sm);
66
66
  background: var(--formie-color-surface);
67
67
  }
@@ -150,7 +150,7 @@
150
150
  }
151
151
 
152
152
  .formie-upload-manager-item.is-upload-complete .formie-upload-manager-progress-label {
153
- color: var(--formie-color-success, var(--formie-color-primary));
153
+ color: var(--formie-color-success-dark, var(--formie-color-primary));
154
154
  font-weight: var(--formie-font-weight-medium);
155
155
  }
156
156
 
@@ -1,6 +1,6 @@
1
1
  @layer formie-theme {
2
2
  .formie-paypal-button {
3
- border: var(--formie-border-width) solid var(--formie-color-border);
3
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
4
4
  border-radius: var(--formie-radius-sm);
5
5
  background: var(--formie-color-surface);
6
6
  box-sizing: border-box;
@@ -1,6 +1,6 @@
1
1
  @layer formie-theme {
2
2
  .formie-payway-button {
3
- border: var(--formie-border-width) solid var(--formie-color-border);
3
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
4
4
  border-radius: var(--formie-radius-sm);
5
5
  background: var(--formie-color-surface);
6
6
  box-sizing: border-box;
@@ -10,7 +10,7 @@
10
10
  min-height: 12rem;
11
11
  width: 100%;
12
12
  padding: var(--formie-space-4);
13
- border: var(--formie-border-width) solid var(--formie-color-border);
13
+ border: var(--formie-border-width) solid var(--formie-color-border-control);
14
14
  border-radius: var(--formie-radius-sm);
15
15
  background: var(--formie-color-surface);
16
16
  color: var(--formie-color-text-muted);
@@ -415,9 +415,17 @@ function applyRefreshTokensToForm(form: HTMLFormElement, refreshTokens: FormEndp
415
415
  // Refresh-tokens mutates continuity inputs in place so cached or long-lived
416
416
  // forms keep submitting with fresh CSRF/request/captcha state.
417
417
  if (refreshTokens.csrf?.param && refreshTokens.csrf?.token) {
418
- const csrfInput = form.querySelector(`input[name="${refreshTokens.csrf.param}"]`) as HTMLInputElement | null;
418
+ let csrfInput = form.querySelector(`input[name="${refreshTokens.csrf.param}"]`) as HTMLInputElement | null;
419
+
419
420
  if (csrfInput) {
420
421
  csrfInput.value = refreshTokens.csrf.token;
422
+ } else {
423
+ csrfInput = document.createElement('input');
424
+ csrfInput.type = 'hidden';
425
+ csrfInput.name = refreshTokens.csrf.param;
426
+ csrfInput.value = refreshTokens.csrf.token;
427
+ csrfInput.setAttribute('autocomplete', 'off');
428
+ form.prepend(csrfInput);
421
429
  }
422
430
  }
423
431
 
@@ -90,11 +90,13 @@ export async function executeAjaxSubmitFlow(params: {
90
90
  validateOnSubmit,
91
91
  });
92
92
  applySubmitResultUi(form, result);
93
+ // Let captcha modules refresh one-time tokens before payment follow-up
94
+ // handlers (e.g. Stripe confirm) trigger an internal resubmit.
95
+ dispatchSubmitResult(result);
93
96
  applySubmitResultState(form, result, action);
94
97
  if (shouldRefreshTokensAfterSubmit(result)) {
95
98
  await onRefreshTokensAfterSubmit(result);
96
99
  }
97
- dispatchSubmitResult(result);
98
100
  } catch (error) {
99
101
  result = {
100
102
  ok: false,
@@ -335,6 +335,18 @@ export function applyPageState(form: HTMLFormElement, nextPageId: string): void
335
335
  toggleThemeClasses(tab, form, 'tabCurrent', isCurrent);
336
336
  toggleThemeClasses(tab, form, 'tabComplete', isComplete);
337
337
 
338
+ const tabLink = tab.querySelector('[data-formie-tab-link]');
339
+
340
+ if (tabLink) {
341
+ toggleThemeClasses(tabLink, form, 'tabLinkCurrent', isCurrent);
342
+
343
+ if (isCurrent) {
344
+ removeThemeClasses(tabLink, form, 'tabLinkInactive');
345
+ } else {
346
+ addThemeClasses(tabLink, form, 'tabLinkInactive');
347
+ }
348
+ }
349
+
338
350
  if (isCurrent) {
339
351
  tab.setAttribute('aria-current', 'page');
340
352
  } else {
@@ -367,6 +367,31 @@ export function renderFormErrors(form: HTMLFormElement, formErrors: string[]): v
367
367
  });
368
368
  }
369
369
 
370
+ function isPaymentFollowUpResult(result: FormSubmitResult): boolean {
371
+ if (result.ok || result.keepSubmitLoading !== true) {
372
+ return false;
373
+ }
374
+
375
+ const meta = (result.meta || {}) as Record<string, unknown>;
376
+ const paymentStatus = String(meta.paymentStatus || '');
377
+
378
+ return paymentStatus === 'actionRequired' || paymentStatus === 'pending';
379
+ }
380
+
381
+ export function renderFormNotice(form: HTMLFormElement, message: string): void {
382
+ const container = ensureFormErrorContainer(form);
383
+ const messageContainer = ensureFormErrorMessageContainer(form, container);
384
+
385
+ addThemeClasses(container, form, 'errors');
386
+
387
+ const noticeNode = document.createElement('div');
388
+ noticeNode.setAttribute('data-formie-notice', 'true');
389
+ noticeNode.setAttribute('role', 'status');
390
+ addThemeClasses(noticeNode, form, 'message');
391
+ noticeNode.textContent = message;
392
+ messageContainer.appendChild(noticeNode);
393
+ }
394
+
370
395
  function shouldRenderSuccessMessage(form: HTMLFormElement, result: FormSubmitResult): boolean {
371
396
  if (!result.message || result.nextPage || result.redirect) {
372
397
  // Page changes and redirects are transitional outcomes, not terminal
@@ -432,15 +457,28 @@ export function applySubmitResultUi(form: HTMLFormElement, result: FormSubmitRes
432
457
  return;
433
458
  }
434
459
 
435
- if (result.fieldErrors) {
436
- renderFieldErrors(form, result.fieldErrors);
437
- }
460
+ if (!result.ok) {
461
+ if (isPaymentFollowUpResult(result)) {
462
+ const meta = (result.meta || {}) as Record<string, unknown>;
463
+ const message = String(meta.paymentMessage || '').trim();
438
464
 
439
- if (result.formErrors?.length) {
440
- renderFormErrors(form, result.formErrors);
441
- } else if (!result.fieldErrors && result.message) {
442
- renderFormErrors(form, [result.message]);
443
- }
465
+ if (message) {
466
+ renderFormNotice(form, message);
467
+ }
468
+
469
+ return;
470
+ }
471
+
472
+ if (result.fieldErrors) {
473
+ renderFieldErrors(form, result.fieldErrors);
474
+ }
444
475
 
445
- focusFirstValidationError(form);
476
+ if (result.formErrors?.length) {
477
+ renderFormErrors(form, result.formErrors);
478
+ } else if (!result.fieldErrors && result.message) {
479
+ renderFormErrors(form, [result.message]);
480
+ }
481
+
482
+ focusFirstValidationError(form);
483
+ }
446
484
  }