@open-mercato/ui 0.6.6-develop.6465.1.019f0fb26f → 0.6.6-develop.6471.1.9ab5bdd79a

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 (81) hide show
  1. package/dist/ai/AiChat.js +3 -3
  2. package/dist/ai/AiChat.js.map +2 -2
  3. package/dist/backend/CrudForm.js +19 -17
  4. package/dist/backend/CrudForm.js.map +2 -2
  5. package/dist/backend/DataTable.js +5 -5
  6. package/dist/backend/DataTable.js.map +2 -2
  7. package/dist/backend/JsonDisplay.js +3 -1
  8. package/dist/backend/JsonDisplay.js.map +2 -2
  9. package/dist/backend/confirm-dialog/useConfirmDialog.js +3 -3
  10. package/dist/backend/confirm-dialog/useConfirmDialog.js.map +2 -2
  11. package/dist/backend/dashboard/DashboardScreen.js +8 -6
  12. package/dist/backend/dashboard/DashboardScreen.js.map +2 -2
  13. package/dist/backend/dashboard/widgetRegistry.js +3 -1
  14. package/dist/backend/dashboard/widgetRegistry.js.map +2 -2
  15. package/dist/backend/detail/CustomDataSection.js +4 -2
  16. package/dist/backend/detail/CustomDataSection.js.map +2 -2
  17. package/dist/backend/detail/InlineEditors.js +3 -1
  18. package/dist/backend/detail/InlineEditors.js.map +2 -2
  19. package/dist/backend/detail/TagsSection.js +3 -1
  20. package/dist/backend/detail/TagsSection.js.map +2 -2
  21. package/dist/backend/injection/InjectionSpot.js +10 -8
  22. package/dist/backend/injection/InjectionSpot.js.map +2 -2
  23. package/dist/backend/injection/eventBridge.js +3 -1
  24. package/dist/backend/injection/eventBridge.js.map +2 -2
  25. package/dist/backend/injection/useGuardedMutation.js +3 -1
  26. package/dist/backend/injection/useGuardedMutation.js.map +2 -2
  27. package/dist/backend/injection/useInjectionDataWidgets.js +3 -1
  28. package/dist/backend/injection/useInjectionDataWidgets.js.map +2 -2
  29. package/dist/backend/injection/useRegisteredComponent.js +6 -9
  30. package/dist/backend/injection/useRegisteredComponent.js.map +2 -2
  31. package/dist/backend/injection/widgetRegistry.js +3 -1
  32. package/dist/backend/injection/widgetRegistry.js.map +2 -2
  33. package/dist/backend/inputs/LookupSelect.js +3 -1
  34. package/dist/backend/inputs/LookupSelect.js.map +2 -2
  35. package/dist/backend/notifications/NotificationDispatcher.js +4 -2
  36. package/dist/backend/notifications/NotificationDispatcher.js.map +2 -2
  37. package/dist/backend/sidebar/SidebarCustomizationEditor.js +7 -5
  38. package/dist/backend/sidebar/SidebarCustomizationEditor.js.map +2 -2
  39. package/dist/backend/utils/api.js +3 -1
  40. package/dist/backend/utils/api.js.map +2 -2
  41. package/dist/backend/utils/bulkDelete.js +4 -2
  42. package/dist/backend/utils/bulkDelete.js.map +2 -2
  43. package/dist/backend/version-history/VersionHistoryPanel.js +4 -2
  44. package/dist/backend/version-history/VersionHistoryPanel.js.map +2 -2
  45. package/dist/portal/hooks/usePortalDashboardWidgets.js +3 -1
  46. package/dist/portal/hooks/usePortalDashboardWidgets.js.map +2 -2
  47. package/dist/portal/hooks/usePortalEventBridge.js +3 -1
  48. package/dist/portal/hooks/usePortalEventBridge.js.map +2 -2
  49. package/dist/primitives/Notice.js +3 -3
  50. package/dist/primitives/Notice.js.map +2 -2
  51. package/dist/theme/ThemeProvider.js +4 -2
  52. package/dist/theme/ThemeProvider.js.map +2 -2
  53. package/package.json +3 -3
  54. package/src/ai/AiChat.tsx +4 -4
  55. package/src/backend/CrudForm.tsx +20 -17
  56. package/src/backend/DataTable.tsx +6 -9
  57. package/src/backend/JsonDisplay.tsx +4 -1
  58. package/src/backend/__tests__/component-replacement.test.tsx +1 -1
  59. package/src/backend/confirm-dialog/useConfirmDialog.tsx +4 -3
  60. package/src/backend/dashboard/DashboardScreen.tsx +9 -6
  61. package/src/backend/dashboard/widgetRegistry.ts +4 -1
  62. package/src/backend/detail/CustomDataSection.tsx +5 -2
  63. package/src/backend/detail/InlineEditors.tsx +4 -1
  64. package/src/backend/detail/TagsSection.tsx +4 -1
  65. package/src/backend/injection/InjectionSpot.tsx +11 -8
  66. package/src/backend/injection/eventBridge.ts +4 -1
  67. package/src/backend/injection/useGuardedMutation.ts +4 -1
  68. package/src/backend/injection/useInjectionDataWidgets.ts +4 -1
  69. package/src/backend/injection/useRegisteredComponent.tsx +7 -9
  70. package/src/backend/injection/widgetRegistry.ts +4 -1
  71. package/src/backend/inputs/LookupSelect.tsx +4 -1
  72. package/src/backend/notifications/NotificationDispatcher.ts +5 -2
  73. package/src/backend/sidebar/SidebarCustomizationEditor.tsx +8 -5
  74. package/src/backend/utils/__tests__/bulkDelete.test.ts +29 -23
  75. package/src/backend/utils/api.ts +4 -2
  76. package/src/backend/utils/bulkDelete.ts +5 -2
  77. package/src/backend/version-history/VersionHistoryPanel.tsx +5 -2
  78. package/src/portal/hooks/usePortalDashboardWidgets.ts +4 -1
  79. package/src/portal/hooks/usePortalEventBridge.ts +4 -1
  80. package/src/primitives/Notice.tsx +4 -4
  81. package/src/theme/ThemeProvider.tsx +5 -2
