blixify-ui-web 1.2.103 → 1.2.105

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 (31) hide show
  1. package/lib/components/advanced/popUp/index.d.ts +4 -0
  2. package/lib/components/advanced/popUp/index.d.ts.map +1 -1
  3. package/lib/components/advanced/popUp/index.js +36 -2
  4. package/lib/components/advanced/popUp/index.js.map +1 -1
  5. package/lib/components/auth/bareSignUp/index.d.ts +3 -0
  6. package/lib/components/auth/bareSignUp/index.d.ts.map +1 -1
  7. package/lib/components/auth/bareSignUp/index.js +22 -3
  8. package/lib/components/auth/bareSignUp/index.js.map +1 -1
  9. package/lib/components/auth/signUp/index.d.ts +2 -0
  10. package/lib/components/auth/signUp/index.d.ts.map +1 -1
  11. package/lib/components/auth/signUp/index.js +1 -1
  12. package/lib/components/auth/signUp/index.js.map +1 -1
  13. package/lib/components/data/dataTemplate/index.d.ts.map +1 -1
  14. package/lib/components/data/dataTemplate/index.js +157 -141
  15. package/lib/components/data/dataTemplate/index.js.map +1 -1
  16. package/lib/components/data/dataTemplate/permissions.d.ts +9 -6
  17. package/lib/components/data/dataTemplate/permissions.d.ts.map +1 -1
  18. package/lib/components/data/dataTemplate/permissions.js +9 -6
  19. package/lib/components/data/dataTemplate/permissions.js.map +1 -1
  20. package/lib/components/input/markdown/index.d.ts.map +1 -1
  21. package/lib/components/input/markdown/index.js +4 -0
  22. package/lib/components/input/markdown/index.js.map +1 -1
  23. package/lib/components/input/uploadInput/index.d.ts +5 -2
  24. package/lib/components/input/uploadInput/index.d.ts.map +1 -1
  25. package/lib/components/input/uploadInput/index.js +51 -49
  26. package/lib/components/input/uploadInput/index.js.map +1 -1
  27. package/lib/components/navigation/leftNav/index.d.ts.map +1 -1
  28. package/lib/components/navigation/leftNav/index.js +3 -2
  29. package/lib/components/navigation/leftNav/index.js.map +1 -1
  30. package/lib/tail.css +2 -2
  31. package/package.json +1 -1
@@ -620,7 +620,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
620
620
  setPersistedSort(value);
621
621
  (_b = (_a = props.organise) === null || _a === void 0 ? void 0 : _a.onChangeSort) === null || _b === void 0 ? void 0 : _b.call(_a, value);
622
622
  };
623
- var _180 = (0, permissions_1.handleResolveDataTemplateWritePermissions)(props.edit), canUpdateRecord = _180.canUpdateRecord, canInlineUpdate = _180.canInlineUpdate, canSubmitUpdate = _180.canSubmitUpdate, canBatchUpdate = _180.canBatchUpdate, canDeleteRecord = _180.canDeleteRecord;
623
+ var _180 = (0, permissions_1.handleResolveDataTemplateWritePermissions)(props.edit), canUpdateRecord = _180.canUpdateRecord, canInlineUpdate = _180.canInlineUpdate, canBatchUpdate = _180.canBatchUpdate, canDeleteRecord = _180.canDeleteRecord;
624
624
  var isEditor = ((_12 = props.edit) === null || _12 === void 0 ? void 0 : _12.allEditable) ? true : false;
625
625
  var isOffline = (_13 = props.bareSettings) === null || _13 === void 0 ? void 0 : _13.bareOffline;
626
626
  // INFO: when bareOfflineNetworkAware is true, the save path is also gated on
@@ -4369,12 +4369,6 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
4369
4369
  selectedId = offlineId;
4370
4370
  id = offlineId;
4371
4371
  }
4372
- // INFO: an explicit list update is a reader-reachable write — an inline
4373
- // cell or a dragged card — so it must carry the permission that drew that
4374
- // control. A form or offline submit is the consumer's own call and is not
4375
- // gated here; the consumer decides whether to render a write form at all.
4376
- if (type === "update" && !canSubmitUpdate)
4377
- return [2 /*return*/, ""];
4378
4372
  if (!(isOffline &&
4379
4373
  !(isOfflineNetworkListener && !isNetworkOffline) &&
4380
4374
  !offlineId)) return [3 /*break*/, 2];
@@ -4887,10 +4881,9 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
4887
4881
  }); };
