@feathery/react 2.20.0 → 2.22.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 (110) hide show
  1. package/cjs/Form/grid/StyledContainer/index.d.ts.map +1 -1
  2. package/cjs/Form/grid/index.d.ts.map +1 -1
  3. package/cjs/Form/index.d.ts.map +1 -1
  4. package/cjs/elements/components/FormOff.d.ts +5 -4
  5. package/cjs/elements/components/FormOff.d.ts.map +1 -1
  6. package/cjs/{fthry_FormControl.BlF1MzAT.js → fthry_FormControl.C6RfrG4j.js} +1 -1
  7. package/cjs/{fthry_InlineTooltip.ZMNeql52.js → fthry_InlineTooltip.DXjYqPtD.js} +2 -2
  8. package/cjs/{fthry_Overlay.D1Dl_rYV.js → fthry_Overlay.C4w6Cb6j.js} +1 -1
  9. package/cjs/{fthry_PaymentMethodField.B8o3hJZc.js → fthry_PaymentMethodField.D05feokK.js} +4 -4
  10. package/cjs/{fthry_Placeholder.CJwsAENg.js → fthry_Placeholder.D7Yh7mU2.js} +1 -1
  11. package/cjs/{fthry_ShowEyeIcon.CfY-8UpD.js → fthry_ShowEyeIcon.CiLTfgAK.js} +1 -1
  12. package/cjs/{fthry_index.CCemnwsu.js → fthry_index.2sunYeoj.js} +1 -1
  13. package/cjs/{fthry_index.CPO_3E6l.js → fthry_index.6gJGxnEh.js} +1 -1
  14. package/cjs/{fthry_index.BPhGm93v.js → fthry_index.B7fwm2Qq.js} +1 -1
  15. package/cjs/{fthry_index.BAvCMZms.js → fthry_index.BJT2EG9q.js} +3 -3
  16. package/cjs/{fthry_index.M9hqHrBw.js → fthry_index.BNdR1Zvy.js} +3 -3
  17. package/cjs/{fthry_index.CVRwl5e8.js → fthry_index.BO3AY9qR.js} +6 -6
  18. package/cjs/{fthry_index.CF_5aTpr.js → fthry_index.BoacvsbM.js} +6 -6
  19. package/cjs/{fthry_index.D0u2xH_C.js → fthry_index.BqZlc7T3.js} +5 -5
  20. package/cjs/{fthry_index.BsK-G-o1.js → fthry_index.C-ANSPxY.js} +8 -8
  21. package/cjs/{fthry_index.Zr0Zf4vN.js → fthry_index.C7ja1s3P.js} +1 -1
  22. package/cjs/{fthry_index.DBh1LYie.js → fthry_index.CIxKm2W7.js} +6 -6
  23. package/cjs/{fthry_index.CL0Og4Dc.js → fthry_index.CRdtsgYY.js} +4 -4
  24. package/cjs/{fthry_index.CAPznQPm.js → fthry_index.CofrHdeg.js} +2 -2
  25. package/cjs/{fthry_index.CTvJpKMD.js → fthry_index.CvLykMCw.js} +5 -5
  26. package/cjs/{fthry_index.C7wFi7y1.js → fthry_index.Cy80QFQZ.js} +2 -2
  27. package/cjs/{fthry_index.DiWVgvmp.js → fthry_index.D3t9MrC8.js} +1 -1
  28. package/cjs/{fthry_index.DuuOe7wg.js → fthry_index.D9UgyAK0.js} +5 -5
  29. package/cjs/{fthry_index.CyFPPgis.js → fthry_index.DBJtTx9s.js} +5 -5
  30. package/cjs/{fthry_index.BM5SEWS3.js → fthry_index.DiSY7Ac7.js} +1 -1
  31. package/cjs/{fthry_index.oBstjM0Y.js → fthry_index.DjWVnEr6.js} +4 -4
  32. package/cjs/{fthry_index.BAFB4RHg.js → fthry_index.Dl8zGsAp.js} +1 -1
  33. package/cjs/{fthry_index.p7Cu-nM0.js → fthry_index.avrbgACA.js} +1 -1
  34. package/cjs/{fthry_index.Dnzf38f1.js → fthry_index.dpVLfqGZ.js} +4 -4
  35. package/cjs/{fthry_index.DbmqQgFK.js → fthry_index.lrVIrRLc.js} +211 -74
  36. package/cjs/{fthry_input.NIWw-1nq.js → fthry_input.CHp_Jap5.js} +1 -1
  37. package/cjs/{fthry_script.bHvj52W8.js → fthry_script.C2pt_bUm.js} +1 -1
  38. package/cjs/{fthry_styles.D2wHG088.js → fthry_styles.DFm8HxDr.js} +1 -1
  39. package/cjs/{fthry_useElementSize.B1YQZQeL.js → fthry_useElementSize.BroSkGyG.js} +1 -1
  40. package/cjs/{fthry_useSalesforceSync.CGrJMMq8.js → fthry_useSalesforceSync.DiWBOGl_.js} +1 -1
  41. package/cjs/{fthry_webfontloader.CtGFRK-R.js → fthry_webfontloader.Du37duiu.js} +1 -1
  42. package/cjs/index.d.ts +6 -0
  43. package/cjs/index.d.ts.map +1 -1
  44. package/cjs/index.js +1 -1
  45. package/cjs/utils/featheryClient/index.d.ts +6 -0
  46. package/cjs/utils/featheryClient/index.d.ts.map +1 -1
  47. package/cjs/utils/featheryClient/integrationClient.d.ts.map +1 -1
  48. package/cjs/utils/featheryClient/utils.d.ts +1 -0
  49. package/cjs/utils/featheryClient/utils.d.ts.map +1 -1
  50. package/cjs/utils/formContext.d.ts +6 -0
  51. package/cjs/utils/formContext.d.ts.map +1 -1
  52. package/cjs/utils/init.d.ts +1 -0
  53. package/cjs/utils/init.d.ts.map +1 -1
  54. package/cjs/utils/offlineRequestHandler.d.ts.map +1 -1
  55. package/dist/Form/grid/StyledContainer/index.d.ts.map +1 -1
  56. package/dist/Form/grid/index.d.ts.map +1 -1
  57. package/dist/Form/index.d.ts.map +1 -1
  58. package/dist/elements/components/FormOff.d.ts +5 -4
  59. package/dist/elements/components/FormOff.d.ts.map +1 -1
  60. package/dist/{fthry_FormControl.1a1P4UlW.js → fthry_FormControl.BR7z833q.js} +1 -1
  61. package/dist/{fthry_InlineTooltip.DtrTD1lJ.js → fthry_InlineTooltip.D5rXgJxn.js} +2 -2
  62. package/dist/{fthry_Overlay.CncQxaYG.js → fthry_Overlay.C0T4Ihiz.js} +1 -1
  63. package/dist/{fthry_PaymentMethodField.25ynnr4a.js → fthry_PaymentMethodField.BnHykb0-.js} +4 -4
  64. package/dist/{fthry_Placeholder.DihcDpfg.js → fthry_Placeholder.OebdDszh.js} +1 -1
  65. package/dist/{fthry_ShowEyeIcon.C_om2PTd.js → fthry_ShowEyeIcon.5ZGg8TFI.js} +1 -1
  66. package/dist/{fthry_index.D8nG9qvV.js → fthry_index.B-HK4FAf.js} +5 -5
  67. package/dist/{fthry_index.BRiDM4kl.js → fthry_index.BVBupEyX.js} +4 -4
  68. package/dist/{fthry_index.CjVOeUO7.js → fthry_index.Bg6jDqRN.js} +1 -1
  69. package/dist/{fthry_index.BnLk-Mgr.js → fthry_index.BkvB1fWy.js} +1 -1
  70. package/dist/{fthry_index.C-pG0RNO.js → fthry_index.Bsx6VyJi.js} +2 -2
  71. package/dist/{fthry_index.6j3H5Jsd.js → fthry_index.CAO_boB_.js} +6 -6
  72. package/dist/{fthry_index.gTJ9T5iG.js → fthry_index.CDRQrd84.js} +211 -74
  73. package/dist/{fthry_index.BO9Rqj_Y.js → fthry_index.CLjO1Hq8.js} +1 -1
  74. package/dist/{fthry_index.Bpk_PYMh.js → fthry_index.CQIPge2V.js} +2 -2
  75. package/dist/{fthry_index.AwddDMaC.js → fthry_index.CZr2zxPE.js} +1 -1
  76. package/dist/{fthry_index.TDe1P2Bp.js → fthry_index.Ca6YzvQ4.js} +3 -3
  77. package/dist/{fthry_index.CY50AQx5.js → fthry_index.CbNESu0U.js} +5 -5
  78. package/dist/{fthry_index.B7TfCWWq.js → fthry_index.CbxKTwce.js} +3 -3
  79. package/dist/{fthry_index.DZB6jwWj.js → fthry_index.CenbmeTZ.js} +4 -4
  80. package/dist/{fthry_index.JGhr5Dls.js → fthry_index.Cjz0TFbJ.js} +8 -8
  81. package/dist/{fthry_index.7qjj8Bg8.js → fthry_index.Cog2BDNb.js} +1 -1
  82. package/dist/{fthry_index.Dnqjv4st.js → fthry_index.D33p0Cu9.js} +5 -5
  83. package/dist/{fthry_index.D3MIP4ZK.js → fthry_index.D91kaNEu.js} +1 -1
  84. package/dist/{fthry_index.vzZGXQtx.js → fthry_index.DSXLISe1.js} +1 -1
  85. package/dist/{fthry_index.DrDR16uH.js → fthry_index.DSpMogdQ.js} +6 -6
  86. package/dist/{fthry_index.F5q5xnZz.js → fthry_index.DgH--mO0.js} +1 -1
  87. package/dist/{fthry_index.Cy8swXZF.js → fthry_index.DomytyFl.js} +4 -4
  88. package/dist/{fthry_index.Dcf59nAI.js → fthry_index.NZiAUoKR.js} +5 -5
  89. package/dist/{fthry_index.BrKBOwpw.js → fthry_index.VasUvj87.js} +6 -6
  90. package/dist/{fthry_input.CmmeZAuB.js → fthry_input.mf5Eisx1.js} +1 -1
  91. package/dist/{fthry_script.CXkwR9fy.js → fthry_script.DYkmIi0j.js} +1 -1
  92. package/dist/{fthry_styles.CMRZqD1r.js → fthry_styles.DctHU6BX.js} +1 -1
  93. package/dist/{fthry_useElementSize.CxlyPsCi.js → fthry_useElementSize.B_En_KWY.js} +1 -1
  94. package/dist/{fthry_useSalesforceSync.Bj7FNIT_.js → fthry_useSalesforceSync.wfhYAUgy.js} +1 -1
  95. package/dist/{fthry_webfontloader.DfY0lK30.js → fthry_webfontloader.sudLWRnv.js} +1 -1
  96. package/dist/index.d.ts +6 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/utils/featheryClient/index.d.ts +6 -0
  100. package/dist/utils/featheryClient/index.d.ts.map +1 -1
  101. package/dist/utils/featheryClient/integrationClient.d.ts.map +1 -1
  102. package/dist/utils/featheryClient/utils.d.ts +1 -0
  103. package/dist/utils/featheryClient/utils.d.ts.map +1 -1
  104. package/dist/utils/formContext.d.ts +6 -0
  105. package/dist/utils/formContext.d.ts.map +1 -1
  106. package/dist/utils/init.d.ts +1 -0
  107. package/dist/utils/init.d.ts.map +1 -1
  108. package/dist/utils/offlineRequestHandler.d.ts.map +1 -1
  109. package/package.json +2 -2
  110. package/umd/index.js +1 -1