@@ -91,6 +91,7 @@ import { dispatchBackendMutationError } from "./injection/mutationEvents.js";
91
91
  import { VersionHistoryAction } from "./version-history/VersionHistoryAction.js";
92
92
  import { parseBooleanWithDefault } from "@open-mercato/shared/lib/boolean";
93
93
  import { cn } from "@open-mercato/shared/lib/utils";
94
+ import { createLogger } from "@open-mercato/shared/lib/logger";
94
95
  import { useInjectionDataWidgets } from "./injection/useInjectionDataWidgets.js";
95
96
  import { CollapsibleGroup } from "./crud/CollapsibleGroup.js";
96
97
  import { SortableGroupHandleProvider } from "./crud/SortableGroupHandle.js";
@@ -101,6 +102,7 @@ import { evaluateInjectedVisibility } from "./injection/visibility-utils.js";
101
102
  import { ComponentReplacementHandles } from "@open-mercato/shared/modules/widgets/component-registry";
102
103
  import { RichEditor } from "../primitives/rich-editor.js";
103
104
  import MarkdownField from "./inputs/MarkdownField.js";
105
+ const logger = createLogger("ui").child({ component: "CrudForm" });
104
106
  const EMPTY_OPTIONS = [];
105
107
  const SELECT_CLEAR_SENTINEL = "__crudform_select_clear__";
106
108
  const FOCUSABLE_SELECTOR = '[data-crud-focus-target], input:not([type="hidden"]):not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
@@ -705,7 +707,7 @@ function CrudForm({
705
707
  Object.entries(transformed).map(([key, value]) => [key, String(value)])
706
708
  );
707
709
  } catch (err) {
708
- console.error("[CrudForm] Error in transformValidation:", err);
710
+ logger.error("Error in transformValidation", { err });
709
711
  return fieldErrors;
710
712
  }