4888
4882
  var handleSubmit = function (isDraft) { return __awaiter(void 0, void 0, void 0, function () {
4889
4883
  var preComplete, res, updatedMarkdownData_1, uploadedData_2, uploadTypes_1, err_23;
4890
- var _a;
4891
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
4892
- return __generator(this, function (_p) {
4893
- switch (_p.label) {
4884
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
4885
+ return __generator(this, function (_m) {
4886
+ switch (_m.label) {
4894
4887
  case 0:
4895
4888
  // INFO: re-entry guard — if a submit is already in-flight (double-click,
4896
4889
  // rapid Enter keypresses, or concurrent bareSaveOnTabChange calls), return
@@ -4899,134 +4892,134 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
4899
4892
  if (isSubmittingRef.current)
4900
4893
  return [2 /*return*/];
4901
4894
  isSubmittingRef.current = true;
4902
- _p.label = 1;
4895
+ _m.label = 1;
4903
4896
  case 1:
4904
- _p.trys.push([1, 10, , 11]);
4897
+ _m.trys.push([1, 8, , 9]);
4905
4898
  setLoading(true);
4906
4899
  setModalVisible(true);
4907
4900
  preComplete = true;
4908
- if (!((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareUpdateHandlePreComplete)) return [3 /*break*/, 3];
4901
+ if (!((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareUpdateHandlePreComplete)) return [3 /*break*/, 3];
4909
4902
  return [4 /*yield*/, props.bareSettings.bareUpdateHandlePreComplete(selectedData)];
4910
4903
  case 2:
4911
4904
  preComplete =
4912
- _p.sent();
4913
- _p.label = 3;
4905
+ _m.sent();
4906
+ _m.label = 3;
4914
4907
  case 3:
4915
4908
  if (!preComplete)
4916
4909
  throw "Error";
4917
- if (!((_c = props.bareSettings) === null || _c === void 0 ? void 0 : _c.bareUpdateHandleComplete)) return [3 /*break*/, 5];
4910
+ if (!((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareUpdateHandleComplete)) return [3 /*break*/, 5];
4918
4911
  return [4 /*yield*/, props.bareSettings.bareUpdateHandleComplete(selectedData)];
4919
4912
  case 4:
4920
- _p.sent();
4921
- return [3 /*break*/, 9];
4913
+ _m.sent();
4914
+ return [3 /*break*/, 7];
4922
4915
  case 5: return [4 /*yield*/, handleSubmitData(undefined, undefined, undefined, undefined, undefined, undefined, isDraft)];
4923
4916
  case 6:
4924
- res = _p.sent();
4925
- if (!res) return [3 /*break*/, 9];
4926
- if (!(((_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareUpdateHandlePostComplete) && !isOffline)) return [3 /*break*/, 8];
4927
- return [4 /*yield*/, props.bareSettings.bareUpdateHandlePostComplete(__assign((_a = {}, _a[serverId] = res, _a), selectedData))];
4928
- case 7:
4929
- _p.sent();
4930
- _p.label = 8;
4931
- case 8:
4932
- handleCheckOfflineDataLength();
4933
- if (isDraft) {
4934
- // INFO: advance the baseline after a successful draft save so that
4935
- // subsequent saves only diff against what was just persisted.
4936
- // Without this, listObject edits saved in a previous draft would be
4937
- // re-sent on every subsequent save (harmless but wasteful), and the
4938
- // "skip write if nothing changed" short-circuit would never trigger.
4939
- if ((_e = props.bareSettings) === null || _e === void 0 ? void 0 : _e.bareUpsertPartialUpdate) {
4940
- loadedSelectedData.current = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
4941
- // INFO: Reset dirty tracking after successful save — the new baseline
4942
- // is the saved state, so all fields start "clean" again.
4943
- dirtyFieldsRef.current.clear();
4944
- }
4945
- updatedMarkdownData_1 = {};
4946
- structure.forEach(function (eachAttribute) {
4947
- var _a, _b;
4948
- if (eachAttribute.type === "markdown") {
4949
- var originalIndex = structure.findIndex(function (m) { return m.id === eachAttribute.id; });
4950
- var refIndex = (_a = eachAttribute.refIndex) !== null && _a !== void 0 ? _a : originalIndex;
4951
- var ref_1 = modalFormInputRefs[refIndex];
4952
- if ((_b = ref_1 === null || ref_1 === void 0 ? void 0 : ref_1.current) === null || _b === void 0 ? void 0 : _b.getMarkdown) {
4953
- updatedMarkdownData_1[eachAttribute.id] =
4954
- ref_1.current.getMarkdown();
4955
- }
4917
+ res = _m.sent();
4918
+ if (res) {
4919
+ // INFO: bareUpdateHandlePostComplete is deliberately not called here.
4920
+ // handleSubmitData already calls it once, right after the write, with
4921
+ // the processed record and only when the write reached the server.
4922
+ // A second call here ran every consumer side effect (emails, Drive
4923
+ // uploads, PDF generation) twice per save.
4924
+ handleCheckOfflineDataLength();
4925
+ if (isDraft) {
4926
+ // INFO: advance the baseline after a successful draft save so that
4927
+ // subsequent saves only diff against what was just persisted.
4928
+ // Without this, listObject edits saved in a previous draft would be
4929
+ // re-sent on every subsequent save (harmless but wasteful), and the
4930
+ // "skip write if nothing changed" short-circuit would never trigger.
4931
+ if ((_c = props.bareSettings) === null || _c === void 0 ? void 0 : _c.bareUpsertPartialUpdate) {
4932
+ loadedSelectedData.current = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
4933
+ // INFO: Reset dirty tracking after successful save — the new baseline
4934
+ // is the saved state, so all fields start "clean" again.
4935
+ dirtyFieldsRef.current.clear();
4956
4936
  }
4957
- });
4958
- uploadedData_2 = lastUploadedDataRef.current;
4959
- if (uploadedData_2) {
4960
- uploadTypes_1 = [
4961
- "image",
4962
- "file",
4963
- "multipleImage",
4964
- "multipleFile",
4965
- "canvas",
4966
- ];
4937
+ updatedMarkdownData_1 = {};
4967
4938
  structure.forEach(function (eachAttribute) {
4968
- if (uploadTypes_1.includes(eachAttribute.type)) {
4969
- if (eachAttribute.type === "canvas" &&
4970
- !eachAttribute.enableImageUpload)
4971
- return;
4972
- if (uploadedData_2[eachAttribute.id] !== undefined) {
4939
+ var _a, _b;
4940
+ if (eachAttribute.type === "markdown") {
4941
+ var originalIndex = structure.findIndex(function (m) { return m.id === eachAttribute.id; });
4942
+ var refIndex = (_a = eachAttribute.refIndex) !== null && _a !== void 0 ? _a : originalIndex;
4943
+ var ref_1 = modalFormInputRefs[refIndex];
4944
+ if ((_b = ref_1 === null || ref_1 === void 0 ? void 0 : ref_1.current) === null || _b === void 0 ? void 0 : _b.getMarkdown) {
4973
4945
  updatedMarkdownData_1[eachAttribute.id] =
4974
- uploadedData_2[eachAttribute.id];
4946
+ ref_1.current.getMarkdown();
4975
4947
  }
4976
4948
  }
4977
4949
  });
4978
- }
4979
- if (Object.keys(updatedMarkdownData_1).length > 0) {
4980
- // INFO: Post-save markdown/upload data sync is programmatic, not user-driven
4981
- programmaticUpdateRef.current = true;
4982
- setSelectedData(function (prev) { return (__assign(__assign({}, prev), updatedMarkdownData_1)); });
4983
- }
4984
- if (props.id === "new" || !props.id) {
4985
- (_g = (_f = props.organise) === null || _f === void 0 ? void 0 : _f.handleNavigate) === null || _g === void 0 ? void 0 : _g.call(_f, "update", res, (_h = selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.id) !== null && _h !== void 0 ? _h : "general");
4986
- }
4987
- if (silentDraftRef.current) {
4988
- silentDraftRef.current = false;
4989
- }
4990
- else {
4991
- setNotification({
4992
- type: true,
4993
- title: "Draft Saved",
4994
- msg: "Your changes have been saved",
4995
- });
4996
- }
4997
- }
4998
- else {
4999
- // INFO: Non-draft (final submit) — reset dirty tracking and rebase baseline.
5000
- // Usually the component navigates away, but in case it doesn't (e.g. custom onComplete
5001
- // that stays on the same page), ensure clean state for subsequent interactions.
5002
- if ((_j = props.bareSettings) === null || _j === void 0 ? void 0 : _j.bareUpsertPartialUpdate) {
5003
- loadedSelectedData.current = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
5004
- dirtyFieldsRef.current.clear();
5005
- }
5006
- if (props.onComplete) {
5007
- props.onComplete(res);
4950
+ uploadedData_2 = lastUploadedDataRef.current;
4951
+ if (uploadedData_2) {
4952
+ uploadTypes_1 = [
4953
+ "image",
4954
+ "file",
4955
+ "multipleImage",
4956
+ "multipleFile",
4957
+ "canvas",
4958
+ ];
4959
+ structure.forEach(function (eachAttribute) {
4960
+ if (uploadTypes_1.includes(eachAttribute.type)) {
4961
+ if (eachAttribute.type === "canvas" &&
4962
+ !eachAttribute.enableImageUpload)
4963
+ return;
4964
+ if (uploadedData_2[eachAttribute.id] !== undefined) {
4965
+ updatedMarkdownData_1[eachAttribute.id] =
4966
+ uploadedData_2[eachAttribute.id];
4967
+ }
4968
+ }
4969
+ });
4970
+ }
4971
+ if (Object.keys(updatedMarkdownData_1).length > 0) {
4972
+ // INFO: Post-save markdown/upload data sync is programmatic, not user-driven
4973
+ programmaticUpdateRef.current = true;
4974
+ setSelectedData(function (prev) { return (__assign(__assign({}, prev), updatedMarkdownData_1)); });
4975
+ }
4976
+ if (props.id === "new" || !props.id) {
4977
+ (_e = (_d = props.organise) === null || _d === void 0 ? void 0 : _d.handleNavigate) === null || _e === void 0 ? void 0 : _e.call(_d, "update", res, (_f = selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.id) !== null && _f !== void 0 ? _f : "general");
4978
+ }
4979
+ if (silentDraftRef.current) {
4980
+ silentDraftRef.current = false;
4981
+ }
4982
+ else {
4983
+ setNotification({
4984
+ type: true,
4985
+ title: "Draft Saved",
4986
+ msg: "Your changes have been saved",
4987
+ });
4988
+ }
5008
4989
  }
5009
4990
  else {
5010
- if (selectedTab) {
5011
- (_l = (_k = props.organise) === null || _k === void 0 ? void 0 : _k.handleNavigate) === null || _l === void 0 ? void 0 : _l.call(_k, "read", res, selectedTab.id);
4991
+ // INFO: Non-draft (final submit) — reset dirty tracking and rebase baseline.
4992
+ // Usually the component navigates away, but in case it doesn't (e.g. custom onComplete
4993
+ // that stays on the same page), ensure clean state for subsequent interactions.
4994
+ if ((_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareUpsertPartialUpdate) {
4995
+ loadedSelectedData.current = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
4996
+ dirtyFieldsRef.current.clear();
4997
+ }
4998
+ if (props.onComplete) {
4999
+ props.onComplete(res);
5000
+ }
5001
+ else {
5002
+ if (selectedTab) {
5003
+ (_j = (_h = props.organise) === null || _h === void 0 ? void 0 : _h.handleNavigate) === null || _j === void 0 ? void 0 : _j.call(_h, "read", res, selectedTab.id);
5004
+ }
5005
+ else
5006
+ (_l = (_k = props.organise) === null || _k === void 0 ? void 0 : _k.handleNavigate) === null || _l === void 0 ? void 0 : _l.call(_k, "read", res, "general");
5012
5007
  }
5013
- else
5014
- (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.handleNavigate) === null || _o === void 0 ? void 0 : _o.call(_m, "read", res, "general");
5015
5008
  }
5016
5009
  }
5017
- _p.label = 9;
5018
- case 9:
5010
+ _m.label = 7;
5011
+ case 7:
5019
5012
  setModalVisible(false);
5020
5013
  setLoading(false);
5021
5014
  isSubmittingRef.current = false;
5022
- return [3 /*break*/, 11];
5023
- case 10:
5024
- err_23 = _p.sent();
5015
+ return [3 /*break*/, 9];
5016
+ case 8:
5017
+ err_23 = _m.sent();
5025
5018
  setModalVisible(false);
5026
5019
  setLoading(false);
5027
5020
  isSubmittingRef.current = false;
5028
- return [3 /*break*/, 11];
5029
- case 11: return [2 /*return*/];
5021
+ return [3 /*break*/, 9];
5022
+ case 9: return [2 /*return*/];
5030
5023
  }
5031
5024
  });
5032
5025
  }); };
@@ -7207,7 +7200,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7207
7200
  })) })) }));
7208
7201
  };
7209
7202
  var renderContent = function () {
7210
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46;
7203
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44;
7211
7204
  var isBottom = ((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareUpdateActionBottom) ? true : false;
7212
7205
  var tabs = renderTabs();
7213
7206
  var pages = [
@@ -7490,28 +7483,40 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7490
7483
  renderDataTemplateFormContent(selectedData, filterByTab, modalFormInputRefs, false, false, undefined, undefined)));
7491
7484
  }),
7492
7485
  !((_15 = props.bareSettings) === null || _15 === void 0 ? void 0 : _15.bareUpdateComponentAbove) &&
7493
- ((_16 = props.bareSettings) === null || _16 === void 0 ? void 0 : _16.bareUpdateComponent) &&
7494
- ((_17 = props.bareSettings) === null || _17 === void 0 ? void 0 : _17.bareUpdateComponent(selectedData))),
7486
+ ((_16 = props.bareSettings) === null || _16 === void 0 ? void 0 : _16.bareUpdateComponent) && (
7487
+ // INFO: the form is a grid-cols-12. A child with no column span is one
7488
+ // column, and a grid item cannot shrink below its longest word, so on a
7489
+ // phone it wraps one word per line. `contents` takes this wrapper out of
7490
+ // the grid, so a consumer's own col-span, a fragment of several cells,
7491
+ // or a null return all lay out exactly as before; only children with no
7492
+ // col-span of their own are given the full row.
7493
+ react_1.default.createElement("div", { className: "contents [&>*:not([class*=col-span])]:col-span-12" }, props.bareSettings.bareUpdateComponent(selectedData)))),
7495
7494
  react_1.default.createElement("div", { className: "mt-8" }, renderListAddress(resolvedType)),
7496
7495
  react_1.default.createElement("div", { className: "mt-8" }, renderListObject(resolvedType)),
7497
- !((_18 = props.bareSettings) === null || _18 === void 0 ? void 0 : _18.bareUpdateActionTop) &&
7496
+ !((_17 = props.bareSettings) === null || _17 === void 0 ? void 0 : _17.bareUpdateActionTop) &&
7498
7497
  renderStepBar(uniqueTabIds_2),
7499
7498
  isBottom &&
7500
7499
  resolvedType !== "update" &&
7501
7500
  renderActionButtons(resolvedType, hasTabAlign_1, uniqueTabIds_2)))) : (react_1.default.createElement("div", null,
7502
- ((_19 = props.bareSettings) === null || _19 === void 0 ? void 0 : _19.bareUpdateComponentAbove) &&
7503
- ((_20 = props.bareSettings) === null || _20 === void 0 ? void 0 : _20.bareUpdateComponent) &&
7504
- ((_21 = props.bareSettings) === null || _21 === void 0 ? void 0 : _21.bareUpdateComponent(selectedData)),
7505
- ((_22 = props.bareSettings) === null || _22 === void 0 ? void 0 : _22.bareUpdateActionTop) &&
7501
+ ((_18 = props.bareSettings) === null || _18 === void 0 ? void 0 : _18.bareUpdateComponentAbove) &&
7502
+ ((_19 = props.bareSettings) === null || _19 === void 0 ? void 0 : _19.bareUpdateComponent) &&
7503
+ ((_20 = props.bareSettings) === null || _20 === void 0 ? void 0 : _20.bareUpdateComponent(selectedData)),
7504
+ ((_21 = props.bareSettings) === null || _21 === void 0 ? void 0 : _21.bareUpdateActionTop) &&
7506
7505
  renderStepBar(uniqueTabIds_2),
7507
7506
  react_1.default.createElement(form_1.Form, { className: "grid ".concat(formColumn, " ").concat(gridGap, " mt-6"), ref: formRef, refList: __spreadArray(__spreadArray([], modalFormInputRefs, true), flexTableRefs, true), handleComplete: handleSubmit, disabledOnEnter: disabledOnEnter_1, handleOnFailValidation: handleOnFailValidation },
7508
7507
  renderDataTemplateFormContent(selectedData, filterModel_1, modalFormInputRefs, false, false),
7509
- !((_23 = props.bareSettings) === null || _23 === void 0 ? void 0 : _23.bareUpdateComponentAbove) &&
7510
- ((_24 = props.bareSettings) === null || _24 === void 0 ? void 0 : _24.bareUpdateComponent) &&
7511
- ((_25 = props.bareSettings) === null || _25 === void 0 ? void 0 : _25.bareUpdateComponent(selectedData))),
7508
+ !((_22 = props.bareSettings) === null || _22 === void 0 ? void 0 : _22.bareUpdateComponentAbove) &&
7509
+ ((_23 = props.bareSettings) === null || _23 === void 0 ? void 0 : _23.bareUpdateComponent) && (
7510
+ // INFO: the form is a grid-cols-12. A child with no column span is one
7511
+ // column, and a grid item cannot shrink below its longest word, so on a
7512
+ // phone it wraps one word per line. `contents` takes this wrapper out of
7513
+ // the grid, so a consumer's own col-span, a fragment of several cells,
7514
+ // or a null return all lay out exactly as before; only children with no
7515
+ // col-span of their own are given the full row.
7516
+ react_1.default.createElement("div", { className: "contents [&>*:not([class*=col-span])]:col-span-12" }, props.bareSettings.bareUpdateComponent(selectedData)))),
7512
7517
  react_1.default.createElement("div", { className: "mt-8" }, renderListAddress(resolvedType)),
7513
7518
  react_1.default.createElement("div", { className: "mt-8" }, renderListObject(resolvedType)),
7514
- !((_26 = props.bareSettings) === null || _26 === void 0 ? void 0 : _26.bareUpdateActionTop) &&
7519
+ !((_24 = props.bareSettings) === null || _24 === void 0 ? void 0 : _24.bareUpdateActionTop) &&
7515
7520
  renderStepBar(uniqueTabIds_2)))));
