@arpproject/recrate 0.1.32-test3 → 0.1.32

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.
@@ -67670,7 +67670,8 @@ const AiEditedFieldBadge = ({
67670
67670
  ariaLabel,
67671
67671
  variant = "edited"
67672
67672
  }) => {
67673
- const label = variant === "deleted" ? "Deleted by AI" : "Edited by AI";
67673
+ const { t: t2 } = useTranslation();
67674
+ const label = variant === "deleted" ? t2("ai_deleted_by_ai") : t2("ai_edited_by_ai");
67674
67675
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: title ?? label, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `describo-ai-edited-icon ${className}`, "aria-label": ariaLabel ?? label, children: "✦" }) });
67675
67676
  };
67676
67677
  const EntityId = ({
@@ -67680,6 +67681,7 @@ const EntityId = ({
67680
67681
  aiEditedVariant = "edited"
67681
67682
  }) => {
67682
67683
  var _a2;
67684
+ const { t: t2 } = useTranslation();
67683
67685
  const state = useStateStore();
67684
67686
  const handleSave = async (data) => {
67685
67687
  onUpdate(data);
@@ -67703,7 +67705,7 @@ const EntityId = ({
67703
67705
  type: "link",
67704
67706
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$6, {}),
67705
67707
  onClick: () => openInNewTab(entity["@id"]),
67706
- title: "Open in new tab"
67708
+ title: String(t2("open_in_new_tab"))
67707
67709
  }
67708
67710
  ),
67709
67711
  isDatasetOrFile() ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: entity["@id"] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -67803,8 +67805,8 @@ const valueIsEmpty = (value) => {
67803
67805
  if (Array.isArray(value)) return value.length === 0;
67804
67806
  return false;
67805
67807
  };
67806
- const formatValue = (value) => {
67807
- if (valueIsEmpty(value)) return "empty";
67808
+ const formatValue = (value, emptyLabel) => {
67809
+ if (valueIsEmpty(value)) return emptyLabel;
67808
67810
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
67809
67811
  return String(value);
67810
67812
  }
@@ -67819,13 +67821,15 @@ const AiFieldDiffView = ({
67819
67821
  currentValue,
67820
67822
  operation
67821
67823
  }) => {
67824
+ const { t: t2 } = useTranslation();
67822
67825
  const isDelete = operation === "delete";
67823
- const removedValue = formatValue(previousValue);
67824
- const addedValue = isDelete ? "empty" : formatValue(currentValue);
67825
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-field-diff", "aria-label": "AI field diff", children: [
67826
+ const emptyLabel = String(t2("ai_empty_value"));
67827
+ const removedValue = formatValue(previousValue, emptyLabel);
67828
+ const addedValue = isDelete ? emptyLabel : formatValue(currentValue, emptyLabel);
67829
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-field-diff", "aria-label": String(t2("ai_field_diff_aria")), children: [
67826
67830
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-field-diff-head", children: [
67827
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isDelete ? "Proposed deletion" : "Proposed change" }),
67828
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-field-diff-chip", children: "AI edit" })
67831
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isDelete ? t2("ai_proposed_deletion") : t2("ai_proposed_change") }),
67832
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-field-diff-chip", children: t2("ai_edit_chip") })
67829
67833
  ] }),
67830
67834
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-field-diff-line describo-ai-field-diff-line-removed", children: [
67831
67835
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-field-diff-marker", children: "-" }),
@@ -67846,7 +67850,7 @@ const EntityName = ({
67846
67850
  aiReview
67847
67851
  }) => {
67848
67852
  var _a2;
67849
- const [t2, i18n] = useTranslation();
67853
+ const { t: t2 } = useTranslation();
67850
67854
  const state = useStateStore();
67851
67855
  const [showAiDiff, setShowAiDiff] = useState(false);
67852
67856
  const showAiReview = Boolean(aiReview);
@@ -67861,7 +67865,7 @@ const EntityName = ({
67861
67865
  children: [
67862
67866
  showAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge", children: [
67863
67867
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "✦" }),
67864
- isAiDelete ? "AI delete" : "AI suggestion"
67868
+ isAiDelete ? t2("ai_delete_badge") : t2("ai_suggestion_badge")
67865
67869
  ] }),
67866
67870
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-32 w-1/3 xl:w-1/5 flex flex-col", children: [
67867
67871
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-property-name describo-property-name-with-ai", children: [
@@ -67887,33 +67891,33 @@ const EntityName = ({
67887
67891
  }
67888
67892
  ) }),
67889
67893
  showAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-actions", children: [
67890
- (aiReview == null ? void 0 : aiReview.previousValueDiffers) && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiDiff ? "Hide diff" : "Show diff", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67894
+ (aiReview == null ? void 0 : aiReview.previousValueDiffers) && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiDiff ? t2("ai_hide_diff") : t2("ai_show_diff"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67891
67895
  Button$1,
67892
67896
  {
67893
67897
  size: "middle",
67894
67898
  className: "describo-ai-action-diff",
67895
67899
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$7, {}),
67896
- "aria-label": showAiDiff ? "Hide AI diff" : "Show AI diff",
67900
+ "aria-label": showAiDiff ? String(t2("ai_hide_ai_diff_aria")) : String(t2("ai_show_ai_diff_aria")),
67897
67901
  "aria-pressed": showAiDiff,
67898
67902
  onClick: () => setShowAiDiff((visible) => !visible)
67899
67903
  }
67900
67904
  ) }),
67901
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isAiDelete ? "Approve this AI deletion" : "Approve this AI-suggested value", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67905
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isAiDelete ? t2("ai_approve_deletion_tooltip") : t2("ai_approve_suggested_value_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67902
67906
  Button$1,
67903
67907
  {
67904
67908
  size: "middle",
67905
67909
  className: "describo-ai-action-approve",
67906
67910
  onClick: aiReview == null ? void 0 : aiReview.onApprove,
67907
- children: isAiDelete ? "Delete" : "Accept"
67911
+ children: isAiDelete ? t2("ai_delete") : t2("ai_accept")
67908
67912
  }
67909
67913
  ) }),
67910
- (aiReview == null ? void 0 : aiReview.previousValueDiffers) && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore the previous value and mark this suggestion reviewed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67914
+ (aiReview == null ? void 0 : aiReview.previousValueDiffers) && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_restore_previous_value_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
67911
67915
  Button$1,
67912
67916
  {
67913
67917
  size: "middle",
67914
67918
  className: "describo-ai-action-reject",
67915
67919
  onClick: aiReview == null ? void 0 : aiReview.onReject,
67916
- children: isAiDelete ? "Restore" : "Reject"
67920
+ children: isAiDelete ? t2("ai_restore") : t2("ai_reject")
67917
67921
  }
67918
67922
  ) })
67919
67923
  ] })
@@ -79832,9 +79836,9 @@ const Map$1 = ({ entity, crateManager }) => {
79832
79836
  };
79833
79837
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: mapId, className: "w-[600px] h-[520px] describo-property-type-map", ref: mapRef });
79834
79838
  };
79835
- const formatEntityDiffValue = (value) => {
79836
- if (value === void 0 || value === null) return "empty";
79837
- if (Array.isArray(value)) return value.map(formatEntityDiffValue).join(", ");
79839
+ const formatEntityDiffValue = (value, emptyLabel) => {
79840
+ if (value === void 0 || value === null) return emptyLabel;
79841
+ if (Array.isArray(value)) return value.map((item) => formatEntityDiffValue(item, emptyLabel)).join(", ");
79838
79842
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
79839
79843
  return String(value);
79840
79844
  }
@@ -79854,20 +79858,21 @@ const AiEntityDiffView = ({
79854
79858
  onAccept,
79855
79859
  onReject
79856
79860
  }) => {
79861
+ const { t: t2 } = useTranslation();
79857
79862
  const isDelete = operation === "delete";
79858
79863
  const isUnlink = operation === "unlink";
79859
- const title = isDelete ? `AI deleted entity: ${entityId}` : isUnlink ? `AI unlinked entity: ${entityId}` : `AI edited entity: ${entityId}`;
79864
+ const title = isDelete ? t2("ai_deleted_entity_title", { entityId }) : isUnlink ? t2("ai_unlinked_entity_title", { entityId }) : t2("ai_edited_entity_title", { entityId });
79860
79865
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `describo-ai-entity-diff-card ${isDelete ? "describo-ai-entity-diff-card-delete" : ""} ${isUnlink ? "describo-ai-entity-diff-card-unlink" : ""}`, children: [
79861
79866
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-entity-diff-head", children: [
79862
79867
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: title }),
79863
- onClose && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Hide entity diff", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79868
+ onClose && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_hide_entity_diff"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79864
79869
  Button$1,
79865
79870
  {
79866
79871
  type: "text",
79867
79872
  size: "small",
79868
79873
  className: "describo-ai-entity-diff-close",
79869
79874
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$A, {}),
79870
- "aria-label": "Hide AI entity diff",
79875
+ "aria-label": String(t2("ai_hide_entity_diff_aria")),
79871
79876
  onClick: (event) => {
79872
79877
  event.stopPropagation();
79873
79878
  onClose();
@@ -79882,13 +79887,13 @@ const AiEntityDiffView = ({
79882
79887
  children: [
79883
79888
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-entity-diff-marker", children: row.kind === "removed" ? "-" : row.kind === "added" ? "+" : "" }),
79884
79889
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-entity-diff-key", children: row.label }),
79885
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-entity-diff-value", children: formatEntityDiffValue(row.value) })
79890
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-entity-diff-value", children: formatEntityDiffValue(row.value, String(t2("ai_empty_value"))) })
79886
79891
  ]
79887
79892
  },
79888
79893
  `${row.kind}-${row.propertyName}-${index2}`
79889
79894
  )) }),
79890
79895
  !readonly && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-entity-diff-actions", children: [
