@arpproject/recrate 0.1.32-test4 → 0.1.33

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,57 @@ 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
+ aiEditedFieldCount > 0 && /* @__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
+ onClick: onToggleAiEditedFields,
110733
+ children: "✦"
110734
+ }
110735
+ ) })
110736
+ ] }),
110737
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
110738
+ Input2,
110720
110739
  {
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" })
110740
+ className: "describo-quick-settings-filter",
110741
+ value: fieldTitleFilter,
110742
+ placeholder: String(t2("filter_fields_by_name_or_value")),
110743
+ "aria-label": String(t2("filter_fields_by_name_or_value")),
110744
+ onChange: (event) => onFieldTitleFilterChange(event.target.value),
110745
+ allowClear: {
110746
+ clearIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$B, { "aria-label": String(t2("clear_field_filter")) })
110747
+ }
110741
110748
  }
110742
- }
110743
- )
110744
- ] });
110749
+ )
110750
+ ] });
110751
+ };
110745
110752
  const AiApprovalStepperHeader = ({
110746
110753
  activeIndex,
110747
110754
  pendingCount,
@@ -110757,12 +110764,17 @@ const AiApprovalStepperHeader = ({
110757
110764
  onRejectAll,
110758
110765
  onReviewNextEntity
110759
110766
  }) => {
110767
+ const { t: t2 } = useTranslation();
110760
110768
  if (!pendingCount && !remainingEntityCount) return null;
110761
110769
  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: [
110770
+ const entityLabel = t2("ai_entity", { count: remainingEntityCount });
110771
+ const remainingMessage = t2("ai_remaining_review_message", {
110772
+ count: remainingFieldCount,
110773
+ fieldCount: remainingFieldCount,
110774
+ entityCount: remainingEntityCount,
110775
+ entityLabel
110776
+ });
110777
+ 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
110778
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-message", children: [
110767
110779
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-confirm-spark", children: "✦" }),
110768
110780
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: remainingMessage })
@@ -110772,66 +110784,66 @@ const AiApprovalStepperHeader = ({
110772
110784
  {
110773
110785
  className: "describo-ai-review-next-entity",
110774
110786
  onClick: onReviewNextEntity,
110775
- children: "Review next"
110787
+ children: t2("ai_review_next")
110776
110788
  }
110777
110789
  ) })
110778
110790
  ] });
110779
110791
  }
110780
110792
  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: [
110793
+ const message = activePropertyLabel ? t2("ai_changes_need_review_property", { property: activePropertyLabel }) : t2("ai_changes_need_review");
110794
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-bar", role: "region", "aria-label": String(t2("ai_change_review_aria")), children: [
110783
110795
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-confirm-message", children: [
110784
110796
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-confirm-spark", children: "✦" }),
110785
110797
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: message })
110786
110798
  ] }),
110787
110799
  /* @__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(
110800
+ 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
110801
  Button$1,
110790
110802
  {
110791
110803
  className: "describo-ai-review-next-entity",
110792
110804
  disabled: remainingEntityCount === 0,
110793
110805
  onClick: onReviewNextEntity,
110794
- children: "Review next"
110806
+ children: t2("ai_review_next")
110795
110807
  }
110796
110808
  ) }),
110797
110809
  !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(
110810
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_accept_all_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110799
110811
  Button$1,
110800
110812
  {
110801
110813
  className: "describo-ai-bulk-action describo-ai-bulk-accept",
110802
110814
  onClick: onAcceptAll,
110803
- children: "Accept all"
110815
+ children: t2("ai_accept_all")
110804
110816
  }
110805
110817
  ) }),
110806
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Restore previous values for every pending AI change in this entity", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110818
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_reject_all_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110807
110819
  Button$1,
110808
110820
  {
110809
110821
  className: "describo-ai-bulk-action describo-ai-bulk-reject",
110810
110822
  onClick: onRejectAll,
110811
- children: "Reject all"
110823
+ children: t2("ai_reject_all")
110812
110824
  }
110813
110825
  ) })
110814
110826
  ] }),
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(
110827
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "describo-ai-stepper", "aria-label": String(t2("ai_pending_field_navigation_aria")), children: [
110828
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_previous_pending_field"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110817
110829
  Button$1,
110818
110830
  {
110819
110831
  type: "text",
110820
110832
  size: "small",
110821
110833
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$p, {}),
110822
- "aria-label": "Previous pending AI field",
110834
+ "aria-label": String(t2("ai_previous_pending_field_aria")),
110823
110835
  disabled: !canGoPrevious,
110824
110836
  onClick: onPrevious
110825
110837
  }
110826
110838
  ) }),
110827
110839
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "describo-ai-step-count", children: stepLabel }),
110828
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: "Next pending field", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110840
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("ai_next_pending_field"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
110829
110841
  Button$1,
110830
110842
  {
110831
110843
  type: "text",
110832
110844
  size: "small",
110833
110845
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$u, {}),
110834
- "aria-label": "Next pending AI field",
110846
+ "aria-label": String(t2("ai_next_pending_field_aria")),
110835
110847
  disabled: !canGoNext,
110836
110848
  onClick: onNext
110837
110849
  }
@@ -112524,8 +112536,19 @@ const buildAiApprovalNavigationKey = (entityId, approvalRecord) => {
112524
112536
  return `${entityId}:${propertyName2}:${operation}:${timestamp}:${previousValue}`;
112525
112537
  };
112526
112538
  const RenderEntity = forwardRef((props, ref) => {
112527
- var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
112528
- const { entity, onLoadEntity, onSaveCrate, onSaveEntityTemplate, onWarning, onError, onAddNewProfileRequest, onRemoveProfile } = props;
112539
+ var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
112540
+ const {
112541
+ entity,
112542
+ onLoadEntity,
112543
+ onSaveCrate,
112544
+ onSaveEntityTemplate,
112545
+ onWarning,
112546
+ onError,
112547
+ quickSettingsVisible: controlledQuickSettingsVisible,
112548
+ onQuickSettingsVisibleChange,
112549
+ onAddNewProfileRequest,
112550
+ onRemoveProfile
112551
+ } = props;
112529
112552
  const state = useStateStore();
112530
112553
  const profileManager = useContext(ProfileManagerContext);
112531
112554
  const crateManager = useContext(CrateManagerContext);
@@ -112541,7 +112564,7 @@ const RenderEntity = forwardRef((props, ref) => {
112541
112564
  const [savedProperty, setSavedProperty] = useState(void 0);
112542
112565
  const [tabs, setTabs] = useState([]);
112543
112566
  const [showAddPanel, setShowAddPanel] = useState(false);
112544
- const [quickSettingsVisible, setQuickSettingsVisible] = useState(false);
112567
+ const [internalQuickSettingsVisible, setInternalQuickSettingsVisible] = useState(false);
112545
112568
  const [showFieldHelp, setShowFieldHelp] = useState(true);
112546
112569
  const [fieldTitleFilter, setFieldTitleFilter] = useState("");
112547
112570
  const [hideEmptyFields, setHideEmptyFields] = useState(false);
@@ -112566,6 +112589,15 @@ const RenderEntity = forwardRef((props, ref) => {
112566
112589
  const [scrollRestoreNonce, setScrollRestoreNonce] = useState(0);
112567
112590
  const contentContainerRef = useRef(null);
112568
112591
  const activeContentRef = useRef(null);
112592
+ const quickSettingsVisible = controlledQuickSettingsVisible ?? internalQuickSettingsVisible;
112593
+ const updateQuickSettingsVisible = useCallback((visible) => {
112594
+ if (quickSettingsVisible === visible) return;
112595
+ setInternalQuickSettingsVisible(visible);
112596
+ onQuickSettingsVisibleChange == null ? void 0 : onQuickSettingsVisibleChange(visible);
112597
+ }, [onQuickSettingsVisibleChange, quickSettingsVisible]);
112598
+ const enableProfileActions = ((_a2 = state.configuration) == null ? void 0 : _a2.enableProfileActions) === true;
112599
+ const canAddProfile = enableProfileActions && Boolean(onAddNewProfileRequest);
112600
+ const canRemoveProfile = enableProfileActions && Boolean(onRemoveProfile);
112569
112601
  const tabRailListRef = useRef(null);
112570
112602
  const editorPanelRef = useRef(null);
112571
112603
  const navigationRestoreReadyRef = useRef(false);
@@ -113135,6 +113167,7 @@ const RenderEntity = forwardRef((props, ref) => {
113135
113167
  };
113136
113168
  const handleAddNewProfile = () => {
113137
113169
  var _a3;
113170
+ if (!canAddProfile) return;
113138
113171
  try {
113139
113172
  const next2 = !showAddPanel;
113140
113173
  const currentProfileTabKeys = tabs.filter(isProfileTab).map(getProfileTabKey).filter(Boolean);
@@ -113162,6 +113195,7 @@ const RenderEntity = forwardRef((props, ref) => {
113162
113195
  }
113163
113196
  };
113164
113197
  const handleRemoveProfile = (tab) => {
113198
+ if (!canRemoveProfile) return;
113165
113199
  try {
113166
113200
  onRemoveProfile == null ? void 0 : onRemoveProfile({
113167
113201
  entityId: entity["@id"],
@@ -113434,7 +113468,7 @@ const RenderEntity = forwardRef((props, ref) => {
113434
113468
  }
113435
113469
  }
113436
113470
  ) }),
113437
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("add_profile_button_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
113471
+ canAddProfile && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip2, { title: t2("add_profile_button_tooltip"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
113438
113472
  Button$1,
113439
113473
  {
113440
113474
  type: "default",
@@ -113465,7 +113499,7 @@ const RenderEntity = forwardRef((props, ref) => {
113465
113499
  onScroll: updateTabRailScrollState,
113466
113500
  children: tabs.map((tab, idx) => {
113467
113501
  const isActive2 = tab.name === activeTab;
113468
- const canRemove = !(["about", "overflow", "other"].includes((tab.name || "").toLowerCase()) || ["about", "other"].includes((tab.label || tab.name || "").toLowerCase()));
113502
+ const canRemove = canRemoveProfile && !(["about", "overflow", "other"].includes((tab.name || "").toLowerCase()) || ["about", "other"].includes((tab.label || tab.name || "").toLowerCase()));
113469
113503
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
113470
113504
  "div",
113471
113505
  {
@@ -114026,7 +114060,7 @@ const RenderEntity = forwardRef((props, ref) => {
114026
114060
  }
114027
114061
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row", children: [
114028
114062
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col w-full", children: [
114029
- ((_a2 = state.configuration) == null ? void 0 : _a2.showControls) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between pb-1 border-b border-slate-700", children: [
114063
+ ((_b = state.configuration) == null ? void 0 : _b.showControls) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between pb-1 border-b border-slate-700", children: [
114030
114064
  /* @__PURE__ */ jsxRuntimeExports.jsx(
114031
114065
  RenderControls,
114032
114066
  {
@@ -114045,14 +114079,14 @@ const RenderEntity = forwardRef((props, ref) => {
114045
114079
  Button$1,
114046
114080
  {
114047
114081
  style: { marginRight: 8 },
114048
- onClick: () => setQuickSettingsVisible((visible) => !visible),
114082
+ onClick: () => updateQuickSettingsVisible(!quickSettingsVisible),
114049
114083
  type: quickSettingsVisible ? "primary" : "default",
114050
114084
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$8, {}),
114051
114085
  "aria-label": "Quick filter settings",
114052
114086
  "aria-pressed": quickSettingsVisible
114053
114087
  }
114054
114088
  ) }),
