"use strict";
(() => {
var exports = {};
exports.id = 9056;
exports.ids = [9056,7206];
exports.modules = {

/***/ 313342:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"src":"/_next/static/media/cocalc-jupyter-nbgrader-overview.54b40439.png","height":704,"width":1001,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAAJFBMVEXu8vb19vjX4+3////f5Orn7PDI1+Xh6vPC0uK50ui0x9ny6eKcxBz3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAALklEQVQImRXGuREAIBADsbW5D+i/XwZFIm1nJPTZ2wZyquaHiACJOFPdCF2t7wEULQC5mVnpHwAAAABJRU5ErkJggg==","blurWidth":8,"blurHeight":6});

/***/ }),

/***/ 640813:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"src":"/_next/static/media/cocalc-jupyter2-20170508.af0cd92a.png","height":908,"width":1605,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAFVBMVEX+/v7y8vL4+fns7OzS4evb7e6zzeVvUT8KAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAJElEQVQImR3IsREAAAgCsQfU/Uf2NGWQaqpbSIAtzLvxCclPFgZ3AD5BNVyjAAAAAElFTkSuQmCC","blurWidth":8,"blurHeight":5});

/***/ }),

/***/ 878802:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"src":"/_next/static/media/cocalc-real-time-jupyter.3845ea29.png","height":508,"width":868,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAGFBMVEXn5+fe3t7i4uLb2tzR0dHDw8PV1dXLyupuAL43AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAJUlEQVQImQXBgQEAMAiDMLDV/f/xEsyet8tYNYEpUTDFzACFBx8JIQBX5gACbQAAAABJRU5ErkJggg==","blurWidth":8,"blurHeight":5});

/***/ }),

/***/ 608916:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"src":"/_next/static/media/jupyter-logo.6c92392c.svg","height":51,"width":44});

/***/ }),

/***/ 339772:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ Backups)
});

// EXTERNAL MODULE: external "react/jsx-runtime"
var jsx_runtime_ = __webpack_require__(920997);
// EXTERNAL MODULE: ./components/landing/info.tsx
var info = __webpack_require__(426590);
// EXTERNAL MODULE: ./components/misc/A.tsx
var A = __webpack_require__(940981);
;// CONCATENATED MODULE: ./public/features/cocalc-backup-1.png
/* harmony default export */ const cocalc_backup_1 = ({"src":"/_next/static/media/cocalc-backup-1.24cda3cd.png","height":773,"width":1613,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAMAAACEE47CAAAAD1BMVEX4+fnw8PDh6vLr8PTX5O5LdpNfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAG0lEQVQImWNggANmJiZmRkYwg4UJxGBkZgEzAAJFACr25cK5AAAAAElFTkSuQmCC","blurWidth":8,"blurHeight":4});
;// CONCATENATED MODULE: ./components/landing/backups.tsx




function Backups() {
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
        anchor: "a-backups",
        title: "Backups",
        icon: "life-saver",
        image: cocalc_backup_1,
        alt: "Directory listing of filesystem backups of a CoCalc project",
        wide: true,
        children: [
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                children: [
                    "Every couple of minutes,",
                    " ",
                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("strong", {
                        children: [
                            "all files in your project are saved in consistent readonly snapshots",
                            " ",
                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                href: "https://en.wikipedia.org/wiki/ZFS",
                                children: "using ZFS"
                            })
                        ]
                    }),
                    "."
                ]
            }),
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                children: [
                    "This means you can recover older versions of your files in case they are corrupted or accidentally deleted.",
                    " "
                ]
            }),
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                children: [
                    "These backups are complementary to",
                    " ",
                    /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                        href: "#a-timetravel",
                        children: "TimeTravel"
                    }),
                    " and provide browsable backups of images and data files in addition to the documents you are actively editing."
                ]
            })
        ]
    });
};


/***/ }),

/***/ 556815:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ Code)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_1__);


const { Text  } = antd__WEBPACK_IMPORTED_MODULE_1__.Typography;
function Code({ children , style  }) {
    return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(Text, {
        code: true,
        style: style,
        children: children
    });
};


/***/ }),

/***/ 661774:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "e": () => (/* binding */ Disclaimer),
  "Z": () => (/* binding */ Compare)
});