79891
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isDelete ? "Approve this AI deletion" : isUnlink ? "Approve this AI unlink" : "Accept every AI edit for this entity", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79896
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isDelete ? t2("ai_approve_deletion_tooltip") : isUnlink ? t2("ai_approve_unlink_tooltip") : t2("ai_accept_entity_edits_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79892
79897
  Button$1,
79893
79898
  {
79894
79899
  size: "middle",
@@ -79897,10 +79902,10 @@ const AiEntityDiffView = ({
79897
79902
  event.stopPropagation();
79898
79903
  onAccept == null ? void 0 : onAccept();
79899
79904
  },
79900
- children: isDelete ? "Delete entity" : isUnlink ? "Unlink entity" : "Accept edit"
79905
+ children: isDelete ? t2("ai_delete_entity") : isUnlink ? t2("ai_unlink_entity") : t2("ai_accept_edit")
79901
79906
  }
79902
79907
  ) }),
79903
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isDelete ? "Restore this entity and mark the deletion reviewed" : isUnlink ? "Restore this link and mark the unlink reviewed" : "Restore previous values for this entity", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79908
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isDelete ? t2("ai_restore_deleted_entity_tooltip") : isUnlink ? t2("ai_restore_link_tooltip") : t2("ai_restore_entity_values_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
79904
79909
  Button$1,
79905
79910
  {
79906
79911
  size: "middle",
@@ -79909,7 +79914,7 @@ const AiEntityDiffView = ({
79909
79914
  event.stopPropagation();
79910
79915
  onReject == null ? void 0 : onReject();
79911
79916
  },
79912
- children: isDelete ? "Keep entity" : isUnlink ? "Restore link" : "Reject edit"
79917
+ children: isDelete ? t2("ai_keep_entity") : isUnlink ? t2("ai_restore_link") : t2("ai_reject_edit")
79913
79918
  }
79914
79919
  ) })
79915
79920
  ] })
@@ -80012,6 +80017,7 @@ const DeletedLinkedEntityCard = ({
80012
80017
  onAcceptDelete,
80013
80018
  onRestore
80014
80019
  }) => {
80020
+ const { t: t2 } = useTranslation();
80015
80021
  const [showDeletedFields, setShowDeletedFields] = useState(false);
80016
80022
  const deletedDiffRows = fields.map((field) => ({
80017
80023
  kind: "removed",
@@ -80049,22 +80055,19 @@ const DeletedLinkedEntityCard = ({
80049
80055
  children: [
80050
80056
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge describo-ai-entity-status-badge", children: [
80051
80057
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "✦" }),
80052
- "AI delete"
80058
+ t2("ai_delete_badge")
80053
80059
  ] }),
80054
80060
  /* @__PURE__ */ jsxRuntimeExports.jsx(LinkedEntityCardHeader, { entity: displayEntity }),
80055
80061
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-deleted-entity-controls", children: [
80056
80062
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-deleted-entity-summary", children: [
80057
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
80058
- fieldCount,
80059
- " fields can be restored."
80060
- ] }),
80061
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showDeletedFields ? "Hide deleted fields" : "Show deleted fields", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80063
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t2("ai_fields_can_be_restored", { count: fieldCount }) }),
80064
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showDeletedFields ? t2("ai_hide_deleted_fields") : t2("ai_show_deleted_fields"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80062
80065
  Button$1,
80063
80066
  {
80064
80067
  size: "small",
80065
80068
  className: "describo-ai-entity-delete-details-toggle",
80066
80069
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$7, {}),
80067
- "aria-label": showDeletedFields ? "Hide deleted AI fields" : "Show deleted AI fields",
80070
+ "aria-label": showDeletedFields ? String(t2("ai_hide_deleted_fields_aria")) : String(t2("ai_show_deleted_fields_aria")),
80068
80071
  "aria-pressed": showDeletedFields,
80069
80072
  onClick: (event) => {
80070
80073
  event.stopPropagation();
@@ -80074,7 +80077,7 @@ const DeletedLinkedEntityCard = ({
80074
80077
  ) })
80075
80078
  ] }),
80076
80079
  !readonly && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-actions", children: [
80077
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Approve this AI deletion", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80080
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_approve_deletion_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80078
80081
  Button$1,
80079
80082
  {
80080
80083
  size: "small",
@@ -80083,10 +80086,10 @@ const DeletedLinkedEntityCard = ({
80083
80086
  event.stopPropagation();
80084
80087
  onAcceptDelete == null ? void 0 : onAcceptDelete(entity);
80085
80088
  },
80086
- children: "Delete"
80089
+ children: t2("ai_delete")
80087
80090
  }
80088
80091
  ) }),
80089
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore this entity and mark the deletion reviewed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80092
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_restore_deleted_entity_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80090
80093
  Button$1,
80091
80094
  {
80092
80095
  size: "small",
@@ -80095,7 +80098,7 @@ const DeletedLinkedEntityCard = ({
80095
80098
  event.stopPropagation();
80096
80099
  onRestore == null ? void 0 : onRestore(entity);
80097
80100
  },
80098
- children: "Restore"
80101
+ children: t2("ai_restore")
80099
80102
  }
80100
80103
  ) })
80101
80104
  ] })
@@ -80114,19 +80117,20 @@ const UnlinkedLinkedEntityCard = ({
80114
80117
  onAcceptUnlink,
80115
80118
  onRejectUnlink
80116
80119
  }) => {
80120
+ const { t: t2 } = useTranslation();
80117
80121
  const [showDiff, setShowDiff] = useState(false);
80118
80122
  const targetEntityId = entity["@id"];
80119
80123
  const diffRows = [
80120
80124
  {
80121
80125
  kind: "context",
80122
80126
  propertyName: "@id",
80123
- label: "entity",
80127
+ label: t2("ai_diff_label_entity"),
80124
80128
  value: targetEntityId
80125
80129
  },
80126
80130
  {
80127
80131
  kind: "context",
80128
80132
  propertyName: "source",
80129
- label: "linked from",
80133
+ label: t2("ai_diff_label_linked_from"),
80130
80134
  value: sourceEntityId
80131
80135
  },
80132
80136
  {
@@ -80166,17 +80170,17 @@ const UnlinkedLinkedEntityCard = ({
80166
80170
  children: [
80167
80171
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge describo-ai-entity-status-badge", children: [
80168
80172
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "✦" }),
80169
- "AI unlink"
80173
+ t2("ai_unlink_badge")
80170
80174
  ] }),
80171
80175
  /* @__PURE__ */ jsxRuntimeExports.jsx(LinkedEntityCardHeader, { entity: displayEntity }),
80172
80176
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-deleted-entity-controls", children: [
80173
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-deleted-entity-summary", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showDiff ? "Hide unlink diff" : "Show unlink diff", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80177
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "describo-ai-deleted-entity-summary", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showDiff ? t2("ai_hide_unlink_diff") : t2("ai_show_unlink_diff"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80174
80178
  Button$1,
80175
80179
  {
80176
80180
  size: "small",
80177
80181
  className: "describo-ai-entity-delete-details-toggle",
80178
80182
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$7, {}),
80179
- "aria-label": showDiff ? "Hide AI unlink diff" : "Show AI unlink diff",
80183
+ "aria-label": showDiff ? String(t2("ai_hide_unlink_diff_aria")) : String(t2("ai_show_unlink_diff_aria")),
80180
80184
  "aria-pressed": showDiff,
80181
80185
  onClick: (event) => {
80182
80186
  event.stopPropagation();
@@ -80185,7 +80189,7 @@ const UnlinkedLinkedEntityCard = ({
80185
80189
  }
80186
80190
  ) }) }),
80187
80191
  !readonly && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-actions", children: [
80188
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Approve this AI unlink", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80192
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_approve_unlink_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80189
80193
  Button$1,
80190
80194
  {
80191
80195
  size: "small",
@@ -80194,10 +80198,10 @@ const UnlinkedLinkedEntityCard = ({
80194
80198
  event.stopPropagation();
80195
80199
  onAcceptUnlink == null ? void 0 : onAcceptUnlink({ sourceEntityId, property, targetEntityId });
80196
80200
  },
80197
- children: "Unlink"
80201
+ children: t2("ai_unlink_entity")
80198
80202
  }
80199
80203
  ) }),
80200
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore this link and mark the unlink reviewed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80204
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_restore_link_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80201
80205
  Button$1,
80202
80206
  {
80203
80207
  size: "small",
@@ -80206,7 +80210,7 @@ const UnlinkedLinkedEntityCard = ({
80206
80210
  event.stopPropagation();
80207
80211
  onRejectUnlink == null ? void 0 : onRejectUnlink({ sourceEntityId, property, targetEntityId });
80208
80212
  },
80209
- children: "Restore"
80213
+ children: t2("ai_restore")
80210
80214
  }
80211
80215
  ) })
80212
80216
  ] })
@@ -80243,23 +80247,18 @@ const AiEntityReviewSummary = ({
80243
80247
  onReview,
80244
80248
  onDiff
80245
80249
  }) => {
80250
+ const { t: t2 } = useTranslation();
80246
80251
  if (fieldCount <= 0) return null;
80247
- const fieldLabel = fieldCount === 1 ? "field" : "fields";
80248
80252
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-entity-review-summary", children: [
80249
80253
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-entity-review-meta", children: [
80250
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "describo-ai-entity-review-count", children: [
80251
- fieldCount,
80252
- " ",
80253
- fieldLabel,
80254
- " to review"
80255
- ] }),
80256
- onDiff && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Show entity diff", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80254
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-entity-review-count", children: t2("ai_fields_to_review", { count: fieldCount }) }),
80255
+ onDiff && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_show_entity_diff"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
80257
80256
  Button$1,
80258
80257
  {
80259
80258
  className: "describo-ai-entity-diff-toggle",
80260
80259
  size: "small",
80261
80260
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$7, {}),
80262
- "aria-label": "Show AI entity diff",
80261
+ "aria-label": String(t2("ai_show_entity_diff_aria")),
80263
80262
  onClick: (event) => {
80264
80263
  event.stopPropagation();
80265
80264
  onDiff();
@@ -80276,7 +80275,7 @@ const AiEntityReviewSummary = ({
80276
80275
  event.stopPropagation();
80277
80276
  onReview();
80278
80277
  },
80279
- children: "Review entity"
80278
+ children: t2("ai_review_entity")
80280
80279
  }
80281
80280
  )
80282
80281
  ] });