7516
7521
  case "list":
7517
7522
  case "union":
@@ -7520,20 +7525,20 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7520
7525
  var actionComponent = renderActionButtons(resolvedType);
7521
7526
  // INFO: active flex filter count for the icon badge + floating search.
7522
7527
  // Counts query output so the badge matches what's actually filtered.
7523
- var activeFlexFilterCount_1 = ((_27 = props.bareSettings) === null || _27 === void 0 ? void 0 : _27.bareFlexFilters)
7528
+ var activeFlexFilterCount_1 = ((_25 = props.bareSettings) === null || _25 === void 0 ? void 0 : _25.bareFlexFilters)
7524
7529
  ? (0, listModule_1.renderFlexFilterConditions)(flexFilters, structure).length
7525
7530
  : 0;
7526
7531
  var listReadQueryHOC = (react_1.default.createElement(readQueryHoc_1.ReadQueryHoc, { ref: listRQueryHocRef, database: {
7527
7532
  dbModule: dbModule,
7528
7533
  dbType: devSettings.server,
7529
- dbCollection: (_29 = (_28 = props === null || props === void 0 ? void 0 : props.space) === null || _28 === void 0 ? void 0 : _28.pipelineDefaultSpaceId) !== null && _29 !== void 0 ? _29 : props.collectionId,
7534
+ dbCollection: (_27 = (_26 = props === null || props === void 0 ? void 0 : props.space) === null || _26 === void 0 ? void 0 : _26.pipelineDefaultSpaceId) !== null && _27 !== void 0 ? _27 : props.collectionId,
7530
7535
  dbEndpoint: devSettings.dbEndpoint,
7531
7536
  dbAPIToken: devSettings.dbAPIToken,
7532
7537
  dbUserToken: devSettings.dbUserToken,
7533
- }, cond: handleReadQueryHocCond(), offline: ((_30 = props.bareSettings) === null || _30 === void 0 ? void 0 : _30.bareOffline) && isNetworkOffline, onChangeData: function (data) {
7538
+ }, cond: handleReadQueryHocCond(), offline: ((_28 = props.bareSettings) === null || _28 === void 0 ? void 0 : _28.bareOffline) && isNetworkOffline, onChangeData: function (data) {
7534
7539
  handleGetListData(data, "", "");
7535
7540
  }, onError: handleGetItemError }));