@@ -5870,6 +5870,35 @@ var api$1 = {};
5870
5870
 
5871
5871
  var utils = {};
5872
5872
 
5873
+ var cookies = {};
5874
+
5875
+ var hasRequiredCookies;
5876
+
5877
+ function requireCookies () {
5878
+ if (hasRequiredCookies) return cookies;
5879
+ hasRequiredCookies = 1;
5880
+ Object.defineProperty(cookies, "__esModule", { value: true });
5881
+ cookies.getCookie = getCookie;
5882
+ /**
5883
+ * Get a cookie value
5884
+ *
5885
+ * @param name - The name of the cookie to retrieve
5886
+ * @returns The cookie value or null if not found or no browser
5887
+ */
5888
+ function getCookie(name) {
5889
+ if (typeof document === 'undefined')
5890
+ return null;
5891
+ const value = `; ${document.cookie}`;
5892
+ const parts = value.split(`; ${name}=`);
5893
+ if (parts.length === 2) {
5894
+ const cookieValue = parts.pop()?.split(';').shift();
5895
+ return cookieValue || null;
5896
+ }
5897
+ return null;
5898
+ }
5899
+ return cookies;
5900
+ }
5901
+
5873
5902
  var error = {};
5874
5903
 
5875
5904
  var hasRequiredError;