@@ -80291,47 +80290,51 @@ const LinkedEntityCard = ({
80291
80290
  onLoadEntity,
80292
80291
  onUnlinkEntity,
80293
80292
  onShowEntityDiff
80294
- }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
80295
- Card,
80296
- {
80297
- className: `${hasPendingAiReview ? "describo-ai-entity-review-card" : ""} ${hasAiTouchedEntity ? "describo-ai-entity-reviewed-card" : ""}`,
80298
- style: {
80299
- backgroundColor: hasPendingAiReview ? "#e6f8ef" : "#e6f0ff",
80300
- cursor: "pointer",
80301
- transition: "background-color 0.2s",
80302
- borderLeft: hasPendingAiReview ? "3px solid #38c88a" : "3px solid #409eff"
80303
- },
80304
- styles: { body: { padding: hasPendingAiReview ? "22px 12px 8px" : "8px 12px" } },
80305
- hoverable: true,
80306
- onClick: () => onLoadEntity({ id: entity["@id"] }),
80307
- children: [
80308
- hasPendingAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge describo-ai-entity-status-badge", children: [
80309
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "✦" }),
80310
- "AI suggestion"
80311
- ] }),
80312
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Flex, { justify: "space-between", align: "middle", gap: 8, children: [
80313
- /* @__PURE__ */ jsxRuntimeExports.jsx(LinkedEntityCardHeader, { entity: displayEntity }),
80314
- !readonly && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { onClick: (event) => event.stopPropagation(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(UnlinkEntity, { entity, onUnlinkEntity }) })
80315
- ] }),
80316
- hasAiTouchedEntity && !hasPendingAiReview && /* @__PURE__ */ jsxRuntimeExports.jsx(
80317
- AiEditedFieldBadge,
80318
- {
80319
- className: "describo-ai-entity-edited-badge",
80320
- title: "Entity was added by AI",
80321
- ariaLabel: "Entity was added by AI"
80322
- }
80323
- ),
80324
- /* @__PURE__ */ jsxRuntimeExports.jsx(
80325
- AiEntityReviewSummary,
80326
- {
80327
- fieldCount: hasPendingAiReview ? pendingAiReviewFieldCount : 0,
80328
- onReview: () => onLoadEntity({ id: entity["@id"] }),
80329
- onDiff: hasPendingAiReview ? onShowEntityDiff : void 0
80330
- }
80331
- )
80332
- ]
80333
- }
80334
- );
80293
+ }) => {
80294
+ const { t: t2 } = useTranslation();
80295
+ const entityAddedLabel = t2("ai_entity_was_added_by_ai");
80296
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
80297
+ Card,
80298
+ {
80299
+ className: `${hasPendingAiReview ? "describo-ai-entity-review-card" : ""} ${hasAiTouchedEntity ? "describo-ai-entity-reviewed-card" : ""}`,
80300
+ style: {
80301
+ backgroundColor: hasPendingAiReview ? "#e6f8ef" : "#e6f0ff",
80302
+ cursor: "pointer",
80303
+ transition: "background-color 0.2s",
80304
+ borderLeft: hasPendingAiReview ? "3px solid #38c88a" : "3px solid #409eff"
80305
+ },
80306
+ styles: { body: { padding: hasPendingAiReview ? "22px 12px 8px" : "8px 12px" } },
80307
+ hoverable: true,
80308
+ onClick: () => onLoadEntity({ id: entity["@id"] }),
80309
+ children: [
80310
+ hasPendingAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge describo-ai-entity-status-badge", children: [
80311
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "" }),
80312
+ t2("ai_suggestion_badge")
80313
+ ] }),
80314
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Flex, { justify: "space-between", align: "middle", gap: 8, children: [
80315
+ /* @__PURE__ */ jsxRuntimeExports.jsx(LinkedEntityCardHeader, { entity: displayEntity }),
80316
+ !readonly && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { onClick: (event) => event.stopPropagation(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(UnlinkEntity, { entity, onUnlinkEntity }) })
80317
+ ] }),
80318
+ hasAiTouchedEntity && !hasPendingAiReview && /* @__PURE__ */ jsxRuntimeExports.jsx(
80319
+ AiEditedFieldBadge,
80320
+ {
80321
+ className: "describo-ai-entity-edited-badge",
80322
+ title: entityAddedLabel,
80323
+ ariaLabel: entityAddedLabel
80324
+ }
80325
+ ),
80326
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
80327
+ AiEntityReviewSummary,
80328
+ {
80329
+ fieldCount: hasPendingAiReview ? pendingAiReviewFieldCount : 0,
80330
+ onReview: () => onLoadEntity({ id: entity["@id"] }),
80331
+ onDiff: hasPendingAiReview ? onShowEntityDiff : void 0
80332
+ }
80333
+ )
80334
+ ]
80335
+ }
80336
+ );
80337
+ };
80335
80338
  const approvalIsApproved = (approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.approved) === true || (approvalRecord == null ? void 0 : approvalRecord.approved) === "true";
80336
80339
  const getApprovalEntities = (approvalData) => {
80337
80340
  if (!approvalData) return [];
@@ -80520,6 +80523,7 @@ const RenderLinkedItem = ({
80520
80523
  onRejectAiEntityUnlink
80521
80524
  }) => {
80522
80525
  var _a2, _b, _c, _d, _e2;
80526
+ const { t: t2 } = useTranslation();
80523
80527
  const state = useStateStore();
80524
80528
  const crateManager = useContext(CrateManagerContext);
80525
80529
  const profileManager = useContext(ProfileManagerContext);
@@ -80640,8 +80644,8 @@ const RenderLinkedItem = ({
80640
80644
  const getEntityDiffLabel = (fieldName) => {
80641
80645
  var _a3, _b2;
80642
80646
  if (fieldName === "@id") return "@id";
80643
- if (fieldName === "@type") return "type";
80644
- if (fieldName === "name") return "name";
80647
+ if (fieldName === "@type") return t2("type_field_label");
80648
+ if (fieldName === "name") return t2("name_field_label");
80645
80649
  return ((_b2 = (_a3 = profileManager == null ? void 0 : profileManager.getPropertyDefinition({
80646
80650
  property: fieldName,
80647
80651
  entity: effectiveEntity
@@ -80690,7 +80694,7 @@ const RenderLinkedItem = ({
80690
80694
  return rows;
80691
80695
  });
80692
80696
  return [...contextRows, ...changedRows];
80693
- }, [effectiveEntity, entity, pendingAiEntityDiffRecords, profileManager]);
80697
+ }, [effectiveEntity, entity, pendingAiEntityDiffRecords, profileManager, t2]);
80694
80698
  if (showMap) {
80695
80699
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Flex, { className: "describo-render-item-link py-1 rounded bg-blue-200 hover:text-black hover:bg-blue-300 hover:rounded-r-none", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Flex, { vertical: true, className: "space-y-2", children: [
80696
80700
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Flex, { className: "p-2", children: [
@@ -82715,7 +82719,7 @@ const EntityProperty = ({
82715
82719
  children: [
82716
82720
  showAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-suggestion-badge", children: [
82717
82721
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-suggestion-badge-icon", children: "✦" }),
82718
- isAiDelete ? "AI delete" : "AI suggestion"
82722
+ isAiDelete ? t2("ai_delete_badge") : t2("ai_suggestion_badge")
82719
82723
  ] }),
82720
82724
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-32 w-1/3 xl:w-1/5 flex flex-col describo-property-heading", children: [
82721
82725
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row items-center", children: [
@@ -82762,33 +82766,33 @@ const EntityProperty = ({
82762
82766
  }
82763
82767
  ) }),
82764
82768
  showAiReview && instance2.idx === ((_a3 = renderedSimpleInstances[0]) == null ? void 0 : _a3.idx) && !((_b2 = state.configuration) == null ? void 0 : _b2.readonly) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-actions", children: [
82765
- showAiDiffToggle && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiDiff ? "Hide diff" : "Show diff", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82769
+ showAiDiffToggle && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiDiff ? t2("ai_hide_diff") : t2("ai_show_diff"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82766
82770
  Button$1,
82767
82771
  {
82768
82772
  size: "middle",
82769
82773
  className: "describo-ai-action-diff",
82770
82774
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$7, {}),
82771
- "aria-label": showAiDiff ? "Hide AI diff" : "Show AI diff",
82775
+ "aria-label": showAiDiff ? String(t2("ai_hide_ai_diff_aria")) : String(t2("ai_show_ai_diff_aria")),
82772
82776
  "aria-pressed": showAiDiff,
82773
82777
  onClick: () => setShowAiDiff((visible) => !visible)
82774
82778
  }
82775
82779
  ) }),
82776
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isAiDelete ? "Approve this AI deletion" : "Approve this AI-suggested value", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82780
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: isAiDelete ? t2("ai_approve_deletion_tooltip") : t2("ai_approve_suggested_value_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82777
82781
  Button$1,
82778
82782
  {
82779
82783
  size: "middle",
82780
82784
  className: "describo-ai-action-approve",
82781
82785
  onClick: handleApproveAiSuggestion,
82782
- children: isAiDelete ? "Delete" : "Accept"
82786
+ children: isAiDelete ? t2("ai_delete") : t2("ai_accept")
82783
82787
  }
82784
82788
  ) }),
82785
- previousValueDiffers && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore the previous value and mark this suggestion reviewed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82789
+ previousValueDiffers && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_restore_previous_value_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
82786
82790
  Button$1,
82787
82791
  {
82788
82792
  size: "middle",
82789
82793
  className: "describo-ai-action-reject",
82790
82794
  onClick: () => handleRejectAiSuggestion(instance2.idx),
82791
- children: isAiDelete ? "Restore" : "Reject"
82795
+ children: isAiDelete ? t2("ai_restore") : t2("ai_reject")
82792
82796
  }
82793
82797
  ) })
82794
82798
  ] }),