// EXTERNAL MODULE: external "react/jsx-runtime"
var jsx_runtime_ = __webpack_require__(920997);
// EXTERNAL MODULE: external "antd"
var external_antd_ = __webpack_require__(545725);
// EXTERNAL MODULE: ./components/misc/A.tsx
var A = __webpack_require__(940981);
;// CONCATENATED MODULE: ./components/landing/compare.json
const compare_namespaceObject = JSON.parse('[{"name":"jupyter","title":"Online Jupyter Notebooks","link":"/features/jupyter-notebook","products":[{"key":"cocalc","name":"CoCalc","link":"https://cocalc.com"},{"key":"mybinder","name":"MyBinder","link":"https://mybinder.org/"},{"key":"colab","name":"Colab","link":"https://colab.research.google.com/"},{"key":"datalore","name":"Datalore","link":"https://datalore.io"},{"key":"deepnote","name":"Deepnote","link":"https://www.deepnote.com/"}],"rows":[{"feature":"Programming languages","cocalc":"Python, Sage, R, Octave, and many more","mybinder":"Python, R, etc. and customizable","colab":"Python 3","datalore":"Python 3","deepnote":"Python 3, Quip"},{"feature":"IPython Widgets","cocalc":true,"mybinder":true,"colab":true,"datalore":true,"deepnote":true},{"feature":"File sharing between users","cocalc":true,"mybinder":false,"colab":true,"datalore":true,"deepnote":true},{"feature":"Realtime collaboration: multiple people use the same notebook together","cocalc":true,"colab":{"type":false,"note":"Colab used to have realtime sync, but it ended in 2017, when Google terminated their realtime API product.","link":"https://workspaceupdates.googleblog.com/2017/11/committed-to-storage-apis-retiring.html"},"mybinder":"Possible via experimental extension to JupyterLab.","datalore":true,"deepnote":true},{"feature":"Persistence","cocalc":true,"mybinder":false,"colab":"Notebook persists, but data and files do not.","datalore":true,"deepnote":true},{"feature":"Large preinstalled software environment","cocalc":{"type":true,"note":"1500+ Python libraries preinstalled; extensive R, Julia, Octave, and other packages.","link":"https://cocalc.com/software/python"},"mybinder":"Limited","deepnote":{"type":true,"note":"27 featured Python packages","link":"https://docs.deepnote.com/environment/pre-installed-packages"},"datalore":"Python3, SQL, Scala, R, and Kotlin kernels; large pre-installed env with top data science packages"},{"feature":"Paid Plans","cocalc":{"type":true,"note":" Basic - $2 person/month; Pro - scales linearly depending on the resources you need","link":"https://cocalc.com/store"},"mybinder":{"type":false,"note":"Free only"},"colab":{"type":true,"note":"Pro - $9.99 person/month; Pro+ - $49.99 person/month","link":"https://colab.research.google.com/signup/pricing"},"datalore":{"type":true,"note":"Pro - $19.90 person/month; Enterprise - $125 person/month","link":"https://www.jetbrains.com/datalore/enterprise/"},"deepnote":{"type":true,"note":"Pro - $12 person/month; Enterprise - $99 person / month; plus an additional hourly fee for more powerful compute resources at about 7x the market rate","link":"https://deepnote.com/pricing"}},{"feature":"Disk space","cocalc":"3GB/project for free","mybinder":"Ephemeral","colab":"Uses your Google Drive storage","datalore":"Limit of two simultaneously running notebooks","deepnote":"5GB for free"},{"feature":"Memory","cocalc":"1GB/project for free","datalore":"Limit of two simultaneously running notebooks","deepnote":"several GB for free"},{"feature":"Idle timeout","cocalc":"30 minutes for free; pay for more","deepnote":"15 minutes for free; pay for more"},{"feature":"Network access","cocalc":"Only for non-free projects (due to abuse)","colab":true,"datalore":true,"mybinder":true,"deepnote":true},{"feature":"Public Google-indexed searchable publishing of files","cocalc":"Paid","mybinder":false,"datalore":true,"deepnote":true},{"feature":"Self hosting","cocalc":{"type":true,"link":"https://github.com/sagemathinc/cocalc-docker#readme"},"mybinder":true,"colab":false,"datalore":{"type":true,"link":"https://www.jetbrains.com/datalore/enterprise/"},"deepnote":false},{"feature":"Open source","cocalc":{"type":false,"note":"Partial (AGPLv3 + noncommercial use clause)","link":"https://github.com/sagemathinc/cocalc"},"mybinder":true,"colab":{"type":false,"note":"Some components are open","link":"https://github.com/googlecolab"},"datalore":false,"deepnote":{"type":false,"note":"Some of their modifications to upstreams projects are open source","link":"https://github.com/deepnote"}},{"feature":"GPUs","cocalc":{"type":false,"note":"Only when self hosted"},"mybinder":"Only when self hosted","colab":"Yes, for free, and even better when paid.","datalore":"Datalore Professional and when self-hosted","deepnote":true}]},{"name":"latex","title":"Online LaTeX Editors","link":"/features/latex-editor","products":[{"key":"cocalc","name":"CoCalc","link":"https://cocalc.com"},{"key":"overleaf","name":"Overleaf","link":"https://www.overleaf.com/"},{"key":"authorea","name":"Authorea","link":"https://www.authorea.com/"},{"key":"papeeria","name":"Papeeria","link":"https://papeeria.com/"}],"rows":[{"feature":"Realtime collaboration and sync","cocalc":true,"overleaf":"Limited number of collaborators","authorea":false},{"feature":"PDFLaTeX rendering engine","cocalc":true,"overleaf":true,"authorea":false},{"feature":"XeLaTeX rendering engine","cocalc":true,"overleaf":true,"authorea":false},{"feature":"LuaTeX rendering engine","cocalc":true,"overleaf":true,"authorea":false},{"feature":"Upload files","cocalc":true,"overleaf":true,"authorea":true,"papeeria":true},{"feature":"Forward and inverse search","cocalc":true,"overleaf":true,"authorea":null,"papeeria":true},{"feature":"Multifile support","cocalc":true,"overleaf":true,"authorea":null,"papeeria":true},{"feature":"WYSIWYG","cocalc":false,"overleaf":{"type":true,"note":"This is only a partial WYSIWYG-like mode."},"authorea":true,"papeeria":false},{"feature":"Equation editor","cocalc":false,"overleaf":false,"authorea":true,"papeeria":false},{"feature":"Bibliography","cocalc":{"type":true,"note":"Only BibTex via LaTeX (nothing sophisticated)"},"overleaf":true,"authorea":true,"papeeria":{"type":true,"note":"Limited"}},{"feature":"Preloaded journal templates","cocalc":{"type":false,"note":"However, you can easily upload a template from a journal."},"overleaf":true,"authorea":true,"papeeria":false},{"feature":"Run Python, R and other scripts as part of compilation","cocalc":{"type":true,"note":"CoCalc is particularly good at this."},"overleaf":{"type":true,"note":"But limited."},"authorea":false,"papeeria":false},{"feature":"R/Knitr","cocalc":true,"overleaf":"Limited - very few packages, limited syntax, no caching, slow","authorea":false,"papeeria":false},{"feature":"SageTex","cocalc":true,"overleaf":false,"authorea":false,"papeeria":false},{"feature":"PythonTex","cocalc":true,"overleaf":false,"authorea":false,"papeeria":false},{"feature":"Self hosting","cocalc":true,"overleaf":true,"authorea":false,"papeeria":false}]},{"name":"terminal","title":"Online Linux Terminal","link":"/features/terminal","products":[{"key":"cocalc","name":"CoCalc","link":"https://cocalc.com"},{"key":"cloud","name":"GCE/AWS/Azure Clouds"},{"key":"lxd","name":"LXD.org","link":"https://linuxcontainers.org/"},{"key":"webminal","name":"Webminal","link":"https://www.webminal.org/"}],"rows":[{"feature":"Free access for unlimited time","cocalc":true,"cloud":{"type":false,"note":"Limited trial with credit card"},"lxd":true,"webminal":true},{"feature":"Full Linux","cocalc":true,"cloud":true,"lxd":true},{"feature":"Count of of pre-installed packages, by running \'apt list --installed | wc -l\' or \'rpm -qa | wc -l\'","cocalc":"~ 9500","cloud":null,"lxd":"~ 200","webminal":"~ 700"},{"feature":"Copy/paste","cocalc":true,"cloud":true,"lxd":true},{"feature":"Periodic backups of your data","cocalc":true,"cloud":true,"lxd":false,"webminal":false},{"feature":"Persistent of your data","cocalc":true,"cloud":true,"lxd":false},{"feature":"Ease of setup and configuration","cocalc":"Easy","cloud":"Hard","lxd":"Very Easy","webminal":"Medium"},{"feature":"Root access","cocalc":false,"cloud":true,"lxd":true,"webminal":{"note":"Limited"}}]}]');
// EXTERNAL MODULE: ../frontend/dist/components/icon.js
var icon = __webpack_require__(807772);
// EXTERNAL MODULE: ./components/landing/contact.tsx
var contact = __webpack_require__(892771);
;// CONCATENATED MODULE: ./components/landing/compare.tsx