7536
- if ((_31 = props.renderSettings) === null || _31 === void 0 ? void 0 : _31.renderListUI) {
7541
+ if ((_29 = props.renderSettings) === null || _29 === void 0 ? void 0 : _29.renderListUI) {
7537
7542
  return (react_1.default.createElement(react_1.default.Fragment, null,
7538
7543
  listReadQueryHOC,
7539
7544
  props.renderSettings.renderListUI(actionComponent, filterComponent_1, dataComponent)));
@@ -7742,47 +7747,47 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7742
7747
  };
7743
7748
  return (react_1.default.createElement(react_1.default.Fragment, null,
7744
7749
  listReadQueryHOC,
7745
- react_1.default.createElement("div", { className: "flex py-2 ".concat(((_32 = props.bareSettings) === null || _32 === void 0 ? void 0 : _32.bareCompactMode)
7750
+ react_1.default.createElement("div", { className: "flex py-2 ".concat(((_30 = props.bareSettings) === null || _30 === void 0 ? void 0 : _30.bareCompactMode)
7746
7751
  ? // INFO: the grow spacer is hidden on phones (search lives in
7747
7752
  // the floating bar), so the row itself pushes the actions right
7748
7753
  "w-full flex-row flex-wrap sm:flex-nowrap items-end justify-between sm:justify-start"
7749
7754
  : "flex-col md:items-end md:flex-row") },
7750
7755
  (props.title || props.description) && (react_1.default.createElement("div", { className: "flex flex-col" },
7751
7756
  props.title && (react_1.default.createElement("div", { className: "flex items-center gap-2" },
7752
- react_1.default.createElement("p", { className: "text-xl font-medium ".concat(((_33 = props.organise) === null || _33 === void 0 ? void 0 : _33.darkMode) ? "text-white" : "") }, props.title),
7753
- ((_34 = props.bareSettings) === null || _34 === void 0 ? void 0 : _34.bareSocketName) &&
7757
+ react_1.default.createElement("p", { className: "text-xl font-medium ".concat(((_31 = props.organise) === null || _31 === void 0 ? void 0 : _31.darkMode) ? "text-white" : "") }, props.title),
7758
+ ((_32 = props.bareSettings) === null || _32 === void 0 ? void 0 : _32.bareSocketName) &&
7754
7759
  isLive &&
7755
7760
  !isLiveOffline && (react_1.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700" },
7756
7761
  react_1.default.createElement("span", { className: "h-1.5 w-1.5 rounded-full bg-green-500" }),
7757
7762
  "LIVE")),
7758
- ((_35 = props.bareSettings) === null || _35 === void 0 ? void 0 : _35.bareSocketName) && isLiveOffline && (react_1.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-medium text-orange-700" },
7763
+ ((_33 = props.bareSettings) === null || _33 === void 0 ? void 0 : _33.bareSocketName) && isLiveOffline && (react_1.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-medium text-orange-700" },
7759
7764
  react_1.default.createElement("span", { className: "h-1.5 w-1.5 rounded-full bg-orange-400" }),
7760
7765
  "OFFLINE")))),
7761
7766
  props.description && (react_1.default.createElement("span", { className: "text-sm text-gray-500" }, props.description)))),
7762
- react_1.default.createElement("div", { className: ((_36 = props.bareSettings) === null || _36 === void 0 ? void 0 : _36.bareCompactMode)
7767
+ react_1.default.createElement("div", { className: ((_34 = props.bareSettings) === null || _34 === void 0 ? void 0 : _34.bareCompactMode)
7763
7768
  ? "hidden sm:block grow"
7764
7769
  : "grow" }),
7765
7770
  react_1.default.createElement("div", { className: "ml-auto flex flex-row items-end" },
7766
7771
  renderListFilterElements(),
7767
7772
  renderListActionElements())),
7768
7773
  renderListNewRowFilterElements(),
7769
- (schemaPresent || ((_37 = props.bareSettings) === null || _37 === void 0 ? void 0 : _37.bareReadListTabs)) && (react_1.default.createElement(tabs_1.Tabs, { tabs: tabs, selectedId: viewType, linkType: props.linkType, custom: props.custom, onClick: function (id) { return handleSelectTab(id); }, darkMode: (_38 = props.organise) === null || _38 === void 0 ? void 0 : _38.darkMode })),
7774
+ (schemaPresent || ((_35 = props.bareSettings) === null || _35 === void 0 ? void 0 : _35.bareReadListTabs)) && (react_1.default.createElement(tabs_1.Tabs, { tabs: tabs, selectedId: viewType, linkType: props.linkType, custom: props.custom, onClick: function (id) { return handleSelectTab(id); }, darkMode: (_36 = props.organise) === null || _36 === void 0 ? void 0 : _36.darkMode })),
7770
7775
  renderTabContent(tabs, resolvedType, viewType),
7771
- ((_39 = props.bareSettings) === null || _39 === void 0 ? void 0 : _39.bareListMobileFloatingSearch) && (react_1.default.createElement("div", { className: "h-28 md:hidden", "aria-hidden": "true" })),
7772
- ((_40 = props.bareSettings) === null || _40 === void 0 ? void 0 : _40.bareListMobileFloatingSearch) &&
7776
+ ((_37 = props.bareSettings) === null || _37 === void 0 ? void 0 : _37.bareListMobileFloatingSearch) && (react_1.default.createElement("div", { className: "h-28 md:hidden", "aria-hidden": "true" })),
7777
+ ((_38 = props.bareSettings) === null || _38 === void 0 ? void 0 : _38.bareListMobileFloatingSearch) &&
7773
7778
  (0, listModule_1.renderFloatingMobileSearch)({
7774
7779
  filterSearch: filterSearch,
7775
7780
  handleNameSearch: handleNameSearch,
7776
7781
  onFilterClick: function () { return setFlexFilterModalOpen(true); },
7777
- hideSearch: (_41 = props.organise) === null || _41 === void 0 ? void 0 : _41.hideSearch,
7778
- darkMode: (_42 = props.organise) === null || _42 === void 0 ? void 0 : _42.darkMode,
7779
- floatingOffset: (_43 = props.bareSettings) === null || _43 === void 0 ? void 0 : _43.bareListFloatingActionOffset,
7780
- hideFilter: !((_44 = props.bareSettings) === null || _44 === void 0 ? void 0 : _44.bareFlexFilters),
7781
- activeFilterCount: ((_45 = props.bareSettings) === null || _45 === void 0 ? void 0 : _45.bareFlexFilters)
7782
+ hideSearch: (_39 = props.organise) === null || _39 === void 0 ? void 0 : _39.hideSearch,
7783
+ darkMode: (_40 = props.organise) === null || _40 === void 0 ? void 0 : _40.darkMode,
7784
+ floatingOffset: (_41 = props.bareSettings) === null || _41 === void 0 ? void 0 : _41.bareListFloatingActionOffset,
7785
+ hideFilter: !((_42 = props.bareSettings) === null || _42 === void 0 ? void 0 : _42.bareFlexFilters),
7786
+ activeFilterCount: ((_43 = props.bareSettings) === null || _43 === void 0 ? void 0 : _43.bareFlexFilters)
7782
7787
  ? activeFlexFilterCount_1
7783
7788
  : undefined,
7784
7789
  // INFO: Hides when items are selected so NewTable's multi-action bar takes over.
7785
- hidden: selectAll || ((_46 = selectedIds === null || selectedIds === void 0 ? void 0 : selectedIds.length) !== null && _46 !== void 0 ? _46 : 0) > 0,
7790
+ hidden: selectAll || ((_44 = selectedIds === null || selectedIds === void 0 ? void 0 : selectedIds.length) !== null && _44 !== void 0 ? _44 : 0) > 0,
7786
7791
  })));
7787
7792
  default:
7788
7793
  return react_1.default.createElement(react_1.default.Fragment, null);
@@ -8349,7 +8354,12 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
8349
8354
  onUpdateData: function (rowId, columnId, data) { return __awaiter(void 0, void 0, void 0, function () {
8350
8355
  return __generator(this, function (_a) {
8351
8356
  switch (_a.label) {
8352
- case 0: return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8357
+ case 0:
8358
+ // INFO: an inline cell is reader reachable, so the write
8359
+ // is refused here as well as hidden by editable.active
8360
+ if (!canInlineUpdate)
8361
+ return [2 /*return*/];
8362
+ return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8353
8363
  case 1:
8354
8364
  _a.sent();
8355
8365
  return [2 /*return*/];
@@ -8485,7 +8495,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
8485
8495
  onUpdateData: function (rowId, columnId, data) { return __awaiter(void 0, void 0, void 0, function () {
8486
8496
  return __generator(this, function (_a) {
8487
8497
  switch (_a.label) {
8488
- case 0: return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8498
+ case 0:
8499
+ if (!canInlineUpdate)
8500
+ return [2 /*return*/];
8501
+ return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8489
8502
  case 1:
8490
8503
  _a.sent();
8491
8504
  return [2 /*return*/];
@@ -8575,7 +8588,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
8575
8588
  onUpdateData: function (rowId, columnId, data) { return __awaiter(void 0, void 0, void 0, function () {
8576
8589
  return __generator(this, function (_a) {
8577
8590
  switch (_a.label) {
8578
- case 0: return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8591
+ case 0:
8592
+ if (!canInlineUpdate)
8593
+ return [2 /*return*/];
8594
+ return [4 /*yield*/, handleSubmitData("update", rowId, columnId, data)];
8579
8595
  case 1:
8580
8596
  _a.sent();
8581
8597
  return [2 /*return*/];