"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var ElementReference_exports = {};
__export(ElementReference_exports, {
  ElementReference: () => ElementReference
});
module.exports = __toCommonJS(ElementReference_exports);
var import_jsx_runtime = require("react/jsx-runtime");
var import_react = require("react");
var import_makeswift_api = require("../hooks/makeswift-api");
var import_use_document = require("../hooks/use-document");
var import_use_document_cycles = require("../hooks/use-document-cycles");
var import_FallbackComponent = require("../../../components/shared/FallbackComponent");
var import_Element = require("./Element");
var import_Document = require("./Document");
var import_use_disable_register_element = require("../hooks/use-disable-register-element");
var import_use_document_context = require("../hooks/use-document-context");
const ElementReference = (0, import_react.memo)(
  (0, import_react.forwardRef)(function ElementReference2({ elementReference }, ref) {
    const globalElement = (0, import_makeswift_api.useGlobalElement)(elementReference.value);
    const locale = (0, import_use_document_context.useDocumentLocale)();
    const localizedGlobalElement = (0, import_makeswift_api.useLocalizedGlobalElement)(locale, elementReference.value);
    const globalElementData = localizedGlobalElement?.data ?? globalElement?.data;
    const elementReferenceDocument = (0, import_use_document.useDocument)(elementReference.key);
    const documentKey = elementReference.key;
    const documentKeys = (0, import_use_document_cycles.useDocumentCycles)();
    const providedDocumentKeys = (0, import_react.useMemo)(
      () => [...documentKeys, documentKey],
      [documentKeys, documentKey]
    );
    if (globalElementData == null) {
      return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
        import_FallbackComponent.FallbackComponent,
        {
          ref,
          text: "This global component doesn't exist"
        }
      );
    }
    if (documentKeys.includes(documentKey)) {
      return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
        import_FallbackComponent.FallbackComponent,
        {
          ref,
          text: "This global component contains itself!"
        }
      );
    }
    return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_use_document_cycles.DocumentCyclesContext.Provider, { value: providedDocumentKeys, children: elementReferenceDocument != null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Document.Document, { document: elementReferenceDocument, ref }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_use_disable_register_element.DisableRegisterElement.Provider, { value: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Element.Element, { element: globalElementData, ref }) }) });
  })
);
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  ElementReference
});
//# sourceMappingURL=ElementReference.js.map