@@ -5878,7 +5907,7 @@ function requireError () {
5878
5907
  if (hasRequiredError) return error;
5879
5908
  hasRequiredError = 1;
5880
5909
  Object.defineProperty(error, "__esModule", { value: true });
5881
- error.ValidationError = error.SDKKeyError = error.FormConflictError = error.FetchError = void 0;
5910
+ error.ValidationError = error.FormAuthenticationError = error.SDKKeyError = error.FormConflictError = error.FetchError = void 0;
5882
5911
  error.parseAPIError = parseAPIError;
5883
5912
  class FetchError extends Error {
5884
5913
  constructor(message, payload = null) {
@@ -5902,6 +5931,13 @@ function requireError () {
5902
5931
  }
5903
5932
  }
5904
5933
  error.SDKKeyError = SDKKeyError;
5934
+ class FormAuthenticationError extends Error {
5935
+ constructor(message = 'User does not have access to this form') {
5936
+ super(message);
5937
+ this.name = 'FormAuthenticationError';
5938
+ }
5939
+ }
5940
+ error.FormAuthenticationError = FormAuthenticationError;
5905
5941
  class ValidationError extends Error {
5906
5942
  constructor(message) {
5907
5943
  super(message);
@@ -6009,6 +6045,7 @@ function requireUtils () {
6009
6045
  utils.apiFetch = apiFetch;
6010
6046
  utils.createHttpHelpers = createHttpHelpers;
6011
6047
  const api_1 = requireApi();
6048
+ const cookies_1 = requireCookies();
6012
6049
  const error_1 = requireError();
6013
6050
  const setup_1 = requireSetup();
6014
6051
  function getApiUrl() {
@@ -6047,6 +6084,10 @@ function requireUtils () {
6047
6084
  throw new error_1.FetchError(payload.toString());
6048
6085
  case 401:
6049
6086
  throw new error_1.SDKKeyError();
6087
+ case 403:
6088
+ payload = await response.clone().json();
6089
+ const message = (0, error_1.parseAPIError)(payload);
6090
+ throw new error_1.FormAuthenticationError(message);
6050
6091
  case 404:
6051
6092
  throw new error_1.FetchError("Can't find object");
6052
6093
  case 409:
@@ -6060,14 +6101,21 @@ function requireUtils () {
6060
6101
  async function apiFetch(sdkKey, url, options, parseResponse = true) {
6061
6102
  options = options ?? {};
6062
6103
  const { headers, ...otherOptions } = options;
6104
+ // Read JWT from cookie
6105
+ const sessionJwt = (0, cookies_1.getCookie)('feathery_session_token');
6106
+ const requestHeaders = {
6107
+ Authorization: 'Token ' + sdkKey,
6108
+ ...headers,
6109
+ };
6110
+ // Add session JWT if available
6111
+ if (sessionJwt) {
6112
+ requestHeaders['X-Feathery-Session'] = sessionJwt;
6113
+ }
6063
6114
  options = {
6064
6115
  cache: 'no-store',
6065
6116
  // write requests must succeed so data is tracked
6066
6117
  keepalive: ['POST', 'PATCH', 'PUT'].includes(options.method),
6067
- headers: {
6068
- Authorization: 'Token ' + sdkKey,
6069
- ...headers,
6070
- },
6118
+ headers: requestHeaders,
6071
6119
  ...otherOptions,
6072
6120
  };
6073
6121
  const { internalSecretKey } = (0, setup_1.getEnvironment)();
@@ -6410,7 +6458,7 @@ function requireDist$2 () {
6410
6458
  hasRequiredDist$2 = 1;
6411
6459
  (function (exports$1) {
6412
6460
  Object.defineProperty(exports$1, "__esModule", { value: true });
6413
- exports$1.setEnvironment = exports$1.parseAPIError = exports$1.FormConflictError = exports$1.SDKKeyError = exports$1.FetchError = exports$1.getS3Url = exports$1.getCdnUrl = exports$1.getStaticUrl = exports$1.getApiUrl = exports$1.createHttpHelpers = exports$1.checkResponseSuccess = exports$1.apiFetch = exports$1.sendEmail = exports$1.pollForCompletion = exports$1.inviteFormCollaborator = exports$1.getQuikAccountForms = exports$1.getQuikForms = exports$1.getQuikFormRoles = exports$1.generateQuikEnvelopes = exports$1.generateFormDocuments = exports$1.forwardInboxEmail = exports$1.extractAIDocument = exports$1.customRolloutAction = void 0;
6461
+ exports$1.setEnvironment = exports$1.parseAPIError = exports$1.FormConflictError = exports$1.FormAuthenticationError = exports$1.SDKKeyError = exports$1.FetchError = exports$1.getS3Url = exports$1.getCdnUrl = exports$1.getStaticUrl = exports$1.getApiUrl = exports$1.createHttpHelpers = exports$1.checkResponseSuccess = exports$1.apiFetch = exports$1.sendEmail = exports$1.pollForCompletion = exports$1.inviteFormCollaborator = exports$1.getQuikAccountForms = exports$1.getQuikForms = exports$1.getQuikFormRoles = exports$1.generateQuikEnvelopes = exports$1.generateFormDocuments = exports$1.forwardInboxEmail = exports$1.extractAIDocument = exports$1.customRolloutAction = void 0;
6414
6462
  var api_1 = requireApi();
6415
6463
  Object.defineProperty(exports$1, "customRolloutAction", { enumerable: true, get: function () { return api_1.customRolloutAction; } });
6416
6464
  Object.defineProperty(exports$1, "extractAIDocument", { enumerable: true, get: function () { return api_1.extractAIDocument; } });
@@ -6434,6 +6482,7 @@ function requireDist$2 () {
6434
6482
  var error_1 = requireError();
6435
6483
  Object.defineProperty(exports$1, "FetchError", { enumerable: true, get: function () { return error_1.FetchError; } });
6436
6484
  Object.defineProperty(exports$1, "SDKKeyError", { enumerable: true, get: function () { return error_1.SDKKeyError; } });
6485
+ Object.defineProperty(exports$1, "FormAuthenticationError", { enumerable: true, get: function () { return error_1.FormAuthenticationError; } });
6437
6486
  Object.defineProperty(exports$1, "FormConflictError", { enumerable: true, get: function () { return error_1.FormConflictError; } });
6438
6487
  Object.defineProperty(exports$1, "parseAPIError", { enumerable: true, get: function () { return error_1.parseAPIError; } });
6439
6488
  var setup_1 = requireSetup();
@@ -6453,6 +6502,16 @@ function handleFormConflict() {
6453
6502
  untrackUnload(true);
6454
6503
  featheryWindow().alert('This form has been updated. Please fill it out again.');
6455
6504
  location.reload();
6505
+ }
6506
+ function handleFormAuthenticationError(errorMessage) {
6507
+ untrackUnload(true);
6508
+ // Store the authentication error in initState so Form component can show FormOff
6509
+ initState.authenticationError =
6510
+ errorMessage || 'Access to this form is restricted';
6511
+ // Trigger a re-render by updating remount callbacks
6512
+ Object.values(initState.remountCallbacks).forEach(function (callback) {
6513
+ callback === null || callback === void 0 ? void 0 : callback();
6514
+ });
6456
6515
  }
6457
6516
 
6458
6517
  // Constants for the IndexedDB database
@@ -6952,9 +7011,9 @@ var OfflineRequestHandler = /** @class */ (function () {
6952
7011
  };
6953
7012
  var attemptRequest = function () { return __awaiter$2(_this, void 0, void 0, function () {
6954
7013
  var attempts, response, error_2, nextDelay;
6955
- var _a, _b, _c, _d, _e;
6956
- return __generator(this, function (_f) {
6957
- switch (_f.label) {
7014
+ var _a, _b, _c, _d, _e, _f;
7015
+ return __generator(this, function (_g) {
7016
+ switch (_g.label) {
6958
7017
  case 0:
6959
7018
  attempts = (_a = request.retryAttempts) !== null && _a !== void 0 ? _a : 0;
6960
7019
  // Ensure exhausted retries are marked as failed before being skipped
@@ -6962,54 +7021,58 @@ var OfflineRequestHandler = /** @class */ (function () {
6962
7021
  markFileUploadRetryFailure((_b = request.metadata) === null || _b === void 0 ? void 0 : _b.fieldKey);
6963
7022
  return [2 /*return*/];
6964
7023
  }
6965
- _f.label = 1;
7024
+ _g.label = 1;
6966
7025
  case 1:
6967
- if (!(attempts < this.maxRetryAttempts)) return [3 /*break*/, 13];
6968
- _f.label = 2;
7026
+ if (!(attempts < this.maxRetryAttempts)) return [3 /*break*/, 15];
7027
+ _g.label = 2;
6969
7028
  case 2:
6970
- _f.trys.push([2, 6, , 12]);
7029
+ _g.trys.push([2, 6, , 14]);
6971
7030
  return [4 /*yield*/, fetch(url, fetchOptions)];
6972
7031
  case 3:
6973
- response = _f.sent();
7032
+ response = _g.sent();
6974
7033
  return [4 /*yield*/, distExports$2.checkResponseSuccess(response)];
6975
7034
  case 4:
6976
- _f.sent();
7035
+ _g.sent();
6977
7036
  markFileUploadRetrySuccess((_c = request.metadata) === null || _c === void 0 ? void 0 : _c.fieldKey);
6978
7037
  return [4 /*yield*/, this.removeRequest(key)];
6979
7038
  case 5:
6980
- _f.sent();
7039
+ _g.sent();
6981
7040
  return [2 /*return*/];
6982
7041
  case 6:
6983
- error_2 = _f.sent();
6984
- if (error_2 instanceof distExports$2.FormConflictError) {
6985
- handleFormConflict();
6986
- return [2 /*return*/];
6987
- }
7042
+ error_2 = _g.sent();
7043
+ if (!(error_2 instanceof distExports$2.FormConflictError)) return [3 /*break*/, 8];
7044
+ handleFormConflict();
7045
+ markFileUploadRetrySuccess((_d = request.metadata) === null || _d === void 0 ? void 0 : _d.fieldKey);
7046
+ return [4 /*yield*/, this.removeRequest(key)];
7047
+ case 7:
7048
+ _g.sent();
7049
+ return [2 /*return*/];
7050
+ case 8:
6988
7051
  attempts++;
6989
7052
  return [4 /*yield*/, this.updateRetryAttempts(key, attempts)];
6990
- case 7:
6991
- _f.sent();
6992
- if (!navigator.onLine) return [3 /*break*/, 9];
7053
+ case 9:
7054
+ _g.sent();
7055
+ if (!navigator.onLine) return [3 /*break*/, 11];
6993
7056
  nextDelay = this.getExponentialDelay(attempts);
6994
7057
  if (attempts >= this.maxRetryAttempts) {
6995
7058
  // Skip alerting when a specific field upload already surfaces its own retry error
6996
- if (this.errorCallback && !((_d = request.metadata) === null || _d === void 0 ? void 0 : _d.fieldKey)) {
7059
+ if (this.errorCallback && !((_e = request.metadata) === null || _e === void 0 ? void 0 : _e.fieldKey)) {
6997
7060
  this.errorCallback("Failed to submit after ".concat(this.maxRetryAttempts, " attempts. Please check your connection and try again."));
6998
7061
  }
6999
- markFileUploadRetryFailure((_e = request.metadata) === null || _e === void 0 ? void 0 : _e.fieldKey);
7062
+ markFileUploadRetryFailure((_f = request.metadata) === null || _f === void 0 ? void 0 : _f.fieldKey);
7000
7063
  return [2 /*return*/];
7001
7064
  }
7002
7065
  return [4 /*yield*/, this.delay(nextDelay)];
7003
- case 8:
7004
- _f.sent();
7005
- return [3 /*break*/, 11];
7006
- case 9: return [4 /*yield*/, this.onlineAndReplayed()];
7007
7066
  case 10:
7008
- _f.sent();
7067
+ _g.sent();
7068
+ return [3 /*break*/, 13];
7069
+ case 11: return [4 /*yield*/, this.onlineAndReplayed()];
7070
+ case 12:
7071
+ _g.sent();
7009
7072
  return [2 /*return*/];
7010
- case 11: return [3 /*break*/, 12];
7011
- case 12: return [3 /*break*/, 1];
7012
- case 13: return [2 /*return*/];
7073
+ case 13: return [3 /*break*/, 14];
7074
+ case 14: return [3 /*break*/, 1];
7075
+ case 15: return [2 /*return*/];
7013
7076
  }
7014
7077
  });
7015
7078
  }); };
@@ -7380,12 +7443,20 @@ var IntegrationClient = /** @class */ (function () {
7380
7443
  if (parseResponse === void 0) { parseResponse = true; }
7381
7444
  if (propagateNetworkErrors === void 0) { propagateNetworkErrors = false; }
7382
7445
  var sdkKey = initInfo().sdkKey;
7446
+ // Stop making requests if authentication error has occurred
7447
+ if (initState.authenticationError) {
7448
+ return Promise.resolve(undefined);
7449
+ }
7383
7450
  return distExports$2.apiFetch(sdkKey, url, options, parseResponse).catch(function (e) {
7384
7451
  var _a;
7385
7452
  if (e instanceof distExports$2.FormConflictError) {
7386
7453
  handleFormConflict();
7387
7454
  return;
7388
7455
  }
7456
+ if (e instanceof distExports$2.FormAuthenticationError) {
7457
+ handleFormAuthenticationError(e.message);
7458
+ return;
7459
+ }
7389
7460
  // Ignore TypeErrors if form has redirected because `fetch` in
7390
7461
  // Safari will error after redirect
7391
7462
  var ignore = ((_a = _this.ignoreNetworkErrors) === null || _a === void 0 ? void 0 : _a.current) ||
@@ -20222,7 +20293,7 @@ var messages = (_a = {},
20222
20293
  _a[NO_BUSINESS_EMAIL] = 'Activate forms by adding an email from a company domain to your Feathery account',
20223
20294
  _a);
20224
20295
  function FormOff(_a) {
20225
- var _b = _a.width, width = _b === void 0 ? 400 : _b, _c = _a.reason, reason = _c === void 0 ? CLOSED : _c, _d = _a.showCTA, showCTA = _d === void 0 ? true : _d;
20296
+ var _b = _a.width, width = _b === void 0 ? 400 : _b, _c = _a.reason, reason = _c === void 0 ? CLOSED : _c, _d = _a.showCTA, showCTA = _d === void 0 ? true : _d, message = _a.message;
20226
20297
  return (jsxs("div", exports.__assign({ css: {
20227
20298
  width: '100%',
20228
20299
  height: '100%',
@@ -20239,7 +20310,7 @@ function FormOff(_a) {
20239
20310
  lineHeight: '32px',
20240
20311
  textAlign: 'center',
20241
20312
  margin: '50px 0'
20242
- } }, { children: messages[reason] })), showCTA && (jsx$1("button", exports.__assign({ css: {
20313
+ } }, { children: message || messages[reason] })), showCTA && (jsx$1("button", exports.__assign({ css: {
20243
20314
  border: '1px solid #e2626e',
20244
20315
  color: '#e2626e',
20245
20316
  outline: 'none',
@@ -21609,12 +21680,12 @@ var ShadowDomHtmlContent = function (_a) {
21609
21680
  * and the editor to render "Containers".
21610
21681
  */
21611
21682
  var StyledContainer = React.forwardRef(function (_a, ref) {
21612
- var _b, _c;
21613
- var _node = _a.node, raw = _a.raw, _d = _a.css, css = _d === void 0 ? {} : _d, viewport = _a.viewport, component = _a.component, _children = _a.children, className = _a.className, _e = _a.viewportOnly, viewportOnly = _e === void 0 ? false : _e, _f = _a.editMode, editMode = _f === void 0 ? false : _f, breakpoint = _a.breakpoint, props = __rest$1(_a, ["node", "raw", "css", "viewport", "component", "children", "className", "viewportOnly", "editMode", "breakpoint"]);
21614
- var _g = useFormattedNode(_node, raw), node = _g.node, rawNode = _g.rawNode;
21683
+ var _b, _c, _d, _e;
21684
+ var _node = _a.node, raw = _a.raw, _f = _a.css, css = _f === void 0 ? {} : _f, viewport = _a.viewport, component = _a.component, _children = _a.children, className = _a.className, _g = _a.viewportOnly, viewportOnly = _g === void 0 ? false : _g, _h = _a.editMode, editMode = _h === void 0 ? false : _h, breakpoint = _a.breakpoint, props = __rest$1(_a, ["node", "raw", "css", "viewport", "component", "children", "className", "viewportOnly", "editMode", "breakpoint"]);
21685
+ var _j = useFormattedNode(_node, raw), node = _j.node, rawNode = _j.rawNode;
21615
21686
  var children = React.Children.toArray(_children);
21616
21687
  var type = useNodeType(node, rawNode, viewport);
21617
- var _h = __read(React.useState(''), 2), backgroundImage = _h[0], setBackgroundImage = _h[1];
21688
+ var _k = __read(React.useState(''), 2), backgroundImage = _k[0], setBackgroundImage = _k[1];
21618
21689
  var imageUrlFieldKey = (_b = node.styles) === null || _b === void 0 ? void 0 : _b.uploaded_image_file_field_key;
21619
21690
  var file;
21620
21691
  if (imageUrlFieldKey) {
@@ -21636,10 +21707,10 @@ var StyledContainer = React.forwardRef(function (_a, ref) {
21636
21707
  });
21637
21708
  }
21638
21709
  }, [file]);
21639
- var _j = useContainerStyles(node, rawNode, css, viewportOnly ? viewport : undefined, breakpoint), styles = _j.styles, innerStyles = _j.innerStyles;
21710
+ var _l = useContainerStyles(node, rawNode, css, viewportOnly ? viewport : undefined, breakpoint), styles = _l.styles, innerStyles = _l.innerStyles;
21640
21711
  if (backgroundImage)
21641
21712
  styles.backgroundImage = backgroundImage;
21642
- var _k = __read(useFixedContainer(node, rawNode, viewport, breakpoint), 2), isFixed = _k[0], fixedContainerRef = _k[1];
21713
+ var _m = __read(useFixedContainer(node, rawNode, viewport, breakpoint), 2), isFixed = _m[0], fixedContainerRef = _m[1];
21643
21714
  if (node.properties.iframe_url) {
21644
21715
  var url = replaceTextVariables(node.properties.iframe_url);
21645
21716
  children.push(jsx$1("iframe", { width: '100%', height: '100%', src: url, css: { border: 'none' } }, "iframe:".concat(url)));
@@ -21653,11 +21724,12 @@ var StyledContainer = React.forwardRef(function (_a, ref) {
21653
21724
  children.push(jsx$1(RenderComponent, { html: html, css: baseStyles }, "html:".concat(html)));
21654
21725
  }
21655
21726
  useContainerEngine(node, rawNode, ref);
21727
+ var elementType = (_e = (_d = node.servar) === null || _d === void 0 ? void 0 : _d.type) !== null && _e !== void 0 ? _e : node.type;
21656
21728
  if (component) {
21657
21729
  var Component = component;
21658
21730
  return (jsx$1(Component, exports.__assign({ ref: ref, node: _node, css: styles, className: cls('styled-container', type, className) }, props, { children: jsx$1("div", exports.__assign({ className: 'inner-container', css: innerStyles }, { children: children })) }), node.id));
21659
21731
  }
21660
- return (jsxs(Fragment, { children: [isFixed && (jsx$1("div", exports.__assign({ className: cls('styled-container', type, className) }, props, { css: exports.__assign(exports.__assign({}, styles), { position: 'fixed', zIndex: FORM_Z_INDEX + 1 }), ref: fixedContainerRef, "data-feathery-id": node.key }, { children: jsx$1("div", exports.__assign({ className: 'inner-container', css: innerStyles }, { children: children })) }), "".concat(node.id, "-fixed"))), jsx$1("div", exports.__assign({ ref: ref, css: isFixed ? exports.__assign(exports.__assign({}, styles), { visibility: 'hidden' }) : styles, className: cls('styled-container', type, className), "data-id": node.id, "data-feathery-id": node.key }, props, { children: jsx$1("div", exports.__assign({ className: 'inner-container', css: innerStyles }, { children: isFixed ? null : children })) }), node.id)] }));
21732
+ return (jsxs(Fragment, { children: [isFixed && (jsx$1("div", exports.__assign({ className: cls('styled-container', type, className) }, props, { css: exports.__assign(exports.__assign({}, styles), { position: 'fixed', zIndex: FORM_Z_INDEX + 1 }), ref: fixedContainerRef, "data-feathery-id": node.key, "data-element": elementType }, { children: jsx$1("div", exports.__assign({ className: 'inner-container', css: innerStyles }, { children: children })) }), "".concat(node.id, "-fixed"))), jsx$1("div", exports.__assign({ ref: ref, css: isFixed ? exports.__assign(exports.__assign({}, styles), { visibility: 'hidden' }) : styles, className: cls('styled-container', type, className) }, props, { "data-id": node.id, "data-feathery-id": node.key, "data-element": elementType }, { children: jsx$1("div", exports.__assign({ className: 'inner-container', css: innerStyles }, { children: isFixed ? null : children })) }), node.id)] }));
21661
21733
  });
21662
21734
 
21663
21735
  /**
@@ -22423,7 +22495,8 @@ var typeMap = {
22423
22495
  buttons: 'button',
22424
22496
  servar_fields: 'field',
22425
22497
  videos: 'video',
22426
- tables: 'table'
22498
+ tables: 'table',
22499
+ subgrids: 'container'
22427
22500
  };
22428
22501
  var buildGridMap = function (step) {
22429
22502
  var map = {};
@@ -22716,6 +22789,10 @@ var getFormContext = function (formUuid) {
22716
22789
  setCollaboratorAsCompleted: function (templateId) {
22717
22790
  return formState.client.setCollaboratorAsCompleted(templateId);
22718
22791
  },
22792
+ dataHubAction: function (_a) {
22793
+ var hubId = _a.hubId, operation = _a.operation, entryId = _a.entryId, data = _a.data;
22794
+ return formState.client.dataHubAction({ hubId: hubId, operation: operation, entryId: entryId, data: data });
22795
+ },
22719
22796
  generateDocuments: function (_a) {
22720
22797
  var documentIds = _a.documentIds, download = _a.download, merge = _a.merge;
22721
22798
  return formState.client.generateDocuments({ documentIds: documentIds, download: download, merge: merge });
@@ -40674,7 +40751,7 @@ function Form(_a) {
40674
40751
  var runElementActions = function (_a) {
40675
40752
  var actions = _a.actions, element = _a.element, elementType = _a.elementType, _b = _a.submit, submit = _b === void 0 ? false : _b, _c = _a.setElementError, setElementError = _c === void 0 ? function () { } : _c, _d = _a.onAsyncEnd, onAsyncEnd = _d === void 0 ? function () { } : _d, textSpanStart = _a.textSpanStart, textSpanEnd = _a.textSpanEnd, triggerPayload = _a.triggerPayload;
40676
40753
  return __awaiter$2(_this, void 0, void 0, function () {
40677
- var id, metadata, trigger, submitPromise, pendingFileKeys, invalid, hasNext, submissionResult, error_3, _e, stepPromise, flowOnSuccess, actionTypes, runAction, i, hasExtractions, hasEnvelopeGeneration, _loop_1, state_1;
40754
+ var id, metadata, trigger, submitPromise, pendingFileKeys, invalid, hasNext, submissionResult, error_3, _e, stepPromise, preOpenedWindows, flowOnSuccess, actionTypes, runAction, i, hasExtractions, hasEnvelopeGeneration, _loop_1, state_1;
40678
40755
  var _this = this;
40679
40756
  var _f, _g, _h, _j, _k;
40680
40757
  return __generator(this, function (_l) {
@@ -40781,6 +40858,18 @@ function Form(_a) {
40781
40858
  // Adjust action order to prioritize certain actions and
40782
40859
  // to ensure all actions are run as expected
40783
40860
  actions = prioritizeActions(actions);
40861
+ preOpenedWindows = new Map();
40862
+ if (isIOS()) {
40863
+ actions.forEach(function (action, idx) {
40864
+ if (action.type === ACTION_URL && action.open_tab) {
40865
+ var win = featheryWindow().open('about:blank', '_blank');
40866
+ if (win) {
40867
+ win.opener = null; // Prevent reverse tabnabbing
40868
+ preOpenedWindows.set(idx, win);
40869
+ }
40870
+ }
40871
+ });
40872
+ }
40784
40873
  flowOnSuccess = function (index) { return function () { return __awaiter$2(_this, void 0, void 0, function () {
40785
40874
  var running;
40786
40875
  return __generator(this, function (_a) {
@@ -40832,7 +40921,7 @@ function Form(_a) {
40832
40921
  initializeEnvelopeGeneration(actions);
40833
40922
  }
40834
40923
  _loop_1 = function () {
40835
- var action, type, container, container, personaMeta, url, eventData, phoneNum, e_6, phoneNum, e_7, emailAddress, e_8, pinKey, pin, params, hasErr_1, prom, email, e_9, auth, loginStep, actionSuccess, val, valid, val, invitees, res, collabKey, newVals, e_10, e_11, extractions, _loop_2, state_2, data, errorEntry, e_12, envelopeId, data, envAction, url, eventData, files, newValues, e_13, payload, e_14, key_1, val, servar_1, hiddenFieldType, destVal, setToDefaultValue, curIndex, defaultVal, i_1, newValues, phoneNum, silentVeriResult, key, newValues, e_15, phoneNum, phoneType, key, newValues, e_16, phoneNum, e_17, pinKey, pin, pinMatch, e_18;
40924
+ var action, type, container, container, personaMeta, url, preOpened, eventData, phoneNum, e_6, phoneNum, e_7, emailAddress, e_8, pinKey, pin, params, hasErr_1, prom, email, e_9, auth, loginStep, actionSuccess, val, valid, val, invitees, res, collabKey, newVals, e_10, e_11, extractions, _loop_2, state_2, data, errorEntry, e_12, envelopeId, data, envAction, url, eventData, files, newValues, e_13, payload, e_14, key_1, val, servar_1, hiddenFieldType, destVal, setToDefaultValue, curIndex, defaultVal, i_1, newValues, phoneNum, silentVeriResult, key, newValues, e_15, phoneNum, phoneType, key, newValues, e_16, phoneNum, e_17, pinKey, pin, pinMatch, e_18;
40836
40925
  var _m, _o, _p, _q, _r, _s, _t;
40837
40926
  return __generator(this, function (_u) {
40838
40927
  switch (_u.label) {
@@ -40909,8 +40998,16 @@ function Form(_a) {
40909
40998
  if (url) {
40910
40999
  if (!url.includes(':'))
40911
41000
  url = 'https://' + url;
40912
- if (action.open_tab)
40913
- openTab(url);
41001
+ if (action.open_tab) {
41002
+ preOpened = preOpenedWindows.get(i);
41003
+ if (preOpened) {
41004
+ preOpened.location.href = url;
41005
+ preOpenedWindows.delete(i);
41006
+ }
41007
+ else {
41008
+ openTab(url);
41009
+ }
41010
+ }
40914
41011
  }
40915
41012
  if (!!action.open_tab) return [3 /*break*/, 21];
40916
41013
  eventData = {
@@ -41488,6 +41585,8 @@ function Form(_a) {
41488
41585
  i++;
41489
41586
  return [3 /*break*/, 9];
41490
41587
  case 12:
41588
+ // Close any pre-opened windows that weren't used (e.g., validation failed)
41589
+ preOpenedWindows.forEach(function (win) { return win === null || win === void 0 ? void 0 : win.close(); });
41491
41590
  if (i < actions.length) {
41492
41591
  elementClicks[id] = false;
41493
41592
  clearButtonActionState();
@@ -41609,6 +41708,10 @@ function Form(_a) {
41609
41708
  };
41610
41709
  handleFormComplete().then(redirectForm);
41611
41710
  }, [anyFinished]);
41711
+ // Form authentication error (403)
41712
+ if (initState.authenticationError) {
41713
+ return (jsx$1(FormOff, { reason: CLOSED, message: initState.authenticationError, showCTA: false }));
41714
+ }
41612
41715
  // Form is turned off
41613
41716
  if (formOffReason.current === CLOSED)
41614
41717
  return jsx$1(FormOff, { showCTA: formSettings.showBrand });
@@ -45689,6 +45792,38 @@ var FeatheryClient = /** @class */ (function (_super) {
45689
45792
  });
45690
45793
  });
45691
45794
  };
45795
+ FeatheryClient.prototype.dataHubAction = function (_a) {
45796
+ var hubId = _a.hubId, operation = _a.operation, entryId = _a.entryId, data = _a.data;
45797
+ return __awaiter$2(this, void 0, void 0, function () {
45798
+ var baseUrl, url, response, _b, _c;
45799
+ return __generator(this, function (_d) {
45800
+ switch (_d.label) {
45801
+ case 0:
45802
+ baseUrl = new URL(distExports$2.getApiUrl()).origin;
45803
+ url = "".concat(baseUrl, "/api/hub/").concat(hubId, "/action/");
45804
+ return [4 /*yield*/, this._fetch(url, {
45805
+ headers: { 'Content-Type': 'application/json' },
45806
+ method: 'POST',
45807
+ body: JSON.stringify({ operation: operation, entry_id: entryId, data: data })
45808
+ }, false)];
45809
+ case 1:
45810
+ response = _d.sent();
45811
+ if (!response) return [3 /*break*/, 5];
45812
+ if (response.status === 204)
45813
+ return [2 /*return*/, null];
45814
+ if (!response.ok) return [3 /*break*/, 3];
45815
+ return [4 /*yield*/, response.json()];
45816
+ case 2: return [2 /*return*/, _d.sent()];
45817
+ case 3:
45818
+ _b = Error;
45819
+ _c = distExports$2.parseAPIError;
45820
+ return [4 /*yield*/, response.json()];
45821
+ case 4: throw _b.apply(void 0, [_c.apply(void 0, [_d.sent()])]);
45822
+ case 5: return [2 /*return*/];
45823
+ }
45824
+ });
45825
+ });
45826
+ };
45692
45827
  return FeatheryClient;
45693
45828
  }(IntegrationClient));
45694
45829
 
@@ -45740,6 +45875,8 @@ function init(sdkKey, options) {
45740
45875
  return Promise.resolve((_a = initState.userId) !== null && _a !== void 0 ? _a : ''); // can only be initialized one time per load
45741
45876
  logFeatheryBadge();
45742
45877
  initState.initialized = true;
45878
+ // Clear any previous authentication errors on new initialization
45879
+ initState.authenticationError = undefined;
45743
45880
  initState.sdkKey = sdkKey;
45744
45881
  if (options._enterpriseRegion)
45745
45882
  initState.region = options._enterpriseRegion.toLowerCase();
@@ -45766,9 +45903,9 @@ function init(sdkKey, options) {
45766
45903
  if (runningInClient()) {
45767
45904
  // Dynamically load libraries that must be client side
45768
45905
  global.scriptjsLoadPromise = Promise.resolve().then(function () { return require(
45769
- /* webpackChunkName: "scriptjs" */ './fthry_script.bHvj52W8.js'); }).then(function (n) { return n.script; });
45906
+ /* webpackChunkName: "scriptjs" */ './fthry_script.C2pt_bUm.js'); }).then(function (n) { return n.script; });
45770
45907
  global.webfontloaderPromise = Promise.resolve().then(function () { return require(
45771
- /* webpackChunkName: "webfontloader" */ './fthry_webfontloader.CtGFRK-R.js'); }).then(function (n) { return n.webfontloader; });
45908
+ /* webpackChunkName: "webfontloader" */ './fthry_webfontloader.Du37duiu.js'); }).then(function (n) { return n.webfontloader; });
45772
45909
  // Client-side tracking logic
45773
45910
  if (initState.userTracking === 'cookie') {
45774
45911
  var cookieKey = "feathery-user-id-".concat(sdkKey);
@@ -45914,7 +46051,7 @@ function getFieldValues() {
45914
46051
  return exports.__assign({}, exports.fieldValues);
45915
46052
  }
45916
46053
  function logFeatheryBadge() {
45917
- console.log('%c Feathery %c v' + "2.20.0" + ' ', // replaced with real version during build
46054
+ console.log('%c Feathery %c v' + "2.22.0" + ' ', // replaced with real version during build
45918
46055
  'background: #e2626e; color: white; padding: 2px 6px; border-radius: 3px 0 0 3px; font-weight: bold;', 'background: #fce7e9; color: #c5495a; padding: 2px 6px; border-radius: 0 3px 3px 0;');
45919
46056
  }
45920
46057
 
@@ -47342,39 +47479,39 @@ breakpoint) {
47342
47479
  return styles.getTarget('inner-container', undefined, viewport === 'mobile');
47343
47480
  };
47344
47481
 
47345
- var AddressLine1 = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "AddressField" */ './fthry_index.CTvJpKMD.js'); }); });
47346
- var ButtonGroupField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "ButtonGroupField" */ './fthry_index.CL0Og4Dc.js'); }); });
47347
- var CheckboxField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "CheckboxField" */ './fthry_index.DiWVgvmp.js'); }); });
47482
+ var AddressLine1 = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "AddressField" */ './fthry_index.CvLykMCw.js'); }); });
47483
+ var ButtonGroupField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "ButtonGroupField" */ './fthry_index.CRdtsgYY.js'); }); });
47484
+ var CheckboxField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "CheckboxField" */ './fthry_index.D3t9MrC8.js'); }); });
47348
47485
  var CheckboxGroupField = React.lazy(function () {
47349
- return Promise.resolve().then(function () { return require(/* webpackChunkName: "CheckboxGroupField" */ './fthry_index.DBh1LYie.js'); });
47486
+ return Promise.resolve().then(function () { return require(/* webpackChunkName: "CheckboxGroupField" */ './fthry_index.CIxKm2W7.js'); });
47350
47487
  });
