import "grapesjs";
const ie = "app.grapesjs.com", re = "app-stage.grapesjs.com", Y = [
  ie,
  re,
  "localhost",
  "127.0.0.1",
  ".local-credentialless.webcontainer.io",
  // For stackblitz.com demos
  ".local.webcontainer.io",
  // For stackblitz.com demos
  "-sandpack.codesandbox.io"
  // For Sandpack demos
], ue = "license:check:start", he = "license:check:end", ge = () => typeof window < "u", be = ({ isDev: e, isStage: l }) => `${e ? "" : `https://${l ? re : ie}`}/api`, me = () => {
  const e = ge() && window.location.hostname;
  return !!e && (Y.includes(e) || Y.some((l) => e.endsWith(l)));
};
var E = /* @__PURE__ */ ((e) => (e.free = "free", e.startup = "startup", e.business = "business", e.enterprise = "enterprise", e))(E || {});
async function de({
  path: e,
  baseApiUrl: l,
  method: a = "GET",
  headers: n = {},
  params: s,
  body: u
}) {
  const p = `${l || be({ isDev: !1, isStage: !1 })}${e}`, h = {
    method: a,
    headers: {
      "Content-Type": "application/json",
      ...n
    }
  };
  u && (h.body = JSON.stringify(u));
  const c = s ? new URLSearchParams(s).toString() : "", i = c ? `?${c}` : "", b = await fetch(`${p}${i}`, h);
  if (!b.ok)
    throw new Error(`HTTP error! status: ${b.status}`);
  return b.json();
}
const ee = {
  [E.free]: 0,
  [E.startup]: 10,
  [E.business]: 20,
  [E.enterprise]: 30
};
function ye(e) {
  const l = e;
  return l.init = (a) => (n) => e(n, a), l;
}
const ve = (e) => /* @__PURE__ */ ye(e);
async function fe({
  editor: e,
  plan: l,
  pluginName: a,
  licenseKey: n,
  cleanup: s
}) {
  let u = "", r = !1;
  const p = me(), h = (i) => {
    console.warn("Cleanup plugin:", a, "Reason:", i), s();
  }, c = (i = {}) => {
    var L;
    const { error: b, sdkLicense: C } = i, T = (L = i.plan) == null ? void 0 : L.category;
    if (!(C || i.license) || b)
      h(b || "Invalid license");
    else if (T) {
      const G = ee[l], V = ee[T];
      G > V && h({ pluginRequiredPlan: l, licensePlan: T });
    }
  };
  e.on(ue, (i) => {
    u = i == null ? void 0 : i.baseApiUrl, r = !0;
  }), e.on(he, (i) => {
    c(i);
  }), setTimeout(async () => {
    if (!r) {
      if (p) return;
      if (n) {
        const i = await Te({ licenseKey: n, pluginName: a, baseApiUrl: u });
        i && c(i);
      } else
        h("The `licenseKey` option not provided");
    }
  }, 2e3);
}
async function Te(e) {
  const { licenseKey: l, pluginName: a, baseApiUrl: n } = e;
  try {
    return (await de({
      baseApiUrl: n,
      path: `/sdk/${l || "na"}`,
      method: "POST",
      params: {
        d: window.location.hostname,
        pn: a
      }
    })).result || {};
  } catch (s) {
    return console.error("Error during SDK license check:", s), !1;
  }
}
const z = (e, l) => {
  var a;
  return !!((a = e == null ? void 0 : e.hasAttribute) != null && a.call(e, l));
};
var P = /* @__PURE__ */ ((e) => (e.image = "image", e.video = "video", e.external = "external", e))(P || {});
const k = "lightGallery", te = `${k}-item`, D = "data-lightgallery", ae = `${D}-item`, H = "toggle", I = {
  image: '<svg viewBox="0 0 24 24"><path d="m8.5 13.5 2.5 3 3.5-4.5 4.5 6H5m16 1V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2Z"/></svg>',
  video: '<svg viewBox="0 0 24 24"><path d="M17 10.5V7a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-3.5l4 4v-11l-4 4Z"/></svg>',
  gallery: '<svg viewBox="0 0 24 24"><path d="M4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H16L12,22L8,18H4A2,2 0 0,1 2,16V4A2,2 0 0,1 4,2M19,15V7L15,11L13,9L7,15H19M7,5A2,2 0 0,0 5,7A2,2 0 0,0 7,9A2,2 0 0,0 9,7A2,2 0 0,0 7,5Z" /></svg>',
  galleryItem: '<svg viewBox="0 0 24 24"><path d="M20 2H4a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2M8 14H6v-2h2v2m0-3H6V9h2v2m0-3H6V6h2v2m7 6h-5v-2h5v2m3-3h-8V9h8v2m0-3h-8V6h8v2Z"/></svg>',
  external: '<svg viewBox="0 0 24 24"><path d="M14 3v2h3.6l-9.8 9.8 1.4 1.4L19 6.4V10h2V3m-2 16H5V5h7V3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2v-7h-2v7z"/></svg>',
  eye: '<svg viewBox="0 0 24 24"><path d="M12 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0 8a5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5 5 5 0 0 1-5 5m0-12.5C7 4.5 2.7 7.6 1 12a11.8 11.8 0 0 0 22 0c-1.7-4.4-6-7.5-11-7.5Z"/></svg>'
}, B = { propKeys: [], props: {}, traits: [] }, M = (e, l = {}) => {
  var s;
  const a = {}, n = [];
  for (const u in e) {
    const { value: r, ...p } = e[u];
    n.push({ id: u, name: u, changeProp: !0, category: l.category, ...p }), a[u] = r;
    const { subTraits: h = {} } = p;
    for (const c in p.subTraits)
      (s = h[c]) == null || s.forEach((i) => {
        const b = i.id || i.name;
        a[b] = i.value;
      });
  }
  return {
    propKeys: Object.keys(a),
    props: a,
    traits: n
  };
}, Z = (e, l) => {
  const a = e.getTrait(l), n = a.get("category"), s = a.get("subTraits") || {}, r = (Object.values(s).flat() || []).map((c) => c.id || c.name);
  e.removeTrait(r);
  const p = s[a.getValue()], h = e.getTraitIndex(l) + 1;
  p && e.addTrait(
    p.map((c) => ({ category: n, ...c })),
    { at: h }
  );
}, W = (e, l) => {
  l.forEach((a) => {
    const n = e.getTrait(a);
    if (!n || !n.get("subTraits")) return;
    const s = n.changeProp ? `change:${a}` : `change:attributes:${a}`;
    e.on(s, () => Z(e, a)), Z(e, a);
  });
}, we = (e, l, a) => {
  const s = e.getTrait(l).get("subTraits") || {}, r = (Object.values(s).flat() || []).map((h) => {
    const c = h.name || h.id;
    return h.changeProp ? `change:${c}` : `change:attributes:${c}`;
  }), p = Array.from(new Set(r));
  p.length && e.on(p.join(" "), a);
}, Se = {
  //   startAnimationDuration: {
  //     type: 'number',
  //     label: 'Start duration',
  //     tip: 'Start animation duration (in ms)',
  //     value: 400,
  //     step: 50,
  //     min: 0
  //   },
  [H]: {
    type: "button",
    label: "Toggle Gallery",
    command: (e, l) => {
      var a, n;
      return (n = (a = l.target) == null ? void 0 : a.getView()) == null ? void 0 : n.toggleGallery();
    }
  },
  speed: {
    type: "number",
    label: "Speed",
    tip: "Transition duration between slides (in ms)",
    value: 400,
    step: 50,
    min: 0
  },
  inline: {
    type: "checkbox",
    label: "Inline Gallery",
    value: !1
  },
  allowMediaOverlap: {
    type: "checkbox",
    label: "Allow media overlap",
    tip: "If enabled, toolbar, captions and thumbnails will overlap with the media element",
    value: !1
  },
  controls: {
    type: "checkbox",
    label: "Show controls",
    tip: "If disabled, prev/next buttons will not be displayed",
    value: !0
  },
  counter: {
    type: "checkbox",
    label: "Show counter",
    tip: "Display the total number of images and index number of the currently displayed slide",
    value: !0
  },
  download: {
    type: "checkbox",
    label: "Download icon",
    tip: "Enable download button",
    value: !0
  },
  enableDrag: {
    type: "checkbox",
    label: "Enable drag",
    tip: "Enables desktop mouse drag support",
    value: !0
  },
  enableSwipe: {
    type: "checkbox",
    label: "Enable swipe",
    tip: "Enables swipe support for mobile devices",
    value: !0
  },
  escKey: {
    type: "checkbox",
    label: "Enable Esc key",
    tip: 'Whether the gallery could be closed by pressing the "Esc" key',
    value: !0
  },
  keyPress: {
    type: "checkbox",
    label: "Enable keyboard navigation",
    value: !1
  },
  loop: {
    type: "checkbox",
    label: "Loop",
    tip: "If false, will disable the ability to loop back to the beginning of the gallery from the last slide",
    value: !0
  },
  getCaptionFromTitleOrAlt: {
    type: "checkbox",
    label: "Caption from title or alt",
    tip: "Get captions from alt or title tags",
    value: !0
  },
  showMaximizeIcon: {
    type: "checkbox",
    label: "Show maximize icon",
    value: !1
  },
  closable: {
    type: "checkbox",
    label: "Closable",
    tip: "If false, it won't be possible to close the gallery",
    value: !0
  },
  showCloseIcon: {
    type: "checkbox",
    label: "Show close icon",
    tip: "If false, close button won't be displayed.",
    visible: ({ component: e }) => !!e.getTrait("closable").getValue(),
    value: !0
  },
  closeOnTap: {
    type: "checkbox",
    label: "Close on tap",
    tip: "Allows clicks on black area to close gallery",
    visible: ({ component: e }) => !!e.getTrait("closable").getValue(),
    value: !0
  }
}, xe = {
  thumbnail: {
    category: { id: "thumbnail-options", label: "Thumbnail Options" },
    type: "checkbox",
    label: "Thumbnails",
    value: !0,
    subTraits: {
      false: [],
      true: [
        // {
        //   type: 'checkbox',
        //   name: 'animateThumb',
        //   label: 'Animate Thumbnails',
        //   changeProp: true,
        //   value: true
        // },
        // {
        //   type: 'checkbox',
        //   name: 'toggleThumb',
        //   label: 'Toggle Thumbnails',
        //   tip: 'Enable toggle captions and thumbnails',
        //   changeProp: true,
        //   value: false
        // },
        {
          type: "checkbox",
          name: "enableThumbDrag",
          label: "Thumbnail drag",
          tip: "Enable thumbnail drag on desktop",
          changeProp: !0,
          value: !0
        },
        {
          type: "checkbox",
          name: "enableThumbSwipe",
          label: "Thumbnail swipe",
          tip: "Enable thumbnail swipe on mobile devices",
          changeProp: !0,
          value: !0
        },
        // {
        //   type: 'checkbox',
        //   name: 'loadYouTubeThumbnail',
        //   label: 'Load YouTube thumbnail',
        //   changeProp: true,
        //   value: true
        // },
        {
          type: "select",
          name: "alignThumbnails",
          tip: "Position of thumbnails when the width of all thumbnails combined is less than the gallery's width",
          label: "Align Thumbnails",
          value: "middle",
          changeProp: !0,
          options: [
            { id: "left", label: "Left" },
            { id: "middle", label: "Middle" },
            { id: "right", label: "Right" }
          ]
        },
        {
          type: "select",
          name: "currentPagerPosition",
          label: "Select thumbnail position",
          value: "middle",
          changeProp: !0,
          options: [
            { id: "left", label: "Left" },
            { id: "middle", label: "Middle" },
            { id: "right", label: "Right" }
          ]
        },
        {
          type: "number",
          name: "thumbMargin",
          label: "Thumb margin",
          tip: "Spacing between each thumbnails",
          changeProp: !0,
          min: 0,
          value: "5"
        },
        {
          type: "number",
          name: "thumbWidth",
          label: "Thumb width",
          tip: "Width of each thumbnails",
          changeProp: !0,
          min: 0,
          value: "100"
        }
        // { // TODO fix trait with number units
        //   type: 'number',
        //   name: 'thumbHeight',
        //   label: 'Thumbnail height',
        //   tip: 'Height of each thumbnails',
        //   changeProp: true,
        //   min: 0,
        //   value: '80px'
        // }
      ]
    }
  }
}, ke = {
  autoplay: {
    category: { id: "autoplay-options", label: "Autoplay options" },
    type: "checkbox",
    label: "Autoplay",
    value: !0,
    subTraits: {
      false: [],
      true: [
        {
          type: "checkbox",
          name: "autoplayControls",
          label: "Autoplay controls",
          tip: "Show/hide autoplay controls",
          changeProp: !0,
          value: !0
        },
        {
          type: "checkbox",
          name: "progressBar",
          label: "Progress bar",
          tip: "Show autoplay progress bar",
          changeProp: !0,
          value: !0
        },
        {
          type: "checkbox",
          name: "forceSlideShowAutoplay",
          label: "Force autoplay",
          tip: "If false, autoplay will be stopped after first user action",
          changeProp: !0,
          value: !1
        },
        {
          type: "checkbox",
          name: "slideShowAutoplay",
          label: "Start autoplay",
          tip: "Enable autoplay on start",
          changeProp: !0,
          value: !1
        },
        {
          type: "number",
          name: "slideShowInterval",
          label: "Interval",
          tip: "The time (in ms) between each auto transition",
          changeProp: !0,
          min: 0,
          step: 50,
          value: 5e3
        }
      ]
    }
  }
}, Ie = {
  zoom: {
    category: { id: "zoom-options", label: "Zoom options" },
    type: "checkbox",
    label: "Zoom",
    value: !0,
    subTraits: {
      false: [],
      true: [
        {
          type: "checkbox",
          name: "actualSize",
          label: "Show actual size icon",
          changeProp: !0,
          value: !0
        },
        {
          type: "checkbox",
          name: "infiniteZoom",
          label: "Infinte zoom",
          changeProp: !0,
          value: !0
        },
        {
          type: "checkbox",
          name: "showZoomInOutIcons",
          label: "Show zoom in/out icons",
          changeProp: !0,
          value: !1
        },
        {
          type: "number",
          name: "scale",
          label: "Scale",
          tip: "Value of zoom should be incremented/decremented",
          changeProp: !0,
          min: 0,
          value: 1
        }
        // This seems unnecessary (mainly for custom styling)
        // {
        //   type: 'number',
        //   name: 'enableZoomAfter',
        //   label: 'Enable zoom after',
        //   tip: 'Once the slide transition is completed, how much time should take zoom plugin to activate',
        //   changeProp: true,
        //   min: 0,
        //   value: 300
        // }
      ]
    }
  }
}, f = "sourceType", U = "data-iframe", R = {
  name: "href",
  type: "file",
  label: "Image Source"
}, N = {
  name: "data-src",
  label: "Video Source",
  placeholder: "https://www.youtube.com/watch?v=..."
}, F = {
  name: "data-poster",
  label: "Video Poster",
  type: "file"
}, ne = {
  name: "data-src",
  label: "External Source",
  placeholder: "https://some-external-source.com/...."
}, ce = {
  label: "Caption",
  name: "data-sub-html",
  placeholder: "My caption",
  changeProp: !1
}, Le = {
  [H]: {
    type: "button",
    label: "Toggle Gallery",
    command: (e, l) => {
      var s, u;
      const a = l.target, n = (s = a == null ? void 0 : a.closestType(k)) == null ? void 0 : s.getView();
      if (n && a) {
        const r = ((u = n.getLightGallery()) == null ? void 0 : u.items) || [], p = Array.from(r).indexOf(a.getEl());
        p >= 0 && n.toggleGallery(p);
      }
    }
  },
  [f]: {
    type: "radio",
    label: "Source type",
    labelToTitle: !0,
    value: "image",
    subTraits: {
      image: [R],
      video: [N, F],
      external: [ne]
    },
    options: [
      { id: "image", label: R.label || "", icon: I.image },
      { id: "video", label: N.label || "", icon: I.video },
      { id: "external", label: ne.label || "", icon: I.external }
    ]
  },
  subHtml: ce
  // This unfortuntaly breaks other thumbnails
  // customThumb: traitCustomThumb
}, Ae = "lightGalleryComponent", le = "lgThumbnail", Pe = "lgVideo", oe = "lgAutoplay", se = "lgZoom", A = "https://cdn.jsdelivr.net/npm/lightgallery@2.8.2", Ee = function(e, l = {}) {
  const { Blocks: a, Components: n } = e, s = "LightGallery", u = "LightGallery Item", r = {
    toolbarIconOpen: I.eye,
    block: {},
    lgLicenseKey: "92DE1DB8-7986-4F02-B908-514F97678D28",
    defaultSrc: "https://placehold.co/200/777/white.png?text=Image",
    plugins: [le, Pe, oe, se],
    cdnScript: [
      `${A}/lightgallery.min.js`,
      `${A}/plugins/thumbnail/lg-thumbnail.min.js`,
      `${A}/plugins/video/lg-video.min.js`,
      `${A}/plugins/autoplay/lg-autoplay.min.js`,
      `${A}/plugins/zoom/lg-zoom.min.js`
    ],
    cdnStyle: `${A}/css/lightgallery-bundle.min.css`,
    ...l
  }, { block: p, toolbarIconOpen: h, defaultSrc: c } = r, i = function(t) {
    const o = this, g = window, { plugins: d, cdnScript: w, cdnStyle: O, inline: J, lgLicenseKey: pe, ...y } = t || {}, S = (m) => isNaN(m) ? void 0 : parseInt(m, 10), Q = () => {
      var $;
      const m = {
        ...y,
        licenseKey: pe,
        speed: S(y.speed),
        startAnimationDuration: S(y.startAnimationDuration),
        thumbMargin: S(y.thumbMargin),
        thumbWidth: S(y.thumbWidth),
        slideShowInterval: S(y.slideShowInterval),
        scale: S(y.scale),
        enableZoomAfter: S(y.enableZoomAfter),
        plugins: (d || []).map((K) => g[K])
      };
      J && (m.container = o, m.closable = !1);
      const j = ($ = g.lightGallery) == null ? void 0 : $.call(g, o, m);
      J && j.openGallery();
    };
    if (g.lightGallery)
      Q();
    else {
      const { head: m } = document, j = Array.isArray(w) ? [...w] : [w], $ = Array.isArray(O) ? [...O] : [O], K = (x) => {
        if (x.length) {
          const v = document.createElement("link");
          v.href = x.shift(), v.rel = "stylesheet", m.appendChild(v), K(x);
        }
      }, X = (x) => {
        if (x.length) {
          const v = document.createElement("script");
          v.src = x.shift(), v.onerror = v.onload = X.bind(null, x), m.appendChild(v);
        } else
          Q();
      };
      K($), X(j);
    }
  }, b = (t) => {
    const o = t.getTrait(H);
    if (!h || !o) return;
    const { toolbar: g } = t, d = {
      id: H,
      label: h,
      command: () => setTimeout(() => o.runCommand(), 100)
    };
    !g.find((O) => O.id === d.id) && (g == null || g.unshift(d));
  };
  let C = [];
  const T = r.plugins || [], _ = M(Se), L = T.includes(le) ? M(xe) : B, G = T.includes(oe) ? M(ke) : B, V = T.includes(se) ? M(Ie) : B;
  n.addType(k, {
    block: p && {
      label: s,
      media: I.gallery,
      category: "Extra",
      select: !0,
      ...r.block
    },
    isComponent: (t) => z(t, D),
    extendFn: ["init", "initToolbar"],
    model: {
      defaults: {
        name: s,
        icon: I.gallery,
        draggable: (t, o) => !o.is(k),
        attributes: { [D]: !0 },
        components: { type: te },
        script: i,
        selector: "",
        exThumbImage: "",
        cdnScript: r.cdnScript,
        cdnStyle: r.cdnStyle,
        plugins: r.plugins,
        lgLicenseKey: r.lgLicenseKey,
        "script-props": [
          "lgLicenseKey",
          "cdnScript",
          "cdnStyle",
          "plugins",
          "selector",
          "exThumbImage",
          ..._.propKeys,
          ...L.propKeys,
          ...G.propKeys,
          ...V.propKeys
        ],
        ..._.props,
        ...L.props,
        ...G.props,
        ...V.props,
        traits: [..._.traits, ...L.traits, ...G.traits, ...V.traits]
      },
      init() {
        W(this, ["thumbnail"]), W(this, ["autoplay"]), W(this, ["zoom"]);
      },
      initToolbar() {
        b(this);
      }
    },
    extendFnView: ["init"],
    view: {
      // Events: https://www.lightgalleryjs.com/docs/events/
      events: () => ({
        lgInit: "onLgInit",
        lgBeforeOpen: "onLgOpen",
        lgAfterClose: "onLgClose"
      }),
      init() {
        const t = n.events.scriptUnmount;
        t && this.listenTo(this.model, t, this.destroyLightGallery);
      },
      getLightGallery() {
        return this.el.__lg;
      },
      destroyLightGallery() {
        const t = this.getLightGallery();
        t == null || t.destroy();
      },
      disableLgInCanvas() {
        const t = this.getLightGallery();
        t.lgOpened = !0;
      },
      isInlineGallery() {
        var o;
        const t = this.getLightGallery();
        return ((o = t == null ? void 0 : t.settings) == null ? void 0 : o.container) === this.el;
      },
      onLgInit(t) {
        this.el.__lg = t.detail.instance, !this.isInlineGallery() && this.disableLgInCanvas();
      },
      onLgOpen() {
        const { em: t } = this, { Canvas: o } = t, g = this.getLightGallery();
        C = o.getSpots(), setTimeout(() => o.removeSpots()), g.__lgOpened = !0;
      },
      onLgClose() {
        const t = this.getLightGallery();
        C.forEach((o) => this.em.Canvas.addSpot(o.attributes)), C = [], t.__lgOpened = !1, setTimeout(() => this.disableLgInCanvas());
      },
      toggleGallery(t) {
        const o = this.getLightGallery();
        if (o.__lgOpened) return o.closeGallery(!0);
        o.lgOpened = !1, o.openGallery(t);
      }
    }
  });
  const q = M(Le);
  n.addType(te, {
    isComponent: (t) => z(t, ae) || t.tagName === "A" && z(t.parentElement, D),
    extendFn: ["init", "initToolbar"],
    model: {
      defaults: {
        tagName: "a",
        name: u,
        icon: I.galleryItem,
        attributes: { [ae]: !0, href: c },
        components: { type: "image", attributes: { alt: "Image", src: c } },
        ...q.props,
        traits: [...q.traits]
      },
      init() {
        const t = [f].map((o) => `change:${o}`).join(" ");
        this.initSourceType(), this.on(t, this.updateTraits), this.updateTraits({ init: !0 }), this.initScriptUpdate(), we(this, f, this.triggerGalleryUpdate);
      },
      initToolbar() {
        b(this);
      },
      initScriptUpdate() {
        const t = [ce.name].map((o) => `change:attributes:${o}`).join(" ");
        this.on(t, this.triggerGalleryUpdate);
      },
      triggerGalleryUpdate(...t) {
        var o;
        (o = this.closestType(k)) == null || o.__scriptPropsChange(...t);
      },
      updateTraits(t = {}) {
        const { changed: o } = this, { init: g } = t;
        if (o[f] || g) {
          Z(this, f);
          const d = this.getTrait(f).getValue();
          if (d === P.image) {
            this.removeAttributes([N.name, F.name, U]);
            const w = this.getTrait(R.name);
            w.setValue(w.getValue() || c);
          } else d === P.video ? this.removeAttributes([U]) : d === P.external && this.addAttributes({ [U]: !0 });
        }
      },
      initSourceType() {
        const t = this.getAttributes({ noClass: !0, noStyle: !0 });
        t[U] ? this.set(f, P.external) : (t[N.name] || t[F.name]) && this.set(f, P.video);
      }
    }
  }), fe({
    editor: e,
    plan: E.startup,
    licenseKey: r.licenseKey,
    pluginName: Ae,
    cleanup: () => {
      a.remove(k), n.removeType(k);
    }
  });
}, Ge = ve(Ee);
export {
  Ge as default
};