@@ -108277,6 +108281,7 @@ const DialogBrowseEntities = ({
108277
108281
  const hasReviewedAiEdits = approvedFieldCount > 0;
108278
108282
  const hasPendingAiReview = pendingFieldCount > 0 && !hasReviewedAiEdits;
108279
108283
  const hasAiTouchedEntity = hasPendingAiReview || hasReviewedAiEdits;
108284
+ const entityAddedLabel = t2("ai_entity_was_added_by_ai");
108280
108285
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
108281
108286
  Card,
108282
108287
  {
@@ -108305,8 +108310,8 @@ const DialogBrowseEntities = ({
108305
108310
  AiEditedFieldBadge,
108306
108311
  {
108307
108312
  className: "describo-ai-entity-edited-badge",
108308
- title: "Entity was added by AI",
108309
- ariaLabel: "Entity was added by AI"
108313
+ title: entityAddedLabel,
108314
+ ariaLabel: entityAddedLabel
108310
108315
  }
108311
108316
  ),
108312
108317
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -110693,55 +110698,58 @@ const QuickSettingsHeader = ({
110693
110698
  onFieldTitleFilterChange,
110694
110699
  onToggleEmptyFields,
110695
110700
  onToggleAiEditedFields
110696
- }) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-quick-settings-header", role: "region", "aria-label": "Quick filter settings", children: [
110697
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-quick-settings-actions", "aria-label": "Field display settings", children: [
110698
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showFieldHelp ? "Hide field help" : "Show field help", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110699
- Button$1,
110700
- {
110701
- type: showFieldHelp ? "default" : "primary",
110702
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$l, {}),
110703
- "aria-label": showFieldHelp ? "Hide field help" : "Show field help",
110704
- "aria-pressed": !showFieldHelp,
110705
- onClick: onToggleFieldHelp
110706
- }
110707
- ) }),
110708
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: hideEmptyFields ? "Show fields with no value" : "Hide fields with no value", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110709
- Button$1,
110710
- {
110711
- type: hideEmptyFields ? "primary" : "default",
110712
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$5, {}),
110713
- "aria-label": hideEmptyFields ? "Show fields with no value" : "Hide fields with no value",
110714
- "aria-pressed": hideEmptyFields,
110715
- onClick: onToggleEmptyFields
110716
- }
110717
- ) }),
110718
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiEditedFields ? "Show all fields" : "Show AI-edited fields", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110719
- Button$1,
110701
+ }) => {
110702
+ const { t: t2 } = useTranslation();
110703
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-quick-settings-header", role: "region", "aria-label": String(t2("quick_filter_settings_aria")), children: [
110704
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-quick-settings-actions", "aria-label": String(t2("field_display_settings_aria")), children: [
110705
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showFieldHelp ? t2("hide_field_help") : t2("show_field_help"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110706
+ Button$1,
110707
+ {
110708
+ type: showFieldHelp ? "default" : "primary",
110709
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$l, {}),
110710
+ "aria-label": showFieldHelp ? String(t2("hide_field_help")) : String(t2("show_field_help")),
110711
+ "aria-pressed": !showFieldHelp,
110712
+ onClick: onToggleFieldHelp
110713
+ }
110714
+ ) }),
110715
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: hideEmptyFields ? t2("show_empty_fields") : t2("hide_empty_fields"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110716
+ Button$1,
110717
+ {
110718
+ type: hideEmptyFields ? "primary" : "default",
110719
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$5, {}),
110720
+ "aria-label": hideEmptyFields ? String(t2("show_empty_fields")) : String(t2("hide_empty_fields")),
110721
+ "aria-pressed": hideEmptyFields,
110722
+ onClick: onToggleEmptyFields
110723
+ }
110724
+ ) }),
110725
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: showAiEditedFields ? t2("show_all_fields") : t2("show_ai_edited_fields"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110726
+ Button$1,
110727
+ {
110728
+ type: showAiEditedFields ? "primary" : "default",
110729
+ className: "describo-ai-edited-filter-button",
110730
+ "aria-label": showAiEditedFields ? String(t2("show_all_fields")) : String(t2("show_ai_edited_fields")),
110731
+ "aria-pressed": showAiEditedFields,
110732
+ disabled: aiEditedFieldCount === 0,
110733
+ onClick: onToggleAiEditedFields,
110734
+ children: "✦"
110735
+ }
110736
+ ) })
110737
+ ] }),
110738
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
110739
+ Input2,
110720
110740
  {
110721
- type: showAiEditedFields ? "primary" : "default",
110722
- className: "describo-ai-edited-filter-button",
110723
- "aria-label": showAiEditedFields ? "Show all fields" : "Show AI-edited fields",
110724
- "aria-pressed": showAiEditedFields,
110725
- disabled: aiEditedFieldCount === 0,
110726
- onClick: onToggleAiEditedFields,
110727
- children: ""
110728
- }
110729
- ) })
110730
- ] }),
110731
- /* @__PURE__ */ jsxRuntimeExports.jsx(
110732
- Input2,
110733
- {
110734
- className: "describo-quick-settings-filter",
110735
- value: fieldTitleFilter,
110736
- placeholder: "Filter fields by name or value",
110737
- "aria-label": "Filter fields by name or value",
110738
- onChange: (event) => onFieldTitleFilterChange(event.target.value),
110739
- allowClear: {
110740
- clearIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$B, { "aria-label": "Clear field filter" })
110741
+ className: "describo-quick-settings-filter",
110742
+ value: fieldTitleFilter,
110743
+ placeholder: String(t2("filter_fields_by_name_or_value")),
110744
+ "aria-label": String(t2("filter_fields_by_name_or_value")),
110745
+ onChange: (event) => onFieldTitleFilterChange(event.target.value),
110746
+ allowClear: {
110747
+ clearIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$B, { "aria-label": String(t2("clear_field_filter")) })
110748
+ }
110741
110749
  }
110742
- }
110743
- )
110744
- ] });
110750
+ )
110751
+ ] });
110752
+ };
110745
110753
  const AiApprovalStepperHeader = ({
110746
110754
  activeIndex,
110747
110755
  pendingCount,
@@ -110757,12 +110765,17 @@ const AiApprovalStepperHeader = ({
110757
110765
  onRejectAll,
110758
110766
  onReviewNextEntity
110759
110767
  }) => {
110768
+ const { t: t2 } = useTranslation();
110760
110769
  if (!pendingCount && !remainingEntityCount) return null;
110761
110770
  if (!pendingCount) {
110762
- const entityLabel = remainingEntityCount === 1 ? "entity" : "entities";
110763
- const fieldLabel = remainingFieldCount === 1 ? "field" : "fields";
110764
- const remainingMessage = `${remainingFieldCount} AI ${fieldLabel} still need review in ${remainingEntityCount} other ${entityLabel}`;
110765
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-bar describo-ai-confirm-bar-remaining", role: "status", "aria-label": "AI changes remaining", children: [
110771
+ const entityLabel = t2("ai_entity", { count: remainingEntityCount });
110772
+ const remainingMessage = t2("ai_remaining_review_message", {
110773
+ count: remainingFieldCount,
110774
+ fieldCount: remainingFieldCount,
110775
+ entityCount: remainingEntityCount,
110776
+ entityLabel
110777
+ });
110778
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-bar describo-ai-confirm-bar-remaining", role: "status", "aria-label": String(t2("ai_changes_remaining_aria")), children: [
110766
110779
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-message", children: [
110767
110780
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-confirm-spark", children: "✦" }),
110768
110781
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: remainingMessage })
@@ -110772,66 +110785,66 @@ const AiApprovalStepperHeader = ({
110772
110785
  {
110773
110786
  className: "describo-ai-review-next-entity",
110774
110787
  onClick: onReviewNextEntity,
110775
- children: "Review next"
110788
+ children: t2("ai_review_next")
110776
110789
  }
110777
110790
  ) })
110778
110791
  ] });
110779
110792
  }
110780
110793
  const stepLabel = `${Math.min(activeIndex + 1, pendingCount)}/${pendingCount}`;
110781
- const message = activePropertyLabel ? `AI changes need review: ${activePropertyLabel}` : "AI changes need review";
110782
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-bar", role: "region", "aria-label": "AI change review", children: [
110794
+ const message = activePropertyLabel ? t2("ai_changes_need_review_property", { property: activePropertyLabel }) : t2("ai_changes_need_review");
110795
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-bar", role: "region", "aria-label": String(t2("ai_change_review_aria")), children: [
110783
110796
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-message", children: [
110784
110797
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-confirm-spark", children: "✦" }),
110785
110798
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: message })
110786
110799
  ] }),
110787
110800
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-controls", children: [
110788
- onReviewNextEntity && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: remainingEntityCount > 0 ? "Review the next entity with pending AI changes" : "No other entities need AI review", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110801
+ onReviewNextEntity && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: remainingEntityCount > 0 ? t2("ai_review_next_entity_tooltip") : t2("ai_no_other_entities_need_review"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110789
110802
  Button$1,
110790
110803
  {
110791
110804
  className: "describo-ai-review-next-entity",
110792
110805
  disabled: remainingEntityCount === 0,
110793
110806
  onClick: onReviewNextEntity,
110794
- children: "Review next"
110807
+ children: t2("ai_review_next")
110795
110808
  }
110796
110809
  ) }),
110797
110810
  !readonly && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
110798
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Accept every pending AI change in this entity", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110811
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_accept_all_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110799
110812
  Button$1,
110800
110813
  {
110801
110814
  className: "describo-ai-bulk-action describo-ai-bulk-accept",
110802
110815
  onClick: onAcceptAll,
110803
- children: "Accept all"
110816
+ children: t2("ai_accept_all")
110804
110817
  }
110805
110818
  ) }),
110806
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore previous values for every pending AI change in this entity", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110819
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_reject_all_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110807
110820
  Button$1,
110808
110821
  {
110809
110822
  className: "describo-ai-bulk-action describo-ai-bulk-reject",
110810
110823
  onClick: onRejectAll,
110811
- children: "Reject all"
110824
+ children: t2("ai_reject_all")
110812
110825
  }
110813
110826
  ) })
110814
110827
  ] }),
110815
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-stepper", "aria-label": "Pending AI field navigation", children: [
110816
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Previous pending field", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110828
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-stepper", "aria-label": String(t2("ai_pending_field_navigation_aria")), children: [
110829
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_previous_pending_field"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110817
110830
  Button$1,
110818
110831
  {
110819
110832
  type: "text",
110820
110833
  size: "small",
110821
110834
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$p, {}),
110822
- "aria-label": "Previous pending AI field",
110835
+ "aria-label": String(t2("ai_previous_pending_field_aria")),
110823
110836
  disabled: !canGoPrevious,
110824
110837
  onClick: onPrevious
110825
110838
  }
110826
110839
  ) }),
110827
110840
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-step-count", children: stepLabel }),
110828
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Next pending field", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110841
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_next_pending_field"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110829
110842
  Button$1,