47351
- var ColorPickerField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "ColorPickerField" */ './fthry_index.Zr0Zf4vN.js'); }); });
47352
- var CustomField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "CustomField" */ './fthry_index.BAFB4RHg.js'); }); });
47488
+ var ColorPickerField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "ColorPickerField" */ './fthry_index.C7ja1s3P.js'); }); });
47489
+ var CustomField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "CustomField" */ './fthry_index.Dl8zGsAp.js'); }); });
47353
47490
  var DateSelectorField = React.lazy(function () {
47354
- return Promise.resolve().then(function () { return require(/* webpackChunkName: "DateSelectorField" */ './fthry_index.CF_5aTpr.js'); });
47491
+ return Promise.resolve().then(function () { return require(/* webpackChunkName: "DateSelectorField" */ './fthry_index.BoacvsbM.js'); });
47355
47492
  });
47356
- var DropdownField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "DropdownField" */ './fthry_index.Dnzf38f1.js'); }); });
47493
+ var DropdownField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "DropdownField" */ './fthry_index.dpVLfqGZ.js'); }); });
47357
47494
  var DropdownMultiField = React.lazy(function () {
47358
- return Promise.resolve().then(function () { return require(/* webpackChunkName: "DropdownMultiField" */ './fthry_index.DuuOe7wg.js'); });
47495
+ return Promise.resolve().then(function () { return require(/* webpackChunkName: "DropdownMultiField" */ './fthry_index.D9UgyAK0.js'); });
47359
47496
  });