function Compare({ name , disclaimer , title  }) {
    const v = [];
    for (const table of compare_namespaceObject){
        if (name != null && table.name != name) continue;
        v.push(/*#__PURE__*/ jsx_runtime_.jsx(ComparisonTable, {
            table: table,
            disclaimer: disclaimer,
            title: title
        }, table.name));
    }
    return /*#__PURE__*/ jsx_runtime_.jsx("div", {
        style: {
            background: "white",
            width: "100%"
        },
        children: v
    });
};
function cmp(a, b) {
    a = `${a}`;
    b = `${b}`;
    if (a < b) return -1;
    if (a > b) return 1;
    return 0;
}
function ComparisonTable({ table , disclaimer , title  }) {
    const columns = [
        {
            title: "Feature",
            dataIndex: "feature",
            key: "feature",
            width: "25%"
        }, 
    ];
    for (const product of table.products){
        columns.push({
            width: `${75 / table.products.length}%`,
            title: product.link ? /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                href: product.link,
                alt: "Link to information about this product",
                children: product.name
            }) : product.name,
            key: product.key,
            dataIndex: product.key,
            // @ts-ignore
            render: (support)=>{
                if (support === undefined) {
                    return /*#__PURE__*/ jsx_runtime_.jsx(icon.Icon, {
                        name: "question-circle",
                        style: {
                            color: "#888",
                            fontSize: "20px"
                        }
                    });
                }
                if (typeof support == "boolean" || support === null) {
                    return /*#__PURE__*/ jsx_runtime_.jsx(SupportMarker, {
                        type: support
                    });
                }
                let type;
                let note;
                let link = "";
                if (typeof support == "string") {
                    type = true;
                    note = support;
                } else {
                    type = support.type;
                    note = support.note;
                    link = support.link;
                }
                return /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
                    children: [
                        /*#__PURE__*/ jsx_runtime_.jsx(SupportMarker, {
                            type: type
                        }),
                        " ",
                        type !== undefined && /*#__PURE__*/ jsx_runtime_.jsx("br", {}),
                        note && /*#__PURE__*/ jsx_runtime_.jsx("div", {
                            style: {
                                color: "#666",
                                fontSize: "9pt"
                            },
                            children: note
                        }),
                        link && /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            style: {
                                fontSize: "7pt"
                            },
                            href: link,
                            children: link
                        })
                    ]
                });
            },
            sorter: (a, b)=>cmp(a[product.key], b[product.key])
        });
    }
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
        style: {
            margin: "auto",
            padding: "30px",
            overflowX: "auto"
        },
        children: [
            title ? title : /*#__PURE__*/ (0,jsx_runtime_.jsxs)("h1", {
                style: {
                    textAlign: "center"
                },
                children: [
                    table.title,
                    "\xa0\xa0\xa0\xa0",
                    /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                        href: table.link,
                        style: {
                            fontSize: "11pt"
                        },
                        alt: "Link to learn more about this",
                        children: "learn more"
                    })
                ]
            }),
            /*#__PURE__*/ jsx_runtime_.jsx(external_antd_.Table, {
                dataSource: table.rows,
                columns: columns,
                bordered: true,
                pagination: false,
                rowKey: "feature"
            }),
            disclaimer && /*#__PURE__*/ jsx_runtime_.jsx(Disclaimer, {})
        ]
    });
}
function SupportMarker({ type  }) {
    if (type === true) {
        return /*#__PURE__*/ jsx_runtime_.jsx(icon.Icon, {
            name: "check",
            style: {
                color: "green",
                fontSize: "20px"
            }
        });
    } else if (type === false) {
        return /*#__PURE__*/ jsx_runtime_.jsx(icon.Icon, {
            name: "times",
            style: {
                color: "red",
                fontSize: "20px"
            }
        });
    } else if (type === null) {
        return /*#__PURE__*/ jsx_runtime_.jsx("span", {
            style: {
                color: "#888"
            },
            children: "N/A"
        });
    } else {
        return null;
    }
}
function Disclaimer() {
    return /*#__PURE__*/ jsx_runtime_.jsx(external_antd_.Alert, {
        style: {
            margin: "30px auto",
            maxWidth: "900px"
        },
        message: "",
        description: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
            style: {
                fontSize: "10pt"
            },
            children: [
                "These comparisons were made in good faith; however, they may contain errors, since we know CoCalc better and the products are constantly improving. ",
                /*#__PURE__*/ jsx_runtime_.jsx(contact/* default */.Z, {}),
                " if anything looks wrong or incomplete!"
            ]
        }),
        type: "warning",
        showIcon: true
    });
}


/***/ }),

/***/ 426590:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ Info)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(807772);
/* harmony import */ var _cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(975867);
/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(428053);
/* harmony import */ var lib_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(774872);