114055
- ((_b = state.configuration) == null ? void 0 : _b.enableReverseLinkBrowser) && /* @__PURE__ */ jsxRuntimeExports.jsx(
114089
+ ((_c = state.configuration) == null ? void 0 : _c.enableReverseLinkBrowser) && /* @__PURE__ */ jsxRuntimeExports.jsx(
114056
114090
  "button",
114057
114091
  {
114058
114092
  className: "bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-2 rounded text-sm",
@@ -114075,7 +114109,7 @@ const RenderEntity = forwardRef((props, ref) => {
114075
114109
  activePropertyLabel: selectedAiApprovalProperty ? getFieldTitle(selectedAiApprovalProperty) : void 0,
114076
114110
  remainingEntityCount: pendingOtherAiApprovalEntities.length,
114077
114111
  remainingFieldCount: pendingOtherAiApprovalFieldCount,
114078
- readonly: (_c = state.configuration) == null ? void 0 : _c.readonly,
114112
+ readonly: (_d = state.configuration) == null ? void 0 : _d.readonly,
114079
114113
  canGoPrevious: selectedAiApprovalIndex > 0,
114080
114114
  canGoNext: selectedAiApprovalIndex < pendingAiApprovals.length - 1,
114081
114115
  onPrevious: () => navigateToAiApproval(selectedAiApprovalIndex - 1),
@@ -114085,13 +114119,13 @@ const RenderEntity = forwardRef((props, ref) => {
114085
114119
  onReviewNextEntity: handleReviewNextAiApprovalEntity
114086
114120
  }
114087
114121
  ),
114088
- !renderTabs && (((_d = state.configuration) == null ? void 0 : _d.tabLocation) === "left" || ((_e2 = state.configuration) == null ? void 0 : _e2.tabLocation) === "right" ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: contentContainerRef, className: "min-h-0 overflow-hidden", style: { height: scrollViewportHeight ? `${scrollViewportHeight}px` : "calc(100vh - 200px)" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Ve, { vertical: false, proportionalLayout: false, separator: !iconView, onChange: (sizes2) => {
114122
+ !renderTabs && (((_e2 = state.configuration) == null ? void 0 : _e2.tabLocation) === "left" || ((_f = state.configuration) == null ? void 0 : _f.tabLocation) === "right" ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: contentContainerRef, className: "min-h-0 overflow-hidden", style: { height: scrollViewportHeight ? `${scrollViewportHeight}px` : "calc(100vh - 200px)" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Ve, { vertical: false, proportionalLayout: false, separator: !iconView, onChange: (sizes2) => {
114089
114123
  var _a3;
114090
114124
  const w2 = ((_a3 = state.configuration) == null ? void 0 : _a3.tabLocation) === "left" ? sizes2[0] : sizes2[1];
114091
114125
  setTabPaneWidth(w2);
114092
114126
  persistTabWidth(w2);
114093
114127
  }, children: [
114094
- ((_f = state.configuration) == null ? void 0 : _f.tabLocation) === "left" && /* @__PURE__ */ jsxRuntimeExports.jsx(Ve.Pane, { minSize: iconView ? ICON_TAB_PANE_WIDTH : MIN_LABEL_TAB_PANE_WIDTH, maxSize: iconView ? ICON_TAB_PANE_WIDTH : MAX_LABEL_TAB_PANE_WIDTH, preferredSize: iconView ? ICON_TAB_PANE_WIDTH : tabPaneWidth, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative group h-full border-r border-slate-200", children: [
114128
+ ((_g = state.configuration) == null ? void 0 : _g.tabLocation) === "left" && /* @__PURE__ */ jsxRuntimeExports.jsx(Ve.Pane, { minSize: iconView ? ICON_TAB_PANE_WIDTH : MIN_LABEL_TAB_PANE_WIDTH, maxSize: iconView ? ICON_TAB_PANE_WIDTH : MAX_LABEL_TAB_PANE_WIDTH, preferredSize: iconView ? ICON_TAB_PANE_WIDTH : tabPaneWidth, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative group h-full border-r border-slate-200", children: [
114095
114129
  renderProfileActionRail(),
114096
114130
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute right-0 top-0 bottom-0 w-1 bg-slate-300 opacity-0 group-hover:opacity-100" })
114097
114131
  ] }) }),
@@ -114114,7 +114148,7 @@ const RenderEntity = forwardRef((props, ref) => {
114114
114148
  )
114115
114149
  }
114116
114150
  ),
114117
- !((_g = state.configuration) == null ? void 0 : _g.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsx(
114151
+ !((_h = state.configuration) == null ? void 0 : _h.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsx(
114118
114152
  "button",
114119
114153
  {
114120
114154
  className: "bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded",
@@ -114123,7 +114157,7 @@ const RenderEntity = forwardRef((props, ref) => {
114123
114157
  }
114124
114158
  )
114125
114159
  ] }),
114126
- !shouldRenderCoreField("@id") && !((_h = state.configuration) == null ? void 0 : _h.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between my-2 p-2", children: [
114160
+ !shouldRenderCoreField("@id") && !((_i = state.configuration) == null ? void 0 : _i.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between my-2 p-2", children: [
114127
114161
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-grow" }),
114128
114162
  /* @__PURE__ */ jsxRuntimeExports.jsx(
114129
114163
  "button",
@@ -114201,11 +114235,11 @@ const RenderEntity = forwardRef((props, ref) => {
114201
114235
  return null;
114202
114236
  })
114203
114237
  ] }) }),
114204
- ((_i = state.configuration) == null ? void 0 : _i.tabLocation) === "right" && /* @__PURE__ */ jsxRuntimeExports.jsx(Ve.Pane, { minSize: iconView ? ICON_TAB_PANE_WIDTH : MIN_LABEL_TAB_PANE_WIDTH, maxSize: iconView ? ICON_TAB_PANE_WIDTH : MAX_LABEL_TAB_PANE_WIDTH, preferredSize: iconView ? ICON_TAB_PANE_WIDTH : tabPaneWidth, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative group h-full border-l border-slate-200", children: [
114238
+ ((_j = state.configuration) == null ? void 0 : _j.tabLocation) === "right" && /* @__PURE__ */ jsxRuntimeExports.jsx(Ve.Pane, { minSize: iconView ? ICON_TAB_PANE_WIDTH : MIN_LABEL_TAB_PANE_WIDTH, maxSize: iconView ? ICON_TAB_PANE_WIDTH : MAX_LABEL_TAB_PANE_WIDTH, preferredSize: iconView ? ICON_TAB_PANE_WIDTH : tabPaneWidth, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative group h-full border-l border-slate-200", children: [
114205
114239
  renderProfileActionRail(),
114206
114240
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-slate-300 opacity-0 group-hover:opacity-100" })
114207
114241
  ] }) })
114208
- ] }, `untabbed-${(_j = state.configuration) == null ? void 0 : _j.tabLocation}-${iconView ? "icon" : "label"}`) }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: contentContainerRef, className: "flex min-h-0 overflow-hidden", style: {
114242
+ ] }, `untabbed-${(_k = state.configuration) == null ? void 0 : _k.tabLocation}-${iconView ? "icon" : "label"}`) }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: contentContainerRef, className: "flex min-h-0 overflow-hidden", style: {
114209
114243
  flexDirection: "column",
114210
114244
  height: scrollViewportHeight ? `${scrollViewportHeight}px` : "calc(100vh - 200px)"
114211
114245
  }, children: [
@@ -114215,7 +114249,7 @@ const RenderEntity = forwardRef((props, ref) => {
114215
114249
  tabPosition: "top",
114216
114250
  items: [
114217
114251
  toggleViewTabItem,
114218
- addProfileTabItem
114252
+ ...canAddProfile ? [addProfileTabItem] : []
114219
114253
  ],
114220
114254
  style: { width: "100%" },
114221
114255
  tabBarStyle: { width: "100%" }
@@ -114240,7 +114274,7 @@ const RenderEntity = forwardRef((props, ref) => {
114240
114274
  )
114241
114275
  }
114242
114276
  ),
114243
- !((_k = state.configuration) == null ? void 0 : _k.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsx(
114277
+ !((_l = state.configuration) == null ? void 0 : _l.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsx(
114244
114278
  "button",
114245
114279
  {
114246
114280
  className: "bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded",
@@ -114249,7 +114283,7 @@ const RenderEntity = forwardRef((props, ref) => {
114249
114283
  }
114250
114284
  )
114251
114285
  ] }),
114252
- !shouldRenderCoreField("@id") && !((_l = state.configuration) == null ? void 0 : _l.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between my-2 p-2", children: [
114286
+ !shouldRenderCoreField("@id") && !((_m = state.configuration) == null ? void 0 : _m.readonly) && missingRequiredData && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row place-content-between my-2 p-2", children: [
114253
114287
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-grow" }),
114254
114288
  /* @__PURE__ */ jsxRuntimeExports.jsx(
114255
114289
  "button",
@@ -114340,7 +114374,7 @@ const RenderEntity = forwardRef((props, ref) => {
114340
114374
  ] }) }),
114341
114375
  /* @__PURE__ */ jsxRuntimeExports.jsx(Ve.Pane, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: activeContentRef, className: `${editorScrollClassName} h-full overflow-y-auto scroll-smooth min-h-0`, children: [
114342
114376
  renderQuickSettingsHeader(),
114343
- !((_m = state.configuration) == null ? void 0 : _m.readonly) && ((_n = tabs.find((t22) => t22.name === activeTab)) == null ? void 0 : _n.missingRequiredData) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-red-600 float-right mb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
114377
+ !((_n = state.configuration) == null ? void 0 : _n.readonly) && ((_o = tabs.find((t22) => t22.name === activeTab)) == null ? void 0 : _o.missingRequiredData) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-red-600 float-right mb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
114344
114378
  "button",
114345
114379
  {
114346
114380
  className: "bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded text-sm",
@@ -114392,7 +114426,7 @@ const RenderEntity = forwardRef((props, ref) => {
114392
114426
  )
114393
114427
  }
114394
114428
  ),
114395
- (_o = tabs.find((tab) => tab.name === "about")) == null ? void 0 : _o.inputs.map((input) => {
114429
+ (_p = tabs.find((tab) => tab.name === "about")) == null ? void 0 : _p.inputs.map((input) => {
114396
114430
  if (!["@id", "@type", "name", "@reverse"].includes(input.name) && shouldRenderField(input.name, input.label)) {
114397
114431
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
114398
114432
  "div",
@@ -114477,7 +114511,7 @@ const RenderEntity = forwardRef((props, ref) => {
114477
114511
  return null;
114478
114512
  })
114479
114513
  ] }) })
114480
- ] }, `tabbed-${(_p = state.configuration) == null ? void 0 : _p.tabLocation}-${iconView ? "icon" : "label"}`) })
114514
+ ] }, `tabbed-${(_q = state.configuration) == null ? void 0 : _q.tabLocation}-${iconView ? "icon" : "label"}`) })
114481
114515
  ] }),