47360
- var FileUploadField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "FileUploadField" */ './fthry_index.CCemnwsu.js'); }); });
47361
- var MatrixField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "MatrixField" */ './fthry_index.BAvCMZms.js'); }); });
47362
- var PasswordField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PasswordField" */ './fthry_index.D0u2xH_C.js'); }); });
47497
+ var FileUploadField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "FileUploadField" */ './fthry_index.2sunYeoj.js'); }); });
47498
+ var MatrixField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "MatrixField" */ './fthry_index.BJT2EG9q.js'); }); });
47499
+ var PasswordField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PasswordField" */ './fthry_index.BqZlc7T3.js'); }); });
47363
47500
  var PaymentMethodField = React.lazy(function () {
47364
- return Promise.resolve().then(function () { return require(/* webpackChunkName: "PaymentMethodField" */ './fthry_PaymentMethodField.B8o3hJZc.js'); });
47501
+ return Promise.resolve().then(function () { return require(/* webpackChunkName: "PaymentMethodField" */ './fthry_PaymentMethodField.D05feokK.js'); });
47365
47502
  });
47366
- var PhoneField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PhoneField" */ './fthry_index.CyFPPgis.js'); }); });
47367
- var PinInputField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PinInputField" */ './fthry_index.BM5SEWS3.js'); }); });
47368
- var QRScanner = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "QRScanner" */ './fthry_index.CAPznQPm.js'); }); });
47503
+ var PhoneField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PhoneField" */ './fthry_index.DBJtTx9s.js'); }); });
47504
+ var PinInputField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "PinInputField" */ './fthry_index.DiSY7Ac7.js'); }); });
47505
+ var QRScanner = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "QRScanner" */ './fthry_index.CofrHdeg.js'); }); });
47369
47506
  var RadioButtonGroupField = React.lazy(function () {
47370
47507
  return Promise.resolve().then(function () { return require(
47371
- /* webpackChunkName: "RadioButtonGroupField" */ './fthry_index.CVRwl5e8.js'); });
47508
+ /* webpackChunkName: "RadioButtonGroupField" */ './fthry_index.BO3AY9qR.js'); });
47372
47509
  });
