diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index b51b29a5a8..d54cf97d93 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,9 +10,9 @@ JIRA: [JIRA-XXXX](https://openedx.atlassian.net/browse/JIRA-XXXX) **Developer Checklist** -- [ ] Reviewed the [release process](https://github.com/edx/edx-ora2/blob/master/.github/release_process.md) +- [ ] Reviewed the [release process](https://github.com/openedx/edx-ora2/blob/master/.github/release_process.md) - [ ] Translations and JS/SASS compiled -- [ ] Bumped version number in [setup.py](https://github.com/edx/edx-ora2/blob/a62e81a9b0d89223476967ec3c27f3557a850735/setup.py#L39) and [package.json](https://github.com/edx/edx-ora2/blob/a62e81a9b0d89223476967ec3c27f3557a850735/package.json#L3) +- [ ] Bumped version number in [setup.py](https://github.com/openedx/edx-ora2/blob/a62e81a9b0d89223476967ec3c27f3557a850735/setup.py#L39) and [package.json](https://github.com/openedx/edx-ora2/blob/a62e81a9b0d89223476967ec3c27f3557a850735/package.json#L3) **Testing Instructions** diff --git a/.github/release_process.md b/.github/release_process.md index 66813b5a96..7f9394bd8a 100644 --- a/.github/release_process.md +++ b/.github/release_process.md @@ -14,7 +14,7 @@ Before Merging a pull request: When a PR is ready to release, do the following to publish a new version of ORA: - [ ] Merge to `master` -- [ ] Create a [release tag on GitHub](https://github.com/edx/edx-ora2/releases) matching version number in setup.py/package.json +- [ ] Create a [release tag on GitHub](https://github.com/openedx/edx-ora2/releases) matching version number in setup.py/package.json - [ ] Grab a coffee while our automated process submits the build to PyPi - [ ] Confirm new version appears in [PyPi: ora2](https://pypi.org/project/ora2) @@ -22,13 +22,13 @@ When a PR is ready to release, do the following to publish a new version of ORA: For non time-critical changes: -- [x] Dependencies in [edx-platform](https://github.com/edx/edx-platform) are routinely updated every few days as part of a dependency update job +- [x] Dependencies in [edx-platform](https://github.com/openedx/edx-platform) are routinely updated every few days as part of a dependency update job - [ ] Communicate/coordinate updated feature flags/configuration changes to stakeholders - [ ] After the next update task run, monitor the updated functionality in sandboxes/production To expedite the release process: -- [ ] Create a new PR in [edx-platform](https://github.com/edx/edx-platform), changing ORA version in requirements files: `requirements/edx/{github.in,base.txt,development.txt,testing.txt}` +- [ ] Create a new PR in [edx-platform](https://github.com/openedx/edx-platform), changing ORA version in requirements files: `requirements/edx/{github.in,base.txt,development.txt,testing.txt}` - [ ] Communicate/coordinate updated feature flags/configuration changes to stakeholders -- [ ] Follow the testing/release process for [edx-platform](https://github.com/edx/edx-platform) +- [ ] Follow the testing/release process for [edx-platform](https://github.com/openedx/edx-platform) - [ ] After merging, monitor the updated functionality in sandboxes/production diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index e2b066153f..fec11d6c25 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -7,4 +7,4 @@ on: jobs: commitlint: - uses: edx/.github/.github/workflows/commitlint.yml@master + uses: openedx/.github/.github/workflows/commitlint.yml@master diff --git a/.github/workflows/upgrade-python-requirements.yml b/.github/workflows/upgrade-python-requirements.yml index 26e9ae7379..5d97885974 100644 --- a/.github/workflows/upgrade-python-requirements.yml +++ b/.github/workflows/upgrade-python-requirements.yml @@ -12,7 +12,7 @@ on: jobs: call-upgrade-python-requirements-workflow: - uses: edx/.github/.github/workflows/upgrade-python-requirements.yml@master + uses: openedx/.github/.github/workflows/upgrade-python-requirements.yml@master with: branch: ${{ github.event.inputs.branch || 'master' }} # optional parameters below; fill in if you'd like github or email notifications diff --git a/README.rst b/README.rst index 2e050c5277..3511d1ca91 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ Open Response Assessment |build-status| |coverage-status| ========================================================= -This repository defines an Open Response Assessment (ORA) XBlock for use within edx-platform: https://github.com/edx/edx-platform +This repository defines an Open Response Assessment (ORA) XBlock for use within edx-platform: https://github.com/openedx/edx-platform `User docs `_ @@ -14,7 +14,7 @@ If you'll be modifying ORA code, the `Open edX Developer Stack`_ is a Docker-bas edX engineers follow the `guides on our wiki `_. Reading this page before contributing **is highly recommended**. -.. _Open edX Developer Stack: https://github.com/edx/devstack +.. _Open edX Developer Stack: https://github.com/openedx/devstack License ======= @@ -42,8 +42,8 @@ You can get help with this code on our `mailing lists`_ or in real-time conversa .. _mailing lists: https://open.edx.org/getting-help .. _Slack: https://open.edx.org/getting-help -.. |build-status| image:: https://github.com/edx/edx-ora2/workflows/Python%20CI/badge.svg?branch=master - :target: https://github.com/edx/edx-ora2/actions?query=workflow%3A%22Python+CI%22 +.. |build-status| image:: https://github.com/openedx/edx-ora2/workflows/Python%20CI/badge.svg?branch=master + :target: https://github.com/openedx/edx-ora2/actions?query=workflow%3A%22Python+CI%22 :alt: CI build status .. |coverage-status| image:: https://coveralls.io/repos/edx/edx-ora2/badge.png?branch=master :target: https://coveralls.io/r/edx/edx-ora2?branch=master diff --git a/docs/developers_guide.rst b/docs/developers_guide.rst index 7316e9c932..587ca47c33 100644 --- a/docs/developers_guide.rst +++ b/docs/developers_guide.rst @@ -7,9 +7,9 @@ Where is the code ----------------- ORA is broken into two separate repositories: -- `edx-ora2 `_ +- `edx-ora2 `_ -- `edx-submissions `_ +- `edx-submissions `_ Using ORA with docker devstack ------------------------------ diff --git a/docs/ora_team_submissions.rst b/docs/ora_team_submissions.rst index fc5a3577b4..3bb822ea4b 100644 --- a/docs/ora_team_submissions.rst +++ b/docs/ora_team_submissions.rst @@ -6,7 +6,7 @@ ORA2 Team Submissions Workflows --------- -There’s an AssessmentWorkflow model that has a workflow app label, which means that the table name is prefixed with `workflow_` and not `assessment_` like everything else (I’m sure it’s to help resolve a name collision). `See for reference: `_. In fact, each of the AssessmentWorkflow, AssessmentWorkflowStep, and AssessmentWorkflowCancellation models live under the workflow app label. +There’s an AssessmentWorkflow model that has a workflow app label, which means that the table name is prefixed with `workflow_` and not `assessment_` like everything else (I’m sure it’s to help resolve a name collision). `See for reference: `_. In fact, each of the AssessmentWorkflow, AssessmentWorkflowStep, and AssessmentWorkflowCancellation models live under the workflow app label. - The ``SubmissionMixin.create_submission()`` method calls the ``workflow_api.create_workflow()`` method (it stops at ``WorkflowMixin.create_workflow()`` along the way). This is the entry point to workflow management in ORA. @@ -22,7 +22,7 @@ Staff Workflows These should be the only workflow type that we care about for team submissions. -`Python API for managing StaffWorkflow data: `_: +`Python API for managing StaffWorkflow data: `_: - **on_init(submission_uuid)** @@ -56,7 +56,7 @@ New Models, sublcass StaffWorkflow - We’ll actually also need a new, team-centric version of the ``workflow.AssessmentWorkflow`` model, so that we can pass a ``team_submission_uuid`` to the ``start_workflow()`` method. It will follow the same flow of logic of creating a workflow record and associated steps. - - ``AssessmentWorkflow.start_workflow()`` calls the ``on_init()`` function of each `assessment type’s API, e.g. `_ In fact, pretty much all of the functions provided by assessment API’s require a ``submission_uuid`` parameter. So we’ll likely want some new API like ``assessment.api.team`` that provides the same functionality, but takes a ``team_submission_uuid`` as the first parameter. + - ``AssessmentWorkflow.start_workflow()`` calls the ``on_init()`` function of each `assessment type’s API, e.g. `_ In fact, pretty much all of the functions provided by assessment API’s require a ``submission_uuid`` parameter. So we’ll likely want some new API like ``assessment.api.team`` that provides the same functionality, but takes a ``team_submission_uuid`` as the first parameter. No new team-based AssessmentWorkflowStep model. All that the steps care about are their types and the corresponding workflow instance. diff --git a/docs/release_process.rst b/docs/release_process.rst index 47ca620946..cf3f6c99a6 100644 --- a/docs/release_process.rst +++ b/docs/release_process.rst @@ -5,12 +5,12 @@ ORA2 Release Processs Github Checklist ---------------- -- create a PR on edx-ora2 containing the version bump. This needs to happen in `setup.py `_ and `package.json `_ +- create a PR on edx-ora2 containing the version bump. This needs to happen in `setup.py `_ and `package.json `_ - get a green Travis build on said PR - merge to master - green build on master -- create a release `tag on GitHub `_ -- ORA2 is a dependency in platform. If immediate release is needed, create PR to update `requirements files` in `edx-platform`. See `PR for reference `_ . Otherwise, a bot will automatically update the requirements in platform. +- create a release `tag on GitHub `_ +- ORA2 is a dependency in platform. If immediate release is needed, create PR to update `requirements files` in `edx-platform`. See `PR for reference `_ . Otherwise, a bot will automatically update the requirements in platform. - If manual testing of the changes against edx-platform is desired, create a sandbox. - get green build on the edx-platform PR, merge - manually test changes on stage @@ -38,11 +38,11 @@ Releasing edx-submissions ------------------------- - ensure that the release number has been bumped in setup.py -- create a corresponding release in `edx submissions on GitHub: `_ +- create a corresponding release in `edx submissions on GitHub: `_ - generate a diff between the new tag and the old one - - e.g. https://github.com/edx/edx-submissions/compare/0.1.2...0.1.3 + - e.g. https://github.com/openedx/edx-submissions/compare/0.1.2...0.1.3 - verify that only the expected changes are included - ask anyone with commits to verify their changes on stage @@ -58,11 +58,11 @@ Releasing edx-ora2 - ensure that the release number has been bumped in setup.py -- create a corresponding release on GitHub: https://github.com/edx/edx-ora2/releases +- create a corresponding release on GitHub: https://github.com/openedx/edx-ora2/releases - generate a diff between the new tag and the old one - - e.g. https://github.com/edx/edx-ora2/compare/0.2.2...0.2.3 + - e.g. https://github.com/openedx/edx-ora2/compare/0.2.2...0.2.3 - verify that only the expected changes are included - ask anyone with commits to verify their changes on stage diff --git a/openassessment/fileupload/api.py b/openassessment/fileupload/api.py index a3bab4a606..a4da8fab86 100644 --- a/openassessment/fileupload/api.py +++ b/openassessment/fileupload/api.py @@ -545,7 +545,7 @@ def _file_uploads_from_list_fields(self, descriptions, names, sizes, include_del def _descriptionless_uploads(self): """ This is the old behavior, required for a corner case and should be eventually removed. - https://github.com/edx/edx-ora2/pull/1275 closed a loophole that allowed files + https://github.com/openedx/edx-ora2/pull/1275 closed a loophole that allowed files to be uploaded without descriptions. In that case, an ORA block's saved_file_descriptions would be an empty list, but a key corresponding to their student item information would exist (and thus, so would a valid download URL). diff --git a/openassessment/runtime_imports/classes.py b/openassessment/runtime_imports/classes.py index 427cef955f..732278e1da 100644 --- a/openassessment/runtime_imports/classes.py +++ b/openassessment/runtime_imports/classes.py @@ -16,7 +16,7 @@ def import_block_structure_transformers(): def import_course_waffle_flag(): """ Helper method that imports CourseWaffleFlag from edx-platform at runtime. - https://github.com/edx/edx-platform/blob/master/openedx/core/djangoapps/waffle_utils/__init__.py#L345 + https://github.com/openedx/edx-platform/blob/master/openedx/core/djangoapps/waffle_utils/__init__.py#L345 """ from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag return CourseWaffleFlag diff --git a/openassessment/xblock/config_mixin.py b/openassessment/xblock/config_mixin.py index 4ad83d60f6..1d0c820237 100644 --- a/openassessment/xblock/config_mixin.py +++ b/openassessment/xblock/config_mixin.py @@ -122,7 +122,7 @@ def is_mobile_support_enabled(self): # in mobile apps. # .. toggle_use_cases: open_edx # .. toggle_creation_date: 2020-10-14 - # .. toggle_tickets: https://github.com/edx/edx-ora2/pull/1445 + # .. toggle_tickets: https://github.com/openedx/edx-ora2/pull/1445 return settings.FEATURES.get('ENABLE_ORA_MOBILE_SUPPORT', False) @cached_property diff --git a/openassessment/xblock/static/dist/openassessment-lms.js b/openassessment/xblock/static/dist/openassessment-lms.js index bebe852d7b..30f2752367 100644 --- a/openassessment/xblock/static/dist/openassessment-lms.js +++ b/openassessment/xblock/static/dist/openassessment-lms.js @@ -1515,7 +1515,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_focus_on__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-focus-on */ \"./node_modules/react-focus-on/dist/es2015/index.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tabbable */ \"./node_modules/tabbable/index.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tabbable__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! .. */ \"./node_modules/@edx/paragon/dist/index.js\");\n/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Icon */ \"./node_modules/@edx/paragon/dist/Icon/index.js\");\n/* harmony import */ var _utils_newId__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/newId */ \"./node_modules/@edx/paragon/dist/utils/newId.js\");\n/* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/constants */ \"./node_modules/@edx/paragon/dist/utils/constants.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n/* eslint-disable max-len */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n\n var _super = _createSuper(Modal);\n\n function Modal(props) {\n var _this;\n\n _classCallCheck(this, Modal);\n\n _this = _super.call(this, props);\n _this.close = _this.close.bind(_assertThisInitialized(_this));\n _this.headerId = Object(_utils_newId__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n _this.modalBodyRef = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef();\n\n if (typeof document !== 'undefined') {\n _this.el = document.createElement('div'); // Sets true for IE11, false otherwise: https://stackoverflow.com/a/22082397/6620612\n\n _this.isIE11 = !!global.MSInputMethodContext && !!document.documentMode;\n }\n\n _this.state = {\n open: props.open\n };\n return _this;\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var parentSelector = this.props.parentSelector;\n this.parentElement = document.querySelector(parentSelector);\n\n if (this.parentElement === null) {\n throw new Error(\"Modal received invalid parentSelector: \".concat(parentSelector, \", no matching element found\"));\n }\n\n this.parentElement.appendChild(this.el);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var open = this.props.open;\n\n if (open !== prevProps.open || open !== prevState.open) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n open: open\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.unmountComponentAtNode(this.parentElement);\n }\n }, {\n key: \"getVariantIconClassName\",\n value: function getVariantIconClassName() {\n var variant = this.props.variant;\n var variantIconClassName;\n\n switch (variant.status) {\n case _utils_constants__WEBPACK_IMPORTED_MODULE_9__[\"default\"].status.WARNING:\n variantIconClassName = classnames__WEBPACK_IMPORTED_MODULE_2___default()('fa', 'fa-exclamation-triangle', 'fa-3x', \"text-\".concat(variant.status.toLowerCase()));\n break;\n\n default:\n break;\n }\n\n return variantIconClassName;\n }\n }, {\n key: \"getVariantGridBody\",\n value: function getVariantGridBody(body) {\n var variant = this.props.variant;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"container-fluid\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"col-md-10\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, body)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"col-md-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n id: Object(_utils_newId__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"Modal-\".concat(variant.status)),\n className: this.getVariantIconClassName()\n }))));\n }\n }, {\n key: \"getTabbableBodyElements\",\n value: function getTabbableBodyElements() {\n var _this$modalBodyRef;\n\n if ((_this$modalBodyRef = this.modalBodyRef) === null || _this$modalBodyRef === void 0 ? void 0 : _this$modalBodyRef.current) {\n return tabbable__WEBPACK_IMPORTED_MODULE_5___default()(this.modalBodyRef.current);\n }\n\n return [];\n }\n }, {\n key: \"isValidVariantStatus\",\n value: function isValidVariantStatus() {\n var variant = this.props.variant;\n return Object.values(_utils_constants__WEBPACK_IMPORTED_MODULE_9__[\"default\"].status).includes(variant.status);\n }\n }, {\n key: \"close\",\n value: function close(e) {\n if (e) {\n e.stopPropagation();\n }\n\n this.setState({\n open: false\n });\n this.props.onClose();\n }\n }, {\n key: \"renderButtons\",\n value: function renderButtons() {\n return this.props.buttons.map(function (button) {\n // button is either a React component that we want clone or a set of props\n if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.isValidElement(button)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(button, {\n key: button.props.children\n });\n }\n\n var label = button.label,\n buttonProps = _objectWithoutProperties(button, [\"label\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"].Deprecated, _extends({}, buttonProps, {\n key: label\n }), label);\n });\n }\n }, {\n key: \"renderBody\",\n value: function renderBody() {\n var body = this.props.body;\n\n if (typeof body === 'string') {\n body = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, body);\n }\n\n if (this.isValidVariantStatus()) {\n body = this.getVariantGridBody(body);\n }\n\n return body;\n }\n }, {\n key: \"renderModal\",\n value: function renderModal() {\n var open = this.state.open;\n var _this$props = this.props,\n dialogClassName = _this$props.dialogClassName,\n renderDefaultCloseButton = _this$props.renderDefaultCloseButton,\n renderHeaderCloseButton = _this$props.renderHeaderCloseButton,\n buttons = _this$props.buttons,\n closeText = _this$props.closeText,\n title = _this$props.title;\n var hasTabbableElements = renderDefaultCloseButton || renderHeaderCloseButton || buttons.length > 0 || this.getTabbableBodyElements().length > 0;\n var renderModalFooter = renderDefaultCloseButton || buttons.length > 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()({\n 'modal-backdrop': open,\n show: open,\n fade: !open\n }),\n role: \"presentation\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('modal', {\n show: open,\n fade: !open,\n 'd-block': open,\n 'is-ie11': this.isIE11\n }),\n role: \"presentation\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()({\n 'modal-dialog': open\n }, dialogClassName),\n role: \"dialog\",\n \"aria-modal\": true,\n \"aria-labelledby\": this.headerId\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_focus_on__WEBPACK_IMPORTED_MODULE_4__[\"FocusOn\"], {\n enabled: open,\n onClickOutside: this.close,\n onEscapeKey: this.close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({\n className: \"modal-content\" // if the modal doesn't contain any tabbable elements, make this element programmatically focusable.\n\n }, !hasTabbableElements ? {\n tabIndex: -1\n } : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-header\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"modal-title\",\n id: this.headerId\n }, title), renderHeaderCloseButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"].Deprecated, {\n className: \"p-1\",\n onClick: this.close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"fa fa-times\",\n screenReaderText: closeText\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-body\",\n ref: this.modalBodyRef\n }, this.renderBody()), renderModalFooter && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-footer\"\n }, renderDefaultCloseButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"], {\n variant: \"link\",\n onClick: this.close\n }, closeText), this.renderButtons()))))));\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!this.el) {\n return null;\n }\n\n return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.createPortal(this.renderModal(), this.el);\n }\n }]);\n\n return Modal;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\nModal.propTypes = {\n /** specifies whether the modal renders open or closed on the initial render. It defaults to false. */\n open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /** is the selector for an element in the dom which the modal should be rendered under. It uses querySelector to find the first element that matches that selector, and then creates a react portal to a div underneath the parent element.\n */\n parentSelector: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n /** a string or an element that is rendered inside of the modal title, above the modal body. */\n title: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]).isRequired,\n\n /** a string or an element that is rendered inside of the modal body, between the title and the footer. */\n body: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]).isRequired,\n\n /** an array of either elements or shapes that take the form of the buttonPropTypes. See the [buttonPropTypes](https://github.com/edx/paragon/blob/master/src/Button/index.jsx#L40) for a list of acceptable props to pass as part of a button. */\n buttons: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object // TODO: Only accept nodes in the future\n ])),\n\n /** specifies the display text of the default Close button. It defaults to \"Close\". */\n closeText: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]),\n\n /** a function that is called on close. It can be used to perform actions upon closing of the modal, such as restoring focus to the previous logical focusable element. */\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired,\n variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n status: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n }),\n\n /** specifies whether the default close button is rendered in the footer. It defaults to true. */\n renderDefaultCloseButton: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /** specifies whether a close button is rendered in the modal header. It defaults to true. */\n renderHeaderCloseButton: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /**\n * Specifies optional classes to add to the element with the '.modal-dialog' class. See Bootstrap documentation for possible classes. Some options: modal-lg, modal-sm, modal-dialog-centered\n */\n dialogClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n};\nModal.defaultProps = {\n open: false,\n parentSelector: 'body',\n buttons: [],\n closeText: 'Close',\n variant: {},\n renderDefaultCloseButton: true,\n renderHeaderCloseButton: true,\n dialogClassName: undefined\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Modal);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL01vZGFsL2luZGV4LmpzeD9iNjlmIl0sIm5hbWVzIjpbIk1vZGFsIiwibmV3SWQiLCJSZWFjdCIsImRvY3VtZW50IiwiZ2xvYmFsIiwib3BlbiIsInByb3BzIiwicGFyZW50U2VsZWN0b3IiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJSZWFjdERPTSIsInZhcmlhbnQiLCJWYXJpYW50IiwidmFyaWFudEljb25DbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiYm9keSIsInRhYmJhYmxlIiwiT2JqZWN0IiwiZSIsImtleSIsImJ1dHRvbiIsImNoaWxkcmVuIiwibGFiZWwiLCJidXR0b25Qcm9wcyIsImRpYWxvZ0NsYXNzTmFtZSIsInJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbiIsInJlbmRlckhlYWRlckNsb3NlQnV0dG9uIiwiYnV0dG9ucyIsImNsb3NlVGV4dCIsInRpdGxlIiwiaGFzVGFiYmFibGVFbGVtZW50cyIsInJlbmRlck1vZGFsRm9vdGVyIiwic2hvdyIsImZhZGUiLCJpc0lFMTEiLCJoZWFkZXJJZCIsImNsb3NlIiwidGFiSW5kZXgiLCJtb2RhbEJvZHlSZWYiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvbkNsb3NlIiwic3RhdHVzIiwic3RyaW5nIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0lBRU1BLEs7Ozs7O0FBQ0osd0JBQW1CO0FBQUE7O0FBQUE7O0FBQ2pCO0FB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L3BhcmFnb24vZGlzdC9Nb2RhbC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZvY3VzT24gfSBmcm9tICdyZWFjdC1mb2N1cy1vbic7XG5pbXBvcnQgdGFiYmFibGUgZnJvbSAndGFiYmFibGUnO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCBuZXdJZCBmcm9tICcuLi91dGlscy9uZXdJZCc7XG5pbXBvcnQgVmFyaWFudCBmcm9tICcuLi91dGlscy9jb25zdGFudHMnO1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaGVhZGVySWQgPSBuZXdJZCgpO1xuICAgIHRoaXMubW9kYWxCb2R5UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgLy8gU2V0cyB0cnVlIGZvciBJRTExLCBmYWxzZSBvdGhlcndpc2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjA4MjM5Ny82NjIwNjEyXG4gICAgICB0aGlzLmlzSUUxMSA9ICEhZ2xvYmFsLk1TSW5wdXRNZXRob2RDb250ZXh0ICYmICEhZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBvcGVuOiBwcm9wcy5vcGVuLFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHBhcmVudFNlbGVjdG9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMucGFyZW50RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyZW50U2VsZWN0b3IpO1xuICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kYWwgcmVjZWl2ZWQgaW52YWxpZCBwYXJlbnRTZWxlY3RvcjogJHtwYXJlbnRTZWxlY3Rvcn0sIG5vIG1hdGNoaW5nIGVsZW1lbnQgZm91bmRgKTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgY29uc3QgeyBvcGVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvcGVuICE9PSBwcmV2UHJvcHMub3BlbiB8fCBvcGVuICE9PSBwcmV2U3RhdGUub3Blbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbiB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICBnZXRWYXJpYW50SWNvbkNsYXNzTmFtZSgpIHtcbiAgICBjb25zdCB7IHZhcmlhbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHZhcmlhbnRJY29uQ2xhc3NOYW1lO1xuXG4gICAgc3dpdGNoICh2YXJpYW50LnN0YXR1cykge1xuICAgICAgY2FzZSBWYXJpYW50LnN0YXR1cy5XQVJOSU5HOlxuICAgICAgICB2YXJpYW50SWNvbkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoXG4gICAgICAgICAgJ2ZhJyxcbiAgICAgICAgICAnZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgICdmYS0zeCcsXG4gICAgICAgICAgYHRleHQtJHt2YXJpYW50LnN0YXR1cy50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhbnRJY29uQ2xhc3NOYW1lO1xuICB9XG5cbiAgZ2V0VmFyaWFudEdyaWRCb2R5KGJvZHkpIHtcbiAgICBjb25zdCB7IHZhcmlhbnQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpZD17bmV3SWQoYE1vZGFsLSR7dmFyaWFudC5zdGF0dXN9YCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRWYXJpYW50SWNvbkNsYXNzTmFtZSgpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgZ2V0VGFiYmFibGVCb2R5RWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMubW9kYWxCb2R5UmVmPy5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdGFiYmFibGUodGhpcy5tb2RhbEJvZHlSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlzVmFsaWRWYXJpYW50U3RhdHVzKCkge1xuICAgIGNvbnN0IHsgdmFyaWFudCB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhWYXJpYW50LnN0YXR1cykuaW5jbHVkZXModmFyaWFudC5zdGF0dXMpO1xuICB9XG5cbiAgY2xvc2UoZSkge1xuICAgIGlmIChlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcbiAgICB0aGlzLnByb3BzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIHJlbmRlckJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4ge1xuICAgICAgLy8gYnV0dG9uIGlzIGVpdGhlciBhIFJlYWN0IGNvbXBvbmVudCB0aGF0IHdlIHdhbnQgY2xvbmUgb3IgYSBzZXQgb2YgcHJvcHNcbiAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChidXR0b24pKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoYnV0dG9uLCB7XG4gICAgICAgICAga2V5OiBidXR0b24ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGxhYmVsLCAuLi5idXR0b25Qcm9wcyB9ID0gYnV0dG9uO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QnV0dG9uLkRlcHJlY2F0ZWRcbiAgICAgICAgICB7Li4uYnV0dG9uUHJvcHN9XG4gICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9CdXR0b24uRGVwcmVjYXRlZD5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJCb2R5KCkge1xuICAgIGxldCB7IGJvZHkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBib2R5ID0gPHA+e2JvZHl9PC9wPjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkVmFyaWFudFN0YXR1cygpKSB7XG4gICAgICBib2R5ID0gdGhpcy5nZXRWYXJpYW50R3JpZEJvZHkoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICByZW5kZXJNb2RhbCgpIHtcbiAgICBjb25zdCB7IG9wZW4gfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgZGlhbG9nQ2xhc3NOYW1lLFxuICAgICAgcmVuZGVyRGVmYXVsdENsb3NlQnV0dG9uLFxuICAgICAgcmVuZGVySGVhZGVyQ2xvc2VCdXR0b24sXG4gICAgICBidXR0b25zLFxuICAgICAgY2xvc2VUZXh0LFxuICAgICAgdGl0bGUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBoYXNUYWJiYWJsZUVsZW1lbnRzID0gKFxuICAgICAgcmVuZGVyRGVmYXVsdENsb3NlQnV0dG9uXG4gICAgICB8fCByZW5kZXJIZWFkZXJDbG9zZUJ1dHRvblxuICAgICAgfHwgYnV0dG9ucy5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLmdldFRhYmJhYmxlQm9keUVsZW1lbnRzKCkubGVuZ3RoID4gMFxuICAgICk7XG4gICAgY29uc3QgcmVuZGVyTW9kYWxGb290ZXIgPSByZW5kZXJEZWZhdWx0Q2xvc2VCdXR0b24gfHwgYnV0dG9ucy5sZW5ndGggPiAwO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe1xuICAgICAgICAgICAgJ21vZGFsLWJhY2tkcm9wJzogb3BlbixcbiAgICAgICAgICAgIHNob3c6IG9wZW4sXG4gICAgICAgICAgICBmYWRlOiAhb3BlbixcbiAgICAgICAgICB9KX1cbiAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgICdtb2RhbCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNob3c6IG9wZW4sXG4gICAgICAgICAgICAgIGZhZGU6ICFvcGVuLFxuICAgICAgICAgICAgICAnZC1ibG9jayc6IG9wZW4sXG4gICAgICAgICAgICAgICdpcy1pZTExJzogdGhpcy5pc0lFMTEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnbW9kYWwtZGlhbG9nJzogb3BlbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgICAgYXJpYS1tb2RhbFxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0aGlzLmhlYWRlcklkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb2N1c09uXG4gICAgICAgICAgICAgIGVuYWJsZWQ9e29wZW59XG4gICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlPXt0aGlzLmNsb3NlfVxuICAgICAgICAgICAgICBvbkVzY2FwZUtleT17dGhpcy5jbG9zZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBtb2RhbCBkb2Vzbid0IGNvbnRhaW4gYW55IHRhYmJhYmxlIGVsZW1lbnRzLCBtYWtlIHRoaXMgZWxlbWVudCBwcm9ncmFtbWF0aWNhbGx5IGZvY3VzYWJsZS5cbiAgICAgICAgICAgICAgICB7Li4uKCFoYXNUYWJiYWJsZUVsZW1lbnRzID8geyB0YWJJbmRleDogLTEgfSA6IHt9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwibW9kYWwtdGl0bGVcIiBpZD17dGhpcy5oZWFkZXJJZH0+e3RpdGxlfTwvaDI+XG4gICAgICAgICAgICAgICAgICB7cmVuZGVySGVhZGVyQ2xvc2VCdXR0b24gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uLkRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xvc2V9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiIHNjcmVlblJlYWRlclRleHQ9e2Nsb3NlVGV4dH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24uRGVwcmVjYXRlZD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCIgcmVmPXt0aGlzLm1vZGFsQm9keVJlZn0+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJCb2R5KCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge3JlbmRlck1vZGFsRm9vdGVyICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJEZWZhdWx0Q2xvc2VCdXR0b24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Nsb3NlVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQnV0dG9ucygpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0ZvY3VzT24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICB0aGlzLnJlbmRlck1vZGFsKCksXG4gICAgICB0aGlzLmVsLFxuICAgICk7XG4gIH1cbn1cblxuTW9kYWwucHJvcFR5cGVzID0ge1xuICAvKiogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1vZGFsIHJlbmRlcnMgb3BlbiBvciBjbG9zZWQgb24gdGhlIGluaXRpYWwgcmVuZGVyLiBJdCBkZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBpcyB0aGUgc2VsZWN0b3IgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIGRvbSB3aGljaCB0aGUgbW9kYWwgc2hvdWxkIGJlIHJlbmRlcmVkIHVuZGVyLiBJdCB1c2VzIHF1ZXJ5U2VsZWN0b3IgdG8gZmluZCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhhdCBzZWxlY3RvciwgYW5kIHRoZW4gY3JlYXRlcyBhIHJlYWN0IHBvcnRhbCB0byBhIGRpdiB1bmRlcm5lYXRoIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAqL1xuICBwYXJlbnRTZWxlY3RvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGEgc3RyaW5nIG9yIGFuIGVsZW1lbnQgdGhhdCBpcyByZW5kZXJlZCBpbnNpZGUgb2YgdGhlIG1vZGFsIHRpdGxlLCBhYm92ZSB0aGUgbW9kYWwgYm9keS4gKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50XSkuaXNSZXF1aXJlZCxcbiAgLyoqIGEgc3RyaW5nIG9yIGFuIGVsZW1lbnQgdGhhdCBpcyByZW5kZXJlZCBpbnNpZGUgb2YgdGhlIG1vZGFsIGJvZHksIGJldHdlZW4gdGhlIHRpdGxlIGFuZCB0aGUgZm9vdGVyLiAqL1xuICBib2R5OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudF0pLmlzUmVxdWlyZWQsXG4gIC8qKiBhbiBhcnJheSBvZiBlaXRoZXIgZWxlbWVudHMgb3Igc2hhcGVzIHRoYXQgdGFrZSB0aGUgZm9ybSBvZiB0aGUgYnV0dG9uUHJvcFR5cGVzLiBTZWUgdGhlIFtidXR0b25Qcm9wVHlwZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9lZHgvcGFyYWdvbi9ibG9iL21hc3Rlci9zcmMvQnV0dG9uL2luZGV4LmpzeCNMNDApIGZvciBhIGxpc3Qgb2YgYWNjZXB0YWJsZSBwcm9wcyB0byBwYXNzIGFzIHBhcnQgb2YgYSBidXR0b24uICovXG4gIGJ1dHRvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5lbGVtZW50LFxuICAgIFByb3BUeXBlcy5vYmplY3QsIC8vIFRPRE86IE9ubHkgYWNjZXB0IG5vZGVzIGluIHRoZSBmdXR1cmVcbiAgXSkpLFxuICAvKiogc3BlY2lmaWVzIHRoZSBkaXNwbGF5IHRleHQgb2YgdGhlIGRlZmF1bHQgQ2xvc2UgYnV0dG9uLiBJdCBkZWZhdWx0cyB0byBcIkNsb3NlXCIuICovXG4gIGNsb3NlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRdKSxcbiAgLyoqIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gY2xvc2UuIEl0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYWN0aW9ucyB1cG9uIGNsb3Npbmcgb2YgdGhlIG1vZGFsLCBzdWNoIGFzIHJlc3RvcmluZyBmb2N1cyB0byB0aGUgcHJldmlvdXMgbG9naWNhbCBmb2N1c2FibGUgZWxlbWVudC4gKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFyaWFudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdGF0dXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICAvKiogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRlZmF1bHQgY2xvc2UgYnV0dG9uIGlzIHJlbmRlcmVkIGluIHRoZSBmb290ZXIuIEl0IGRlZmF1bHRzIHRvIHRydWUuICovXG4gIHJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBzcGVjaWZpZXMgd2hldGhlciBhIGNsb3NlIGJ1dHRvbiBpcyByZW5kZXJlZCBpbiB0aGUgbW9kYWwgaGVhZGVyLiBJdCBkZWZhdWx0cyB0byB0cnVlLiAqL1xuICByZW5kZXJIZWFkZXJDbG9zZUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgb3B0aW9uYWwgY2xhc3NlcyB0byBhZGQgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgJy5tb2RhbC1kaWFsb2cnIGNsYXNzLiAgU2VlIEJvb3RzdHJhcCBkb2N1bWVudGF0aW9uIGZvciBwb3NzaWJsZSBjbGFzc2VzLiAgU29tZSBvcHRpb25zOiBtb2RhbC1sZywgbW9kYWwtc20sIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFxuICAgKi9cbiAgZGlhbG9nQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgcGFyZW50U2VsZWN0b3I6ICdib2R5JyxcbiAgYnV0dG9uczogW10sXG4gIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgdmFyaWFudDoge30sXG4gIHJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgcmVuZGVySGVhZGVyQ2xvc2VCdXR0b246IHRydWUsXG4gIGRpYWxvZ0NsYXNzTmFtZTogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@edx/paragon/dist/Modal/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_focus_on__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-focus-on */ \"./node_modules/react-focus-on/dist/es2015/index.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tabbable */ \"./node_modules/tabbable/index.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tabbable__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! .. */ \"./node_modules/@edx/paragon/dist/index.js\");\n/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Icon */ \"./node_modules/@edx/paragon/dist/Icon/index.js\");\n/* harmony import */ var _utils_newId__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/newId */ \"./node_modules/@edx/paragon/dist/utils/newId.js\");\n/* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/constants */ \"./node_modules/@edx/paragon/dist/utils/constants.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n/* eslint-disable max-len */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n\n var _super = _createSuper(Modal);\n\n function Modal(props) {\n var _this;\n\n _classCallCheck(this, Modal);\n\n _this = _super.call(this, props);\n _this.close = _this.close.bind(_assertThisInitialized(_this));\n _this.headerId = Object(_utils_newId__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n _this.modalBodyRef = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef();\n\n if (typeof document !== 'undefined') {\n _this.el = document.createElement('div'); // Sets true for IE11, false otherwise: https://stackoverflow.com/a/22082397/6620612\n\n _this.isIE11 = !!global.MSInputMethodContext && !!document.documentMode;\n }\n\n _this.state = {\n open: props.open\n };\n return _this;\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var parentSelector = this.props.parentSelector;\n this.parentElement = document.querySelector(parentSelector);\n\n if (this.parentElement === null) {\n throw new Error(\"Modal received invalid parentSelector: \".concat(parentSelector, \", no matching element found\"));\n }\n\n this.parentElement.appendChild(this.el);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var open = this.props.open;\n\n if (open !== prevProps.open || open !== prevState.open) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n open: open\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.unmountComponentAtNode(this.parentElement);\n }\n }, {\n key: \"getVariantIconClassName\",\n value: function getVariantIconClassName() {\n var variant = this.props.variant;\n var variantIconClassName;\n\n switch (variant.status) {\n case _utils_constants__WEBPACK_IMPORTED_MODULE_9__[\"default\"].status.WARNING:\n variantIconClassName = classnames__WEBPACK_IMPORTED_MODULE_2___default()('fa', 'fa-exclamation-triangle', 'fa-3x', \"text-\".concat(variant.status.toLowerCase()));\n break;\n\n default:\n break;\n }\n\n return variantIconClassName;\n }\n }, {\n key: \"getVariantGridBody\",\n value: function getVariantGridBody(body) {\n var variant = this.props.variant;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"container-fluid\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"col-md-10\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, body)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"col-md-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n id: Object(_utils_newId__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"Modal-\".concat(variant.status)),\n className: this.getVariantIconClassName()\n }))));\n }\n }, {\n key: \"getTabbableBodyElements\",\n value: function getTabbableBodyElements() {\n var _this$modalBodyRef;\n\n if ((_this$modalBodyRef = this.modalBodyRef) === null || _this$modalBodyRef === void 0 ? void 0 : _this$modalBodyRef.current) {\n return tabbable__WEBPACK_IMPORTED_MODULE_5___default()(this.modalBodyRef.current);\n }\n\n return [];\n }\n }, {\n key: \"isValidVariantStatus\",\n value: function isValidVariantStatus() {\n var variant = this.props.variant;\n return Object.values(_utils_constants__WEBPACK_IMPORTED_MODULE_9__[\"default\"].status).includes(variant.status);\n }\n }, {\n key: \"close\",\n value: function close(e) {\n if (e) {\n e.stopPropagation();\n }\n\n this.setState({\n open: false\n });\n this.props.onClose();\n }\n }, {\n key: \"renderButtons\",\n value: function renderButtons() {\n return this.props.buttons.map(function (button) {\n // button is either a React component that we want clone or a set of props\n if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.isValidElement(button)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(button, {\n key: button.props.children\n });\n }\n\n var label = button.label,\n buttonProps = _objectWithoutProperties(button, [\"label\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"].Deprecated, _extends({}, buttonProps, {\n key: label\n }), label);\n });\n }\n }, {\n key: \"renderBody\",\n value: function renderBody() {\n var body = this.props.body;\n\n if (typeof body === 'string') {\n body = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, body);\n }\n\n if (this.isValidVariantStatus()) {\n body = this.getVariantGridBody(body);\n }\n\n return body;\n }\n }, {\n key: \"renderModal\",\n value: function renderModal() {\n var open = this.state.open;\n var _this$props = this.props,\n dialogClassName = _this$props.dialogClassName,\n renderDefaultCloseButton = _this$props.renderDefaultCloseButton,\n renderHeaderCloseButton = _this$props.renderHeaderCloseButton,\n buttons = _this$props.buttons,\n closeText = _this$props.closeText,\n title = _this$props.title;\n var hasTabbableElements = renderDefaultCloseButton || renderHeaderCloseButton || buttons.length > 0 || this.getTabbableBodyElements().length > 0;\n var renderModalFooter = renderDefaultCloseButton || buttons.length > 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()({\n 'modal-backdrop': open,\n show: open,\n fade: !open\n }),\n role: \"presentation\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('modal', {\n show: open,\n fade: !open,\n 'd-block': open,\n 'is-ie11': this.isIE11\n }),\n role: \"presentation\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()({\n 'modal-dialog': open\n }, dialogClassName),\n role: \"dialog\",\n \"aria-modal\": true,\n \"aria-labelledby\": this.headerId\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_focus_on__WEBPACK_IMPORTED_MODULE_4__[\"FocusOn\"], {\n enabled: open,\n onClickOutside: this.close,\n onEscapeKey: this.close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({\n className: \"modal-content\" // if the modal doesn't contain any tabbable elements, make this element programmatically focusable.\n\n }, !hasTabbableElements ? {\n tabIndex: -1\n } : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-header\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"modal-title\",\n id: this.headerId\n }, title), renderHeaderCloseButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"].Deprecated, {\n className: \"p-1\",\n onClick: this.close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"fa fa-times\",\n screenReaderText: closeText\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-body\",\n ref: this.modalBodyRef\n }, this.renderBody()), renderModalFooter && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-footer\"\n }, renderDefaultCloseButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(___WEBPACK_IMPORTED_MODULE_6__[\"Button\"], {\n variant: \"link\",\n onClick: this.close\n }, closeText), this.renderButtons()))))));\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!this.el) {\n return null;\n }\n\n return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.createPortal(this.renderModal(), this.el);\n }\n }]);\n\n return Modal;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\nModal.propTypes = {\n /** specifies whether the modal renders open or closed on the initial render. It defaults to false. */\n open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /** is the selector for an element in the dom which the modal should be rendered under. It uses querySelector to find the first element that matches that selector, and then creates a react portal to a div underneath the parent element.\n */\n parentSelector: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n /** a string or an element that is rendered inside of the modal title, above the modal body. */\n title: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]).isRequired,\n\n /** a string or an element that is rendered inside of the modal body, between the title and the footer. */\n body: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]).isRequired,\n\n /** an array of either elements or shapes that take the form of the buttonPropTypes. See the [buttonPropTypes](https://github.com/openedx/paragon/blob/master/src/Button/index.jsx#L40) for a list of acceptable props to pass as part of a button. */\n buttons: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object // TODO: Only accept nodes in the future\n ])),\n\n /** specifies the display text of the default Close button. It defaults to \"Close\". */\n closeText: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element]),\n\n /** a function that is called on close. It can be used to perform actions upon closing of the modal, such as restoring focus to the previous logical focusable element. */\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired,\n variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n status: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n }),\n\n /** specifies whether the default close button is rendered in the footer. It defaults to true. */\n renderDefaultCloseButton: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /** specifies whether a close button is rendered in the modal header. It defaults to true. */\n renderHeaderCloseButton: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n /**\n * Specifies optional classes to add to the element with the '.modal-dialog' class. See Bootstrap documentation for possible classes. Some options: modal-lg, modal-sm, modal-dialog-centered\n */\n dialogClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n};\nModal.defaultProps = {\n open: false,\n parentSelector: 'body',\n buttons: [],\n closeText: 'Close',\n variant: {},\n renderDefaultCloseButton: true,\n renderHeaderCloseButton: true,\n dialogClassName: undefined\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Modal);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL01vZGFsL2luZGV4LmpzeD9iNjlmIl0sIm5hbWVzIjpbIk1vZGFsIiwibmV3SWQiLCJSZWFjdCIsImRvY3VtZW50IiwiZ2xvYmFsIiwib3BlbiIsInByb3BzIiwicGFyZW50U2VsZWN0b3IiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJSZWFjdERPTSIsInZhcmlhbnQiLCJWYXJpYW50IiwidmFyaWFudEljb25DbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiYm9keSIsInRhYmJhYmxlIiwiT2JqZWN0IiwiZSIsImtleSIsImJ1dHRvbiIsImNoaWxkcmVuIiwibGFiZWwiLCJidXR0b25Qcm9wcyIsImRpYWxvZ0NsYXNzTmFtZSIsInJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbiIsInJlbmRlckhlYWRlckNsb3NlQnV0dG9uIiwiYnV0dG9ucyIsImNsb3NlVGV4dCIsInRpdGxlIiwiaGFzVGFiYmFibGVFbGVtZW50cyIsInJlbmRlck1vZGFsRm9vdGVyIiwic2hvdyIsImZhZGUiLCJpc0lFMTEiLCJoZWFkZXJJZCIsImNsb3NlIiwidGFiSW5kZXgiLCJtb2RhbEJvZHlSZWYiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvbkNsb3NlIiwic3RhdHVzIiwic3RyaW5nIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0lBRU1BLEs7Ozs7O0FBQ0osd0JBQW1CO0FBQUE7O0FBQUE7O0FBQ2pCO0FB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L3BhcmFnb24vZGlzdC9Nb2RhbC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZvY3VzT24gfSBmcm9tICdyZWFjdC1mb2N1cy1vbic7XG5pbXBvcnQgdGFiYmFibGUgZnJvbSAndGFiYmFibGUnO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCBuZXdJZCBmcm9tICcuLi91dGlscy9uZXdJZCc7XG5pbXBvcnQgVmFyaWFudCBmcm9tICcuLi91dGlscy9jb25zdGFudHMnO1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaGVhZGVySWQgPSBuZXdJZCgpO1xuICAgIHRoaXMubW9kYWxCb2R5UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgLy8gU2V0cyB0cnVlIGZvciBJRTExLCBmYWxzZSBvdGhlcndpc2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjA4MjM5Ny82NjIwNjEyXG4gICAgICB0aGlzLmlzSUUxMSA9ICEhZ2xvYmFsLk1TSW5wdXRNZXRob2RDb250ZXh0ICYmICEhZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBvcGVuOiBwcm9wcy5vcGVuLFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHBhcmVudFNlbGVjdG9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMucGFyZW50RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyZW50U2VsZWN0b3IpO1xuICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kYWwgcmVjZWl2ZWQgaW52YWxpZCBwYXJlbnRTZWxlY3RvcjogJHtwYXJlbnRTZWxlY3Rvcn0sIG5vIG1hdGNoaW5nIGVsZW1lbnQgZm91bmRgKTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgY29uc3QgeyBvcGVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvcGVuICE9PSBwcmV2UHJvcHMub3BlbiB8fCBvcGVuICE9PSBwcmV2U3RhdGUub3Blbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbiB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICBnZXRWYXJpYW50SWNvbkNsYXNzTmFtZSgpIHtcbiAgICBjb25zdCB7IHZhcmlhbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHZhcmlhbnRJY29uQ2xhc3NOYW1lO1xuXG4gICAgc3dpdGNoICh2YXJpYW50LnN0YXR1cykge1xuICAgICAgY2FzZSBWYXJpYW50LnN0YXR1cy5XQVJOSU5HOlxuICAgICAgICB2YXJpYW50SWNvbkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoXG4gICAgICAgICAgJ2ZhJyxcbiAgICAgICAgICAnZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgICdmYS0zeCcsXG4gICAgICAgICAgYHRleHQtJHt2YXJpYW50LnN0YXR1cy50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhbnRJY29uQ2xhc3NOYW1lO1xuICB9XG5cbiAgZ2V0VmFyaWFudEdyaWRCb2R5KGJvZHkpIHtcbiAgICBjb25zdCB7IHZhcmlhbnQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpZD17bmV3SWQoYE1vZGFsLSR7dmFyaWFudC5zdGF0dXN9YCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRWYXJpYW50SWNvbkNsYXNzTmFtZSgpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgZ2V0VGFiYmFibGVCb2R5RWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMubW9kYWxCb2R5UmVmPy5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdGFiYmFibGUodGhpcy5tb2RhbEJvZHlSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlzVmFsaWRWYXJpYW50U3RhdHVzKCkge1xuICAgIGNvbnN0IHsgdmFyaWFudCB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhWYXJpYW50LnN0YXR1cykuaW5jbHVkZXModmFyaWFudC5zdGF0dXMpO1xuICB9XG5cbiAgY2xvc2UoZSkge1xuICAgIGlmIChlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcbiAgICB0aGlzLnByb3BzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIHJlbmRlckJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4ge1xuICAgICAgLy8gYnV0dG9uIGlzIGVpdGhlciBhIFJlYWN0IGNvbXBvbmVudCB0aGF0IHdlIHdhbnQgY2xvbmUgb3IgYSBzZXQgb2YgcHJvcHNcbiAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChidXR0b24pKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoYnV0dG9uLCB7XG4gICAgICAgICAga2V5OiBidXR0b24ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGxhYmVsLCAuLi5idXR0b25Qcm9wcyB9ID0gYnV0dG9uO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QnV0dG9uLkRlcHJlY2F0ZWRcbiAgICAgICAgICB7Li4uYnV0dG9uUHJvcHN9XG4gICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9CdXR0b24uRGVwcmVjYXRlZD5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJCb2R5KCkge1xuICAgIGxldCB7IGJvZHkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBib2R5ID0gPHA+e2JvZHl9PC9wPjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkVmFyaWFudFN0YXR1cygpKSB7XG4gICAgICBib2R5ID0gdGhpcy5nZXRWYXJpYW50R3JpZEJvZHkoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICByZW5kZXJNb2RhbCgpIHtcbiAgICBjb25zdCB7IG9wZW4gfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgZGlhbG9nQ2xhc3NOYW1lLFxuICAgICAgcmVuZGVyRGVmYXVsdENsb3NlQnV0dG9uLFxuICAgICAgcmVuZGVySGVhZGVyQ2xvc2VCdXR0b24sXG4gICAgICBidXR0b25zLFxuICAgICAgY2xvc2VUZXh0LFxuICAgICAgdGl0bGUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBoYXNUYWJiYWJsZUVsZW1lbnRzID0gKFxuICAgICAgcmVuZGVyRGVmYXVsdENsb3NlQnV0dG9uXG4gICAgICB8fCByZW5kZXJIZWFkZXJDbG9zZUJ1dHRvblxuICAgICAgfHwgYnV0dG9ucy5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLmdldFRhYmJhYmxlQm9keUVsZW1lbnRzKCkubGVuZ3RoID4gMFxuICAgICk7XG4gICAgY29uc3QgcmVuZGVyTW9kYWxGb290ZXIgPSByZW5kZXJEZWZhdWx0Q2xvc2VCdXR0b24gfHwgYnV0dG9ucy5sZW5ndGggPiAwO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe1xuICAgICAgICAgICAgJ21vZGFsLWJhY2tkcm9wJzogb3BlbixcbiAgICAgICAgICAgIHNob3c6IG9wZW4sXG4gICAgICAgICAgICBmYWRlOiAhb3BlbixcbiAgICAgICAgICB9KX1cbiAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgICdtb2RhbCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNob3c6IG9wZW4sXG4gICAgICAgICAgICAgIGZhZGU6ICFvcGVuLFxuICAgICAgICAgICAgICAnZC1ibG9jayc6IG9wZW4sXG4gICAgICAgICAgICAgICdpcy1pZTExJzogdGhpcy5pc0lFMTEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnbW9kYWwtZGlhbG9nJzogb3BlbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgICAgYXJpYS1tb2RhbFxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0aGlzLmhlYWRlcklkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb2N1c09uXG4gICAgICAgICAgICAgIGVuYWJsZWQ9e29wZW59XG4gICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlPXt0aGlzLmNsb3NlfVxuICAgICAgICAgICAgICBvbkVzY2FwZUtleT17dGhpcy5jbG9zZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBtb2RhbCBkb2Vzbid0IGNvbnRhaW4gYW55IHRhYmJhYmxlIGVsZW1lbnRzLCBtYWtlIHRoaXMgZWxlbWVudCBwcm9ncmFtbWF0aWNhbGx5IGZvY3VzYWJsZS5cbiAgICAgICAgICAgICAgICB7Li4uKCFoYXNUYWJiYWJsZUVsZW1lbnRzID8geyB0YWJJbmRleDogLTEgfSA6IHt9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwibW9kYWwtdGl0bGVcIiBpZD17dGhpcy5oZWFkZXJJZH0+e3RpdGxlfTwvaDI+XG4gICAgICAgICAgICAgICAgICB7cmVuZGVySGVhZGVyQ2xvc2VCdXR0b24gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uLkRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xvc2V9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiIHNjcmVlblJlYWRlclRleHQ9e2Nsb3NlVGV4dH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24uRGVwcmVjYXRlZD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCIgcmVmPXt0aGlzLm1vZGFsQm9keVJlZn0+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJCb2R5KCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge3JlbmRlck1vZGFsRm9vdGVyICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJEZWZhdWx0Q2xvc2VCdXR0b24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Nsb3NlVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQnV0dG9ucygpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0ZvY3VzT24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICB0aGlzLnJlbmRlck1vZGFsKCksXG4gICAgICB0aGlzLmVsLFxuICAgICk7XG4gIH1cbn1cblxuTW9kYWwucHJvcFR5cGVzID0ge1xuICAvKiogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1vZGFsIHJlbmRlcnMgb3BlbiBvciBjbG9zZWQgb24gdGhlIGluaXRpYWwgcmVuZGVyLiBJdCBkZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBpcyB0aGUgc2VsZWN0b3IgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIGRvbSB3aGljaCB0aGUgbW9kYWwgc2hvdWxkIGJlIHJlbmRlcmVkIHVuZGVyLiBJdCB1c2VzIHF1ZXJ5U2VsZWN0b3IgdG8gZmluZCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhhdCBzZWxlY3RvciwgYW5kIHRoZW4gY3JlYXRlcyBhIHJlYWN0IHBvcnRhbCB0byBhIGRpdiB1bmRlcm5lYXRoIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAqL1xuICBwYXJlbnRTZWxlY3RvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGEgc3RyaW5nIG9yIGFuIGVsZW1lbnQgdGhhdCBpcyByZW5kZXJlZCBpbnNpZGUgb2YgdGhlIG1vZGFsIHRpdGxlLCBhYm92ZSB0aGUgbW9kYWwgYm9keS4gKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50XSkuaXNSZXF1aXJlZCxcbiAgLyoqIGEgc3RyaW5nIG9yIGFuIGVsZW1lbnQgdGhhdCBpcyByZW5kZXJlZCBpbnNpZGUgb2YgdGhlIG1vZGFsIGJvZHksIGJldHdlZW4gdGhlIHRpdGxlIGFuZCB0aGUgZm9vdGVyLiAqL1xuICBib2R5OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudF0pLmlzUmVxdWlyZWQsXG4gIC8qKiBhbiBhcnJheSBvZiBlaXRoZXIgZWxlbWVudHMgb3Igc2hhcGVzIHRoYXQgdGFrZSB0aGUgZm9ybSBvZiB0aGUgYnV0dG9uUHJvcFR5cGVzLiBTZWUgdGhlIFtidXR0b25Qcm9wVHlwZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9lZHgvcGFyYWdvbi9ibG9iL21hc3Rlci9zcmMvQnV0dG9uL2luZGV4LmpzeCNMNDApIGZvciBhIGxpc3Qgb2YgYWNjZXB0YWJsZSBwcm9wcyB0byBwYXNzIGFzIHBhcnQgb2YgYSBidXR0b24uICovXG4gIGJ1dHRvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5lbGVtZW50LFxuICAgIFByb3BUeXBlcy5vYmplY3QsIC8vIFRPRE86IE9ubHkgYWNjZXB0IG5vZGVzIGluIHRoZSBmdXR1cmVcbiAgXSkpLFxuICAvKiogc3BlY2lmaWVzIHRoZSBkaXNwbGF5IHRleHQgb2YgdGhlIGRlZmF1bHQgQ2xvc2UgYnV0dG9uLiBJdCBkZWZhdWx0cyB0byBcIkNsb3NlXCIuICovXG4gIGNsb3NlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRdKSxcbiAgLyoqIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gY2xvc2UuIEl0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYWN0aW9ucyB1cG9uIGNsb3Npbmcgb2YgdGhlIG1vZGFsLCBzdWNoIGFzIHJlc3RvcmluZyBmb2N1cyB0byB0aGUgcHJldmlvdXMgbG9naWNhbCBmb2N1c2FibGUgZWxlbWVudC4gKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFyaWFudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdGF0dXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICAvKiogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRlZmF1bHQgY2xvc2UgYnV0dG9uIGlzIHJlbmRlcmVkIGluIHRoZSBmb290ZXIuIEl0IGRlZmF1bHRzIHRvIHRydWUuICovXG4gIHJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBzcGVjaWZpZXMgd2hldGhlciBhIGNsb3NlIGJ1dHRvbiBpcyByZW5kZXJlZCBpbiB0aGUgbW9kYWwgaGVhZGVyLiBJdCBkZWZhdWx0cyB0byB0cnVlLiAqL1xuICByZW5kZXJIZWFkZXJDbG9zZUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgb3B0aW9uYWwgY2xhc3NlcyB0byBhZGQgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgJy5tb2RhbC1kaWFsb2cnIGNsYXNzLiAgU2VlIEJvb3RzdHJhcCBkb2N1bWVudGF0aW9uIGZvciBwb3NzaWJsZSBjbGFzc2VzLiAgU29tZSBvcHRpb25zOiBtb2RhbC1sZywgbW9kYWwtc20sIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFxuICAgKi9cbiAgZGlhbG9nQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgcGFyZW50U2VsZWN0b3I6ICdib2R5JyxcbiAgYnV0dG9uczogW10sXG4gIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgdmFyaWFudDoge30sXG4gIHJlbmRlckRlZmF1bHRDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgcmVuZGVySGVhZGVyQ2xvc2VCdXR0b246IHRydWUsXG4gIGRpYWxvZ0NsYXNzTmFtZTogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@edx/paragon/dist/Modal/index.js\n"); /***/ }), diff --git a/package.json b/package.json index 1aa7ecbc2f..7e450c73f1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edx-ora2", "version": "4.4.7", - "repository": "https://github.com/edx/edx-ora2.git", + "repository": "https://github.com/openedx/edx-ora2.git", "dependencies": { "@edx/frontend-build": "^6.1.1", "@edx/paragon": "^12.8.0", diff --git a/pylintrc b/pylintrc index 1584848309..036b3fc6ea 100644 --- a/pylintrc +++ b/pylintrc @@ -2,7 +2,7 @@ # ** DO NOT EDIT THIS FILE ** # *************************** # -# This file was generated by edx-lint: https://github.com/edx/edx-lint +# This file was generated by edx-lint: https://github.com/openedx/edx-lint # # If you want to change this file, you have two choices, depending on whether # you want to make a local change that applies only to this repo, or whether @@ -28,7 +28,7 @@ # CENTRAL CHANGE: # # 1. Edit the pylintrc file in the edx-lint repo at -# https://github.com/edx/edx-lint/blob/master/edx_lint/files/pylintrc +# https://github.com/openedx/edx-lint/blob/master/edx_lint/files/pylintrc # # 2. install the updated version of edx-lint (in edx-lint): # @@ -64,7 +64,7 @@ # SERIOUSLY. # # ------------------------------ -# Generated by edx-lint version: 5.2.4 +# Generated by edx-lint version: 5.2.5 # ------------------------------ [MASTER] ignore = .git, .tox, migrations, acceptance @@ -395,4 +395,4 @@ int-import-graph = [EXCEPTIONS] overgeneral-exceptions = Exception -# c4f560dcfef99308b43ef0b71fbf71a32abee8ea +# 0c410ff35825bc7444c07d5053bc7fddc4aaa50c diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 7062bc1875..6c8a6a8633 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -29,7 +29,7 @@ moto<1.3.15 # Networkx 2.5 drops support for python 3.5 networkx<2.5 -# https://github.com/edx/edx-ora2/pull/1303 +# https://github.com/openedx/edx-ora2/pull/1303 pytest==4.5.0 pytest-cov==2.7.1 pytest-django==3.7.0 diff --git a/scripts/run-pylint.py b/scripts/run-pylint.py index 018fad7166..360226c5c1 100755 --- a/scripts/run-pylint.py +++ b/scripts/run-pylint.py @@ -16,7 +16,7 @@ def count_pylint_violations(report_file): """ Parses a pylint report line-by-line, and determins the number of pylint violations. - Taken from https://github.com/edx/edx-platform/blob/master/pavelib/quality.py. + Taken from https://github.com/openedx/edx-platform/blob/master/pavelib/quality.py. """ num_violations = 0 # An example string: diff --git a/setup.py b/setup.py index 2fa6656d56..f2246d65f7 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def get_version(*file_paths): version=VERSION, author='edX', author_email='oscm@edx.org', - url='http://github.com/edx/edx-ora2', + url='http://github.com/openedx/edx-ora2', description='edx-ora2', license='AGPL', long_description=README,