const showcase = {
    width: "100%",
    boxShadow: "2px 2px 4px rgb(0 0 0 / 25%), 0 2px 4px rgb(0 0 0 / 22%)",
    borderRadius: "3px"
};
function Info(props) {
    const { anchor , icon , title , image , alt , video , caption , children , wide , swapCols , textStyleExtra ,  } = props;
    const head = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("h1", {
        id: anchor,
        style: {
            textAlign: "center",
            marginBottom: "20px",
            color: "#333"
        },
        children: [
            icon && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", {
                style: {
                    fontSize: "24pt",
                    marginRight: "5px"
                },
                children: [
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_2__.Icon, {
                        name: icon
                    }),
                    " "
                ]
            }),
            title
        ]
    });
    let graphic = null;
    if (image != null) {
        graphic = /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_image__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
            style: showcase,
            src: image,
            alt: alt ?? caption
        });
    } else if (video != null) {
        const videoSrcs = typeof video == "string" ? [
            video
        ] : video;
        verifyHasMp4(videoSrcs);
        graphic = /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
            style: {
                position: "relative",
                width: "100%"
            },
            children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("video", {
                style: showcase,
                loop: true,
                controls: true,
                children: sources(videoSrcs)
            })
        });
    }
    if (graphic != null && caption != null) {
        graphic = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
            children: [
                graphic,
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("br", {}),
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("br", {}),
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                    style: {
                        textAlign: "center",
                        color: "#666",
                        fontSize: "13pt"
                    },
                    children: caption
                })
            ]
        });
    }
    if (!graphic) {
        const noGraphicTextStyle = {
            background: "#fafafa",
            padding: "20px",
            marginBottom: "15px"
        };
        if (textStyleExtra != null) {
            // if textColStyleExtra is given, then merge it into noGraphicTextStyle.
            Object.assign(noGraphicTextStyle, textStyleExtra);
        }
        return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
            style: {
                width: "100%"
            },
            children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                style: {
                    maxWidth: lib_config__WEBPACK_IMPORTED_MODULE_5__/* .MAX_WIDTH */ .d,
                    margin: "0 auto"
                },
                children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
                    style: noGraphicTextStyle,
                    children: [
                        /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                            style: {
                                textAlign: "center"
                            },
                            children: head
                        }),
                        /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                            style: {
                                margin: "auto",
                                maxWidth: wide ? "600px" : undefined
                            },
                            children: children
                        })
                    ]
                })
            })
        });
    }
    const textColStyle = {
        border: "1px solid white",
        borderRadius: "5px",
        padding: "0 20px 0 20px",
        marginBottom: "15px",
        display: "flex",
        justifyContent: "start",
        alignContent: "start",
        flexDirection: "column",
        fontSize: "12pt"
    };
    if (textStyleExtra != null) {
        // if textColStyleExtra is given, then merge it into textColStyle.
        Object.assign(textColStyle, textStyleExtra);
    }
    const textCol = /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
        lg: wide ? 7 : 9,
        style: textColStyle,
        children: children
    }, "text");
    const graphicCol = /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
        lg: wide ? 17 : 15,
        style: {
            padding: "0 30px",
            width: "100%"
        },
        children: graphic
    }, "graphics");
    const cols = swapCols ? [
        textCol,
        graphicCol
    ] : [
        graphicCol,
        textCol
    ];
    return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
        style: {
            padding: "60px 5%",
            background: "white",
            fontSize: "11pt"
        },
        children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
            children: [
                head,
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Row, {
                    children: cols
                })
            ]
        })
    });
};
function sources(video) {
    const v = [];
    for (const x of video){
        v.push(/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("source", {
            src: (0,_util__WEBPACK_IMPORTED_MODULE_3__/* .MediaURL */ .c)(x)
        }, x));
    }
    return v;
}
function verifyHasMp4(video) {
    for (const x of video){
        if (x.endsWith(".mp4")) {
            return;
        }
    }
    console.warn("include mp4 format for the video, so that it is viewable on iOS!!", video);
}
Info.Heading = ({ children , description , style  })=>{
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
        style: {
            ...{
                textAlign: "center",
                margin: "40px"
            },
            ...style
        },
        children: [
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h1", {
                style: {
                    fontSize: "400%",
                    color: "#444"
                },
                children: children
            }),
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                style: {
                    fontSize: "13pt",
                    color: "#666"
                },
                children: description
            })
        ]
    });
};


/***/ }),

/***/ 482238:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(616689);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _cocalc_frontend_misc_math_to_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(749924);
/* harmony import */ var _cocalc_frontend_misc_math_to_html__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_cocalc_frontend_misc_math_to_html__WEBPACK_IMPORTED_MODULE_2__);



const LaTeX = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1___default().memo(()=>{
    const { __html  } = _cocalc_frontend_misc_math_to_html__WEBPACK_IMPORTED_MODULE_2___default()("\\LaTeX", true);
    return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
        dangerouslySetInnerHTML: {
            __html
        }
    });
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LaTeX);


/***/ }),

/***/ 171580:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ Pitch)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var components_misc_A__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(940981);
/* harmony import */ var _code__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(556815);




function Pitch({ col1 , col2 , ext  }) {
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
        style: {
            padding: "30px 10%",
            backgroundColor: "white",
            fontSize: "11pt"
        },
        children: [
            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_1__.Row, {
                children: [
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
                        lg: 12,
                        style: {
                            paddingRight: "20px"
                        },
                        children: col1
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
                        lg: 12,
                        children: col2
                    })
                ]
            }),
            ext && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(CallToAction, {
                ext: ext
            })
        ]
    });
};
function CallToAction({ ext  }) {
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
        style: {
            textAlign: "center",
            padding: "30px 0",
            fontSize: "14pt"
        },
        children: [
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("strong", {
                children: "Ready out of the box"
            }),
            ":",
            " ",
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
                href: "https://doc.cocalc.com/getting-started.html",
                children: "Sign up, create a project"
            }),
            ", create or ",
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
                href: "https://doc.cocalc.com/howto/upload.html",
                children: "upload"
            }),
            " ",
            "your ",
            ext && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_code__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
                children: [
                    "*.",
                    ext
                ]
            }),
            " file, and you're ready to go!"
        ]
    });
}