110830
110843
  {
110831
110844
  type: "text",
110832
110845
  size: "small",
110833
110846
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$u, {}),
110834
- "aria-label": "Next pending AI field",
110847
+ "aria-label": String(t2("ai_next_pending_field_aria")),
110835
110848
  disabled: !canGoNext,
110836
110849
  onClick: onNext
110837
110850
  }
@@ -112476,6 +112489,7 @@ const DEFAULT_TAB_PANE_WIDTH = 240;
112476
112489
  const ICON_TAB_PANE_WIDTH = 80;
112477
112490
  const MIN_LABEL_TAB_PANE_WIDTH = 100;
112478
112491
  const MAX_LABEL_TAB_PANE_WIDTH = 250;
112492
+ const AI_SCROLL_RESTORE_SUPPRESSION_MS = 2500;
112479
112493
  const clampLabelTabPaneWidth = (width) => Math.max(MIN_LABEL_TAB_PANE_WIDTH, Math.min(MAX_LABEL_TAB_PANE_WIDTH, Math.round(width)));
112480
112494
  const readPendingAddedProfileTabKeys = (entityId) => {
112481
112495
  if (typeof window === "undefined") return null;
@@ -112510,6 +112524,18 @@ const clearPendingAddedProfileTabKeys = (entityId) => {
112510
112524
  } catch {
112511
112525
  }
112512
112526
  };