114482
114516
  /* @__PURE__ */ jsxRuntimeExports.jsx(
114483
114517
  Drawer2,
@@ -121750,7 +121784,7 @@ const en = {
121750
121784
  translation: {
121751
121785
  hello_one: "hello world",
121752
121786
  hello_other: "hello worlds",
121753
- // RenderControls.component.vue
121787
+ // RenderControls.tsx
121754
121788
  root_dataset_label: "Root dataset",
121755
121789
  add_label: "Add",
121756
121790
  edit_context_label: "Edit context",
@@ -121766,56 +121800,57 @@ const en = {
121766
121800
  edit_context: "Edit Context",
121767
121801
  preview_crate: "Preview Crate",
121768
121802
  browse_entities: "Browse entities",
121769
- // DialogAddProperty.component.vue
121803
+ // DialogAddProperty.tsx
121770
121804
  filter_attribute_set: "Filter the attribute set",
121771
- // DialogEditContext.component.vue
121805
+ // DialogEditContext.tsx
121772
121806
  save_label: "Save",
121773
- // DialogPreviewCrate.component.vue
121807
+ // DialogPreviewCrate.tsx
121774
121808
  preview_loading: "loading ...",
121775
- // DialogBrowseEntities.component.vue
121809
+ // DialogBrowseEntities.tsx
121776
121810
  search_for_connection: "Search for a connection",
121777
121811
  filter_by_type: "Filter by type",
121778
- // DialogSaveCrateAsTemplate.component.vue
121812
+ // DialogSaveCrateAsTemplate.tsx
121779
121813
  save_template_prompt: "Save this crate as a template for re-use",
121780
121814
  provide_name_for_template: "provide a name for the crate template",
121781
- // RenderEntityName.component.vue
121815
+ // EntityName.tsx
121782
121816
  name_field_label: "Name",
121783
121817
  name_field_help: "A short, descriptive name for this item.",
121784
- // Add.component.vue
121818
+ type_field_label: "Type",
121819
+ // Add.tsx
121785
121820
  associate_existing_prompt: "Associate an existing '{{addType}}' (lookup by identifier or name) or create a new '{{addType}}' by typing a name for it.",
121786
121821
  associate_any_prompt: "Associate any entity (lookup by identifier or name).",
121787
121822
  add_text: "Add text",
121788
- // Text.component.vue
121823
+ // Text.tsx
121789
121824
  invalid_type_for_text: "The type '{{type}}' is not valid for this component. It can only be 'text' or 'textarea'",
121790
121825
  text_constraints_error_message: "The specified value does not meet the following constraints: {{- value}}, or it is considered invalid.",
121791
- // Date.component.vue
121826
+ // Date.tsx
121792
121827
  pick_a_date: "Pick a date",
121793
121828
  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.",
121794
- // DateTime.component.vue
121829
+ // DateTime.tsx
121795
121830
  pick_a_datetime: "Pick a date and time",
121796
121831
  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.",
121797
- // Time.component.vue
121832
+ // Time.tsx
121798
121833
  provide_time: "Please provide a time.",
121799
121834
  invalid_time_value: "The supplied time '{{value}}' is invalid. Time format is: HH:mm::ss. e.g. 09:03:59",
121800
- // Number.component.vue
121835
+ // Number.tsx
121801
121836
  invalid_number_value: "The supplied number '{{value}}' is invalid. The value must be a valid number passed in as a String or a Number.",
121802
121837
  number_constraints_error_message: "The specified number does not meet the following constraints: {{value}}",
121803
- // Select.component.vue
121838
+ // Select.tsx
121804
121839
  select: "Select",
121805
121840
  invalid_select_value: "The definition provided to this component has values of the wrong from. It can only be an array of strings",
121806
- // Url.component.vue
121841
+ // Url.tsx
121807
121842
  invalid_url_value: "The entry needs to be a valid url. The accepted protocols are: http, https, ftp, ftps and arcp.",
121808
- // Boolean.component.vue
121843
+ // Boolean.tsx
121809
121844
  true_label: "True",
121810
121845
  false_label: "False",
121811
- // SelectUrl.component.vue
121846
+ // SelectUrl.tsx
121812
121847
  // select: as above
121813
121848
  invalid_selecturl_value: "The value '{{value}}' provided to this component is of the wrong from. It can only be a valid URL.",
121814
121849
  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.",
121815
- // SelectObject.component.vue
121850
+ // SelectObject.tsx
121816
121851
  // select: as above
121817
121852
  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.",
121818
- // Geo.component.vue
121853
+ // Geo.tsx
121819
121854
  define_location: "Define a location by selecting on the map",
121820
121855
  center_map: "center map",
121821
121856
  select_region: "select region",
@@ -121826,9 +121861,9 @@ const en = {
121826
121861
  provide_name_for_location: "Please provide a name for this location - optional",
121827
121862
  provide_name_for_location_error: "You need to provide a name for this location",
121828
121863
  select_existing_location: "Select a location that has already been defined",
121829
- // Value.component.vue
121864
+ // Value.tsx
121830
121865
  invalid_value_value: "The supplied value '{{value}}' is invalid. It can only be a string.",
121831
- // AutoComplete.component.vue
121866
+ // AutoComplete.tsx
121832
121867
  select_existing_or_create_new: "select an existing entity or create a new one",
121833
121868
  create_new_of_type: "Create new {{type}}",
121834
121869
  external_lookup_timeout_error: "External Lookup Timeout",
@@ -121839,7 +121874,7 @@ const en = {
121839
121874
  associate_user_created_entity: "Associate a user created entity",
121840
121875
  associate_from_datapack: "Associate a verified entity from a datapack",
121841
121876
  create_new_entity: "Create new entity",
121842
- // AddControl.component.vue
121877
+ // AddControl.tsx
121843
121878
  select_a_type_to_add: "Select a type to add",
121844
121879
  // Shell2.tsx
121845
121880
  add_profile_button_tooltip: "Add a new profile",
@@ -121847,21 +121882,120 @@ const en = {
121847
121882
  switch_to_label_view: "Switch to default view",
121848
121883
  // EntityType.tsx
121849
121884
  select_a_class_to_add: "Select a class to add",
121850
- // PaginateLinkedEntities.component.vue
121885
+ // PaginateLinkedEntities.tsx
121851
121886
  filter_the_entities: "Filter the entities",
121852
121887
  pagination_total: "Total: {{total}}",
121853
- // RenderEntityProperty.component.vue
121888
+ // EntityProperty.tsx
121854
121889
  not_defined_in_profile: "not defined in profile",
121855
- // RenderReverseConnections.component.vue
121890
+ // RenderReverseConnections.tsx
121856
121891
  // search_for_connection: defined before
121857
- links_to_this_entity: "Links to this entity:"
121892
+ links_to_this_entity: "Links to this entity:",
121893
+ // AiEditedFieldBadge.tsx
121894
+ ai_edited_by_ai: "Edited by AI",
121895
+ ai_deleted_by_ai: "Deleted by AI",
121896
+ // AiApprovalStepperHeader.tsx
121897
+ ai_field_one: "field",
121898
+ ai_field_other: "fields",
121899
+ ai_entity_one: "entity",
121900
+ ai_entity_other: "entities",
121901
+ ai_changes_remaining_aria: "AI changes remaining",
121902
+ ai_remaining_review_message_one: "{{fieldCount}} AI field still needs review in {{entityCount}} other {{entityLabel}}",
121903
+ ai_remaining_review_message_other: "{{fieldCount}} AI fields still need review in {{entityCount}} other {{entityLabel}}",
121904
+ ai_review_next: "Review next",
121905
+ ai_changes_need_review: "AI changes need review",
121906
+ ai_changes_need_review_property: "AI changes need review: {{property}}",
121907
+ ai_change_review_aria: "AI change review",
121908
+ ai_review_next_entity_tooltip: "Review the next entity with pending AI changes",
121909
+ ai_no_other_entities_need_review: "No other entities need AI review",
121910
+ ai_accept_all_tooltip: "Accept every pending AI change in this entity",
121911
+ ai_accept_all: "Accept all",
121912
+ ai_reject_all_tooltip: "Restore previous values for every pending AI change in this entity",
121913
+ ai_reject_all: "Reject all",
121914
+ ai_pending_field_navigation_aria: "Pending AI field navigation",
121915
+ ai_previous_pending_field: "Previous pending field",
121916
+ ai_previous_pending_field_aria: "Previous pending AI field",
121917
+ ai_next_pending_field: "Next pending field",
121918
+ ai_next_pending_field_aria: "Next pending AI field",
121919
+ // AiEntityReviewSummary.tsx
121920
+ ai_fields_to_review_one: "{{count}} field to review",
121921
+ ai_fields_to_review_other: "{{count}} fields to review",
121922
+ ai_show_entity_diff: "Show entity diff",
121923
+ ai_show_entity_diff_aria: "Show AI entity diff",
121924
+ ai_review_entity: "Review entity",
121925
+ // AiEntityDiffView.tsx
121926
+ ai_empty_value: "empty",
121927
+ ai_deleted_entity_title: "AI deleted entity: {{entityId}}",
121928
+ ai_unlinked_entity_title: "AI unlinked entity: {{entityId}}",
121929
+ ai_edited_entity_title: "AI edited entity: {{entityId}}",
121930
+ ai_hide_entity_diff: "Hide entity diff",
121931
+ ai_hide_entity_diff_aria: "Hide AI entity diff",
121932
+ ai_approve_deletion_tooltip: "Approve this AI deletion",
121933
+ ai_approve_unlink_tooltip: "Approve this AI unlink",
121934
+ ai_accept_entity_edits_tooltip: "Accept every AI edit for this entity",
121935
+ ai_delete_entity: "Delete entity",
121936
+ ai_unlink_entity: "Unlink entity",
121937
+ ai_accept_edit: "Accept edit",
121938
+ ai_restore_deleted_entity_tooltip: "Restore this entity and mark the deletion reviewed",
121939
+ ai_restore_link_tooltip: "Restore this link and mark the unlink reviewed",
121940
+ ai_restore_entity_values_tooltip: "Restore previous values for this entity",
121941
+ ai_keep_entity: "Keep entity",
121942
+ ai_restore_link: "Restore link",
121943
+ ai_reject_edit: "Reject edit",
121944
+ // AiFieldDiffView.tsx
121945
+ ai_field_diff_aria: "AI field diff",
121946
+ ai_proposed_deletion: "Proposed deletion",
121947
+ ai_proposed_change: "Proposed change",
121948
+ ai_edit_chip: "AI edit",
121949
+ // AI review controls
121950
+ ai_delete_badge: "AI delete",
121951
+ ai_suggestion_badge: "AI suggestion",
121952
+ ai_unlink_badge: "AI unlink",
121953
+ ai_hide_diff: "Hide diff",
121954
+ ai_show_diff: "Show diff",
121955
+ ai_hide_ai_diff_aria: "Hide AI diff",
121956
+ ai_show_ai_diff_aria: "Show AI diff",
121957
+ ai_approve_suggested_value_tooltip: "Approve this AI-suggested value",
121958
+ ai_restore_previous_value_tooltip: "Restore the previous value and mark this suggestion reviewed",
121959
+ ai_delete: "Delete",
121960
+ ai_accept: "Accept",
121961
+ ai_restore: "Restore",
121962
+ ai_reject: "Reject",
121963
+ // DeletedLinkedEntityCard.tsx
121964
+ ai_fields_can_be_restored_one: "{{count}} field can be restored.",
121965
+ ai_fields_can_be_restored_other: "{{count}} fields can be restored.",
121966
+ ai_hide_deleted_fields: "Hide deleted fields",
121967
+ ai_show_deleted_fields: "Show deleted fields",
121968
+ ai_hide_deleted_fields_aria: "Hide deleted AI fields",
121969
+ ai_show_deleted_fields_aria: "Show deleted AI fields",
121970
+ // UnlinkedLinkedEntityCard.tsx
121971
+ ai_diff_label_entity: "entity",
121972
+ ai_diff_label_linked_from: "linked from",
121973
+ ai_hide_unlink_diff: "Hide unlink diff",
121974
+ ai_show_unlink_diff: "Show unlink diff",
121975
+ ai_hide_unlink_diff_aria: "Hide AI unlink diff",
121976
+ ai_show_unlink_diff_aria: "Show AI unlink diff",
121977
+ // LinkedEntityCard.tsx / DialogBrowseEntities.tsx
121978
+ ai_entity_was_added_by_ai: "Entity was added by AI",
121979
+ // QuickSettingsHeader.tsx
121980
+ quick_filter_settings_aria: "Quick filter settings",
121981
+ field_display_settings_aria: "Field display settings",
121982
+ hide_field_help: "Hide field help",
121983
+ show_field_help: "Show field help",
121984
+ show_empty_fields: "Show fields with no value",
121985
+ hide_empty_fields: "Hide fields with no value",
121986
+ show_all_fields: "Show all fields",
121987
+ show_ai_edited_fields: "Show AI-edited fields",
121988
+ filter_fields_by_name_or_value: "Filter fields by name or value",
121989
+ clear_field_filter: "Clear field filter",
121990
+ // EntityId.tsx
121991
+ open_in_new_tab: "Open in new tab"
121858
121992
  }
121859
121993
  };
121860
121994
  const hu = {
121861
121995
  translation: {
121862
121996
  hello_one: "szia világ",
121863
121997
  hello_other: "sziasztok világok",
121864
- // RenderControls.component.vue
121998
+ // RenderControls.tsx
121865
121999
  root_dataset_label: "Gyökér adatcsomag",
121866
122000
  add_label: "Új elem",
121867
122001
  edit_context_label: "Kontextus szerkesztése",
@@ -121877,56 +122011,57 @@ const hu = {
121877
122011
  edit_context: "Kontextus szerkesztése",
121878
122012
  preview_crate: "Csomag előnézete",
121879
122013
  browse_entities: "Entitások böngészése",
121880
- // DialogAddProperty.component.vue
122014
+ // DialogAddProperty.tsx
121881
122015
  filter_attribute_set: "Attribútumok szűrése",
121882
- // DialogEditContext.component.vue
122016
+ // DialogEditContext.tsx
121883
122017
  save_label: "Mentés",
121884
- // DialogPreviewCrate.component.vue
122018
+ // DialogPreviewCrate.tsx
121885
122019
  preview_loading: "betöltés ...",
121886
- // DialogBrowseEntities.component.vue
122020
+ // DialogBrowseEntities.tsx
121887
122021
  search_for_connection: "Kapcsolt entitás keresése",
121888
122022
  filter_by_type: "Típus szerinti szűrés",
121889
- // DialogSaveCrateAsTemplate.component.vue
122023
+ // DialogSaveCrateAsTemplate.tsx
121890
122024
  save_template_prompt: "Csomag mentése mintaként",
121891
122025
  provide_name_for_template: "minta neve",
121892
- // RenderEntityName.component.vue
122026
+ // EntityName.tsx
121893
122027
  name_field_label: "Név",
121894
122028
  name_field_help: "Az entitás rövid, leíró neve",
121895
- // Add.component.vue
122029
+ type_field_label: "Típus",
122030
+ // Add.tsx
121896
122031
  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",
121897
122032
  associate_any_prompt: "Bármely entitás hozzárendelése (azonosító vagy név alapján)",
121898
122033
  add_text: "Szöveg hozzáadása",
121899
- // Text.component.vue
122034
+ // Text.tsx
121900
122035
  invalid_type_for_text: "'{{type}}' típus nem használható ezzel a komponenssel. A típus csak 'text' vagy 'textarea' lehet",
121901
122036
  text_constraints_error_message: "A megadott érték nem felel meg a következő megszorításoknak: {{- value}}, vagy érvénytelen.",
121902
- // Date.component.vue
122037
+ // Date.tsx
121903
122038
  pick_a_date: "Válassz dátumot!",
121904
122039
  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.",
121905
- // DateTime.component.vue
122040
+ // DateTime.tsx
121906
122041
  pick_a_datetime: "Válassz dátumot és időt!",
121907
122042
  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.",
121908
- // Time.component.vue
122043
+ // Time.tsx
121909
122044
  provide_time: "Add meg az időt!",
121910
122045
  invalid_time_value: "A megadott érték '{{value}}' nem megfelelő. Az elvárt idő formátum: HH:mm::ss. pl. 09:03:59",
121911
- // Number.component.vue
122046
+ // Number.tsx
121912
122047
  invalid_number_value: "A megadott érték '{{value}}' nem megfelelő. Az értéket String vagy Number típusként kell megadni",
121913
122048
  number_constraints_error_message: "A megadott szám nem felel meg a következő megszorításoknak: {{value}}",
121914
- // Select.component.vue
122049
+ // Select.tsx
121915
122050
  select: "Válassz!",
121916
122051
  invalid_select_value: "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak karakterláncokból álló tömb lehet.",
121917
- // Url.component.vue
122052
+ // Url.tsx
121918
122053
  invalid_url_value: "A bejegyzésnek érvényes URL-nek kell lennie. Az elfogadott protokollok: http, https, ftp, ftps és arcp.",
121919
- // Boolean.component.vue
122054
+ // Boolean.tsx
121920
122055
  true_label: "Igaz",
121921
122056
  false_label: "Hamis",
121922
- // SelectUrl.component.vue
122057
+ // SelectUrl.tsx
121923
122058
  // select: as above
121924
122059
  invalid_selecturl_value: "A megadott '{{value}}' érték nem megfelelő formátumú. Csak érvényes URL lehet.",
121925
122060
  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.",
121926
- // SelectObject.component.vue
122061
+ // SelectObject.tsx
121927
122062
  // select: as above
121928
122063
  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.",
121929
- // Geo.component.vue
122064
+ // Geo.tsx
121930
122065
  define_location: "Határozz meg egy helyet a térképen történő kiválasztással!",
121931
122066
  center_map: "térkép középre állítása",
121932
122067
  select_region: "régió kiválasztása",
@@ -121937,9 +122072,9 @@ const hu = {
121937
122072
  provide_name_for_location: "Adj nevet ennek a helynek!",
121938
122073
  provide_name_for_location_error: "A hely nevének megadása kötelező!",
121939
122074
  select_existing_location: "Válassz egy már meghatározott helyet a csomagban!",
121940
- // Value.component.vue
122075
+ // Value.tsx
121941
122076
  invalid_value_value: "A megadott '{{value}}' érték érvénytelen. Csak karakterlánc lehet.",
121942
- // AutoComplete.component.vue
122077
+ // AutoComplete.tsx
121943
122078
  select_existing_or_create_new: "válassz egy meglévő entitást vagy hozz létre egy újat",
121944
122079
  create_new_of_type: "Új {{type}} létrehozása",
121945
122080
  external_lookup_timeout_error: "Külső lekérdezési időtúllépés",
@@ -121950,7 +122085,7 @@ const hu = {
121950
122085
  associate_user_created_entity: "Kapcsolj egy felhasználó által létrehozott entitást",
121951
122086
  associate_from_datapack: "Kapcsolj egy ellenőrzött entitást egy adatcsomagból",
121952
122087
  create_new_entity: "Új entitás létrehozása",
121953
- // AddControl.component.vue
122088
+ // AddControl.tsx
121954
122089
  select_a_type_to_add: "Válassz hozzáadandó típust",
121955
122090
  // Shell2.tsx
121956
122091
  add_profile_button_tooltip: "Új profil hozzáadása",
@@ -121958,14 +122093,113 @@ const hu = {
121958
122093
  switch_to_label_view: "Alap nézetre váltás",
121959
122094
  // EntityType.tsx
121960
122095
  select_a_class_to_add: "Válassz hozzáadandó osztályt",
121961
- // PaginateLinkedEntities.component.vue
122096
+ // PaginateLinkedEntities.tsx
121962
122097
  filter_the_entities: "Entitások szűrése",
121963
122098
  pagination_total: "Összesen: {{total}}",
121964
- // RenderEntityProperty.component.vue
122099
+ // EntityProperty.tsx
121965
122100
  not_defined_in_profile: "nincs definiálva a profilban",
121966
- // RenderReverseConnections.component.vue
122101
+ // RenderReverseConnections.tsx
121967
122102
  // search_for_connection: defined before
121968
- links_to_this_entity: "Entitásra mutató hivatkozások:"
122103
+ links_to_this_entity: "Entitásra mutató hivatkozások:",
122104
+ // AiEditedFieldBadge.tsx
122105
+ ai_edited_by_ai: "AI által szerkesztve",
122106
+ ai_deleted_by_ai: "AI által törölve",
122107
+ // AiApprovalStepperHeader.tsx
122108
+ ai_field_one: "mező",
122109
+ ai_field_other: "mező",
122110
+ ai_entity_one: "entitás",
122111
+ ai_entity_other: "entitás",
122112
+ ai_changes_remaining_aria: "Fennmaradó AI módosítások",
122113
+ ai_remaining_review_message_one: "{{fieldCount}} AI mező még ellenőrzésre vár {{entityCount}} másik {{entityLabel}} esetén",
122114
+ ai_remaining_review_message_other: "{{fieldCount}} AI mező még ellenőrzésre vár {{entityCount}} másik {{entityLabel}} esetén",
122115
+ ai_review_next: "Következő ellenőrzése",
122116
+ ai_changes_need_review: "AI módosítások ellenőrzésre várnak",
122117
+ ai_changes_need_review_property: "AI módosítások ellenőrzésre várnak: {{property}}",
122118
+ ai_change_review_aria: "AI módosítás ellenőrzése",
122119
+ ai_review_next_entity_tooltip: "Következő, AI módosítással rendelkező entitás ellenőrzése",
122120
+ ai_no_other_entities_need_review: "Nincs több AI ellenőrzésre váró entitás",
122121
+ ai_accept_all_tooltip: "Az entitás összes függőben lévő AI módosításának elfogadása",
122122
+ ai_accept_all: "Összes elfogadása",
122123
+ 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",
122124
+ ai_reject_all: "Összes elutasítása",
122125
+ ai_pending_field_navigation_aria: "Függőben lévő AI mezők navigációja",
122126
+ ai_previous_pending_field: "Előző függő mező",
122127
+ ai_previous_pending_field_aria: "Előző függőben lévő AI mező",
122128
+ ai_next_pending_field: "Következő függő mező",
122129
+ ai_next_pending_field_aria: "Következő függőben lévő AI mező",
122130
+ // AiEntityReviewSummary.tsx
122131
+ ai_fields_to_review_one: "{{count}} mező ellenőrzésre vár",
122132
+ ai_fields_to_review_other: "{{count}} mező ellenőrzésre vár",
122133
+ ai_show_entity_diff: "Entitás eltéréseinek megjelenítése",
122134
+ ai_show_entity_diff_aria: "AI entitáseltérés megjelenítése",
122135
+ ai_review_entity: "Entitás ellenőrzése",
122136
+ // AiEntityDiffView.tsx
122137
+ ai_empty_value: "üres",
122138
+ ai_deleted_entity_title: "AI által törölt entitás: {{entityId}}",
122139
+ ai_unlinked_entity_title: "AI által leválasztott entitás: {{entityId}}",
122140
+ ai_edited_entity_title: "AI által szerkesztett entitás: {{entityId}}",
122141
+ ai_hide_entity_diff: "Entitáseltérés elrejtése",
122142
+ ai_hide_entity_diff_aria: "AI entitáseltérés elrejtése",
122143
+ ai_approve_deletion_tooltip: "AI törlés jóváhagyása",
122144
+ ai_approve_unlink_tooltip: "AI leválasztás jóváhagyása",
122145
+ ai_accept_entity_edits_tooltip: "Az entitás összes AI szerkesztésének elfogadása",
122146
+ ai_delete_entity: "Entitás törlése",
122147
+ ai_unlink_entity: "Entitás leválasztása",
122148
+ ai_accept_edit: "Szerkesztés elfogadása",
122149
+ ai_restore_deleted_entity_tooltip: "Entitás visszaállítása és a törlés ellenőrzöttként jelölése",
122150
+ ai_restore_link_tooltip: "Kapcsolat visszaállítása és a leválasztás ellenőrzöttként jelölése",
122151
+ ai_restore_entity_values_tooltip: "Az entitás előző értékeinek visszaállítása",
122152
+ ai_keep_entity: "Entitás megtartása",
122153
+ ai_restore_link: "Kapcsolat visszaállítása",
122154
+ ai_reject_edit: "Szerkesztés elutasítása",
122155
+ // AiFieldDiffView.tsx
122156
+ ai_field_diff_aria: "AI mezőeltérés",
122157
+ ai_proposed_deletion: "Javasolt törlés",
122158
+ ai_proposed_change: "Javasolt módosítás",
122159
+ ai_edit_chip: "AI szerkesztés",
122160
+ // AI review controls
122161
+ ai_delete_badge: "AI törlés",
122162
+ ai_suggestion_badge: "AI javaslat",
122163
+ ai_unlink_badge: "AI leválasztás",
122164
+ ai_hide_diff: "Eltérés elrejtése",
122165
+ ai_show_diff: "Eltérés megjelenítése",
122166
+ ai_hide_ai_diff_aria: "AI eltérés elrejtése",
122167
+ ai_show_ai_diff_aria: "AI eltérés megjelenítése",
122168
+ ai_approve_suggested_value_tooltip: "AI által javasolt érték jóváhagyása",
122169
+ ai_restore_previous_value_tooltip: "Előző érték visszaállítása és a javaslat ellenőrzöttként jelölése",
122170
+ ai_delete: "Törlés",
122171
+ ai_accept: "Elfogadás",
122172
+ ai_restore: "Visszaállítás",
122173
+ ai_reject: "Elutasítás",
122174
+ // DeletedLinkedEntityCard.tsx
122175
+ ai_fields_can_be_restored_one: "{{count}} mező visszaállítható.",
122176
+ ai_fields_can_be_restored_other: "{{count}} mező visszaállítható.",
122177
+ ai_hide_deleted_fields: "Törölt mezők elrejtése",
122178
+ ai_show_deleted_fields: "Törölt mezők megjelenítése",
122179
+ ai_hide_deleted_fields_aria: "Törölt AI mezők elrejtése",
122180
+ ai_show_deleted_fields_aria: "Törölt AI mezők megjelenítése",
122181
+ // UnlinkedLinkedEntityCard.tsx
122182
+ ai_diff_label_entity: "entitás",
122183
+ ai_diff_label_linked_from: "kapcsolva innen",
122184
+ ai_hide_unlink_diff: "Leválasztási eltérés elrejtése",
122185
+ ai_show_unlink_diff: "Leválasztási eltérés megjelenítése",
122186
+ ai_hide_unlink_diff_aria: "AI leválasztási eltérés elrejtése",
122187
+ ai_show_unlink_diff_aria: "AI leválasztási eltérés megjelenítése",
122188
+ // LinkedEntityCard.tsx / DialogBrowseEntities.tsx
122189
+ ai_entity_was_added_by_ai: "Az entitást AI adta hozzá",
122190
+ // QuickSettingsHeader.tsx
122191
+ quick_filter_settings_aria: "Gyors szűrési beállítások",
122192
+ field_display_settings_aria: "Mezőmegjelenítési beállítások",
122193
+ hide_field_help: "Mezősúgó elrejtése",
122194
+ show_field_help: "Mezősúgó megjelenítése",
122195
+ show_empty_fields: "Érték nélküli mezők megjelenítése",
122196
+ hide_empty_fields: "Érték nélküli mezők elrejtése",
122197
+ show_all_fields: "Összes mező megjelenítése",
122198
+ show_ai_edited_fields: "AI által szerkesztett mezők megjelenítése",
122199
+ filter_fields_by_name_or_value: "Mezők szűrése név vagy érték alapján",
122200
+ clear_field_filter: "Mezőszűrő törlése",
122201
+ // EntityId.tsx
122202
+ open_in_new_tab: "Megnyitás új lapon"
121969
122203
  }
121970
122204
  };
121971
122205
  instance.use(initReactI18next).init({
@@ -122827,7 +123061,7 @@ var EmotionCacheContext = /* @__PURE__ */ React.createContext(
122827
123061
  }) : null
122828
123062
  );
122829
123063
  var CacheProvider = EmotionCacheContext.Provider;
122830
- const version = "0.1.32-test4";
123064
+ const version = "0.1.33";
122831
123065
  const pkg = {
122832
123066
  version
122833
123067
  };
@@ -122964,6 +123198,7 @@ function DescriboCrateBuilderInner(props) {
122964
123198
  enableBrowseEntities = propertyDefinitions.enableBrowseEntities.default,
122965
123199
  enableTemplateSave = propertyDefinitions.enableTemplateSave.default,
122966
123200
  enableBulkAdd = propertyDefinitions.enableBulkAdd.default,
123201
+ enableProfileActions,
122967
123202
  enableReverseLinkBrowser = propertyDefinitions.enableReverseLinkBrowser.default,
122968
123203
  enableUrlMarkup = propertyDefinitions.enableUrlMarkup.default,
122969
123204
  enableEntityTimestamps = propertyDefinitions.enableEntityTimestamps.default,
@@ -122975,6 +123210,7 @@ function DescriboCrateBuilderInner(props) {
122975
123210
  language: language2 = propertyDefinitions.language.default,
122976
123211
  resetTabOnEntityChange = false,
122977
123212
  resetTabOnProfileChange = false,
123213
+ quickSettingsVisible,
122978
123214
  stateScopeKey,
122979
123215
  onReady,
122980
123216
  onError,
@@ -122983,6 +123219,7 @@ function DescriboCrateBuilderInner(props) {
122983
123219
  onSaveCrate,
122984
123220
  onSaveRoCrateApproval,
122985
123221
  onSaveEntityTemplate,
123222
+ onQuickSettingsVisibleChange,
122986
123223
  onAddNewProfileRequest,
122987
123224
  onRemoveProfile
122988
123225
  } = props;
@@ -122997,6 +123234,7 @@ function DescriboCrateBuilderInner(props) {
122997
123234
  const renderEntityRef = useRef(null);
122998
123235
  const keys2 = useRef({ cm: 0, pm: 0, lookups: 0 });
122999
123236
  const lastHandledEntityIdRef = useRef(void 0);
123237
+ const hasProfileActionHandler = Boolean(onAddNewProfileRequest || onRemoveProfile);
123000
123238
  useEffect(() => {
123001
123239
  setApprovalState(roCrateApproval);
123002
123240
  }, [roCrateApproval]);
@@ -123045,12 +123283,14 @@ function DescriboCrateBuilderInner(props) {
123045
123283
  markApprovalEntityApproved
123046
123284
  }), [approvalState, markApprovalEntityApproved, markApprovalPropertyApproved]);
123047
123285
  const configuration = useMemo$1(() => {
123286
+ const profileActionsEnabled = enableProfileActions ?? hasProfileActionHandler;
123048
123287
  const config2 = {
123049
123288
  enableContextEditor,
123050
123289
  enableCratePreview,
123051
123290
  enableBrowseEntities,
123052
123291
  enableTemplateSave,
123053
123292
  enableBulkAdd,
123293
+ enableProfileActions: profileActionsEnabled,
123054
123294
  enableReverseLinkBrowser,
123055
123295
  enableUrlMarkup,
123056
123296
  enableEntityTimestamps,
@@ -123078,6 +123318,7 @@ function DescriboCrateBuilderInner(props) {
123078
123318
  enableBrowseEntities,
123079
123319
  enableTemplateSave,
123080
123320
  enableBulkAdd,
123321
+ enableProfileActions,
123081
123322
  enableReverseLinkBrowser,
123082
123323
  enableUrlMarkup,
123083
123324
  enableEntityTimestamps,
@@ -123087,7 +123328,8 @@ function DescriboCrateBuilderInner(props) {
123087
123328
  tabLocation,
123088
123329
  showControls,
123089
123330
  language2,
123090
- lookup
123331
+ lookup,
123332
+ hasProfileActionHandler
123091
123333
  ]);
123092
123334
  const init2 = useCallback(async () => {
123093
123335
  var _a2, _b;
@@ -123245,8 +123487,10 @@ function DescriboCrateBuilderInner(props) {
123245
123487
  onSaveEntityTemplate: saveEntityAsTemplate,
123246
123488
  onWarning: handleWarning,
123247
123489
  onError: handleError,
123248
- onAddNewProfileRequest: handleAddProfileRequest,
123249
- onRemoveProfile
123490
+ quickSettingsVisible,
123491
+ onQuickSettingsVisibleChange,
123492
+ onAddNewProfileRequest: configuration.enableProfileActions ? handleAddProfileRequest : void 0,
123493
+ onRemoveProfile: configuration.enableProfileActions ? onRemoveProfile : void 0
123250
123494
  }
123251
123495
  ) }) }) }) }) }) }) }),
123252
123496
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pointer-events-none fixed bottom-2 right-2 z-50 text-xs text-gray-400", children: [