/***/ }),

/***/ 774872:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "d": () => (/* binding */ MAX_WIDTH),
/* harmony export */   "r": () => (/* binding */ SHARE_MAX_WIDTH)
/* harmony export */ });
/*
Constants and other configuration that impact the overall
look of all of the pages.
*/ const MAX_WIDTH = "900px";
const SHARE_MAX_WIDTH = "1100px";


/***/ }),

/***/ 207929:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": () => (/* binding */ JupyterNotebook),
  "getServerSideProps": () => (/* binding */ getServerSideProps)
});

// EXTERNAL MODULE: external "react/jsx-runtime"
var jsx_runtime_ = __webpack_require__(920997);
// EXTERNAL MODULE: external "antd"
var external_antd_ = __webpack_require__(545725);
// EXTERNAL MODULE: ./components/landing/footer.tsx + 1 modules
var footer = __webpack_require__(831910);
// EXTERNAL MODULE: ./components/misc/A.tsx
var A = __webpack_require__(940981);
// EXTERNAL MODULE: ./components/landing/header.tsx + 2 modules
var header = __webpack_require__(131498);
// EXTERNAL MODULE: ./components/landing/content.tsx
var content = __webpack_require__(499270);
// EXTERNAL MODULE: ./lib/with-customize.ts
var with_customize = __webpack_require__(601880);
// EXTERNAL MODULE: ./lib/customize.ts
var lib_customize = __webpack_require__(400054);
// EXTERNAL MODULE: ./components/landing/sign-in.tsx
var sign_in = __webpack_require__(63186);
// EXTERNAL MODULE: ./components/landing/info.tsx
var info = __webpack_require__(426590);
// EXTERNAL MODULE: ./components/landing/pitch.tsx
var pitch = __webpack_require__(171580);
// EXTERNAL MODULE: ./components/landing/head.tsx
var head = __webpack_require__(373306);
// EXTERNAL MODULE: ./components/landing/latex.tsx
var latex = __webpack_require__(482238);
// EXTERNAL MODULE: ./components/landing/backups.tsx + 1 modules
var backups = __webpack_require__(339772);
// EXTERNAL MODULE: ./components/landing/compare.tsx + 1 modules
var compare = __webpack_require__(661774);
// EXTERNAL MODULE: ../frontend/dist/components/icon.js
var icon = __webpack_require__(807772);
// EXTERNAL MODULE: ./public/features/jupyter-logo.svg
var jupyter_logo = __webpack_require__(608916);
// EXTERNAL MODULE: ./public/features/cocalc-jupyter2-20170508.png
var cocalc_jupyter2_20170508 = __webpack_require__(640813);
// EXTERNAL MODULE: ./public/features/cocalc-real-time-jupyter.png
var cocalc_real_time_jupyter = __webpack_require__(878802);
// EXTERNAL MODULE: ./public/features/cocalc-jupyter-nbgrader-overview.png
var cocalc_jupyter_nbgrader_overview = __webpack_require__(313342);
;// CONCATENATED MODULE: ./public/features/cocalc-chat-jupyter-20171120-2.png
/* harmony default export */ const cocalc_chat_jupyter_20171120_2 = ({"src":"/_next/static/media/cocalc-chat-jupyter-20171120-2.d3338f61.png","height":1071,"width":2032,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAMAAACEE47CAAAAHlBMVEXZ2NnV1dTPz9DGzM3z9PKo1PG3wcuO0Pm92u3///0QgeOOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAJUlEQVQImR3HsREAIAwDsXfsENh/YQ46ifKyazcqkHo+UM6rILkGRABOCkiDCQAAAABJRU5ErkJggg==","blurWidth":8,"blurHeight":4});
;// CONCATENATED MODULE: ./public/features/cocalc-jupyter-kernels.png
/* harmony default export */ const cocalc_jupyter_kernels = ({"src":"/_next/static/media/cocalc-jupyter-kernels.bc19e7db.png","height":1101,"width":1511,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAAD1BMVEX9/f3y8/br7fHF4euz0t7/Z4YCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAJElEQVQImS2JwQkAIBCA1Np/5qjLhwhi0l4AXl36ZU6Zzem9AwQ1ACSVM2/XAAAAAElFTkSuQmCC","blurWidth":8,"blurHeight":6});
;// CONCATENATED MODULE: ./public/features/jupyter-lab.png
/* harmony default export */ const jupyter_lab = ({"src":"/_next/static/media/jupyter-lab.adaa92e7.png","height":907,"width":1917,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAMAAACEE47CAAAAHlBMVEXu8fLu7/Dk09Tdvr34+Pj18/Tq7O76/fvTWVnSlZUVh3XRAAAABHRSTlP+4+HjAOgYmAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAACNJREFUCJkFwQECABAQw7Ci2/H/D0sACixwbO6hUfI2ierwAQasAHGKhxizAAAAAElFTkSuQmCC","blurWidth":8,"blurHeight":4});
;// CONCATENATED MODULE: ./public/features/cocalc-jupyter2-memory-cpu.png
/* harmony default export */ const cocalc_jupyter2_memory_cpu = ({"src":"/_next/static/media/cocalc-jupyter2-memory-cpu.009ea575.png","height":449,"width":980,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAMAAACEE47CAAAAFVBMVEW5urnAwMCcnp2urq7U1NSqqqqysrLGtUi/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIElEQVQImR3HwREAIAwDIJLq/it7lR/Q1oGQyNzZbb8HAkoAG/xhgEEAAAAASUVORK5CYII=","blurWidth":8,"blurHeight":4});
;// CONCATENATED MODULE: ./public/features/cocalc-jupyter-share-nasa.png
/* harmony default export */ const cocalc_jupyter_share_nasa = ({"src":"/_next/static/media/cocalc-jupyter-share-nasa.456f4680.png","height":588,"width":700,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAFVBMVEX9/f3m5+j19fbw7u9ibnpfa3fS2eBgzI0AAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAK0lEQVQImS3KyREAIAzDQMcH/ZfMmKDXPoQ4sWOc2UBi43xR0mMhdpD68gIO6gBoGTfzOwAAAABJRU5ErkJggg==","blurWidth":8,"blurHeight":7});
;// CONCATENATED MODULE: ./pages/features/jupyter-notebook.tsx

























function JupyterNotebook({ customize  }) {
    function pitchNoSetup() {
        return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
            children: [
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("h2", {
                    children: [
                        "No software setup: ",
                        /*#__PURE__*/ jsx_runtime_.jsx("small", {
                            children: "100% online"
                        })
                    ]
                }),
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                    children: [
                        "CoCalc is an online web service where you can",
                        " ",
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("strong", {
                            children: [
                                "run ",
                                /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                    href: "http://jupyter.org/",
                                    children: "Jupyter notebooks"
                                }),
                                " right inside your browser"
                            ]
                        }),
                        ". You can privately share your notebook with your",
                        " ",
                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            href: "https://doc.cocalc.com/project-settings.html#about-collaborators",
                            children: "project collaborators"
                        }),
                        " ",
                        "– all changes are",
                        " ",
                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            href: "#a-realtimesync",
                            children: /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                children: "synchronized in real-time"
                            })
                        }),
                        "."
                    ]
                }),
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                    children: [
                        "You no longer have to worry about setting up your Python environment, installing/updating/maintaining your libraries, or backing up files. CoCalc manages everything for you!",
                        " "
                    ]
                })
            ]
        });
    }
    function pitchTeaching() {
        return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
            children: [
                /*#__PURE__*/ jsx_runtime_.jsx("h2", {
                    children: "Jupyter Notebooks made for teaching!"
                }),
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("ul", {
                    children: [
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("li", {
                            children: [
                                "A sophisticated",
                                " ",
                                /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                    children: /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                        href: "/features/teaching",
                                        children: "course management system"
                                    })
                                }),
                                " ",
                                "keeps track of all notebooks of all students. It manages distributing and collecting files as well as grading."
                            ]
                        }),
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("li", {
                            children: [
                                "The",
                                " ",
                                /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                    href: "/features/whiteboard",
                                    children: "Jupyter collaborative whiteboard"
                                }),
                                " ",
                                "supports presentations that mix Jupyter cells, mathematical notation, and sketching with a pen and other tools."
                            ]
                        }),
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("li", {
                            children: [
                                "CoCalc",
                                "'",
                                "s Jupyter Notebooks fully support",
                                " ",
                                /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                    href: "https://doc.cocalc.com/teaching-nbgrader.html",
                                    children: /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                        children: "very flexible automatic grading via nbgrader"
                                    })
                                }),
                                "! The teacher",
                                "'",
                                "s notebook contains exercise cells for students and test cells, some of which students can also run to get immediate feedback. Once collected, you tell CoCalc to automatically run the full test suite across all student notebooks and tabulate the results."
                            ]
                        })
                    ]
                }),
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                    children: [
                        "CoCalc supports many kernels right out of the box: several Python environments, ",
                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            href: "http://www.sagemath.org/",
                            children: "SageMath"
                        }),
                        ",",
                        " ",
                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            href: "http://www.r-project.org/",
                            children: "R Statistical Software"
                        }),
                        "Octave, ",
                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                            href: "/features/julia",
                            children: "Julia"
                        }),
                        " and many more.",
                        " "
                    ]
                })
            ]
        });
    }
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)(lib_customize/* Customize */.l, {
        value: customize,
        children: [
            /*#__PURE__*/ jsx_runtime_.jsx(head/* default */.Z, {
                title: "Online Jupyter Notebooks"
            }),
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(external_antd_.Layout, {
                children: [
                    /*#__PURE__*/ jsx_runtime_.jsx(header/* default */.Z, {
                        page: "features",
                        subPage: "jupyter-notebook"
                    }),
                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)(external_antd_.Layout.Content, {
                        children: [
                            /*#__PURE__*/ jsx_runtime_.jsx("div", {
                                style: {
                                    backgroundColor: "#c7d9f5"
                                },
                                children: /*#__PURE__*/ jsx_runtime_.jsx(content/* default */.Z, {
                                    startup: "Jupyter",
                                    logo: jupyter_logo/* default */.Z,
                                    title: "Online Jupyter Notebooks",
                                    subtitle: "CoCalc's own collaborative, fully compatible and supercharged notebooks.",
                                    subtitleBelow: true,
                                    image: cocalc_jupyter2_20170508/* default */.Z,
                                    alt: "Using Pandas and Tensorflow in a Jupyter notebook"
                                })
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(pitch/* default */.Z, {
                                col1: pitchTeaching(),
                                col2: pitchNoSetup(),
                                ext: "ipynb"
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(sign_in/* default */.Z, {
                                startup: "Jupyter"
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                title: "Collaborative editing",
                                icon: "users",
                                image: cocalc_real_time_jupyter/* default */.Z,
                                anchor: "a-realtimesync",
                                alt: "Two browser windows editing the same Jupyter notebook",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "You can share your Jupyter notebooks privately with project collaborators. All modifications are",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "synchronized in real time"
                                            }),
                                            ", where you can see the cursors of others while they edit the document. You are also notified about the presence of collaborators."
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "Edit text between code cells using",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://doc.cocalc.com/markdown.html",
                                                children: "markdown or our collaborative rich text editor"
                                            }),
                                            "."
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "We have extended ipywidgets so that sliders, menus and knobs of",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20Basics.html",
                                                children: "interactive widgets"
                                            }),
                                            " ",
                                            "are also fully synchronized among all collaborators."
                                        ]
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "Additionally, the status and results of all computations in the currently running kernel session are also synchronized, because the session runs remotely in CoCalc's cluster."
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "Together, everyone involved experiences the notebook in the same way."
                                    })
                                ]
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(info/* default.Heading */.Z.Heading, {
                                description: /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
                                    children: [
                                        "The following are some more specific features of Jupyter notebooks in CoCalc.",
                                        /*#__PURE__*/ jsx_runtime_.jsx("br", {}),
                                        "There is also more",
                                        " ",
                                        /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                            href: "https://doc.cocalc.com/jupyter.html",
                                            children: "comprehensive documentation"
                                        }),
                                        "."
                                    ]
                                }),
                                children: "Feature Overview"
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-timetravel",
                                title: "TimeTravel",
                                icon: "history",
                                video: [
                                    "features/cocalc-jupyter2-timetravel-20170515-3x.webm",
                                    "features/cocalc-jupyter2-timetravel-20170515-3x.mp4", 
                                ],
                                alt: "Video showing the TimeTravel slider in a SageMath Jupyter notebook",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                    href: "https://doc.cocalc.com/time-travel.html",
                                                    children: "TimeTravel"
                                                })
                                            }),
                                            " ",
                                            "is a powerful feature of the CoCalc platform. It records all your changes in your Jupyter notebook in fine detail. You can go back and forth in time across thousands of changes to see all previous edits."
                                        ]
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "This allows you to easily recover anything from previous versions of your notebook by copy and pasting."
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "You can also browse the entire process of creating the notebook from the start. This lets you discover how you arrived at a particular solution and see what you (or your students) tried to get there."
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-nbgrader",
                                title: "NBGrader: automatically grading assignments in Jupyter notebooks",
                                icon: "graduation-cap",
                                image: cocalc_jupyter_nbgrader_overview/* default */.Z,
                                alt: "Creating an NBGrader-enhanced Jupyter notebook",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc's Jupyter Notebooks fully support both",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "automatic"
                                            }),
                                            " and ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "manual grading"
                                            }),
                                            "!"
                                        ]
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "When using NBGrader, the teacher's notebook contains exercise cells for students and test cells, some of which students run to get immediate feedback. Once collected, you tell CoCalc to automatically run the full test suite across all student notebooks and tabulate the results."
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "Learn more about",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://doc.cocalc.com/teaching-nbgrader.html",
                                                children: "NBGrader in CoCalc"
                                            }),
                                            ".",
                                            " "
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-chat",
                                title: "Chat about your Jupyter notebook",
                                icon: "comment",
                                image: cocalc_chat_jupyter_20171120_2,
                                alt: "Chatting about a Jupyter notebook",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "A",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                    href: "https://doc.cocalc.com/chat.html",
                                                    children: "chat to the side"
                                                })
                                            }),
                                            " ",
                                            "of each Jupyter notebook lets you discuss the content of your notebook with colleagues or students. You can drag and drop or paste images and files into chat, use ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(latex/* default */.Z, {}),
                                            " math formulas, and fix typos in messages."
                                        ]
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "Collaborators who are not online will be notified about new messages the next time they sign in or you can @mention them so they get emailed."
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "Chat fully supports markdown formatting and ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(latex/* default */.Z, {}),
                                            " formulas.",
                                            " "
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-kernels",
                                title: "Managed Jupyter kernels",
                                icon: "python",
                                image: cocalc_jupyter_kernels,
                                alt: "Dropdown menu showing a large number of preinstalled Jupyter kernels",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc makes sure that your desired computational environment is available and ready to work with. Select from many pre-installed and ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "fully managed kernels"
                                            }),
                                            ". You can also create your own",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://doc.cocalc.com/howto/custom-jupyter-kernel.html",
                                                children: "custom kernel"
                                            }),
                                            "."
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "Look at our ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "/software",
                                                children: "list of available software"
                                            }),
                                            " for more about what is available."
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-kernels",
                                title: "JupyterLab and Jupyter Classic",
                                icon: "server",
                                image: jupyter_lab,
                                alt: "Running JupyterLab inside a CoCalc Project",
                                wide: true,
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc's Jupyter is a ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "complete rewrite"
                                            }),
                                            " of the classical ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "http://jupyter.org/",
                                                children: "Jupyter notebook"
                                            }),
                                            " ",
                                            "interface and backend server. It is tightly integrated into CoCalc and adds realtime collaboration, TimeTravel history and",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "http://blog.sagemath.com/jupyter/2017/05/05/jupyter-rewrite-for-smc.html",
                                                children: "more"
                                            }),
                                            ". This rewrite does not change the underlying Jupyter notebook file format; you can download your ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("code", {
                                                children: "*.ipynb"
                                            }),
                                            " file at any time and continue working in another environment."
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "In addition, CoCalc also",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://doc.cocalc.com/jupyter.html#alternatives-plain-jupyter-server-and-jupyterlab-server",
                                                children: "fully supports running"
                                            }),
                                            " ",
                                            "standard JupyterLab (with realtime collaboration enabled) and Jupyter Classic notebook servers from any CoCalc project! You can still use all libraries and extension that might rely on specifics of one of those implementations. Moreover,",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "you can fully use your CoCalc project via the powerful JupyterLab interface!"
                                            })
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc also supports",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://doc.cocalc.com/jupyter.html#collaboration-with-classical-jupyter",
                                                children: "using Jupyter Classic with collaborative editing and chat"
                                            }),
                                            "."
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-monitoring",
                                title: "CPU and memory monitoring for each notebook",
                                icon: "line-chart",
                                image: cocalc_jupyter2_memory_cpu,
                                alt: "Jupyter notebook showing CPU and memory indicators",
                                children: [
                                    /*#__PURE__*/ jsx_runtime_.jsx("p", {
                                        children: "Long running notebook sessions or intense computations might deplete available CPU or memory resources. This slows down all calculations or even causes an unexpected termination of the current session."
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc's per-notebook CPU and memory indicators helps you to",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "keep an eye on the notebook's memory and CPU consumption"
                                            }),
                                            ".",
                                            " "
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "You can even close your browser during long running computations, and check on the results later.",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                children: "Output will not be lost"
                                            }),
                                            " while your browser is closed."
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(backups/* default */.Z, {}),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)(info/* default */.Z, {
                                anchor: "a-publishing",
                                title: "Publishing your notebooks",
                                icon: "bullhorn",
                                image: cocalc_jupyter_share_nasa,
                                alt: "Jupyter notebook hosted on the CoCalc share server",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "CoCalc helps you",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "/share",
                                                children: /*#__PURE__*/ jsx_runtime_.jsx("strong", {
                                                    children: "share your work with the world"
                                                })
                                            }),
                                            ". It offers its own hosting of shared documents, which includes Jupyter notebooks and any other associated data files."
                                        ]
                                    }),
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("p", {
                                        children: [
                                            "Under the hood, CoCalc uses a novel renderer which generates a static HTML representation of your notebook (sanitized to prevent XSS attacks) on the server, which includes pre-rendered ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(latex/* default */.Z, {}),
                                            " ",
                                            "formulas. This approach is very efficient and lightweight compared to solutions based on",
                                            " ",
                                            /*#__PURE__*/ jsx_runtime_.jsx(A/* default */.Z, {
                                                href: "https://nbconvert.readthedocs.io",
                                                children: "nbconvert"
                                            }),
                                            ".",
                                            " "
                                        ]
                                    })
                                ]
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(compare/* default */.Z, {
                                name: "jupyter",
                                disclaimer: true,
                                title: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("h2", {
                                    style: {
                                        textAlign: "center"
                                    },
                                    children: [
                                        /*#__PURE__*/ jsx_runtime_.jsx(icon.Icon, {
                                            name: "bolt"
                                        }),
                                        " Jupyter notebooks in CoCalc versus the competition"
                                    ]
                                })
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx(sign_in/* default */.Z, {
                                startup: "Jupyter"
                            })
                        ]
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx(footer/* default */.Z, {})
                ]
            })
        ]
    });
};
async function getServerSideProps(context) {
    return await (0,with_customize/* default */.Z)({
        context
    });
}


