function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import { useLocale, useSiteData } from 'dumi';
import { noop } from 'lodash-es';
import React, { useState } from 'react';
import SplitPane from 'react-split-pane';
import ClientOnly from "../../common/ClientOnly";
import InViewSuspense from "../../common/InViewSuspense";
import { NotFound } from "dumi/theme/slots/404";
import CodeHeader from "../CodePreview/CodeHeader";
import { ic } from "../hooks";
import { getDemoInfo } from "./utils";
var CodeEditor = /*#__PURE__*/React.lazy(function () {
  return import("dumi/theme/slots/CodeEditor");
});
var CodePreview = /*#__PURE__*/React.lazy(function () {
  return import("dumi/theme/slots/CodePreview");
});
/**
 * 代码编辑器 + 代码预览区域
 */
var CodeRunner = function CodeRunner(_ref) {
  var exampleTopics = _ref.exampleTopics,
    topic = _ref.topic,
    example = _ref.example,
    demo = _ref.demo,
    size = _ref.size,
    replaceId = _ref.replaceId,
    isPlayground = _ref.isPlayground,
    _ref$notFound = _ref.notFound,
    notFound = _ref$notFound === void 0 ? /*#__PURE__*/React.createElement(NotFound, null) : _ref$notFound,
    _ref$showAI = _ref.showAI,
    showAI = _ref$showAI === void 0 ? true : _ref$showAI,
    _ref$showEditor = _ref.showEditor,
    showEditor = _ref$showEditor === void 0 ? true : _ref$showEditor;
  var demoInfo = getDemoInfo(exampleTopics, topic, example, demo);

  // 找不到，啥也别干了，404 页面
  if (!demoInfo) return notFound;
  var title = demoInfo.title,
    source = demoInfo.source,
    relativePath = demoInfo.relativePath;
  var _useSiteData = useSiteData(),
    themeConfig = _useSiteData.themeConfig;
  var githubUrl = themeConfig.githubUrl,
    playground = themeConfig.playground;
  var _useState = useState(),
    _useState2 = _slicedToArray(_useState, 2),
    error = _useState2[0],
    setError = _useState2[1];
  var _useState3 = useState(false),
    _useState4 = _slicedToArray(_useState3, 2),
    isFullScreen = _useState4[0],
    setFullscreen = _useState4[1];
  var locale = useLocale();
  var header = /*#__PURE__*/React.createElement(CodeHeader, {
    title: ic(title),
    relativePath: relativePath,
    githubUrl: githubUrl
  });
  var exampleId = "".concat(topic, "_").concat(example, "_").concat(demo);
  var codePreview = /*#__PURE__*/React.createElement(CodePreview, {
    exampleId: exampleId,
    error: error,
    header: header,
    isPlayground: isPlayground
  });
  var codeEditor = /*#__PURE__*/React.createElement(ClientOnly, null, /*#__PURE__*/React.createElement(CodeEditor, {
    exampleId: exampleId,
    source: source,
    relativePath: relativePath,
    replaceId: replaceId,
    onError: setError,
    onFullscreen: setFullscreen,
    onDestroy: noop,
    onReady: noop,
    playground: playground,
    title: ic(title),
    showAI: showAI,
    style: {
      display: showEditor ? 'block' : 'none'
    }
  }));
  return /*#__PURE__*/React.createElement(InViewSuspense, {
    fallback: null
  },
  // @ts-ignore
  showEditor ? /*#__PURE__*/React.createElement(SplitPane, {
    split: "vertical",
    defaultSize: "".concat((1 - size) * 100, "%"),
    minSize: 100
  }, codePreview, codeEditor) : /*#__PURE__*/React.createElement(React.Fragment, null, codePreview, codeEditor));
};
export default CodeRunner;