711
713
  },
@@ -777,7 +779,7 @@ function CrudForm({
777
779
  void triggerInjectionEvent("onAppEvent", valuesRef.current, injectionContextRef.current, {
778
780
  appEvent: customEvent.detail
779
781
  }).catch((err) => {
780
- console.error("[CrudForm] Error in onAppEvent:", err);
782
+ logger.error("Error in onAppEvent", { err });
781
783
  });
782
784
  };
783
785
  window.addEventListener("om:event", handleEvent);
@@ -791,7 +793,7 @@ function CrudForm({
791
793
  void triggerInjectionEvent("onVisibilityChange", valuesRef.current, injectionContextRef.current, {
792
794
  visible: document.visibilityState === "visible"
793
795
  }).catch((err) => {
794
- console.error("[CrudForm] Error in onVisibilityChange:", err);
796
+ logger.error("Error in onVisibilityChange", { err });
795
797
  });
796
798
  };
797
799
  document.addEventListener("visibilitychange", emitVisibility);
@@ -899,7 +901,7 @@ function CrudForm({
899
901
  }
900
902
  injectionRequestHeaders = result.requestHeaders;
901
903
  } catch (err) {
902
- console.error("[CrudForm] Error in onBeforeDelete:", err);
904
+ logger.error("Error in onBeforeDelete", { err });
903
905
  flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
904
906
  return;
905
907
  }
@@ -909,7 +911,7 @@ function CrudForm({
909
911
  try {
910
912
  await triggerInjectionEvent("onDelete", deletePayload, injectionContext);
911
913
  } catch (err) {
912
- console.error("[CrudForm] Error in onDelete:", err);
914
+ logger.error("Error in onDelete", { err });
913
915
  flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
914
916
  return;
915
917
  }
@@ -930,7 +932,7 @@ function CrudForm({
930
932
  try {
931
933
  await triggerInjectionEvent("onAfterDelete", deletePayload, injectionContext);
932
934
  } catch (err) {
933
- console.error("[CrudForm] Error in onAfterDelete:", err);
935
+ logger.error("Error in onAfterDelete", { err });
934
936
  }
935
937
  }
936
938
  try {
@@ -945,7 +947,7 @@ function CrudForm({
945
947
  try {
946
948
  await triggerInjectionEvent("onDeleteError", deletePayload, injectionContext, { error: err });
947
949
  } catch (hookError) {
948
- console.error("[CrudForm] Error in onDeleteError:", hookError);
950
+ logger.error("Error in onDeleteError", { err: hookError });
949
951
  }
950
952
  }
951
953
  try {
@@ -1480,7 +1482,7 @@ function CrudForm({
1480
1482
  const targetIndex = cloned.findIndex((group) => group.id === definition.group);
1481
1483
  const index = targetIndex >= 0 ? targetIndex : fallbackIndex;
1482
1484
  if (targetIndex < 0 && process.env.NODE_ENV !== "production") {
1483
- console.warn(`[CrudForm] Injected field "${definition.id}" targets group "${definition.group}" which does not exist. Appended to last group.`);
1485
+ logger.warn("Injected field targets a group that does not exist; appended to last group", { fieldId: definition.id, group: definition.group });
1484
1486
  }
1485
1487
  if (index < 0) continue;
1486
1488
  const fieldEntries = cloned[index].fields ?? [];
@@ -1787,7 +1789,7 @@ function CrudForm({
1787
1789
  flash(message.text, message.severity);
1788
1790
  }
1789
1791
  }).catch((err) => {
1790
- console.error("[CrudForm] Error in onFieldChange:", err);
1792
+ logger.error("Error in onFieldChange", { err });
1791
1793
  });
1792
1794
  }, [embedded, extendedInjectionEventsEnabled, flash, t, trackDirtyWhenEmbedded, translateValidationMessage, triggerInjectionEvent, updateEditedFieldMarker]);
1793
1795
  const onBlurRequest = React.useCallback((fieldId) => {
@@ -1886,7 +1888,7 @@ function CrudForm({
1886
1888
  dirtyBaselineValuesRef.current = { ...transformed };
1887
1889
  setValues(transformed);
1888
1890
  } catch (err) {
1889
- console.error("[CrudForm] Error in transformDisplayData:", err);
1891
+ logger.error("Error in transformDisplayData", { err });
1890
1892
  }
1891
1893
  };
1892
1894
  void run();
@@ -1999,7 +2001,7 @@ function CrudForm({
1999
2001
  }
2000
2002
  if (Object.keys(requiredErrors).length) {
2001
2003
  if (process.env.NODE_ENV !== "production") {
2002
- console.debug("[crud-form] Required field errors prevented submit", requiredErrors);
2004
+ logger.debug("Required field errors prevented submit", { requiredErrors });
2003
2005
  }
2004
2006
  const transformedErrors = await transformValidationErrors(requiredErrors);
2005
2007
  setErrors(transformedErrors);
@@ -2068,7 +2070,7 @@ function CrudForm({
2068
2070
  if (path) fieldErrors[path] = issue.message;
2069
2071
  });
2070
2072
  if (process.env.NODE_ENV !== "production") {
2071
- console.debug("[crud-form] Schema validation failed", res.error.issues);
2073
+ logger.debug("Schema validation failed", { issues: res.error.issues });
2072
2074
  }
2073
2075
  const transformedErrors = await transformValidationErrors(fieldErrors);
2074
2076
  setErrors(translateValidationErrors(transformedErrors));
@@ -2102,7 +2104,7 @@ function CrudForm({
2102
2104
  }
2103
2105
  }
2104
2106
  } catch (err) {
2105
- console.error("[CrudForm] Error in transformFormData:", err);
2107
+ logger.error("Error in transformFormData", { err });
2106
2108
  }
2107
2109
  }
2108
2110
  let injectionRequestHeaders;
@@ -2138,7 +2140,7 @@ function CrudForm({
2138
2140
  }
2139
2141
  injectionRequestHeaders = result.requestHeaders;
2140
2142
  } catch (err) {
2141
- console.error("[CrudForm] Error in onBeforeSave:", err);
2143
+ logger.error("Error in onBeforeSave", { err });
2142
2144
  flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
2143
2145
  setPending(false);
2144
2146
  return;
@@ -2160,7 +2162,7 @@ function CrudForm({
2160
2162
  try {
2161
2163
  await triggerInjectionEvent("onSave", submitValues, injectionContext);
2162
2164
  } catch (err) {
2163
- console.error("[CrudForm] Error in onSave:", err);
2165
+ logger.error("Error in onSave", { err });
2164
2166
  flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
2165
2167
  setPending(false);
2166
2168
  return;
@@ -2184,7 +2186,7 @@ function CrudForm({
2184
2186
  try {
2185
2187
  await triggerInjectionEvent("onAfterSave", submitValues, injectionContext);
2186
2188
  } catch (err) {
2187
- console.error("[CrudForm] Error in onAfterSave:", err);
2189
+ logger.error("Error in onAfterSave", { err });
2188
2190
  }
2189
2191
  }
2190
2192
  markFormAsClean(valuesRef.current);
@@ -2222,7 +2224,7 @@ function CrudForm({
2222
2224
  const transformedErrors = await transformValidationErrors(combinedFieldErrors);
2223
2225
  setErrors(translateValidationErrors(transformedErrors));
2224
2226
  if (process.env.NODE_ENV !== "production") {
2225
- console.debug("[crud-form] Submission failed with field errors", transformedErrors);
2227
+ logger.debug("Submission failed with field errors", { fieldErrors: transformedErrors });
2226
2228
  }
2227
2229
  }
2228
2230
  const optimisticLockConflict = extractOptimisticLockConflict(err);