/***/ }),

/***/ 545725:
/***/ ((module) => {

module.exports = require("antd");

/***/ }),

/***/ 770640:
/***/ ((module) => {

module.exports = require("cookies");

/***/ }),

/***/ 65680:
/***/ ((module) => {

module.exports = require("lru-cache");

/***/ }),

/***/ 903280:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/app-router-context.js");

/***/ }),

/***/ 492796:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/head-manager-context.js");

/***/ }),

/***/ 294957:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/head.js");

/***/ }),

/***/ 703539:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/i18n/detect-domain-locale.js");

/***/ }),

/***/ 734014:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/i18n/normalize-locale-path.js");

/***/ }),

/***/ 450744:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/image-config-context.js");

/***/ }),

/***/ 435843:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/image-config.js");

/***/ }),

/***/ 278524:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/is-plain-object.js");

/***/ }),

/***/ 878020:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/mitt.js");

/***/ }),

/***/ 664406:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/page-path/denormalize-page-path.js");

/***/ }),

/***/ 424964:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router-context.js");

/***/ }),

/***/ 493431:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/add-locale.js");

/***/ }),

/***/ 611751:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/add-path-prefix.js");

/***/ }),

/***/ 746220:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/compare-states.js");

/***/ }),

/***/ 110299:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/format-next-pathname-info.js");