112527
+ const buildAiApprovalNavigationKey = (entityId, approvalRecord) => {
112528
+ const propertyName2 = String((approvalRecord == null ? void 0 : approvalRecord.propertyName) ?? "");
112529
+ const operation = String((approvalRecord == null ? void 0 : approvalRecord.operation) ?? "");
112530
+ const timestamp = String((approvalRecord == null ? void 0 : approvalRecord.timestamp) ?? "");
112531
+ let previousValue = "";
112532
+ try {
112533
+ previousValue = JSON.stringify((approvalRecord == null ? void 0 : approvalRecord.previousValue) ?? null);
112534
+ } catch {
112535
+ previousValue = String((approvalRecord == null ? void 0 : approvalRecord.previousValue) ?? "");
112536
+ }
112537
+ return `${entityId}:${propertyName2}:${operation}:${timestamp}:${previousValue}`;
112538
+ };
112513
112539
  const RenderEntity = forwardRef((props, ref) => {
112514
112540
  var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
112515
112541
  const { entity, onLoadEntity, onSaveCrate, onSaveEntityTemplate, onWarning, onError, onAddNewProfileRequest, onRemoveProfile } = props;
@@ -112561,9 +112587,14 @@ const RenderEntity = forwardRef((props, ref) => {
112561
112587
  const pendingAddedProfileSelectionRef = useRef(null);
112562
112588
  const pendingAddedPropertyRef = useRef(null);
112563
112589
  const pendingAiScrollPropertyRef = useRef(null);
112590
+ const aiScrollRestoreSuppressedUntilRef = useRef(0);
112564
112591
  const lastAutoNavigatedAiApprovalRef = useRef(null);
112565
112592
  const [tabRailScrollState, setTabRailScrollState] = useState({ canScrollUp: false, canScrollDown: false });
112566
112593
  const debugScroll = (...args) => console.log("[recrate-scroll-debug]", ...args);
112594
+ const suppressAiScrollRestore = () => {
112595
+ aiScrollRestoreSuppressedUntilRef.current = Date.now() + AI_SCROLL_RESTORE_SUPPRESSION_MS;
112596
+ };
112597
+ const isAiScrollRestoreSuppressed = () => Date.now() < aiScrollRestoreSuppressedUntilRef.current;
112567
112598
  const pendingAiApprovals = useMemo$1(() => getPendingEntityApprovalRecords(approvalContext == null ? void 0 : approvalContext.roCrateApproval, contextEntity == null ? void 0 : contextEntity["@id"]), [approvalContext == null ? void 0 : approvalContext.roCrateApproval, contextEntity == null ? void 0 : contextEntity["@id"]]);
112568
112599
  const pendingAiApprovalProperties = useMemo$1(() => pendingAiApprovals.map((approvalRecord) => approvalRecord == null ? void 0 : approvalRecord.propertyName).filter((property) => typeof property === "string" && property.length > 0), [pendingAiApprovals]);
112569
112600
  const pendingDeletedEntityReviewProperties = useMemo$1(() => getPendingDeletedEntityReversePropertiesForSource(
@@ -112924,6 +112955,7 @@ const RenderEntity = forwardRef((props, ref) => {
112924
112955
  if (!navigationRestoreReadyRef.current) return;
112925
112956
  if (!(contextEntity == null ? void 0 : contextEntity["@id"])) return;
112926
112957
  if (((_a3 = pendingAddedPropertyRef.current) == null ? void 0 : _a3.entityId) === contextEntity["@id"]) return;
112958
+ if (isAiScrollRestoreSuppressed()) return;
112927
112959
  const viewport = activeContentRef.current;
112928
112960
  if (!viewport) return;
112929
112961
  const restoreTarget = ((_d2 = (_c2 = (_b2 = state.editorState.getNavigationState(contextEntity["@id"])) == null ? void 0 : _b2.tabStates) == null ? void 0 : _c2[activeTab]) == null ? void 0 : _d2.scrollTop) ?? 0;
@@ -112947,6 +112979,11 @@ const RenderEntity = forwardRef((props, ref) => {
112947
112979
  viewport.style.scrollBehavior = "auto";
112948
112980
  const attemptRestore = () => {
112949
112981
  if (cancelled) return;
112982
+ if (isAiScrollRestoreSuppressed()) {
112983
+ restoreInProgressRef.current = false;
112984
+ viewport.style.scrollBehavior = previousInlineScrollBehavior;
112985
+ return;
112986
+ }
112950
112987
  attempts += 1;
112951
112988
  const maxScrollable = Math.max(0, viewport.scrollHeight - viewport.clientHeight);
112952
112989
  const target = Math.min(restoreTarget, maxScrollable);
@@ -112992,7 +113029,7 @@ const RenderEntity = forwardRef((props, ref) => {
112992
113029
  cancelled = true;
112993
113030
  restoreInProgressRef.current = false;
112994
113031
  viewport.style.scrollBehavior = previousInlineScrollBehavior;
112995
- if (navigationRestoreReadyRef.current) {
113032
+ if (navigationRestoreReadyRef.current && !isAiScrollRestoreSuppressed()) {
112996
113033
  captureViewContext(activeTab, viewport.scrollTop);
112997
113034
  }
112998
113035
  viewport.removeEventListener("scroll", handleScroll);
@@ -113005,6 +113042,7 @@ const RenderEntity = forwardRef((props, ref) => {
113005
113042
  const pendingTab = pendingRestoredTabRef.current;
113006
113043
  if (!(contextEntity == null ? void 0 : contextEntity["@id"])) return;
113007
113044
  if (((_a3 = pendingAddedPropertyRef.current) == null ? void 0 : _a3.entityId) === contextEntity["@id"]) return;
113045
+ if (isAiScrollRestoreSuppressed()) return;
113008
113046
  if (pendingTab) {
113009
113047
  debugScroll("restore.pending-tab", {
113010
113048
  entityId: contextEntity["@id"],
@@ -113580,6 +113618,7 @@ const RenderEntity = forwardRef((props, ref) => {
113580
113618
  if (!hasFieldValue(contextEntity == null ? void 0 : contextEntity[property]) && hideEmptyFields) {
113581
113619
  setHideEmptyFields(false);
113582
113620
  }
113621
+ suppressAiScrollRestore();
113583
113622
  pendingAiScrollPropertyRef.current = property;
113584
113623
  const propertyTab = renderTabs ? findTabForProperty(tabs, property) : null;
113585
113624
  if ((propertyTab == null ? void 0 : propertyTab.name) && propertyTab.name !== activeTab) {
@@ -113599,18 +113638,18 @@ const RenderEntity = forwardRef((props, ref) => {
113599
113638
  tabs
113600
113639
  ]);
113601
113640
  useEffect(() => {
113602
- var _a3;
113603
113641
  const entityId = contextEntity == null ? void 0 : contextEntity["@id"];
113604
- const firstPendingProperty = (_a3 = pendingAiApprovals[0]) == null ? void 0 : _a3.propertyName;
113642
+ const firstPendingApproval = pendingAiApprovals[0];
113643
+ const firstPendingProperty = firstPendingApproval == null ? void 0 : firstPendingApproval.propertyName;
113605
113644
  if (!entityId || !firstPendingProperty) {
113606
113645
  lastAutoNavigatedAiApprovalRef.current = null;
113607
113646
  return;
113608
113647
  }
113609
- const autoNavigationKey = `${entityId}:${firstPendingProperty}`;
113648
+ const autoNavigationKey = `${(profileManager == null ? void 0 : profileManager.$key) ?? 0}:${buildAiApprovalNavigationKey(entityId, firstPendingApproval)}`;
113610
113649
  if (lastAutoNavigatedAiApprovalRef.current === autoNavigationKey) return;
113611
113650
  lastAutoNavigatedAiApprovalRef.current = autoNavigationKey;
113612
113651
  navigateToAiApproval(0);
113613
- }, [contextEntity == null ? void 0 : contextEntity["@id"], navigateToAiApproval, pendingAiApprovals]);
113652
+ }, [contextEntity == null ? void 0 : contextEntity["@id"], navigateToAiApproval, pendingAiApprovals, profileManager == null ? void 0 : profileManager.$key]);
113614
113653
  useEffect(() => {
113615
113654
  const pendingProperty = pendingAiScrollPropertyRef.current;
113616
113655
  if (!pendingProperty) return;
@@ -113621,8 +113660,16 @@ const RenderEntity = forwardRef((props, ref) => {
113621
113660
  return;
113622
113661
  }
113623
113662
  const cancelScroll = scrollToAiApprovalProperty(pendingProperty);
113663
+ const captureTimer = window.setTimeout(() => {
113664
+ if (activeContentRef.current) {
113665
+ captureViewContext(activeTab, activeContentRef.current.scrollTop);
113666
+ }
113667
+ }, 350);
113624
113668
  pendingAiScrollPropertyRef.current = null;
113625
- return cancelScroll;
113669
+ return () => {
113670
+ cancelScroll();
113671
+ window.clearTimeout(captureTimer);
113672
+ };
113626
113673
  }, [activeTab, contextEntity == null ? void 0 : contextEntity["@id"], renderTabs, selectedAiApprovalIndex, tabs, scrollToAiApprovalProperty]);
113627
113674
  const isEntityReference2 = (value) => Boolean(value && typeof value === "object" && typeof value["@id"] === "string");
113628
113675
  const restoreNonCoreApprovalValue = (approvalRecord) => {
@@ -121716,7 +121763,7 @@ const en = {
121716
121763
  translation: {
121717
121764
  hello_one: "hello world",
121718
121765
  hello_other: "hello worlds",
121719
- // RenderControls.component.vue
121766
+ // RenderControls.tsx
121720
121767
  root_dataset_label: "Root dataset",
121721
121768
  add_label: "Add",
121722
121769
  edit_context_label: "Edit context",
@@ -121732,56 +121779,57 @@ const en = {
121732
121779
  edit_context: "Edit Context",
121733
121780
  preview_crate: "Preview Crate",
121734
121781
  browse_entities: "Browse entities",
121735
- // DialogAddProperty.component.vue
121782
+ // DialogAddProperty.tsx
121736
121783
  filter_attribute_set: "Filter the attribute set",
121737
- // DialogEditContext.component.vue
121784
+ // DialogEditContext.tsx
121738
121785
  save_label: "Save",
121739
- // DialogPreviewCrate.component.vue
121786
+ // DialogPreviewCrate.tsx
121740
121787
  preview_loading: "loading ...",
121741
- // DialogBrowseEntities.component.vue
121788
+ // DialogBrowseEntities.tsx
121742
121789
  search_for_connection: "Search for a connection",
121743
121790
  filter_by_type: "Filter by type",
121744
- // DialogSaveCrateAsTemplate.component.vue
121791
+ // DialogSaveCrateAsTemplate.tsx
121745
121792
  save_template_prompt: "Save this crate as a template for re-use",
121746
121793
  provide_name_for_template: "provide a name for the crate template",
121747
- // RenderEntityName.component.vue
121794
+ // EntityName.tsx
121748
121795
  name_field_label: "Name",
121749
121796
  name_field_help: "A short, descriptive name for this item.",
121750
- // Add.component.vue
121797
+ type_field_label: "Type",
121798
+ // Add.tsx
121751
121799
  associate_existing_prompt: "Associate an existing '{{addType}}' (lookup by identifier or name) or create a new '{{addType}}' by typing a name for it.",
121752
121800
  associate_any_prompt: "Associate any entity (lookup by identifier or name).",
121753
121801
  add_text: "Add text",
121754
- // Text.component.vue
121802
+ // Text.tsx
121755
121803
  invalid_type_for_text: "The type '{{type}}' is not valid for this component. It can only be 'text' or 'textarea'",
121756
121804
  text_constraints_error_message: "The specified value does not meet the following constraints: {{- value}}, or it is considered invalid.",
121757
- // Date.component.vue
121805
+ // Date.tsx
121758
121806
  pick_a_date: "Pick a date",
121759
121807
  invalid_date_value: "The supplied date '{{value}}' is invalid. Date format is: YYYY-MM-DD or an ISO String. e.g. 2021-03-22 or 2022-09-28T02:20:56.521Z.",
121760
- // DateTime.component.vue
121808
+ // DateTime.tsx
121761
121809
  pick_a_datetime: "Pick a date and time",
121762
121810
  invalid_datetime_value: "The supplied date/time '{{value}}' is invalid. Date/Time format is: YYYY-MM-DD HH:mm:ss or an ISO String. e.g. 2021-03-22 03:23:00 or 2022-09-28T02:20:56.521Z.",
121763
- // Time.component.vue
121811
+ // Time.tsx
121764
121812
  provide_time: "Please provide a time.",
121765
121813
  invalid_time_value: "The supplied time '{{value}}' is invalid. Time format is: HH:mm::ss. e.g. 09:03:59",
121766
- // Number.component.vue
121814
+ // Number.tsx
121767
121815
  invalid_number_value: "The supplied number '{{value}}' is invalid. The value must be a valid number passed in as a String or a Number.",
121768
121816
  number_constraints_error_message: "The specified number does not meet the following constraints: {{value}}",
121769
- // Select.component.vue
121817
+ // Select.tsx
121770
121818
  select: "Select",
121771
121819
  invalid_select_value: "The definition provided to this component has values of the wrong from. It can only be an array of strings",
121772
- // Url.component.vue
121820
+ // Url.tsx
121773
121821
  invalid_url_value: "The entry needs to be a valid url. The accepted protocols are: http, https, ftp, ftps and arcp.",
121774
- // Boolean.component.vue
121822
+ // Boolean.tsx
121775
121823
  true_label: "True",
121776
121824
  false_label: "False",
121777
- // SelectUrl.component.vue
121825
+ // SelectUrl.tsx
121778
121826
  // select: as above
121779
121827
  invalid_selecturl_value: "The value '{{value}}' provided to this component is of the wrong from. It can only be a valid URL.",
121780
121828
  invalid_selecturl_values: "The definition provided to this component has values of the wrong from. It can only be an array of strings which are each valid URLs.",
121781
- // SelectObject.component.vue
121829
+ // SelectObject.tsx
121782
121830
  // select: as above
121783
121831
  invalid_selectobject_values: "The definition provided to this component has values of the wrong from. It can only be an array of JSON-LD objects and each object, at a minimum, must have '@id', '@type' and 'name' defined.",
121784
- // Geo.component.vue
121832
+ // Geo.tsx
121785
121833
  define_location: "Define a location by selecting on the map",
121786
121834
  center_map: "center map",
121787
121835
  select_region: "select region",
@@ -121792,9 +121840,9 @@ const en = {
121792
121840
  provide_name_for_location: "Please provide a name for this location - optional",
121793
121841
  provide_name_for_location_error: "You need to provide a name for this location",
121794
121842
  select_existing_location: "Select a location that has already been defined",
121795
- // Value.component.vue
121843
+ // Value.tsx
121796
121844
  invalid_value_value: "The supplied value '{{value}}' is invalid. It can only be a string.",
121797
- // AutoComplete.component.vue
121845
+ // AutoComplete.tsx
121798
121846
  select_existing_or_create_new: "select an existing entity or create a new one",
121799
121847
  create_new_of_type: "Create new {{type}}",
121800
121848
  external_lookup_timeout_error: "External Lookup Timeout",
@@ -121805,7 +121853,7 @@ const en = {
121805
121853
  associate_user_created_entity: "Associate a user created entity",
121806
121854
  associate_from_datapack: "Associate a verified entity from a datapack",
121807
121855
  create_new_entity: "Create new entity",
121808
- // AddControl.component.vue
121856
+ // AddControl.tsx
121809
121857
  select_a_type_to_add: "Select a type to add",
121810
121858
  // Shell2.tsx
121811
121859
  add_profile_button_tooltip: "Add a new profile",
@@ -121813,21 +121861,120 @@ const en = {
121813
121861
  switch_to_label_view: "Switch to default view",
121814
121862
  // EntityType.tsx
121815
121863
  select_a_class_to_add: "Select a class to add",
121816
- // PaginateLinkedEntities.component.vue
121864
+ // PaginateLinkedEntities.tsx
121817
121865
  filter_the_entities: "Filter the entities",
121818
121866
  pagination_total: "Total: {{total}}",
121819
- // RenderEntityProperty.component.vue
121867
+ // EntityProperty.tsx
121820
121868
  not_defined_in_profile: "not defined in profile",
121821
- // RenderReverseConnections.component.vue
121869
+ // RenderReverseConnections.tsx
121822
121870
  // search_for_connection: defined before
121823
- links_to_this_entity: "Links to this entity:"
121871
+ links_to_this_entity: "Links to this entity:",
121872
+ // AiEditedFieldBadge.tsx
121873
+ ai_edited_by_ai: "Edited by AI",
121874
+ ai_deleted_by_ai: "Deleted by AI",
121875
+ // AiApprovalStepperHeader.tsx
121876
+ ai_field_one: "field",
121877
+ ai_field_other: "fields",
121878
+ ai_entity_one: "entity",
121879
+ ai_entity_other: "entities",
121880
+ ai_changes_remaining_aria: "AI changes remaining",
121881
+ ai_remaining_review_message_one: "{{fieldCount}} AI field still needs review in {{entityCount}} other {{entityLabel}}",
121882
+ ai_remaining_review_message_other: "{{fieldCount}} AI fields still need review in {{entityCount}} other {{entityLabel}}",
121883
+ ai_review_next: "Review next",
121884
+ ai_changes_need_review: "AI changes need review",
121885
+ ai_changes_need_review_property: "AI changes need review: {{property}}",
121886
+ ai_change_review_aria: "AI change review",
121887
+ ai_review_next_entity_tooltip: "Review the next entity with pending AI changes",
121888
+ ai_no_other_entities_need_review: "No other entities need AI review",
121889
+ ai_accept_all_tooltip: "Accept every pending AI change in this entity",
121890
+ ai_accept_all: "Accept all",
121891
+ ai_reject_all_tooltip: "Restore previous values for every pending AI change in this entity",
121892
+ ai_reject_all: "Reject all",
121893
+ ai_pending_field_navigation_aria: "Pending AI field navigation",
121894
+ ai_previous_pending_field: "Previous pending field",
121895
+ ai_previous_pending_field_aria: "Previous pending AI field",
121896
+ ai_next_pending_field: "Next pending field",
121897
+ ai_next_pending_field_aria: "Next pending AI field",
121898
+ // AiEntityReviewSummary.tsx
121899
+ ai_fields_to_review_one: "{{count}} field to review",
121900
+ ai_fields_to_review_other: "{{count}} fields to review",
121901
+ ai_show_entity_diff: "Show entity diff",
121902
+ ai_show_entity_diff_aria: "Show AI entity diff",
121903
+ ai_review_entity: "Review entity",
121904
+ // AiEntityDiffView.tsx
121905
+ ai_empty_value: "empty",
121906
+ ai_deleted_entity_title: "AI deleted entity: {{entityId}}",
121907
+ ai_unlinked_entity_title: "AI unlinked entity: {{entityId}}",
121908
+ ai_edited_entity_title: "AI edited entity: {{entityId}}",
121909
+ ai_hide_entity_diff: "Hide entity diff",
121910
+ ai_hide_entity_diff_aria: "Hide AI entity diff",
121911
+ ai_approve_deletion_tooltip: "Approve this AI deletion",
121912
+ ai_approve_unlink_tooltip: "Approve this AI unlink",
121913
+ ai_accept_entity_edits_tooltip: "Accept every AI edit for this entity",
121914
+ ai_delete_entity: "Delete entity",
121915
+ ai_unlink_entity: "Unlink entity",
121916
+ ai_accept_edit: "Accept edit",
121917
+ ai_restore_deleted_entity_tooltip: "Restore this entity and mark the deletion reviewed",
121918
+ ai_restore_link_tooltip: "Restore this link and mark the unlink reviewed",
121919
+ ai_restore_entity_values_tooltip: "Restore previous values for this entity",
121920
+ ai_keep_entity: "Keep entity",
121921
+ ai_restore_link: "Restore link",
121922
+ ai_reject_edit: "Reject edit",
121923
+ // AiFieldDiffView.tsx
121924
+ ai_field_diff_aria: "AI field diff",
121925
+ ai_proposed_deletion: "Proposed deletion",
121926
+ ai_proposed_change: "Proposed change",
121927
+ ai_edit_chip: "AI edit",
121928
+ // AI review controls
121929
+ ai_delete_badge: "AI delete",
121930
+ ai_suggestion_badge: "AI suggestion",
121931
+ ai_unlink_badge: "AI unlink",
121932
+ ai_hide_diff: "Hide diff",
121933
+ ai_show_diff: "Show diff",
121934
+ ai_hide_ai_diff_aria: "Hide AI diff",
121935
+ ai_show_ai_diff_aria: "Show AI diff",
121936
+ ai_approve_suggested_value_tooltip: "Approve this AI-suggested value",
121937
+ ai_restore_previous_value_tooltip: "Restore the previous value and mark this suggestion reviewed",
121938
+ ai_delete: "Delete",
121939
+ ai_accept: "Accept",
121940
+ ai_restore: "Restore",
121941
+ ai_reject: "Reject",
121942
+ // DeletedLinkedEntityCard.tsx
121943
+ ai_fields_can_be_restored_one: "{{count}} field can be restored.",
121944
+ ai_fields_can_be_restored_other: "{{count}} fields can be restored.",
121945
+ ai_hide_deleted_fields: "Hide deleted fields",
121946
+ ai_show_deleted_fields: "Show deleted fields",
121947
+ ai_hide_deleted_fields_aria: "Hide deleted AI fields",
121948
+ ai_show_deleted_fields_aria: "Show deleted AI fields",
121949
+ // UnlinkedLinkedEntityCard.tsx
121950
+ ai_diff_label_entity: "entity",
121951
+ ai_diff_label_linked_from: "linked from",
121952
+ ai_hide_unlink_diff: "Hide unlink diff",
121953
+ ai_show_unlink_diff: "Show unlink diff",
121954
+ ai_hide_unlink_diff_aria: "Hide AI unlink diff",
121955
+ ai_show_unlink_diff_aria: "Show AI unlink diff",
121956
+ // LinkedEntityCard.tsx / DialogBrowseEntities.tsx
121957
+ ai_entity_was_added_by_ai: "Entity was added by AI",
121958
+ // QuickSettingsHeader.tsx
121959
+ quick_filter_settings_aria: "Quick filter settings",
121960
+ field_display_settings_aria: "Field display settings",
121961
+ hide_field_help: "Hide field help",
121962
+ show_field_help: "Show field help",
121963
+ show_empty_fields: "Show fields with no value",
121964
+ hide_empty_fields: "Hide fields with no value",
121965
+ show_all_fields: "Show all fields",
121966
+ show_ai_edited_fields: "Show AI-edited fields",
121967
+ filter_fields_by_name_or_value: "Filter fields by name or value",
121968
+ clear_field_filter: "Clear field filter",
121969
+ // EntityId.tsx
121970
+ open_in_new_tab: "Open in new tab"
121824
121971
  }
121825
121972
  };
121826
121973
  const hu = {
121827
121974
  translation: {
121828
121975
  hello_one: "szia világ",
121829
121976
  hello_other: "sziasztok világok",
121830
- // RenderControls.component.vue
121977
+ // RenderControls.tsx
121831
121978
  root_dataset_label: "Gyökér adatcsomag",
121832
121979
  add_label: "Új elem",
121833
121980
  edit_context_label: "Kontextus szerkesztése",
@@ -121843,56 +121990,57 @@ const hu = {
121843
121990
  edit_context: "Kontextus szerkesztése",
121844
121991
  preview_crate: "Csomag előnézete",
121845
121992
  browse_entities: "Entitások böngészése",
121846
- // DialogAddProperty.component.vue
121993
+ // DialogAddProperty.tsx
121847
121994
  filter_attribute_set: "Attribútumok szűrése",
121848
- // DialogEditContext.component.vue
121995
+ // DialogEditContext.tsx
121849
121996
  save_label: "Mentés",
121850
- // DialogPreviewCrate.component.vue
121997
+ // DialogPreviewCrate.tsx
121851
121998
  preview_loading: "betöltés ...",
121852
- // DialogBrowseEntities.component.vue
121999
+ // DialogBrowseEntities.tsx
121853
122000
  search_for_connection: "Kapcsolt entitás keresése",
121854
122001
  filter_by_type: "Típus szerinti szűrés",
121855
- // DialogSaveCrateAsTemplate.component.vue
122002
+ // DialogSaveCrateAsTemplate.tsx
121856
122003
  save_template_prompt: "Csomag mentése mintaként",
121857
122004
  provide_name_for_template: "minta neve",
121858
- // RenderEntityName.component.vue
122005
+ // EntityName.tsx
121859
122006
  name_field_label: "Név",
121860
122007
  name_field_help: "Az entitás rövid, leíró neve",
121861
- // Add.component.vue
122008
+ type_field_label: "Típus",
122009
+ // Add.tsx
121862
122010
  associate_existing_prompt: "Egy létező '{{addType}}' társítása (név vagy azonosító alapú kereséssel) vagy egy új '{{addType}}' létrehozása a név megadásával",
121863
122011
  associate_any_prompt: "Bármely entitás hozzárendelése (azonosító vagy név alapján)",
121864
122012
  add_text: "Szöveg hozzáadása",
121865
- // Text.component.vue
122013
+ // Text.tsx
121866
122014
  invalid_type_for_text: "'{{type}}' típus nem használható ezzel a komponenssel. A típus csak 'text' vagy 'textarea' lehet",
121867
122015
  text_constraints_error_message: "A megadott érték nem felel meg a következő megszorításoknak: {{- value}}, vagy érvénytelen.",
121868
- // Date.component.vue
122016
+ // Date.tsx
121869
122017
  pick_a_date: "Válassz dátumot!",
121870
122018
  invalid_date_value: "A megadott dátum '{{value}}' nem megfelelő. Az elvárt dátum formátum: YYYY-MM-DD vagy egy ISO dátum, pl. 2021-03-22 or 2022-09-28T02:20:56.521Z.",
121871
- // DateTime.component.vue
122019
+ // DateTime.tsx
121872
122020
  pick_a_datetime: "Válassz dátumot és időt!",
121873
122021
  invalid_datetime_value: "A megadott dátum/idő '{{value}}' nem megfelelő. Az elvárt dátum/idő formátum: YYYY-MM-DD HH:mm:ss vagy egy ISO dátum, pl. 2021-03-22 03:23:00 or 2022-09-28T02:20:56.521Z.",
121874
- // Time.component.vue
122022
+ // Time.tsx
121875
122023
  provide_time: "Add meg az időt!",
121876
122024
  invalid_time_value: "A megadott érték '{{value}}' nem megfelelő. Az elvárt idő formátum: HH:mm::ss. pl. 09:03:59",
121877
- // Number.component.vue
122025
+ // Number.tsx
121878
122026
  invalid_number_value: "A megadott érték '{{value}}' nem megfelelő. Az értéket String vagy Number típusként kell megadni",
121879
122027
  number_constraints_error_message: "A megadott szám nem felel meg a következő megszorításoknak: {{value}}",
121880
- // Select.component.vue
122028
+ // Select.tsx
121881
122029
  select: "Válassz!",
121882
122030
  invalid_select_value: "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak karakterláncokból álló tömb lehet.",
121883
- // Url.component.vue
122031
+ // Url.tsx
121884
122032
  invalid_url_value: "A bejegyzésnek érvényes URL-nek kell lennie. Az elfogadott protokollok: http, https, ftp, ftps és arcp.",
121885
- // Boolean.component.vue
122033
+ // Boolean.tsx
121886
122034
  true_label: "Igaz",
121887
122035
  false_label: "Hamis",
121888
- // SelectUrl.component.vue
122036
+ // SelectUrl.tsx
121889
122037
  // select: as above
121890
122038
  invalid_selecturl_value: "A megadott '{{value}}' érték nem megfelelő formátumú. Csak érvényes URL lehet.",
121891
122039
  invalid_selecturl_values: "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak olyan karakterláncokból álló tömb lehet, amelyek mindegyike érvényes URL.",
121892
- // SelectObject.component.vue
122040
+ // SelectObject.tsx
121893
122041
  // select: as above
121894
122042
  invalid_selectobject_values: "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak JSON-LD objektumokból álló tömb lehet, és minden objektumnak legalább '@id', '@type' és 'name' meghatározással kell rendelkeznie.",
121895
- // Geo.component.vue
122043
+ // Geo.tsx
121896
122044
  define_location: "Határozz meg egy helyet a térképen történő kiválasztással!",
121897
122045
  center_map: "térkép középre állítása",
121898
122046
  select_region: "régió kiválasztása",
@@ -121903,9 +122051,9 @@ const hu = {
121903
122051
  provide_name_for_location: "Adj nevet ennek a helynek!",
121904
122052
  provide_name_for_location_error: "A hely nevének megadása kötelező!",
121905
122053
  select_existing_location: "Válassz egy már meghatározott helyet a csomagban!",
121906
- // Value.component.vue
122054
+ // Value.tsx
121907
122055
  invalid_value_value: "A megadott '{{value}}' érték érvénytelen. Csak karakterlánc lehet.",
121908
- // AutoComplete.component.vue
122056
+ // AutoComplete.tsx
121909
122057
  select_existing_or_create_new: "válassz egy meglévő entitást vagy hozz létre egy újat",
121910
122058
  create_new_of_type: "Új {{type}} létrehozása",
121911
122059
  external_lookup_timeout_error: "Külső lekérdezési időtúllépés",
@@ -121916,7 +122064,7 @@ const hu = {
121916
122064
  associate_user_created_entity: "Kapcsolj egy felhasználó által létrehozott entitást",
121917
122065
  associate_from_datapack: "Kapcsolj egy ellenőrzött entitást egy adatcsomagból",
121918
122066
  create_new_entity: "Új entitás létrehozása",
121919
- // AddControl.component.vue
122067
+ // AddControl.tsx
121920
122068
  select_a_type_to_add: "Válassz hozzáadandó típust",
121921
122069
  // Shell2.tsx
121922
122070
  add_profile_button_tooltip: "Új profil hozzáadása",
@@ -121924,14 +122072,113 @@ const hu = {
121924
122072
  switch_to_label_view: "Alap nézetre váltás",
121925
122073
  // EntityType.tsx
121926
122074
  select_a_class_to_add: "Válassz hozzáadandó osztályt",
121927
- // PaginateLinkedEntities.component.vue
122075
+ // PaginateLinkedEntities.tsx
121928
122076
  filter_the_entities: "Entitások szűrése",
121929
122077
  pagination_total: "Összesen: {{total}}",
121930
- // RenderEntityProperty.component.vue
122078
+ // EntityProperty.tsx
121931
122079
  not_defined_in_profile: "nincs definiálva a profilban",
121932
- // RenderReverseConnections.component.vue
122080
+ // RenderReverseConnections.tsx
121933
122081
  // search_for_connection: defined before
121934
- links_to_this_entity: "Entitásra mutató hivatkozások:"
122082
+ links_to_this_entity: "Entitásra mutató hivatkozások:",
122083
+ // AiEditedFieldBadge.tsx
122084
+ ai_edited_by_ai: "AI által szerkesztve",
122085
+ ai_deleted_by_ai: "AI által törölve",
122086
+ // AiApprovalStepperHeader.tsx
122087
+ ai_field_one: "mező",
122088
+ ai_field_other: "mező",
122089
+ ai_entity_one: "entitás",
122090
+ ai_entity_other: "entitás",
122091
+ ai_changes_remaining_aria: "Fennmaradó AI módosítások",
122092
+ ai_remaining_review_message_one: "{{fieldCount}} AI mező még ellenőrzésre vár {{entityCount}} másik {{entityLabel}} esetén",
122093
+ ai_remaining_review_message_other: "{{fieldCount}} AI mező még ellenőrzésre vár {{entityCount}} másik {{entityLabel}} esetén",
122094
+ ai_review_next: "Következő ellenőrzése",
122095
+ ai_changes_need_review: "AI módosítások ellenőrzésre várnak",
122096
+ ai_changes_need_review_property: "AI módosítások ellenőrzésre várnak: {{property}}",
122097
+ ai_change_review_aria: "AI módosítás ellenőrzése",
122098
+ ai_review_next_entity_tooltip: "Következő, AI módosítással rendelkező entitás ellenőrzése",
122099
+ ai_no_other_entities_need_review: "Nincs több AI ellenőrzésre váró entitás",
122100
+ ai_accept_all_tooltip: "Az entitás összes függőben lévő AI módosításának elfogadása",
122101
+ ai_accept_all: "Összes elfogadása",
122102
+ ai_reject_all_tooltip: "Az entitás összes függőben lévő AI módosításának visszaállítása az előző értékre",
122103
+ ai_reject_all: "Összes elutasítása",
122104
+ ai_pending_field_navigation_aria: "Függőben lévő AI mezők navigációja",
122105
+ ai_previous_pending_field: "Előző függő mező",
122106
+ ai_previous_pending_field_aria: "Előző függőben lévő AI mező",
122107
+ ai_next_pending_field: "Következő függő mező",
122108
+ ai_next_pending_field_aria: "Következő függőben lévő AI mező",
122109
+ // AiEntityReviewSummary.tsx
122110
+ ai_fields_to_review_one: "{{count}} mező ellenőrzésre vár",
122111
+ ai_fields_to_review_other: "{{count}} mező ellenőrzésre vár",
122112
+ ai_show_entity_diff: "Entitás eltéréseinek megjelenítése",
122113
+ ai_show_entity_diff_aria: "AI entitáseltérés megjelenítése",
122114
+ ai_review_entity: "Entitás ellenőrzése",
122115
+ // AiEntityDiffView.tsx
122116
+ ai_empty_value: "üres",
122117
+ ai_deleted_entity_title: "AI által törölt entitás: {{entityId}}",
122118
+ ai_unlinked_entity_title: "AI által leválasztott entitás: {{entityId}}",
122119
+ ai_edited_entity_title: "AI által szerkesztett entitás: {{entityId}}",
122120
+ ai_hide_entity_diff: "Entitáseltérés elrejtése",
122121
+ ai_hide_entity_diff_aria: "AI entitáseltérés elrejtése",
122122
+ ai_approve_deletion_tooltip: "AI törlés jóváhagyása",
122123
+ ai_approve_unlink_tooltip: "AI leválasztás jóváhagyása",
122124
+ ai_accept_entity_edits_tooltip: "Az entitás összes AI szerkesztésének elfogadása",
122125
+ ai_delete_entity: "Entitás törlése",
122126
+ ai_unlink_entity: "Entitás leválasztása",
122127
+ ai_accept_edit: "Szerkesztés elfogadása",
122128
+ ai_restore_deleted_entity_tooltip: "Entitás visszaállítása és a törlés ellenőrzöttként jelölése",
122129
+ ai_restore_link_tooltip: "Kapcsolat visszaállítása és a leválasztás ellenőrzöttként jelölése",
122130
+ ai_restore_entity_values_tooltip: "Az entitás előző értékeinek visszaállítása",
122131
+ ai_keep_entity: "Entitás megtartása",
122132
+ ai_restore_link: "Kapcsolat visszaállítása",
122133
+ ai_reject_edit: "Szerkesztés elutasítása",
122134
+ // AiFieldDiffView.tsx
122135
+ ai_field_diff_aria: "AI mezőeltérés",
122136
+ ai_proposed_deletion: "Javasolt törlés",
122137
+ ai_proposed_change: "Javasolt módosítás",
122138
+ ai_edit_chip: "AI szerkesztés",
122139
+ // AI review controls
122140
+ ai_delete_badge: "AI törlés",
122141
+ ai_suggestion_badge: "AI javaslat",
122142
+ ai_unlink_badge: "AI leválasztás",
122143
+ ai_hide_diff: "Eltérés elrejtése",
122144
+ ai_show_diff: "Eltérés megjelenítése",
122145
+ ai_hide_ai_diff_aria: "AI eltérés elrejtése",
122146
+ ai_show_ai_diff_aria: "AI eltérés megjelenítése",
122147
+ ai_approve_suggested_value_tooltip: "AI által javasolt érték jóváhagyása",
122148
+ ai_restore_previous_value_tooltip: "Előző érték visszaállítása és a javaslat ellenőrzöttként jelölése",
122149
+ ai_delete: "Törlés",
122150
+ ai_accept: "Elfogadás",
122151
+ ai_restore: "Visszaállítás",
122152
+ ai_reject: "Elutasítás",
122153
+ // DeletedLinkedEntityCard.tsx
122154
+ ai_fields_can_be_restored_one: "{{count}} mező visszaállítható.",
122155
+ ai_fields_can_be_restored_other: "{{count}} mező visszaállítható.",
122156
+ ai_hide_deleted_fields: "Törölt mezők elrejtése",
122157
+ ai_show_deleted_fields: "Törölt mezők megjelenítése",
122158
+ ai_hide_deleted_fields_aria: "Törölt AI mezők elrejtése",
122159
+ ai_show_deleted_fields_aria: "Törölt AI mezők megjelenítése",
122160
+ // UnlinkedLinkedEntityCard.tsx
122161
+ ai_diff_label_entity: "entitás",
122162
+ ai_diff_label_linked_from: "kapcsolva innen",
122163
+ ai_hide_unlink_diff: "Leválasztási eltérés elrejtése",
122164
+ ai_show_unlink_diff: "Leválasztási eltérés megjelenítése",
122165
+ ai_hide_unlink_diff_aria: "AI leválasztási eltérés elrejtése",
122166
+ ai_show_unlink_diff_aria: "AI leválasztási eltérés megjelenítése",
122167
+ // LinkedEntityCard.tsx / DialogBrowseEntities.tsx
122168
+ ai_entity_was_added_by_ai: "Az entitást AI adta hozzá",
122169
+ // QuickSettingsHeader.tsx
122170
+ quick_filter_settings_aria: "Gyors szűrési beállítások",
122171
+ field_display_settings_aria: "Mezőmegjelenítési beállítások",
122172
+ hide_field_help: "Mezősúgó elrejtése",
122173
+ show_field_help: "Mezősúgó megjelenítése",
122174
+ show_empty_fields: "Érték nélküli mezők megjelenítése",
122175
+ hide_empty_fields: "Érték nélküli mezők elrejtése",
122176
+ show_all_fields: "Összes mező megjelenítése",
122177
+ show_ai_edited_fields: "AI által szerkesztett mezők megjelenítése",
122178
+ filter_fields_by_name_or_value: "Mezők szűrése név vagy érték alapján",
122179
+ clear_field_filter: "Mezőszűrő törlése",
122180
+ // EntityId.tsx
122181
+ open_in_new_tab: "Megnyitás új lapon"
121935
122182
  }
121936
122183
  };
121937
122184
  instance.use(initReactI18next).init({
@@ -122793,7 +123040,7 @@ var EmotionCacheContext = /* @__PURE__ */ React.createContext(
122793
123040
  }) : null
122794
123041
  );
122795
123042
  var CacheProvider = EmotionCacheContext.Provider;
122796
- const version = "0.1.32-test3";
123043
+ const version = "0.1.32";
122797
123044
  const pkg = {
122798
123045
  version
122799
123046
  };