47373
- var RatingField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "RatingField" */ './fthry_index.BPhGm93v.js'); }); });
47374
- var SignatureField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "SignatureField" */ './fthry_index.M9hqHrBw.js'); }); });
47375
- var SliderField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "SliderField" */ './fthry_index.C7wFi7y1.js'); }); });
47376
- var TextField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TextField" */ './fthry_index.BsK-G-o1.js'); }); });
47377
- var TextArea = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TextArea" */ './fthry_index.oBstjM0Y.js'); }); });
47510
+ var RatingField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "RatingField" */ './fthry_index.B7fwm2Qq.js'); }); });
47511
+ var SignatureField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "SignatureField" */ './fthry_index.BNdR1Zvy.js'); }); });
47512
+ var SliderField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "SliderField" */ './fthry_index.Cy80QFQZ.js'); }); });
47513
+ var TextField = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TextField" */ './fthry_index.C-ANSPxY.js'); }); });
47514
+ var TextArea = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TextArea" */ './fthry_index.DjWVnEr6.js'); }); });
47378
47515
  var Fields = {
47379
47516
  AddressLine1: AddressLine1,
47380
47517
  ButtonGroupField: ButtonGroupField,
@@ -48314,7 +48451,7 @@ function ElementSkeleton(_a) {
48314
48451
  }
48315
48452
  var templateObject_1;
48316
48453
 
48317
- var TableElement = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TableElement" */ './fthry_index.p7Cu-nM0.js'); }); });
48454
+ var TableElement = React.lazy(function () { return Promise.resolve().then(function () { return require(/* webpackChunkName: "TableElement" */ './fthry_index.avrbgACA.js'); }); });
48318
48455
  var Basic = {
48319
48456
  ImageElement: ImageElement,
48320
48457
  VideoElement: VideoElement,
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var index = require('./fthry_index.CPO_3E6l.js');
4
+ var index = require('./fthry_index.6gJGxnEh.js');
5
5
 
6
6
  /** Checks if value is string */
7
7
  function isString(str) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./fthry_index.DbmqQgFK.js');
3
+ var index = require('./fthry_index.lrVIrRLc.js');
4
4
 
5
5
  function _mergeNamespaces(n, m) {
6
6
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var index = require('./fthry_index.DbmqQgFK.js');
4
+ var index = require('./fthry_index.lrVIrRLc.js');
5
5
  var ReactDOM = require('react-dom');
6
6
 
7
7
  function _interopNamespaceDefault(e) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./fthry_index.DbmqQgFK.js');
3
+ var index = require('./fthry_index.lrVIrRLc.js');
4
4
  var React = require('react');
5
5
 
6
6
  function useElementSize(anchorRef) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./fthry_index.DbmqQgFK.js');
3
+ var index = require('./fthry_index.lrVIrRLc.js');
4
4
  var React = require('react');
5
5
 
6
6
  function useSalesforceSync(salesforceSync, editMode) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./fthry_index.DbmqQgFK.js');
3
+ var index = require('./fthry_index.lrVIrRLc.js');
4
4
 
5
5
  function _mergeNamespaces(n, m) {
6
6
  m.forEach(function (e) {
package/cjs/index.d.ts CHANGED
@@ -91,6 +91,12 @@ declare function renderAt(elementId: any, props: FormProps, loginEnabled?: boole
91
91
  payload?: undefined;
92
92
  }>;
93
93
  setCollaboratorAsCompleted: (templateId: string) => Promise<any>;
94
+ dataHubAction: ({ hubId, operation, entryId, data }: {
95
+ hubId: string;
96
+ operation: "get" | "create" | "update" | "delete";
97
+ entryId?: string | undefined;
98
+ data?: Record<string, any> | undefined;
99
+ }) => Promise<any>;
94
100
  generateDocuments: ({ documentIds, download, merge }: {
95
101
  documentIds: string[];
96
102
  download?: boolean | undefined;