/***/ }),

/***/ 623938:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/format-url.js");

/***/ }),

/***/ 329565:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/get-asset-path-from-route.js");

/***/ }),

/***/ 735789:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/get-next-pathname-info.js");

/***/ }),

/***/ 901428:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/is-dynamic.js");

/***/ }),

/***/ 528854:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/parse-path.js");

/***/ }),

/***/ 491292:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/parse-relative-url.js");

/***/ }),

/***/ 734567:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/path-has-prefix.js");

/***/ }),

/***/ 980979:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/querystring.js");

/***/ }),

/***/ 393297:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/remove-trailing-slash.js");

/***/ }),

/***/ 836052:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/resolve-rewrites.js");

/***/ }),

/***/ 584226:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/route-matcher.js");

/***/ }),

/***/ 95052:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/route-regex.js");

/***/ }),

/***/ 359232:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/utils.js");

/***/ }),

/***/ 40968:
/***/ ((module) => {

module.exports = require("next/head");

/***/ }),

/***/ 371853:
/***/ ((module) => {

module.exports = require("next/router");

/***/ }),

/***/ 616689:
/***/ ((module) => {

module.exports = require("react");

/***/ }),

/***/ 566405:
/***/ ((module) => {

module.exports = require("react-dom");

/***/ }),

/***/ 271704:
/***/ ((module) => {

module.exports = require("react-google-recaptcha-v3");

/***/ }),

/***/ 920997:
/***/ ((module) => {

module.exports = require("react/jsx-runtime");

/***/ }),

/***/ 439491:
/***/ ((module) => {

module.exports = require("assert");

/***/ }),

/***/ 714300:
/***/ ((module) => {

module.exports = require("buffer");

/***/ }),

/***/ 706113:
/***/ ((module) => {

module.exports = require("crypto");

/***/ }),

/***/ 809523:
/***/ ((module) => {

module.exports = require("dns");

/***/ }),

/***/ 582361:
/***/ ((module) => {

module.exports = require("events");

/***/ }),

/***/ 657147:
/***/ ((module) => {

module.exports = require("fs");

/***/ }),

/***/ 241808:
/***/ ((module) => {

module.exports = require("net");

/***/ }),

/***/ 822037:
/***/ ((module) => {

module.exports = require("os");

/***/ }),

/***/ 371017:
/***/ ((module) => {

module.exports = require("path");

/***/ }),

/***/ 677282:
/***/ ((module) => {

module.exports = require("process");

/***/ }),

/***/ 285477:
/***/ ((module) => {

module.exports = require("punycode");

/***/ }),

/***/ 12781:
/***/ ((module) => {

module.exports = require("stream");

/***/ }),

/***/ 371576:
/***/ ((module) => {

module.exports = require("string_decoder");

/***/ }),

/***/ 924404:
/***/ ((module) => {

module.exports = require("tls");

/***/ }),

/***/ 76224:
/***/ ((module) => {

module.exports = require("tty");

/***/ }),

/***/ 257310:
/***/ ((module) => {

module.exports = require("url");

/***/ }),

/***/ 473837:
/***/ ((module) => {

module.exports = require("util");

/***/ })

};
;

// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [6918,582,676,1746,1664,7545,3734,5373,6975,9715,9554,9066,981,5997,6202,7264,722,9924,5379,6087,6009,6952,5863,8572,4868,5123,3722,9270], () => (__webpack_exec__(207929)));
module.exports = __webpack_exports__;

})();