diff --git a/.github/workflows/ci-frontend.yml b/.github/workflows/ci-frontend.yml new file mode 100644 index 0000000..0ad2c4b --- /dev/null +++ b/.github/workflows/ci-frontend.yml @@ -0,0 +1,36 @@ +name: Frontend CI + +on: + push: + branches: + - main + pull_request: + +jobs: + tests: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./frontend + strategy: + matrix: + npm_script: + - lint + - coverage + - check-build + steps: + - uses: actions/checkout@v4 + - name: Setup Nodejs Env + run: echo "NODE_VER=`cat .nvmrc`" >> $GITHUB_ENV + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VER }} + - run: npm ci + - run: npm run ${{ matrix.npm_script }} + - name: upload coverage + uses: codecov/codecov-action@v4 + if: matrix.npm_script == 'coverage' + with: + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: false + flags: frontend diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18cde08..5062807 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,15 +15,17 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ['3.8'] - toxenv: [quality, docs, django32, django40] + toxenv: [quality, docs, py38-django32, py311-django42, py312-django42] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: setup python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: | + 3.8 + 3.11 + 3.12 - name: Install pip run: pip install -r requirements/pip.txt @@ -37,9 +39,9 @@ jobs: run: tox - name: Run coverage - if: matrix.python-version == '3.8' && matrix.toxenv == 'django32' + if: matrix.toxenv == 'py38-django32' uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} - flags: unittests - fail_ci_if_error: true + flags: python + fail_ci_if_error: false diff --git a/.gitignore b/.gitignore index 51c2174..6e66cea 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ pip-log.txt .tox coverage.xml htmlcov/ +coverage/ # Virtual environments /venv/ diff --git a/Dockerfile b/Dockerfile index 68ed148..194f19b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM openedx/xblock-sdk RUN mkdir -p /usr/local/src/xblock-accordion VOLUME ["/usr/local/src/xblock-accordion"] RUN apt-get update && apt-get install -y gettext -RUN echo "pip install -r /usr/local/src/xblock-accordion/requirements.txt" >> /usr/local/src/xblock-sdk/install_and_run_xblock.sh +RUN echo "pip install -r /usr/local/src/xblock-accordion/requirements/dev.txt" >> /usr/local/src/xblock-sdk/install_and_run_xblock.sh RUN echo "pip install -e /usr/local/src/xblock-accordion" >> /usr/local/src/xblock-sdk/install_and_run_xblock.sh RUN echo "cd /usr/local/src/xblock-accordion && make compile_translations && cd /usr/local/src/xblock-sdk" >> /usr/local/src/xblock-sdk/install_and_run_xblock.sh RUN echo "exec python /usr/local/src/xblock-sdk/manage.py \"\$@\"" >> /usr/local/src/xblock-sdk/install_and_run_xblock.sh diff --git a/Makefile b/Makefile index 3634e23..5376497 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ dev.build: docker build -t $(REPO_NAME)-dev $(CURDIR) dev.run: dev.clean dev.build ## Clean, build and run test image - docker run -p 8000:8000 -v $(CURDIR):/usr/local/src/$(REPO_NAME) --name $(REPO_NAME)-dev $(REPO_NAME)-dev + docker run -p 8200:8000 -v $(CURDIR):/usr/local/src/$(REPO_NAME) --name $(REPO_NAME)-dev $(REPO_NAME)-dev ## Localization targets diff --git a/README.rst b/README.rst index cebfaa5..a94fc19 100644 --- a/README.rst +++ b/README.rst @@ -10,142 +10,31 @@ This XBlock comes with a Docker test environment ready to build, based on the xb The XBlock SDK Workbench, including this XBlock, will be available on the list of XBlocks at http://localhost:8000 -Translating -************* - -Internationalization (i18n) is when a program is made aware of multiple languages. -Localization (l10n) is adapting a program to local language and cultural habits. - -Use the locale directory to provide internationalized strings for your XBlock project. -For more information on how to enable translations, visit the -`Open edX XBlock tutorial on Internationalization `_. - -This cookiecutter template uses `django-statici18n `_ -to provide translations to static javascript using ``gettext``. - -The included Makefile contains targets for extracting, compiling and validating translatable strings. -The general steps to provide multilingual messages for a Python program (or an XBlock) are: - -1. Mark translatable strings. -2. Run i18n tools to create raw message catalogs. -3. Create language specific translations for each message in the catalogs. -4. Use ``gettext`` to translate strings. - -1. Mark translatable strings -============================= - -Mark translatable strings in python:: - - - from django.utils.translation import ugettext as _ - - # Translators: This comment will appear in the `.po` file. - message = _("This will be marked.") - -See `edx-developer-guide `__ -for more information. - -You can also use ``gettext`` to mark strings in javascript:: - - - // Translators: This comment will appear in the `.po` file. - var message = gettext("Custom message."); - -See `edx-developer-guide `__ -for more information. - -2. Run i18n tools to create Raw message catalogs -================================================= - -This cookiecutter template offers multiple make targets which are shortcuts to -use `edx-i18n-tools `_. - -After marking strings as translatable we have to create the raw message catalogs. -These catalogs are created in ``.po`` files. For more information see -`GNU PO file documentation `_. -These catalogs can be created by running:: - - - $ make extract_translations - -The previous command will create the necessary ``.po`` files under -``xblock-accordion/accordion/conf/locale/en/LC_MESSAGES/text.po``. -The ``text.po`` file is created from the ``django-partial.po`` file created by -``django-admin makemessages`` (`makemessages documentation `_), -this is why you will not see a ``django-partial.po`` file. - -3. Create language specific translations -============================================== - -3.1 Add translated strings ---------------------------- - -After creating the raw message catalogs, all translations should be filled out by the translator. -One or more translators must edit the entries created in the message catalog, i.e. the ``.po`` file(s). -The format of each entry is as follows:: - - # translator-comments - A. extracted-comments - #: referenceā€¦ - #, flagā€¦ - #| msgid previous-untranslated-string - msgid 'untranslated message' - msgstr 'mensaje traducido (translated message)' - -For more information see -`GNU PO file documentation `_. - -To use translations from transifex use the follow Make target to pull translations:: - - $ make pull_translations - -See `config instructions `_ for information on how to set up your -transifex credentials. - -See `transifex documentation `_ for more details about integrating -django with transiflex. - -3.2 Compile translations -------------------------- - -Once translations are in place, use the following Make target to compile the translation catalogs ``.po`` into -``.mo`` message files:: - - $ make compile_translations - -The previous command will compile ``.po`` files using -``django-admin compilemessages`` (`compilemessages documentation `_). -After compiling the ``.po`` file(s), ``django-statici18n`` is used to create language specific catalogs. See -``django-statici18n`` `documentation `_ for more information. - -To upload translations to transiflex use the follow Make target:: - - $ make push_translations - -See `config instructions `_ for information on how to set up your -transifex credentials. +Testing frontend +**************** -See `transifex documentation `_ for more details about integrating -django with transiflex. +The frontend code in the XBlock can be tested without the backend running for quicker iteration on the UI. +To do this, just run ``npm run dev`` in the `frontend` folder. This will start a dev server with just the +frontend component. You can open the URL in the terminal and browse to the student or studio components. - **Note:** The ``dev.run`` make target will automatically compile any translations. +Installation +************ - **Note:** To check if the source translation files (``.po``) are up-to-date run:: +You can install the XBlock with the following command: - $ make detect_changed_source_translations +.. code-block:: bash -4. Use ``gettext`` to translate strings -======================================== + pip install xblock-accordion@git+https://github.com/open-craft/xblock-accordion.git -Django will automatically use ``gettext`` and the compiled translations to translate strings. +If using tutor, you can add `xblock-accordion@git+https://github.com/open-craft/xblock-accordion.git` to +`OPENEDX_EXTRA_PIP_REQUIREMENTS` to have the xblock installed on deployment. -Troubleshooting -**************** -If there are any errors compiling ``.po`` files run the following command to validate your ``.po`` files:: +Usage +***** - $ make validate +To use the XBlock in a course, you need to ensure that you have "accordion" in the +**Advanced Modules List** in the Advanced settings page of the course. -See `django's i18n troubleshooting documentation -`_ -for more information. +Once added there you will be able to add an Accordion block from the **Advanced Modules** +section of blocks. diff --git a/accordion/__init__.py b/accordion/__init__.py index 24b005f..6ebec28 100644 --- a/accordion/__init__.py +++ b/accordion/__init__.py @@ -4,4 +4,4 @@ from .accordion import AccordionXBlock -__version__ = '0.1.0' +__version__ = "1.0.0" diff --git a/accordion/accordion.py b/accordion/accordion.py index 024d203..92c2492 100644 --- a/accordion/accordion.py +++ b/accordion/accordion.py @@ -1,107 +1,98 @@ -"""TO-DO: Write a description of what this XBlock is.""" +""" +An XBlock for creating and accordion component with multiple panels with rich content. +""" -import pkg_resources from django.utils import translation from web_fragments.fragment import Fragment from xblock.core import XBlock -from xblock.fields import Integer, Scope -from xblockutils.resources import ResourceLoader +from xblock.fields import Dict, List, Scope, String + +try: + import importlib_resources +except ImportError: # pragma: no cover + from importlib import resources as importlib_resources class AccordionXBlock(XBlock): """ - TO-DO: document what your XBlock does. + Accordion XBlock. """ - # Fields are defined on the class. You can access them in your code as - # self.. - - # TO-DO: delete count, and define your own fields. - count = Integer( - default=0, scope=Scope.user_state, - help="A simple counter, to show something happening", + display_name = String(default=translation.gettext_noop("Accordion")) + panels = List(help="Accordion entries", default=[], scope=Scope.content) + styling = Dict(help="Accordion styling", default={}, scope=Scope.content) + border_style = String( + help="Accordion border style", default="", scope=Scope.content ) def resource_string(self, path): """Handy helper for getting resources from our kit.""" - data = pkg_resources.resource_string(__name__, path) - return data.decode("utf8") + data = importlib_resources.files("accordion").joinpath(path).read_text("utf8") + return data - # TO-DO: change this view to display your data your own way. - def student_view(self, context=None): + def student_view(self, context=None): # pylint: disable=unused-argument """ Create primary view of the AccordionXBlock, shown to students when viewing courses. """ - if context: - pass # TO-DO: do something based on the context. - html = self.resource_string("static/html/accordion.html") - frag = Fragment(html.format(self=self)) - frag.add_css(self.resource_string("static/css/accordion.css")) - - # Add i18n js - statici18n_js_url = self._get_statici18n_js_url() - if statici18n_js_url: - frag.add_javascript_url(self.runtime.local_resource_url(self, statici18n_js_url)) - - frag.add_javascript(self.resource_string("static/js/src/accordion.js")) - frag.initialize_js('AccordionXBlock') + frag = Fragment() + frag.add_javascript(self.resource_string("static/student.js")) + frag.add_css_url(self.runtime.local_resource_url(self, "public/student-ui.css")) + frag.initialize_js( + "AccordionBlock", + { + "url": self.runtime.local_resource_url(self, "public/student-ui.js"), + "panels": self.panels, + "styling": self.styling, + }, + ) return frag - # TO-DO: change this handler to perform your own actions. You may need more - # than one handler, or you may not need any handlers at all. @XBlock.json_handler - def increment_count(self, data, suffix=''): + def studio_save( + self, data, suffix="" + ): # pragma: no cover pylint: disable=unused-argument + """Save config and data based on data received at this API endpoint.""" + panels = data.get("panels", None) + styling = data.get("styling", None) + if panels: + self.panels = panels + if styling: + self.styling = styling + + def studio_view(self, context=None): # pylint: disable=unused-argument """ - Increments data. An example handler. + Create primary view of the AccordionXBlock, shown to students when viewing courses. """ - if suffix: - pass # TO-DO: Use the suffix when storing data. - # Just to show data coming in... - assert data['hello'] == 'world' - - self.count += 1 - return {"count": self.count} + html = self.resource_string("static/html/accordion.html") + frag = Fragment(html) + frag.add_javascript(self.resource_string("static/studio.js")) + frag.add_css_url(self.runtime.local_resource_url(self, "public/studio-ui.css")) + frag.initialize_js( + "AccordionEditor", + { + "url": self.runtime.local_resource_url(self, "public/studio-ui.js"), + "panels": self.panels, + "styling": self.styling, + }, + ) + return frag - # TO-DO: change this to create the scenarios you'd like to see in the - # workbench while developing your XBlock. @staticmethod - def workbench_scenarios(): + def workbench_scenarios(): # pragma: no cover """Create canned scenario for display in the workbench.""" return [ - ("AccordionXBlock", - """ - """), - ("Multiple AccordionXBlock", - """ + ( + "AccordionXBlock", + """ + """, + ), + ( + "Multiple AccordionXBlock", + """ - """), + """, + ), ] - - @staticmethod - def _get_statici18n_js_url(): - """ - Return the Javascript translation file for the currently selected language, if any. - - Defaults to English if available. - """ - locale_code = translation.get_language() - if locale_code is None: - return None - text_js = 'public/js/translations/{locale_code}/text.js' - lang_code = locale_code.split('-')[0] - for code in (locale_code, lang_code, 'en'): - loader = ResourceLoader(__name__) - if pkg_resources.resource_exists( - loader.module_name, text_js.format(locale_code=code)): - return text_js.format(locale_code=code) - return None - - @staticmethod - def get_dummy(): - """ - Generate initial i18n with dummy method. - """ - return translation.gettext_noop('Dummy') diff --git a/accordion/public/student-ui.css b/accordion/public/student-ui.css new file mode 100644 index 0000000..8120272 --- /dev/null +++ b/accordion/public/student-ui.css @@ -0,0 +1 @@ +:export{xs:0;sm:576px;md:768px;lg:992px;xl:1200px;xxl:1400px}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.9375rem;padding-left:.9375rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn{display:inline-flex;align-items:center;justify-content:center;font-weight:400;color:#454545;text-align:center;vertical-align:middle;-webkit-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.5625rem 1rem;font-size:1.125rem;line-height:1.3333;border-radius:.375rem}.btn:hover{color:#454545;text-decoration:none}.btn.disabled,.btn:disabled{opacity:.65}.btn .btn-icon-before{margin-inline-end:.5rem;margin-left:-.25em}[dir=rtl] .btn .btn-icon-before{margin-right:-.25em;margin-left:.5rem}.btn .btn-icon-after{margin-inline-start:.5rem;margin-right:-.25em}[dir=rtl] .btn .btn-icon-after{margin-right:.5rem;margin-left:-.25em}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0a3055;border-color:#0a3055}.btn-primary:hover{color:#fff;background-color:#082644;border-color:#082644}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0a3055;border-color:#0a3055}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#07223c;border-color:#07223c}.btn-primary.focus,.btn-primary:focus{position:relative;outline:0;box-shadow:none}.btn-primary.focus:before,.btn-primary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #0A3055;border-radius:calc(.375rem + 4px)}.btn-primary.focus.btn-lg:before,.btn-group-lg>.btn-primary.focus.btn:before,.btn-primary:focus.btn-lg:before,.btn-group-lg>.btn-primary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-primary.focus.btn-sm:before,.btn-group-sm>.btn-primary.focus.btn:before,.btn-primary:focus.btn-sm:before,.btn-group-sm>.btn-primary.btn:focus:before{border-radius:.375rem}.btn-primary.focus:active:before,.btn-primary.focus.active:before,.btn-primary:focus:active:before,.btn-primary:focus.active:before{opacity:.75}.btn-primary.focus:disabled:before,.btn-primary.focus.disabled:before,.btn-primary:focus:disabled:before,.btn-primary:focus.disabled:before{display:none}.btn-outline-primary{color:#0a3055;border-color:#0a3055}.btn-outline-primary:hover{color:#082644;background-color:#f0f3f5;border-color:#07223c}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0a3055;background-color:transparent;border-color:#0a3055}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#454545;background-color:#f0f3f5;border-color:#07223c}.btn-outline-primary.focus,.btn-outline-primary:focus{position:relative;outline:0;box-shadow:none}.btn-outline-primary.focus:before,.btn-outline-primary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #0A3055;border-radius:calc(.375rem + 4px)}.btn-outline-primary.focus.btn-lg:before,.btn-group-lg>.btn-outline-primary.focus.btn:before,.btn-outline-primary:focus.btn-lg:before,.btn-group-lg>.btn-outline-primary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-primary.focus.btn-sm:before,.btn-group-sm>.btn-outline-primary.focus.btn:before,.btn-outline-primary:focus.btn-sm:before,.btn-group-sm>.btn-outline-primary.btn:focus:before{border-radius:.375rem}.btn-outline-primary.focus:active:before,.btn-outline-primary.focus.active:before,.btn-outline-primary:focus:active:before,.btn-outline-primary:focus.active:before{opacity:.75}.btn-outline-primary.focus:disabled:before,.btn-outline-primary.focus.disabled:before,.btn-outline-primary:focus:disabled:before,.btn-outline-primary:focus.disabled:before{display:none}.btn-inverse-primary{color:#0a3055;border-color:transparent;background-color:#fff}.btn-inverse-primary:not(:disabled):not(.disabled):hover{color:#061d33;background-color:#ececec;border-color:transparent}.btn-inverse-primary.disabled,.btn-inverse-primary:disabled{color:#0a3055;background-color:#fff}.btn-inverse-primary:not(:disabled):not(.disabled):active,.btn-inverse-primary:not(:disabled):not(.disabled).active,.show>.btn-inverse-primary.dropdown-toggle{color:#051627;background:#eee}.btn-inverse-primary.focus,.btn-inverse-primary:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-primary.focus:before,.btn-inverse-primary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-primary.focus.btn-lg:before,.btn-group-lg>.btn-inverse-primary.focus.btn:before,.btn-inverse-primary:focus.btn-lg:before,.btn-group-lg>.btn-inverse-primary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-primary.focus.btn-sm:before,.btn-group-sm>.btn-inverse-primary.focus.btn:before,.btn-inverse-primary:focus.btn-sm:before,.btn-group-sm>.btn-inverse-primary.btn:focus:before{border-radius:.375rem}.btn-inverse-primary.focus:active:before,.btn-inverse-primary.focus.active:before,.btn-inverse-primary:focus:active:before,.btn-inverse-primary:focus.active:before{opacity:.75}.btn-inverse-primary.focus:disabled:before,.btn-inverse-primary.focus.disabled:before,.btn-inverse-primary:focus:disabled:before,.btn-inverse-primary:focus.disabled:before{display:none}.btn-inverse-outline-primary{color:#fff;border-color:#fff}.btn-inverse-outline-primary:hover{color:#082644;background-color:#f0f3f5;border-color:transparent}.btn-inverse-outline-primary.disabled,.btn-inverse-outline-primary:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-primary:not(:disabled):not(.disabled):active,.btn-inverse-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-primary.dropdown-toggle{color:#454545;background-color:#f0f3f5;border-color:transparent}.btn-inverse-outline-primary.focus,.btn-inverse-outline-primary:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-primary.focus:before,.btn-inverse-outline-primary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-primary.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-primary.focus.btn:before,.btn-inverse-outline-primary:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-primary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-primary.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-primary.focus.btn:before,.btn-inverse-outline-primary:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-primary.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-primary.focus:active:before,.btn-inverse-outline-primary.focus.active:before,.btn-inverse-outline-primary:focus:active:before,.btn-inverse-outline-primary:focus.active:before{opacity:.75}.btn-inverse-outline-primary.focus:disabled:before,.btn-inverse-outline-primary.focus.disabled:before,.btn-inverse-outline-primary:focus:disabled:before,.btn-inverse-outline-primary:focus.disabled:before{display:none}.btn-secondary{color:#fff;background-color:#454545;border-color:#454545}.btn-secondary:hover{color:#fff;background-color:#373737;border-color:#373737}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#454545;border-color:#454545}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#303030;border-color:#303030}.btn-secondary.focus,.btn-secondary:focus{position:relative;outline:0;box-shadow:none}.btn-secondary.focus:before,.btn-secondary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #454545;border-radius:calc(.375rem + 4px)}.btn-secondary.focus.btn-lg:before,.btn-group-lg>.btn-secondary.focus.btn:before,.btn-secondary:focus.btn-lg:before,.btn-group-lg>.btn-secondary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-secondary.focus.btn-sm:before,.btn-group-sm>.btn-secondary.focus.btn:before,.btn-secondary:focus.btn-sm:before,.btn-group-sm>.btn-secondary.btn:focus:before{border-radius:.375rem}.btn-secondary.focus:active:before,.btn-secondary.focus.active:before,.btn-secondary:focus:active:before,.btn-secondary:focus.active:before{opacity:.75}.btn-secondary.focus:disabled:before,.btn-secondary.focus.disabled:before,.btn-secondary:focus:disabled:before,.btn-secondary:focus.disabled:before{display:none}.btn-outline-secondary{color:#454545;border-color:#454545}.btn-outline-secondary:hover{color:#373737;background-color:#f4f4f4;border-color:#303030}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#454545;background-color:transparent;border-color:#454545}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#454545;background-color:#f4f4f4;border-color:#303030}.btn-outline-secondary.focus,.btn-outline-secondary:focus{position:relative;outline:0;box-shadow:none}.btn-outline-secondary.focus:before,.btn-outline-secondary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #454545;border-radius:calc(.375rem + 4px)}.btn-outline-secondary.focus.btn-lg:before,.btn-group-lg>.btn-outline-secondary.focus.btn:before,.btn-outline-secondary:focus.btn-lg:before,.btn-group-lg>.btn-outline-secondary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-secondary.focus.btn-sm:before,.btn-group-sm>.btn-outline-secondary.focus.btn:before,.btn-outline-secondary:focus.btn-sm:before,.btn-group-sm>.btn-outline-secondary.btn:focus:before{border-radius:.375rem}.btn-outline-secondary.focus:active:before,.btn-outline-secondary.focus.active:before,.btn-outline-secondary:focus:active:before,.btn-outline-secondary:focus.active:before{opacity:.75}.btn-outline-secondary.focus:disabled:before,.btn-outline-secondary.focus.disabled:before,.btn-outline-secondary:focus:disabled:before,.btn-outline-secondary:focus.disabled:before{display:none}.btn-inverse-secondary{color:#454545;border-color:transparent;background-color:#fff}.btn-inverse-secondary:not(:disabled):not(.disabled):hover{color:#323232;background-color:#ececec;border-color:transparent}.btn-inverse-secondary.disabled,.btn-inverse-secondary:disabled{color:#454545;background-color:#fff}.btn-inverse-secondary:not(:disabled):not(.disabled):active,.btn-inverse-secondary:not(:disabled):not(.disabled).active,.show>.btn-inverse-secondary.dropdown-toggle{color:#2c2c2c;background:#eee}.btn-inverse-secondary.focus,.btn-inverse-secondary:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-secondary.focus:before,.btn-inverse-secondary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-secondary.focus.btn-lg:before,.btn-group-lg>.btn-inverse-secondary.focus.btn:before,.btn-inverse-secondary:focus.btn-lg:before,.btn-group-lg>.btn-inverse-secondary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-secondary.focus.btn-sm:before,.btn-group-sm>.btn-inverse-secondary.focus.btn:before,.btn-inverse-secondary:focus.btn-sm:before,.btn-group-sm>.btn-inverse-secondary.btn:focus:before{border-radius:.375rem}.btn-inverse-secondary.focus:active:before,.btn-inverse-secondary.focus.active:before,.btn-inverse-secondary:focus:active:before,.btn-inverse-secondary:focus.active:before{opacity:.75}.btn-inverse-secondary.focus:disabled:before,.btn-inverse-secondary.focus.disabled:before,.btn-inverse-secondary:focus:disabled:before,.btn-inverse-secondary:focus.disabled:before{display:none}.btn-inverse-outline-secondary{color:#fff;border-color:#fff}.btn-inverse-outline-secondary:hover{color:#373737;background-color:#f4f4f4;border-color:transparent}.btn-inverse-outline-secondary.disabled,.btn-inverse-outline-secondary:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-secondary:not(:disabled):not(.disabled):active,.btn-inverse-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-secondary.dropdown-toggle{color:#454545;background-color:#f4f4f4;border-color:transparent}.btn-inverse-outline-secondary.focus,.btn-inverse-outline-secondary:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-secondary.focus:before,.btn-inverse-outline-secondary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-secondary.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-secondary.focus.btn:before,.btn-inverse-outline-secondary:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-secondary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-secondary.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-secondary.focus.btn:before,.btn-inverse-outline-secondary:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-secondary.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-secondary.focus:active:before,.btn-inverse-outline-secondary.focus.active:before,.btn-inverse-outline-secondary:focus:active:before,.btn-inverse-outline-secondary:focus.active:before{opacity:.75}.btn-inverse-outline-secondary.focus:disabled:before,.btn-inverse-outline-secondary.focus.disabled:before,.btn-inverse-outline-secondary:focus:disabled:before,.btn-inverse-outline-secondary:focus.disabled:before{display:none}.btn-brand{color:#fff;background-color:#9d0054;border-color:#9d0054}.btn-brand:hover{color:#fff;background-color:#7e0043;border-color:#7e0043}.btn-brand.disabled,.btn-brand:disabled{color:#fff;background-color:#9d0054;border-color:#9d0054}.btn-brand:not(:disabled):not(.disabled):active,.btn-brand:not(:disabled):not(.disabled).active,.show>.btn-brand.dropdown-toggle{color:#fff;background-color:#6e003b;border-color:#6e003b}.btn-brand.focus,.btn-brand:focus{position:relative;outline:0;box-shadow:none}.btn-brand.focus:before,.btn-brand:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #9D0054;border-radius:calc(.375rem + 4px)}.btn-brand.focus.btn-lg:before,.btn-group-lg>.btn-brand.focus.btn:before,.btn-brand:focus.btn-lg:before,.btn-group-lg>.btn-brand.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-brand.focus.btn-sm:before,.btn-group-sm>.btn-brand.focus.btn:before,.btn-brand:focus.btn-sm:before,.btn-group-sm>.btn-brand.btn:focus:before{border-radius:.375rem}.btn-brand.focus:active:before,.btn-brand.focus.active:before,.btn-brand:focus:active:before,.btn-brand:focus.active:before{opacity:.75}.btn-brand.focus:disabled:before,.btn-brand.focus.disabled:before,.btn-brand:focus:disabled:before,.btn-brand:focus.disabled:before{display:none}.btn-outline-brand{color:#9d0054;border-color:#9d0054}.btn-outline-brand:hover{color:#7e0043;background-color:#f9f0f5;border-color:#6e003b}.btn-outline-brand.disabled,.btn-outline-brand:disabled{color:#9d0054;background-color:transparent;border-color:#9d0054}.btn-outline-brand:not(:disabled):not(.disabled):active,.btn-outline-brand:not(:disabled):not(.disabled).active,.show>.btn-outline-brand.dropdown-toggle{color:#454545;background-color:#f9f0f5;border-color:#6e003b}.btn-outline-brand.focus,.btn-outline-brand:focus{position:relative;outline:0;box-shadow:none}.btn-outline-brand.focus:before,.btn-outline-brand:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #9D0054;border-radius:calc(.375rem + 4px)}.btn-outline-brand.focus.btn-lg:before,.btn-group-lg>.btn-outline-brand.focus.btn:before,.btn-outline-brand:focus.btn-lg:before,.btn-group-lg>.btn-outline-brand.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-brand.focus.btn-sm:before,.btn-group-sm>.btn-outline-brand.focus.btn:before,.btn-outline-brand:focus.btn-sm:before,.btn-group-sm>.btn-outline-brand.btn:focus:before{border-radius:.375rem}.btn-outline-brand.focus:active:before,.btn-outline-brand.focus.active:before,.btn-outline-brand:focus:active:before,.btn-outline-brand:focus.active:before{opacity:.75}.btn-outline-brand.focus:disabled:before,.btn-outline-brand.focus.disabled:before,.btn-outline-brand:focus:disabled:before,.btn-outline-brand:focus.disabled:before{display:none}.btn-inverse-brand{color:#9d0054;border-color:transparent;background-color:#fff}.btn-inverse-brand:not(:disabled):not(.disabled):hover{color:#770040;background-color:#ececec;border-color:transparent}.btn-inverse-brand.disabled,.btn-inverse-brand:disabled{color:#9d0054;background-color:#fff}.btn-inverse-brand:not(:disabled):not(.disabled):active,.btn-inverse-brand:not(:disabled):not(.disabled).active,.show>.btn-inverse-brand.dropdown-toggle{color:#6a0039;background:#eee}.btn-inverse-brand.focus,.btn-inverse-brand:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-brand.focus:before,.btn-inverse-brand:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-brand.focus.btn-lg:before,.btn-group-lg>.btn-inverse-brand.focus.btn:before,.btn-inverse-brand:focus.btn-lg:before,.btn-group-lg>.btn-inverse-brand.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-brand.focus.btn-sm:before,.btn-group-sm>.btn-inverse-brand.focus.btn:before,.btn-inverse-brand:focus.btn-sm:before,.btn-group-sm>.btn-inverse-brand.btn:focus:before{border-radius:.375rem}.btn-inverse-brand.focus:active:before,.btn-inverse-brand.focus.active:before,.btn-inverse-brand:focus:active:before,.btn-inverse-brand:focus.active:before{opacity:.75}.btn-inverse-brand.focus:disabled:before,.btn-inverse-brand.focus.disabled:before,.btn-inverse-brand:focus:disabled:before,.btn-inverse-brand:focus.disabled:before{display:none}.btn-inverse-outline-brand{color:#fff;border-color:#fff}.btn-inverse-outline-brand:hover{color:#7e0043;background-color:#f9f0f5;border-color:transparent}.btn-inverse-outline-brand.disabled,.btn-inverse-outline-brand:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-brand:not(:disabled):not(.disabled):active,.btn-inverse-outline-brand:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-brand.dropdown-toggle{color:#454545;background-color:#f9f0f5;border-color:transparent}.btn-inverse-outline-brand.focus,.btn-inverse-outline-brand:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-brand.focus:before,.btn-inverse-outline-brand:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-brand.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-brand.focus.btn:before,.btn-inverse-outline-brand:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-brand.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-brand.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-brand.focus.btn:before,.btn-inverse-outline-brand:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-brand.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-brand.focus:active:before,.btn-inverse-outline-brand.focus.active:before,.btn-inverse-outline-brand:focus:active:before,.btn-inverse-outline-brand:focus.active:before{opacity:.75}.btn-inverse-outline-brand.focus:disabled:before,.btn-inverse-outline-brand.focus.disabled:before,.btn-inverse-outline-brand:focus:disabled:before,.btn-inverse-outline-brand:focus.disabled:before{display:none}.btn-success{color:#fff;background-color:#178253;border-color:#178253}.btn-success:hover{color:#fff;background-color:#126842;border-color:#126842}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#178253;border-color:#178253}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#105b3a;border-color:#105b3a}.btn-success.focus,.btn-success:focus{position:relative;outline:0;box-shadow:none}.btn-success.focus:before,.btn-success:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #178253;border-radius:calc(.375rem + 4px)}.btn-success.focus.btn-lg:before,.btn-group-lg>.btn-success.focus.btn:before,.btn-success:focus.btn-lg:before,.btn-group-lg>.btn-success.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-success.focus.btn-sm:before,.btn-group-sm>.btn-success.focus.btn:before,.btn-success:focus.btn-sm:before,.btn-group-sm>.btn-success.btn:focus:before{border-radius:.375rem}.btn-success.focus:active:before,.btn-success.focus.active:before,.btn-success:focus:active:before,.btn-success:focus.active:before{opacity:.75}.btn-success.focus:disabled:before,.btn-success.focus.disabled:before,.btn-success:focus:disabled:before,.btn-success:focus.disabled:before{display:none}.btn-outline-success{color:#178253;border-color:#178253}.btn-outline-success:hover{color:#126842;background-color:#f1f8f5;border-color:#105b3a}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#178253;background-color:transparent;border-color:#178253}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#454545;background-color:#f1f8f5;border-color:#105b3a}.btn-outline-success.focus,.btn-outline-success:focus{position:relative;outline:0;box-shadow:none}.btn-outline-success.focus:before,.btn-outline-success:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #178253;border-radius:calc(.375rem + 4px)}.btn-outline-success.focus.btn-lg:before,.btn-group-lg>.btn-outline-success.focus.btn:before,.btn-outline-success:focus.btn-lg:before,.btn-group-lg>.btn-outline-success.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-success.focus.btn-sm:before,.btn-group-sm>.btn-outline-success.focus.btn:before,.btn-outline-success:focus.btn-sm:before,.btn-group-sm>.btn-outline-success.btn:focus:before{border-radius:.375rem}.btn-outline-success.focus:active:before,.btn-outline-success.focus.active:before,.btn-outline-success:focus:active:before,.btn-outline-success:focus.active:before{opacity:.75}.btn-outline-success.focus:disabled:before,.btn-outline-success.focus.disabled:before,.btn-outline-success:focus:disabled:before,.btn-outline-success:focus.disabled:before{display:none}.btn-inverse-success{color:#178253;border-color:transparent;background-color:#fff}.btn-inverse-success:not(:disabled):not(.disabled):hover{color:#11623e;background-color:#ececec;border-color:transparent}.btn-inverse-success.disabled,.btn-inverse-success:disabled{color:#178253;background-color:#fff}.btn-inverse-success:not(:disabled):not(.disabled):active,.btn-inverse-success:not(:disabled):not(.disabled).active,.show>.btn-inverse-success.dropdown-toggle{color:#0f5737;background:#eee}.btn-inverse-success.focus,.btn-inverse-success:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-success.focus:before,.btn-inverse-success:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-success.focus.btn-lg:before,.btn-group-lg>.btn-inverse-success.focus.btn:before,.btn-inverse-success:focus.btn-lg:before,.btn-group-lg>.btn-inverse-success.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-success.focus.btn-sm:before,.btn-group-sm>.btn-inverse-success.focus.btn:before,.btn-inverse-success:focus.btn-sm:before,.btn-group-sm>.btn-inverse-success.btn:focus:before{border-radius:.375rem}.btn-inverse-success.focus:active:before,.btn-inverse-success.focus.active:before,.btn-inverse-success:focus:active:before,.btn-inverse-success:focus.active:before{opacity:.75}.btn-inverse-success.focus:disabled:before,.btn-inverse-success.focus.disabled:before,.btn-inverse-success:focus:disabled:before,.btn-inverse-success:focus.disabled:before{display:none}.btn-inverse-outline-success{color:#fff;border-color:#fff}.btn-inverse-outline-success:hover{color:#126842;background-color:#f1f8f5;border-color:transparent}.btn-inverse-outline-success.disabled,.btn-inverse-outline-success:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-success:not(:disabled):not(.disabled):active,.btn-inverse-outline-success:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-success.dropdown-toggle{color:#454545;background-color:#f1f8f5;border-color:transparent}.btn-inverse-outline-success.focus,.btn-inverse-outline-success:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-success.focus:before,.btn-inverse-outline-success:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-success.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-success.focus.btn:before,.btn-inverse-outline-success:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-success.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-success.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-success.focus.btn:before,.btn-inverse-outline-success:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-success.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-success.focus:active:before,.btn-inverse-outline-success.focus.active:before,.btn-inverse-outline-success:focus:active:before,.btn-inverse-outline-success:focus.active:before{opacity:.75}.btn-inverse-outline-success.focus:disabled:before,.btn-inverse-outline-success.focus.disabled:before,.btn-inverse-outline-success:focus:disabled:before,.btn-inverse-outline-success:focus.disabled:before{display:none}.btn-info{color:#fff;background-color:#006daa;border-color:#006daa}.btn-info:hover{color:#fff;background-color:#005788;border-color:#005788}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#006daa;border-color:#006daa}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#004c77;border-color:#004c77}.btn-info.focus,.btn-info:focus{position:relative;outline:0;box-shadow:none}.btn-info.focus:before,.btn-info:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #006DAA;border-radius:calc(.375rem + 4px)}.btn-info.focus.btn-lg:before,.btn-group-lg>.btn-info.focus.btn:before,.btn-info:focus.btn-lg:before,.btn-group-lg>.btn-info.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-info.focus.btn-sm:before,.btn-group-sm>.btn-info.focus.btn:before,.btn-info:focus.btn-sm:before,.btn-group-sm>.btn-info.btn:focus:before{border-radius:.375rem}.btn-info.focus:active:before,.btn-info.focus.active:before,.btn-info:focus:active:before,.btn-info:focus.active:before{opacity:.75}.btn-info.focus:disabled:before,.btn-info.focus.disabled:before,.btn-info:focus:disabled:before,.btn-info:focus.disabled:before{display:none}.btn-outline-info{color:#006daa;border-color:#006daa}.btn-outline-info:hover{color:#005788;background-color:#f0f6fa;border-color:#004c77}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#006daa;background-color:transparent;border-color:#006daa}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#454545;background-color:#f0f6fa;border-color:#004c77}.btn-outline-info.focus,.btn-outline-info:focus{position:relative;outline:0;box-shadow:none}.btn-outline-info.focus:before,.btn-outline-info:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #006DAA;border-radius:calc(.375rem + 4px)}.btn-outline-info.focus.btn-lg:before,.btn-group-lg>.btn-outline-info.focus.btn:before,.btn-outline-info:focus.btn-lg:before,.btn-group-lg>.btn-outline-info.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-info.focus.btn-sm:before,.btn-group-sm>.btn-outline-info.focus.btn:before,.btn-outline-info:focus.btn-sm:before,.btn-group-sm>.btn-outline-info.btn:focus:before{border-radius:.375rem}.btn-outline-info.focus:active:before,.btn-outline-info.focus.active:before,.btn-outline-info:focus:active:before,.btn-outline-info:focus.active:before{opacity:.75}.btn-outline-info.focus:disabled:before,.btn-outline-info.focus.disabled:before,.btn-outline-info:focus:disabled:before,.btn-outline-info:focus.disabled:before{display:none}.btn-inverse-info{color:#006daa;border-color:transparent;background-color:#fff}.btn-inverse-info:not(:disabled):not(.disabled):hover{color:#005484;background-color:#ececec;border-color:transparent}.btn-inverse-info.disabled,.btn-inverse-info:disabled{color:#006daa;background-color:#fff}.btn-inverse-info:not(:disabled):not(.disabled):active,.btn-inverse-info:not(:disabled):not(.disabled).active,.show>.btn-inverse-info.dropdown-toggle{color:#004c77;background:#eee}.btn-inverse-info.focus,.btn-inverse-info:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-info.focus:before,.btn-inverse-info:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-info.focus.btn-lg:before,.btn-group-lg>.btn-inverse-info.focus.btn:before,.btn-inverse-info:focus.btn-lg:before,.btn-group-lg>.btn-inverse-info.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-info.focus.btn-sm:before,.btn-group-sm>.btn-inverse-info.focus.btn:before,.btn-inverse-info:focus.btn-sm:before,.btn-group-sm>.btn-inverse-info.btn:focus:before{border-radius:.375rem}.btn-inverse-info.focus:active:before,.btn-inverse-info.focus.active:before,.btn-inverse-info:focus:active:before,.btn-inverse-info:focus.active:before{opacity:.75}.btn-inverse-info.focus:disabled:before,.btn-inverse-info.focus.disabled:before,.btn-inverse-info:focus:disabled:before,.btn-inverse-info:focus.disabled:before{display:none}.btn-inverse-outline-info{color:#fff;border-color:#fff}.btn-inverse-outline-info:hover{color:#005788;background-color:#f0f6fa;border-color:transparent}.btn-inverse-outline-info.disabled,.btn-inverse-outline-info:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-info:not(:disabled):not(.disabled):active,.btn-inverse-outline-info:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-info.dropdown-toggle{color:#454545;background-color:#f0f6fa;border-color:transparent}.btn-inverse-outline-info.focus,.btn-inverse-outline-info:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-info.focus:before,.btn-inverse-outline-info:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-info.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-info.focus.btn:before,.btn-inverse-outline-info:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-info.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-info.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-info.focus.btn:before,.btn-inverse-outline-info:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-info.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-info.focus:active:before,.btn-inverse-outline-info.focus.active:before,.btn-inverse-outline-info:focus:active:before,.btn-inverse-outline-info:focus.active:before{opacity:.75}.btn-inverse-outline-info.focus:disabled:before,.btn-inverse-outline-info.focus.disabled:before,.btn-inverse-outline-info:focus:disabled:before,.btn-inverse-outline-info:focus.disabled:before{display:none}.btn-warning{color:#454545;background-color:#ffd900;border-color:#ffd900}.btn-warning:hover{color:#454545;background-color:#ccae00;border-color:#ccae00}.btn-warning.disabled,.btn-warning:disabled{color:#454545;background-color:#ffd900;border-color:#ffd900}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#b39800;border-color:#b39800}.btn-warning.focus,.btn-warning:focus{position:relative;outline:0;box-shadow:none}.btn-warning.focus:before,.btn-warning:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFD900;border-radius:calc(.375rem + 4px)}.btn-warning.focus.btn-lg:before,.btn-group-lg>.btn-warning.focus.btn:before,.btn-warning:focus.btn-lg:before,.btn-group-lg>.btn-warning.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-warning.focus.btn-sm:before,.btn-group-sm>.btn-warning.focus.btn:before,.btn-warning:focus.btn-sm:before,.btn-group-sm>.btn-warning.btn:focus:before{border-radius:.375rem}.btn-warning.focus:active:before,.btn-warning.focus.active:before,.btn-warning:focus:active:before,.btn-warning:focus.active:before{opacity:.75}.btn-warning.focus:disabled:before,.btn-warning.focus.disabled:before,.btn-warning:focus:disabled:before,.btn-warning:focus.disabled:before{display:none}.btn-outline-warning{color:#ffd900;border-color:#ffd900}.btn-outline-warning:hover{color:#ccae00;background-color:#fffdf0;border-color:#b39800}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffd900;background-color:transparent;border-color:#ffd900}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#454545;background-color:#fffdf0;border-color:#b39800}.btn-outline-warning.focus,.btn-outline-warning:focus{position:relative;outline:0;box-shadow:none}.btn-outline-warning.focus:before,.btn-outline-warning:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFD900;border-radius:calc(.375rem + 4px)}.btn-outline-warning.focus.btn-lg:before,.btn-group-lg>.btn-outline-warning.focus.btn:before,.btn-outline-warning:focus.btn-lg:before,.btn-group-lg>.btn-outline-warning.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-warning.focus.btn-sm:before,.btn-group-sm>.btn-outline-warning.focus.btn:before,.btn-outline-warning:focus.btn-sm:before,.btn-group-sm>.btn-outline-warning.btn:focus:before{border-radius:.375rem}.btn-outline-warning.focus:active:before,.btn-outline-warning.focus.active:before,.btn-outline-warning:focus:active:before,.btn-outline-warning:focus.active:before{opacity:.75}.btn-outline-warning.focus:disabled:before,.btn-outline-warning.focus.disabled:before,.btn-outline-warning:focus:disabled:before,.btn-outline-warning:focus.disabled:before{display:none}.btn-inverse-warning{color:#ffd900;border-color:transparent;background-color:#454545}.btn-inverse-warning:not(:disabled):not(.disabled):hover{color:#d9b800;background-color:#323232;border-color:transparent}.btn-inverse-warning.disabled,.btn-inverse-warning:disabled{color:#ffd900;background-color:#454545}.btn-inverse-warning:not(:disabled):not(.disabled):active,.btn-inverse-warning:not(:disabled):not(.disabled).active,.show>.btn-inverse-warning.dropdown-toggle{color:#ccae00;background:#eee}.btn-inverse-warning.focus,.btn-inverse-warning:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-warning.focus:before,.btn-inverse-warning:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-warning.focus.btn-lg:before,.btn-group-lg>.btn-inverse-warning.focus.btn:before,.btn-inverse-warning:focus.btn-lg:before,.btn-group-lg>.btn-inverse-warning.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-warning.focus.btn-sm:before,.btn-group-sm>.btn-inverse-warning.focus.btn:before,.btn-inverse-warning:focus.btn-sm:before,.btn-group-sm>.btn-inverse-warning.btn:focus:before{border-radius:.375rem}.btn-inverse-warning.focus:active:before,.btn-inverse-warning.focus.active:before,.btn-inverse-warning:focus:active:before,.btn-inverse-warning:focus.active:before{opacity:.75}.btn-inverse-warning.focus:disabled:before,.btn-inverse-warning.focus.disabled:before,.btn-inverse-warning:focus:disabled:before,.btn-inverse-warning:focus.disabled:before{display:none}.btn-inverse-outline-warning{color:#fff;border-color:#fff}.btn-inverse-outline-warning:hover{color:#ccae00;background-color:#fffdf0;border-color:transparent}.btn-inverse-outline-warning.disabled,.btn-inverse-outline-warning:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-warning:not(:disabled):not(.disabled):active,.btn-inverse-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-warning.dropdown-toggle{color:#454545;background-color:#fffdf0;border-color:transparent}.btn-inverse-outline-warning.focus,.btn-inverse-outline-warning:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-warning.focus:before,.btn-inverse-outline-warning:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-warning.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-warning.focus.btn:before,.btn-inverse-outline-warning:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-warning.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-warning.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-warning.focus.btn:before,.btn-inverse-outline-warning:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-warning.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-warning.focus:active:before,.btn-inverse-outline-warning.focus.active:before,.btn-inverse-outline-warning:focus:active:before,.btn-inverse-outline-warning:focus.active:before{opacity:.75}.btn-inverse-outline-warning.focus:disabled:before,.btn-inverse-outline-warning.focus.disabled:before,.btn-inverse-outline-warning:focus:disabled:before,.btn-inverse-outline-warning:focus.disabled:before{display:none}.btn-danger{color:#fff;background-color:#c32d3a;border-color:#c32d3a}.btn-danger:hover{color:#fff;background-color:#9c242e;border-color:#9c242e}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#c32d3a;border-color:#c32d3a}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#892029;border-color:#892029}.btn-danger.focus,.btn-danger:focus{position:relative;outline:0;box-shadow:none}.btn-danger.focus:before,.btn-danger:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #C32D3A;border-radius:calc(.375rem + 4px)}.btn-danger.focus.btn-lg:before,.btn-group-lg>.btn-danger.focus.btn:before,.btn-danger:focus.btn-lg:before,.btn-group-lg>.btn-danger.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-danger.focus.btn-sm:before,.btn-group-sm>.btn-danger.focus.btn:before,.btn-danger:focus.btn-sm:before,.btn-group-sm>.btn-danger.btn:focus:before{border-radius:.375rem}.btn-danger.focus:active:before,.btn-danger.focus.active:before,.btn-danger:focus:active:before,.btn-danger:focus.active:before{opacity:.75}.btn-danger.focus:disabled:before,.btn-danger.focus.disabled:before,.btn-danger:focus:disabled:before,.btn-danger:focus.disabled:before{display:none}.btn-outline-danger{color:#c32d3a;border-color:#c32d3a}.btn-outline-danger:hover{color:#9c242e;background-color:#fbf2f3;border-color:#892029}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#c32d3a;background-color:transparent;border-color:#c32d3a}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#454545;background-color:#fbf2f3;border-color:#892029}.btn-outline-danger.focus,.btn-outline-danger:focus{position:relative;outline:0;box-shadow:none}.btn-outline-danger.focus:before,.btn-outline-danger:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #C32D3A;border-radius:calc(.375rem + 4px)}.btn-outline-danger.focus.btn-lg:before,.btn-group-lg>.btn-outline-danger.focus.btn:before,.btn-outline-danger:focus.btn-lg:before,.btn-group-lg>.btn-outline-danger.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-danger.focus.btn-sm:before,.btn-group-sm>.btn-outline-danger.focus.btn:before,.btn-outline-danger:focus.btn-sm:before,.btn-group-sm>.btn-outline-danger.btn:focus:before{border-radius:.375rem}.btn-outline-danger.focus:active:before,.btn-outline-danger.focus.active:before,.btn-outline-danger:focus:active:before,.btn-outline-danger:focus.active:before{opacity:.75}.btn-outline-danger.focus:disabled:before,.btn-outline-danger.focus.disabled:before,.btn-outline-danger:focus:disabled:before,.btn-outline-danger:focus.disabled:before{display:none}.btn-inverse-danger{color:#c32d3a;border-color:transparent;background-color:#fff}.btn-inverse-danger:not(:disabled):not(.disabled):hover{color:#a42631;background-color:#ececec;border-color:transparent}.btn-inverse-danger.disabled,.btn-inverse-danger:disabled{color:#c32d3a;background-color:#fff}.btn-inverse-danger:not(:disabled):not(.disabled):active,.btn-inverse-danger:not(:disabled):not(.disabled).active,.show>.btn-inverse-danger.dropdown-toggle{color:#9a232e;background:#eee}.btn-inverse-danger.focus,.btn-inverse-danger:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-danger.focus:before,.btn-inverse-danger:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-danger.focus.btn-lg:before,.btn-group-lg>.btn-inverse-danger.focus.btn:before,.btn-inverse-danger:focus.btn-lg:before,.btn-group-lg>.btn-inverse-danger.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-danger.focus.btn-sm:before,.btn-group-sm>.btn-inverse-danger.focus.btn:before,.btn-inverse-danger:focus.btn-sm:before,.btn-group-sm>.btn-inverse-danger.btn:focus:before{border-radius:.375rem}.btn-inverse-danger.focus:active:before,.btn-inverse-danger.focus.active:before,.btn-inverse-danger:focus:active:before,.btn-inverse-danger:focus.active:before{opacity:.75}.btn-inverse-danger.focus:disabled:before,.btn-inverse-danger.focus.disabled:before,.btn-inverse-danger:focus:disabled:before,.btn-inverse-danger:focus.disabled:before{display:none}.btn-inverse-outline-danger{color:#fff;border-color:#fff}.btn-inverse-outline-danger:hover{color:#9c242e;background-color:#fbf2f3;border-color:transparent}.btn-inverse-outline-danger.disabled,.btn-inverse-outline-danger:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-danger:not(:disabled):not(.disabled):active,.btn-inverse-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-danger.dropdown-toggle{color:#454545;background-color:#fbf2f3;border-color:transparent}.btn-inverse-outline-danger.focus,.btn-inverse-outline-danger:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-danger.focus:before,.btn-inverse-outline-danger:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-danger.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-danger.focus.btn:before,.btn-inverse-outline-danger:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-danger.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-danger.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-danger.focus.btn:before,.btn-inverse-outline-danger:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-danger.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-danger.focus:active:before,.btn-inverse-outline-danger.focus.active:before,.btn-inverse-outline-danger:focus:active:before,.btn-inverse-outline-danger:focus.active:before{opacity:.75}.btn-inverse-outline-danger.focus:disabled:before,.btn-inverse-outline-danger.focus.disabled:before,.btn-inverse-outline-danger:focus:disabled:before,.btn-inverse-outline-danger:focus.disabled:before{display:none}.btn-light{color:#454545;background-color:#e1dddb;border-color:#e1dddb}.btn-light:hover{color:#454545;background-color:#b4b1af;border-color:#b4b1af}.btn-light.disabled,.btn-light:disabled{color:#454545;background-color:#e1dddb;border-color:#e1dddb}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#454545;background-color:#9e9b99;border-color:#9e9b99}.btn-light.focus,.btn-light:focus{position:relative;outline:0;box-shadow:none}.btn-light.focus:before,.btn-light:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #E1DDDB;border-radius:calc(.375rem + 4px)}.btn-light.focus.btn-lg:before,.btn-group-lg>.btn-light.focus.btn:before,.btn-light:focus.btn-lg:before,.btn-group-lg>.btn-light.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-light.focus.btn-sm:before,.btn-group-sm>.btn-light.focus.btn:before,.btn-light:focus.btn-sm:before,.btn-group-sm>.btn-light.btn:focus:before{border-radius:.375rem}.btn-light.focus:active:before,.btn-light.focus.active:before,.btn-light:focus:active:before,.btn-light:focus.active:before{opacity:.75}.btn-light.focus:disabled:before,.btn-light.focus.disabled:before,.btn-light:focus:disabled:before,.btn-light:focus.disabled:before{display:none}.btn-outline-light{color:#e1dddb;border-color:#e1dddb}.btn-outline-light:hover{color:#b4b1af;background-color:#fdfdfd;border-color:#9e9b99}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e1dddb;background-color:transparent;border-color:#e1dddb}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#454545;background-color:#fdfdfd;border-color:#9e9b99}.btn-outline-light.focus,.btn-outline-light:focus{position:relative;outline:0;box-shadow:none}.btn-outline-light.focus:before,.btn-outline-light:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #E1DDDB;border-radius:calc(.375rem + 4px)}.btn-outline-light.focus.btn-lg:before,.btn-group-lg>.btn-outline-light.focus.btn:before,.btn-outline-light:focus.btn-lg:before,.btn-group-lg>.btn-outline-light.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-light.focus.btn-sm:before,.btn-group-sm>.btn-outline-light.focus.btn:before,.btn-outline-light:focus.btn-sm:before,.btn-group-sm>.btn-outline-light.btn:focus:before{border-radius:.375rem}.btn-outline-light.focus:active:before,.btn-outline-light.focus.active:before,.btn-outline-light:focus:active:before,.btn-outline-light:focus.active:before{opacity:.75}.btn-outline-light.focus:disabled:before,.btn-outline-light.focus.disabled:before,.btn-outline-light:focus:disabled:before,.btn-outline-light:focus.disabled:before{display:none}.btn-inverse-light{color:#e1dddb;border-color:transparent;background-color:#454545}.btn-inverse-light:not(:disabled):not(.disabled):hover{color:#d0c9c6;background-color:#323232;border-color:transparent}.btn-inverse-light.disabled,.btn-inverse-light:disabled{color:#e1dddb;background-color:#454545}.btn-inverse-light:not(:disabled):not(.disabled):active,.btn-inverse-light:not(:disabled):not(.disabled).active,.show>.btn-inverse-light.dropdown-toggle{color:#cac3bf;background:#eee}.btn-inverse-light.focus,.btn-inverse-light:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-light.focus:before,.btn-inverse-light:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-light.focus.btn-lg:before,.btn-group-lg>.btn-inverse-light.focus.btn:before,.btn-inverse-light:focus.btn-lg:before,.btn-group-lg>.btn-inverse-light.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-light.focus.btn-sm:before,.btn-group-sm>.btn-inverse-light.focus.btn:before,.btn-inverse-light:focus.btn-sm:before,.btn-group-sm>.btn-inverse-light.btn:focus:before{border-radius:.375rem}.btn-inverse-light.focus:active:before,.btn-inverse-light.focus.active:before,.btn-inverse-light:focus:active:before,.btn-inverse-light:focus.active:before{opacity:.75}.btn-inverse-light.focus:disabled:before,.btn-inverse-light.focus.disabled:before,.btn-inverse-light:focus:disabled:before,.btn-inverse-light:focus.disabled:before{display:none}.btn-inverse-outline-light{color:#fff;border-color:#fff}.btn-inverse-outline-light:hover{color:#b4b1af;background-color:#fdfdfd;border-color:transparent}.btn-inverse-outline-light.disabled,.btn-inverse-outline-light:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-light:not(:disabled):not(.disabled):active,.btn-inverse-outline-light:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-light.dropdown-toggle{color:#454545;background-color:#fdfdfd;border-color:transparent}.btn-inverse-outline-light.focus,.btn-inverse-outline-light:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-light.focus:before,.btn-inverse-outline-light:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-light.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-light.focus.btn:before,.btn-inverse-outline-light:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-light.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-light.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-light.focus.btn:before,.btn-inverse-outline-light:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-light.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-light.focus:active:before,.btn-inverse-outline-light.focus.active:before,.btn-inverse-outline-light:focus:active:before,.btn-inverse-outline-light:focus.active:before{opacity:.75}.btn-inverse-outline-light.focus:disabled:before,.btn-inverse-outline-light.focus.disabled:before,.btn-inverse-outline-light:focus:disabled:before,.btn-inverse-outline-light:focus.disabled:before{display:none}.btn-dark{color:#fff;background-color:#273f2f;border-color:#273f2f}.btn-dark:hover{color:#fff;background-color:#1f3226;border-color:#1f3226}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#273f2f;border-color:#273f2f}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1b2c21;border-color:#1b2c21}.btn-dark.focus,.btn-dark:focus{position:relative;outline:0;box-shadow:none}.btn-dark.focus:before,.btn-dark:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #273F2F;border-radius:calc(.375rem + 4px)}.btn-dark.focus.btn-lg:before,.btn-group-lg>.btn-dark.focus.btn:before,.btn-dark:focus.btn-lg:before,.btn-group-lg>.btn-dark.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-dark.focus.btn-sm:before,.btn-group-sm>.btn-dark.focus.btn:before,.btn-dark:focus.btn-sm:before,.btn-group-sm>.btn-dark.btn:focus:before{border-radius:.375rem}.btn-dark.focus:active:before,.btn-dark.focus.active:before,.btn-dark:focus:active:before,.btn-dark:focus.active:before{opacity:.75}.btn-dark.focus:disabled:before,.btn-dark.focus.disabled:before,.btn-dark:focus:disabled:before,.btn-dark:focus.disabled:before{display:none}.btn-outline-dark{color:#273f2f;border-color:#273f2f}.btn-outline-dark:hover{color:#1f3226;background-color:#f2f3f3;border-color:#1b2c21}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#273f2f;background-color:transparent;border-color:#273f2f}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#454545;background-color:#f2f3f3;border-color:#1b2c21}.btn-outline-dark.focus,.btn-outline-dark:focus{position:relative;outline:0;box-shadow:none}.btn-outline-dark.focus:before,.btn-outline-dark:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #273F2F;border-radius:calc(.375rem + 4px)}.btn-outline-dark.focus.btn-lg:before,.btn-group-lg>.btn-outline-dark.focus.btn:before,.btn-outline-dark:focus.btn-lg:before,.btn-group-lg>.btn-outline-dark.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-dark.focus.btn-sm:before,.btn-group-sm>.btn-outline-dark.focus.btn:before,.btn-outline-dark:focus.btn-sm:before,.btn-group-sm>.btn-outline-dark.btn:focus:before{border-radius:.375rem}.btn-outline-dark.focus:active:before,.btn-outline-dark.focus.active:before,.btn-outline-dark:focus:active:before,.btn-outline-dark:focus.active:before{opacity:.75}.btn-outline-dark.focus:disabled:before,.btn-outline-dark.focus.disabled:before,.btn-outline-dark:focus:disabled:before,.btn-outline-dark:focus.disabled:before{display:none}.btn-inverse-dark{color:#273f2f;border-color:transparent;background-color:#fff}.btn-inverse-dark:not(:disabled):not(.disabled):hover{color:#18271d;background-color:#ececec;border-color:transparent}.btn-inverse-dark.disabled,.btn-inverse-dark:disabled{color:#273f2f;background-color:#fff}.btn-inverse-dark:not(:disabled):not(.disabled):active,.btn-inverse-dark:not(:disabled):not(.disabled).active,.show>.btn-inverse-dark.dropdown-toggle{color:#142018;background:#eee}.btn-inverse-dark.focus,.btn-inverse-dark:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-dark.focus:before,.btn-inverse-dark:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-dark.focus.btn-lg:before,.btn-group-lg>.btn-inverse-dark.focus.btn:before,.btn-inverse-dark:focus.btn-lg:before,.btn-group-lg>.btn-inverse-dark.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-dark.focus.btn-sm:before,.btn-group-sm>.btn-inverse-dark.focus.btn:before,.btn-inverse-dark:focus.btn-sm:before,.btn-group-sm>.btn-inverse-dark.btn:focus:before{border-radius:.375rem}.btn-inverse-dark.focus:active:before,.btn-inverse-dark.focus.active:before,.btn-inverse-dark:focus:active:before,.btn-inverse-dark:focus.active:before{opacity:.75}.btn-inverse-dark.focus:disabled:before,.btn-inverse-dark.focus.disabled:before,.btn-inverse-dark:focus:disabled:before,.btn-inverse-dark:focus.disabled:before{display:none}.btn-inverse-outline-dark{color:#fff;border-color:#fff}.btn-inverse-outline-dark:hover{color:#1f3226;background-color:#f2f3f3;border-color:transparent}.btn-inverse-outline-dark.disabled,.btn-inverse-outline-dark:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-dark:not(:disabled):not(.disabled):active,.btn-inverse-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-dark.dropdown-toggle{color:#454545;background-color:#f2f3f3;border-color:transparent}.btn-inverse-outline-dark.focus,.btn-inverse-outline-dark:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-dark.focus:before,.btn-inverse-outline-dark:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-dark.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-dark.focus.btn:before,.btn-inverse-outline-dark:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-dark.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-dark.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-dark.focus.btn:before,.btn-inverse-outline-dark:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-dark.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-dark.focus:active:before,.btn-inverse-outline-dark.focus.active:before,.btn-inverse-outline-dark:focus:active:before,.btn-inverse-outline-dark:focus.active:before{opacity:.75}.btn-inverse-outline-dark.focus:disabled:before,.btn-inverse-outline-dark.focus.disabled:before,.btn-inverse-outline-dark:focus:disabled:before,.btn-inverse-outline-dark:focus.disabled:before{display:none}.btn-gray{color:#fff;background-color:#707070;border-color:#707070}.btn-gray:hover{color:#fff;background-color:#454545;border-color:#454545}.btn-gray.disabled,.btn-gray:disabled{color:#fff;background-color:#707070;border-color:#707070}.btn-gray:not(:disabled):not(.disabled):active,.btn-gray:not(:disabled):not(.disabled).active,.show>.btn-gray.dropdown-toggle{color:#fff;background-color:#212529;border-color:#212529}.btn-gray.focus,.btn-gray:focus{position:relative;outline:0;box-shadow:none}.btn-gray.focus:before,.btn-gray:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #707070;border-radius:calc(.375rem + 4px)}.btn-gray.focus.btn-lg:before,.btn-group-lg>.btn-gray.focus.btn:before,.btn-gray:focus.btn-lg:before,.btn-group-lg>.btn-gray.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-gray.focus.btn-sm:before,.btn-group-sm>.btn-gray.focus.btn:before,.btn-gray:focus.btn-sm:before,.btn-group-sm>.btn-gray.btn:focus:before{border-radius:.375rem}.btn-gray.focus:active:before,.btn-gray.focus.active:before,.btn-gray:focus:active:before,.btn-gray:focus.active:before{opacity:.75}.btn-gray.focus:disabled:before,.btn-gray.focus.disabled:before,.btn-gray:focus:disabled:before,.btn-gray:focus.disabled:before{display:none}.btn-outline-gray{color:#707070;border-color:#707070}.btn-outline-gray:hover{color:#454545;background-color:#ebebeb;border-color:#212529}.btn-outline-gray.disabled,.btn-outline-gray:disabled{color:#707070;background-color:transparent;border-color:#707070}.btn-outline-gray:not(:disabled):not(.disabled):active,.btn-outline-gray:not(:disabled):not(.disabled).active,.show>.btn-outline-gray.dropdown-toggle{color:#454545;background-color:#ebebeb;border-color:#212529}.btn-outline-gray.focus,.btn-outline-gray:focus{position:relative;outline:0;box-shadow:none}.btn-outline-gray.focus:before,.btn-outline-gray:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #707070;border-radius:calc(.375rem + 4px)}.btn-outline-gray.focus.btn-lg:before,.btn-group-lg>.btn-outline-gray.focus.btn:before,.btn-outline-gray:focus.btn-lg:before,.btn-group-lg>.btn-outline-gray.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-gray.focus.btn-sm:before,.btn-group-sm>.btn-outline-gray.focus.btn:before,.btn-outline-gray:focus.btn-sm:before,.btn-group-sm>.btn-outline-gray.btn:focus:before{border-radius:.375rem}.btn-outline-gray.focus:active:before,.btn-outline-gray.focus.active:before,.btn-outline-gray:focus:active:before,.btn-outline-gray:focus.active:before{opacity:.75}.btn-outline-gray.focus:disabled:before,.btn-outline-gray.focus.disabled:before,.btn-outline-gray:focus:disabled:before,.btn-outline-gray:focus.disabled:before{display:none}.btn-inverse-gray{color:#707070;border-color:transparent;background-color:#fff}.btn-inverse-gray:not(:disabled):not(.disabled):hover{color:#5d5d5d;background-color:#ececec;border-color:transparent}.btn-inverse-gray.disabled,.btn-inverse-gray:disabled{color:#707070;background-color:#fff}.btn-inverse-gray:not(:disabled):not(.disabled):active,.btn-inverse-gray:not(:disabled):not(.disabled).active,.show>.btn-inverse-gray.dropdown-toggle{color:#575757;background:#eee}.btn-inverse-gray.focus,.btn-inverse-gray:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-gray.focus:before,.btn-inverse-gray:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-gray.focus.btn-lg:before,.btn-group-lg>.btn-inverse-gray.focus.btn:before,.btn-inverse-gray:focus.btn-lg:before,.btn-group-lg>.btn-inverse-gray.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-gray.focus.btn-sm:before,.btn-group-sm>.btn-inverse-gray.focus.btn:before,.btn-inverse-gray:focus.btn-sm:before,.btn-group-sm>.btn-inverse-gray.btn:focus:before{border-radius:.375rem}.btn-inverse-gray.focus:active:before,.btn-inverse-gray.focus.active:before,.btn-inverse-gray:focus:active:before,.btn-inverse-gray:focus.active:before{opacity:.75}.btn-inverse-gray.focus:disabled:before,.btn-inverse-gray.focus.disabled:before,.btn-inverse-gray:focus:disabled:before,.btn-inverse-gray:focus.disabled:before{display:none}.btn-inverse-outline-gray{color:#fff;border-color:#fff}.btn-inverse-outline-gray:hover{color:#454545;background-color:#ebebeb;border-color:transparent}.btn-inverse-outline-gray.disabled,.btn-inverse-outline-gray:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-gray:not(:disabled):not(.disabled):active,.btn-inverse-outline-gray:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-gray.dropdown-toggle{color:#454545;background-color:#ebebeb;border-color:transparent}.btn-inverse-outline-gray.focus,.btn-inverse-outline-gray:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-gray.focus:before,.btn-inverse-outline-gray:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-gray.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-gray.focus.btn:before,.btn-inverse-outline-gray:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-gray.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-gray.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-gray.focus.btn:before,.btn-inverse-outline-gray:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-gray.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-gray.focus:active:before,.btn-inverse-outline-gray.focus.active:before,.btn-inverse-outline-gray:focus:active:before,.btn-inverse-outline-gray:focus.active:before{opacity:.75}.btn-inverse-outline-gray.focus:disabled:before,.btn-inverse-outline-gray.focus.disabled:before,.btn-inverse-outline-gray:focus:disabled:before,.btn-inverse-outline-gray:focus.disabled:before{display:none}.btn-accent-a,.btn-accent-a:hover{color:#fff;background-color:#00bbf9;border-color:#00bbf9}.btn-accent-a.disabled,.btn-accent-a:disabled{color:#fff;background-color:#00bbf9;border-color:#00bbf9}.btn-accent-a:not(:disabled):not(.disabled):active,.btn-accent-a:not(:disabled):not(.disabled).active,.show>.btn-accent-a.dropdown-toggle{color:#fff;background-color:#00bbf9;border-color:#00bbf9}.btn-accent-a.focus,.btn-accent-a:focus{position:relative;outline:0;box-shadow:none}.btn-accent-a.focus:before,.btn-accent-a:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #00BBF9;border-radius:calc(.375rem + 4px)}.btn-accent-a.focus.btn-lg:before,.btn-group-lg>.btn-accent-a.focus.btn:before,.btn-accent-a:focus.btn-lg:before,.btn-group-lg>.btn-accent-a.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-accent-a.focus.btn-sm:before,.btn-group-sm>.btn-accent-a.focus.btn:before,.btn-accent-a:focus.btn-sm:before,.btn-group-sm>.btn-accent-a.btn:focus:before{border-radius:.375rem}.btn-accent-a.focus:active:before,.btn-accent-a.focus.active:before,.btn-accent-a:focus:active:before,.btn-accent-a:focus.active:before{opacity:.75}.btn-accent-a.focus:disabled:before,.btn-accent-a.focus.disabled:before,.btn-accent-a:focus:disabled:before,.btn-accent-a:focus.disabled:before{display:none}.btn-outline-accent-a{color:#00bbf9;border-color:#00bbf9}.btn-outline-accent-a:hover{color:#00bbf9;background-color:#00bbf9;border-color:#00bbf9}.btn-outline-accent-a.disabled,.btn-outline-accent-a:disabled{color:#00bbf9;background-color:transparent;border-color:#00bbf9}.btn-outline-accent-a:not(:disabled):not(.disabled):active,.btn-outline-accent-a:not(:disabled):not(.disabled).active,.show>.btn-outline-accent-a.dropdown-toggle{color:#fff;background-color:#00bbf9;border-color:#00bbf9}.btn-outline-accent-a.focus,.btn-outline-accent-a:focus{position:relative;outline:0;box-shadow:none}.btn-outline-accent-a.focus:before,.btn-outline-accent-a:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #00BBF9;border-radius:calc(.375rem + 4px)}.btn-outline-accent-a.focus.btn-lg:before,.btn-group-lg>.btn-outline-accent-a.focus.btn:before,.btn-outline-accent-a:focus.btn-lg:before,.btn-group-lg>.btn-outline-accent-a.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-accent-a.focus.btn-sm:before,.btn-group-sm>.btn-outline-accent-a.focus.btn:before,.btn-outline-accent-a:focus.btn-sm:before,.btn-group-sm>.btn-outline-accent-a.btn:focus:before{border-radius:.375rem}.btn-outline-accent-a.focus:active:before,.btn-outline-accent-a.focus.active:before,.btn-outline-accent-a:focus:active:before,.btn-outline-accent-a:focus.active:before{opacity:.75}.btn-outline-accent-a.focus:disabled:before,.btn-outline-accent-a.focus.disabled:before,.btn-outline-accent-a:focus:disabled:before,.btn-outline-accent-a:focus.disabled:before{display:none}.btn-inverse-accent-a{color:#00bbf9;border-color:transparent;background-color:#fff}.btn-inverse-accent-a:not(:disabled):not(.disabled):hover{color:#009ed3;background-color:#ececec;border-color:transparent}.btn-inverse-accent-a.disabled,.btn-inverse-accent-a:disabled{color:#00bbf9;background-color:#fff}.btn-inverse-accent-a:not(:disabled):not(.disabled):active,.btn-inverse-accent-a:not(:disabled):not(.disabled).active,.show>.btn-inverse-accent-a.dropdown-toggle{color:#0095c6;background:#eee}.btn-inverse-accent-a.focus,.btn-inverse-accent-a:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-accent-a.focus:before,.btn-inverse-accent-a:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-accent-a.focus.btn-lg:before,.btn-group-lg>.btn-inverse-accent-a.focus.btn:before,.btn-inverse-accent-a:focus.btn-lg:before,.btn-group-lg>.btn-inverse-accent-a.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-accent-a.focus.btn-sm:before,.btn-group-sm>.btn-inverse-accent-a.focus.btn:before,.btn-inverse-accent-a:focus.btn-sm:before,.btn-group-sm>.btn-inverse-accent-a.btn:focus:before{border-radius:.375rem}.btn-inverse-accent-a.focus:active:before,.btn-inverse-accent-a.focus.active:before,.btn-inverse-accent-a:focus:active:before,.btn-inverse-accent-a:focus.active:before{opacity:.75}.btn-inverse-accent-a.focus:disabled:before,.btn-inverse-accent-a.focus.disabled:before,.btn-inverse-accent-a:focus:disabled:before,.btn-inverse-accent-a:focus.disabled:before{display:none}.btn-inverse-outline-accent-a{color:#fff;border-color:#fff}.btn-inverse-outline-accent-a:hover{color:#00bbf9;background-color:#00bbf9;border-color:transparent}.btn-inverse-outline-accent-a.disabled,.btn-inverse-outline-accent-a:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-accent-a:not(:disabled):not(.disabled):active,.btn-inverse-outline-accent-a:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-accent-a.dropdown-toggle{color:#fff;background-color:#00bbf9;border-color:transparent}.btn-inverse-outline-accent-a.focus,.btn-inverse-outline-accent-a:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-accent-a.focus:before,.btn-inverse-outline-accent-a:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-accent-a.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-accent-a.focus.btn:before,.btn-inverse-outline-accent-a:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-accent-a.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-accent-a.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-accent-a.focus.btn:before,.btn-inverse-outline-accent-a:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-accent-a.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-accent-a.focus:active:before,.btn-inverse-outline-accent-a.focus.active:before,.btn-inverse-outline-accent-a:focus:active:before,.btn-inverse-outline-accent-a:focus.active:before{opacity:.75}.btn-inverse-outline-accent-a.focus:disabled:before,.btn-inverse-outline-accent-a.focus.disabled:before,.btn-inverse-outline-accent-a:focus:disabled:before,.btn-inverse-outline-accent-a:focus.disabled:before{display:none}.btn-accent-b,.btn-accent-b:hover{color:#454545;background-color:#fe8;border-color:#fe8}.btn-accent-b.disabled,.btn-accent-b:disabled{color:#454545;background-color:#fe8;border-color:#fe8}.btn-accent-b:not(:disabled):not(.disabled):active,.btn-accent-b:not(:disabled):not(.disabled).active,.show>.btn-accent-b.dropdown-toggle{color:#454545;background-color:#fe8;border-color:#fe8}.btn-accent-b.focus,.btn-accent-b:focus{position:relative;outline:0;box-shadow:none}.btn-accent-b.focus:before,.btn-accent-b:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFEE88;border-radius:calc(.375rem + 4px)}.btn-accent-b.focus.btn-lg:before,.btn-group-lg>.btn-accent-b.focus.btn:before,.btn-accent-b:focus.btn-lg:before,.btn-group-lg>.btn-accent-b.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-accent-b.focus.btn-sm:before,.btn-group-sm>.btn-accent-b.focus.btn:before,.btn-accent-b:focus.btn-sm:before,.btn-group-sm>.btn-accent-b.btn:focus:before{border-radius:.375rem}.btn-accent-b.focus:active:before,.btn-accent-b.focus.active:before,.btn-accent-b:focus:active:before,.btn-accent-b:focus.active:before{opacity:.75}.btn-accent-b.focus:disabled:before,.btn-accent-b.focus.disabled:before,.btn-accent-b:focus:disabled:before,.btn-accent-b:focus.disabled:before{display:none}.btn-outline-accent-b{color:#fe8;border-color:#fe8}.btn-outline-accent-b:hover{color:#fe8;background-color:#fe8;border-color:#fe8}.btn-outline-accent-b.disabled,.btn-outline-accent-b:disabled{color:#fe8;background-color:transparent;border-color:#fe8}.btn-outline-accent-b:not(:disabled):not(.disabled):active,.btn-outline-accent-b:not(:disabled):not(.disabled).active,.show>.btn-outline-accent-b.dropdown-toggle{color:#454545;background-color:#fe8;border-color:#fe8}.btn-outline-accent-b.focus,.btn-outline-accent-b:focus{position:relative;outline:0;box-shadow:none}.btn-outline-accent-b.focus:before,.btn-outline-accent-b:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFEE88;border-radius:calc(.375rem + 4px)}.btn-outline-accent-b.focus.btn-lg:before,.btn-group-lg>.btn-outline-accent-b.focus.btn:before,.btn-outline-accent-b:focus.btn-lg:before,.btn-group-lg>.btn-outline-accent-b.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-outline-accent-b.focus.btn-sm:before,.btn-group-sm>.btn-outline-accent-b.focus.btn:before,.btn-outline-accent-b:focus.btn-sm:before,.btn-group-sm>.btn-outline-accent-b.btn:focus:before{border-radius:.375rem}.btn-outline-accent-b.focus:active:before,.btn-outline-accent-b.focus.active:before,.btn-outline-accent-b:focus:active:before,.btn-outline-accent-b:focus.active:before{opacity:.75}.btn-outline-accent-b.focus:disabled:before,.btn-outline-accent-b.focus.disabled:before,.btn-outline-accent-b:focus:disabled:before,.btn-outline-accent-b:focus.disabled:before{display:none}.btn-inverse-accent-b{color:#fe8;border-color:transparent;background-color:#454545}.btn-inverse-accent-b:not(:disabled):not(.disabled):hover{color:#ffe962;background-color:#323232;border-color:transparent}.btn-inverse-accent-b.disabled,.btn-inverse-accent-b:disabled{color:#fe8;background-color:#454545}.btn-inverse-accent-b:not(:disabled):not(.disabled):active,.btn-inverse-accent-b:not(:disabled):not(.disabled).active,.show>.btn-inverse-accent-b.dropdown-toggle{color:#ffe755;background:#eee}.btn-inverse-accent-b.focus,.btn-inverse-accent-b:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-accent-b.focus:before,.btn-inverse-accent-b:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-accent-b.focus.btn-lg:before,.btn-group-lg>.btn-inverse-accent-b.focus.btn:before,.btn-inverse-accent-b:focus.btn-lg:before,.btn-group-lg>.btn-inverse-accent-b.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-accent-b.focus.btn-sm:before,.btn-group-sm>.btn-inverse-accent-b.focus.btn:before,.btn-inverse-accent-b:focus.btn-sm:before,.btn-group-sm>.btn-inverse-accent-b.btn:focus:before{border-radius:.375rem}.btn-inverse-accent-b.focus:active:before,.btn-inverse-accent-b.focus.active:before,.btn-inverse-accent-b:focus:active:before,.btn-inverse-accent-b:focus.active:before{opacity:.75}.btn-inverse-accent-b.focus:disabled:before,.btn-inverse-accent-b.focus.disabled:before,.btn-inverse-accent-b:focus:disabled:before,.btn-inverse-accent-b:focus.disabled:before{display:none}.btn-inverse-outline-accent-b{color:#fff;border-color:#fff}.btn-inverse-outline-accent-b:hover{color:#fe8;background-color:#fe8;border-color:transparent}.btn-inverse-outline-accent-b.disabled,.btn-inverse-outline-accent-b:disabled{color:#fff;background-color:transparent;border-color:#fff}.btn-inverse-outline-accent-b:not(:disabled):not(.disabled):active,.btn-inverse-outline-accent-b:not(:disabled):not(.disabled).active,.show>.btn-inverse-outline-accent-b.dropdown-toggle{color:#454545;background-color:#fe8;border-color:transparent}.btn-inverse-outline-accent-b.focus,.btn-inverse-outline-accent-b:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-outline-accent-b.focus:before,.btn-inverse-outline-accent-b:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-outline-accent-b.focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-accent-b.focus.btn:before,.btn-inverse-outline-accent-b:focus.btn-lg:before,.btn-group-lg>.btn-inverse-outline-accent-b.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-outline-accent-b.focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-accent-b.focus.btn:before,.btn-inverse-outline-accent-b:focus.btn-sm:before,.btn-group-sm>.btn-inverse-outline-accent-b.btn:focus:before{border-radius:.375rem}.btn-inverse-outline-accent-b.focus:active:before,.btn-inverse-outline-accent-b.focus.active:before,.btn-inverse-outline-accent-b:focus:active:before,.btn-inverse-outline-accent-b:focus.active:before{opacity:.75}.btn-inverse-outline-accent-b.focus:disabled:before,.btn-inverse-outline-accent-b.focus.disabled:before,.btn-inverse-outline-accent-b:focus:disabled:before,.btn-inverse-outline-accent-b:focus.disabled:before{display:none}.btn-tertiary{color:#454545;background-color:transparent;border-color:transparent}.btn-tertiary:hover{color:#454545;background-color:#e1dddb;border-color:transparent}.btn-tertiary.disabled,.btn-tertiary:disabled{color:#454545;background-color:transparent;border-color:transparent}.btn-tertiary:not(:disabled):not(.disabled):active,.btn-tertiary:not(:disabled):not(.disabled).active,.show>.btn-tertiary.dropdown-toggle{color:#454545;background-color:#e1dddb;border-color:transparent}.btn-tertiary.disabled,.btn-tertiary:disabled{color:#454545}.btn-tertiary.focus,.btn-tertiary:focus{position:relative;outline:0;box-shadow:none}.btn-tertiary.focus:before,.btn-tertiary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #0A3055;border-radius:calc(.375rem + 4px)}.btn-tertiary.focus.btn-lg:before,.btn-group-lg>.btn-tertiary.focus.btn:before,.btn-tertiary:focus.btn-lg:before,.btn-group-lg>.btn-tertiary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-tertiary.focus.btn-sm:before,.btn-group-sm>.btn-tertiary.focus.btn:before,.btn-tertiary:focus.btn-sm:before,.btn-group-sm>.btn-tertiary.btn:focus:before{border-radius:.375rem}.btn-tertiary.focus:active:before,.btn-tertiary.focus.active:before,.btn-tertiary:focus:active:before,.btn-tertiary:focus.active:before{opacity:.75}.btn-tertiary.focus:disabled:before,.btn-tertiary.focus.disabled:before,.btn-tertiary:focus:disabled:before,.btn-tertiary:focus.disabled:before{display:none}.btn-inverse-tertiary{color:#fff;background-color:transparent;border-color:transparent}.btn-inverse-tertiary:hover{color:#fff;background-color:#ffffff1a;border-color:transparent}.btn-inverse-tertiary.disabled,.btn-inverse-tertiary:disabled{color:#fff;background-color:transparent;border-color:transparent}.btn-inverse-tertiary:not(:disabled):not(.disabled):active,.btn-inverse-tertiary:not(:disabled):not(.disabled).active,.show>.btn-inverse-tertiary.dropdown-toggle{color:#fff;background-color:#ffffff1a;border-color:transparent}.btn-inverse-tertiary.disabled,.btn-inverse-tertiary:disabled{color:#fff}.btn-inverse-tertiary.focus,.btn-inverse-tertiary:focus{position:relative;outline:0;box-shadow:none}.btn-inverse-tertiary.focus:before,.btn-inverse-tertiary:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #FFFFFF;border-radius:calc(.375rem + 4px)}.btn-inverse-tertiary.focus.btn-lg:before,.btn-group-lg>.btn-inverse-tertiary.focus.btn:before,.btn-inverse-tertiary:focus.btn-lg:before,.btn-group-lg>.btn-inverse-tertiary.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-inverse-tertiary.focus.btn-sm:before,.btn-group-sm>.btn-inverse-tertiary.focus.btn:before,.btn-inverse-tertiary:focus.btn-sm:before,.btn-group-sm>.btn-inverse-tertiary.btn:focus:before{border-radius:.375rem}.btn-inverse-tertiary.focus:active:before,.btn-inverse-tertiary.focus.active:before,.btn-inverse-tertiary:focus:active:before,.btn-inverse-tertiary:focus.active:before{opacity:.75}.btn-inverse-tertiary.focus:disabled:before,.btn-inverse-tertiary.focus.disabled:before,.btn-inverse-tertiary:focus:disabled:before,.btn-inverse-tertiary:focus.disabled:before{display:none}.btn-link{font-weight:400;color:#006daa;text-decoration:none}.btn-link:hover{color:#003c5e;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#707070;pointer-events:none}.btn-light.focus,.btn-light:focus,.btn-dark.focus,.btn-dark:focus{position:relative;outline:0;box-shadow:none}.btn-light.focus:before,.btn-light:focus:before,.btn-dark.focus:before,.btn-dark:focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #0A3055;border-radius:calc(.375rem + 4px)}.btn-light.focus.btn-lg:before,.btn-group-lg>.btn-light.focus.btn:before,.btn-light:focus.btn-lg:before,.btn-group-lg>.btn-light.btn:focus:before,.btn-dark.focus.btn-lg:before,.btn-group-lg>.btn-dark.focus.btn:before,.btn-dark:focus.btn-lg:before,.btn-group-lg>.btn-dark.btn:focus:before{border-radius:calc(.375rem + 4px)}.btn-light.focus.btn-sm:before,.btn-group-sm>.btn-light.focus.btn:before,.btn-light:focus.btn-sm:before,.btn-group-sm>.btn-light.btn:focus:before,.btn-dark.focus.btn-sm:before,.btn-group-sm>.btn-dark.focus.btn:before,.btn-dark:focus.btn-sm:before,.btn-group-sm>.btn-dark.btn:focus:before{border-radius:.375rem}.btn-light.focus:active:before,.btn-light.focus.active:before,.btn-light:focus:active:before,.btn-light:focus.active:before,.btn-dark.focus:active:before,.btn-dark.focus.active:before,.btn-dark:focus:active:before,.btn-dark:focus.active:before{opacity:.75}.btn-light.focus:disabled:before,.btn-light.focus.disabled:before,.btn-light:focus:disabled:before,.btn-light:focus.disabled:before,.btn-dark.focus:disabled:before,.btn-dark.focus.disabled:before,.btn-dark:focus:disabled:before,.btn-dark:focus.disabled:before{display:none}.btn-lg,.btn-group-lg>.btn{padding:.6875rem 1.25rem;font-size:1.325rem;line-height:1.5;border-radius:.425rem}.btn-sm,.btn-group-sm>.btn{padding:.4375rem .75rem;font-size:.875rem;line-height:1.4286;border-radius:.25rem}.btn-block{display:flex;width:100%}.btn-block+.btn-block{margin-top:.5rem}.btn-inline{line-height:calc(1.5556em - 2px);font-size:inherit;vertical-align:bottom;padding:0 .25em}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}[dir=rtl] .btn-group>.btn:not(:last-child):not(.dropdown-toggle),[dir=rtl] .btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .btn-group>.btn:not(:first-child),[dir=rtl] .btn-group>.btn-group:not(:first-child)>.btn{border-radius:.375rem 0 0 .375rem}[dir=rtl] .btn-group>.btn:first-child,[dir=rtl] .btn-group>.btn-group:first-child>.btn{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.width{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion: reduce){.collapsing.width{transition:none}}.card,.collapsible-card,.collapsible-card-lg{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.375rem}.card>hr,.collapsible-card>hr,.collapsible-card-lg>hr{margin-right:0;margin-left:0}.card>.list-group,.collapsible-card>.list-group,.collapsible-card-lg>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child,.collapsible-card>.list-group:first-child,.collapsible-card-lg>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px)}.card>.list-group:last-child,.collapsible-card>.list-group:last-child,.collapsible-card-lg>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.375rem - 1px);border-bottom-left-radius:calc(.375rem - 1px)}.card>.card-header+.list-group,.collapsible-card>.card-header+.list-group,.collapsible-card-lg>.card-header+.list-group,.card>.list-group+.card-footer,.collapsible-card>.list-group+.card-footer,.collapsible-card-lg>.list-group+.card-footer{border-top:0}.card-body,.collapsible-card .collapsible-body,.collapsible-card-lg .collapsible-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#00000008;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.375rem - 1px) calc(.375rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#00000008;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.375rem - 1px) calc(.375rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.375rem - 1px)}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.375rem - 1px);border-bottom-left-radius:calc(.375rem - 1px)}.card-deck .card,.card-deck .collapsible-card,.card-deck .collapsible-card-lg{margin-bottom:12px}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-12px;margin-left:-12px}.card-deck .card,.card-deck .collapsible-card,.card-deck .collapsible-card-lg{flex:1 0 0%;margin-right:12px;margin-bottom:0;margin-left:12px}}.card-group>.card,.card-group>.collapsible-card,.card-group>.collapsible-card-lg{margin-bottom:12px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card,.card-group>.collapsible-card,.card-group>.collapsible-card-lg{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.card-group>.collapsible-card+.card,.card-group>.collapsible-card-lg+.card,.card-group>.card+.collapsible-card,.card-group>.card+.collapsible-card-lg,.card-group>.collapsible-card+.collapsible-card,.card-group>.collapsible-card-lg+.collapsible-card,.card-group>.collapsible-card+.collapsible-card-lg,.card-group>.collapsible-card-lg+.collapsible-card-lg{margin-left:0;border-left:0}.card-group>.card:not(:last-child),.card-group>.collapsible-card:not(:last-child),.card-group>.collapsible-card-lg:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.collapsible-card:not(:last-child) .card-img-top,.card-group>.collapsible-card-lg:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header,.card-group>.collapsible-card:not(:last-child) .card-header,.card-group>.collapsible-card-lg:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.collapsible-card:not(:last-child) .card-img-bottom,.card-group>.collapsible-card-lg:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer,.card-group>.collapsible-card:not(:last-child) .card-footer,.card-group>.collapsible-card-lg:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child),.card-group>.collapsible-card:not(:first-child),.card-group>.collapsible-card-lg:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.collapsible-card:not(:first-child) .card-img-top,.card-group>.collapsible-card-lg:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header,.card-group>.collapsible-card:not(:first-child) .card-header,.card-group>.collapsible-card-lg:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.collapsible-card:not(:first-child) .card-img-bottom,.card-group>.collapsible-card-lg:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer,.card-group>.collapsible-card:not(:first-child) .card-footer,.card-group>.collapsible-card-lg:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card,.card-columns .collapsible-card,.card-columns .collapsible-card-lg{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns .collapsible-card,.card-columns .collapsible-card-lg{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card,.accordion>.collapsible-card,.accordion>.collapsible-card-lg{overflow:hidden}.accordion>.card:not(:last-of-type),.accordion>.collapsible-card:not(:last-of-type),.accordion>.collapsible-card-lg:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type),.accordion>.collapsible-card:not(:first-of-type),.accordion>.collapsible-card-lg:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header,.accordion>.collapsible-card>.card-header,.accordion>.collapsible-card-lg>.card-header{border-radius:0;margin-bottom:-1px}a .pgn__card,a.pgn__card{color:#454545;display:inline-block;text-decoration:none}.pgn__card-grid .row>div[class*=col-]{margin-bottom:1rem}.pgn__card-grid .row>div[class*=col-],.pgn__card-deck .row>div[class*=col-]{display:flex;flex:1 0 auto}.pgn__card-grid .row>div[class*=col-].pgn__card__disable-equal-column-heights,.pgn__card-deck .row>div[class*=col-].pgn__card__disable-equal-column-heights{display:block}.pgn__card-deck{position:relative;margin-bottom:1rem}.pgn__card-deck.pgn__card-deck-has-horizontal-scroll .pgn__card-deck-row{overflow-x:scroll}.pgn__card-deck .pgn__card-deck-row{overflow:hidden;flex-wrap:nowrap;padding-top:5px;padding-bottom:5px}.pgn__card-deck .pgn__card-deck-row:focus-visible{outline:2px solid #0A3055;border-radius:calc(5px + .375rem)}.pgn__card-carousel .pgn__card-carousel-title{margin-bottom:.5rem}.pgn__card-carousel .pgn__card-carousel-subtitle{font-size:.875rem;margin-bottom:.5rem}.pgn__card-carousel .pgn__card-carousel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.25rem}.pgn__card.clickable:focus,.pgn__card.clickable.focus{outline:none}.pgn__card.clickable:focus:before,.pgn__card.clickable.focus:before{content:"";position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;border:solid 2px #0A3055;border-radius:calc(5px + .375rem)}.pgn__card-dark.pgn__card.clickable:focus:before,.pgn__card-dark.pgn__card.clickable.focus:before{border:solid 2px #0A3055}.pgn__card{outline:none;box-shadow:0 .0625rem .125rem #00000026,0 .0625rem .25rem #00000026}.pgn__card.clickable:hover,.pgn__card.clickable:focus,.pgn__card.clickable.focus{cursor:pointer;box-shadow:0 .125rem .25rem #00000026,0 .125rem .5rem #00000026}.pgn__card.horizontal{flex-direction:row}.pgn__card .pgn__card-header{padding:0 1.25rem;display:flex;justify-content:space-between}.pgn__card .pgn__card-header .pgn__card-header-content{display:flex;flex-direction:column;margin-top:2rem;overflow:auto;text-align:start;width:100%}.pgn__card .pgn__card-header .pgn__card-header-title,.pgn__card .pgn__card-header .pgn__card-header-title-sm,.pgn__card .pgn__card-header .pgn__card-header-title-md{color:#000;font-weight:700;text-align:start}.pgn__card .pgn__card-header .pgn__card-header-title-sm{font-size:1.125rem}.pgn__card .pgn__card-header .pgn__card-header-title-md{font-size:1.375rem}.pgn__card .pgn__card-header .pgn__card-header-subtitle,.pgn__card .pgn__card-header .pgn__card-header-subtitle-sm,.pgn__card .pgn__card-header .pgn__card-header-subtitle-md{color:#454545;margin-top:.25rem}.pgn__card .pgn__card-header .pgn__card-header-subtitle-sm{font-size:.875rem}.pgn__card .pgn__card-header .pgn__card-header-subtitle-md{font-size:1.125rem}.pgn__card .pgn__card-header .pgn__card-header-actions{margin-top:1rem;margin-inline-start:1rem;flex-shrink:0}.pgn__card .pgn__card-header .pgn__card-header-loader{width:100%}.pgn__card .pgn__card-header .pgn__card-header-loader .react-loading-skeleton{margin-top:1.5rem}.pgn__card .pgn__card-footer{width:100%;padding:1.25rem;display:flex;align-items:center;justify-content:center}.pgn__card .pgn__card-footer.vertical{justify-content:flex-end;padding-top:0}.pgn__card .pgn__card-footer.vertical>*+*{margin-inline-start:.5rem}.pgn__card .pgn__card-footer .pgn__card-footer-loader{width:100%;margin-inline-start:0}.pgn__card .pgn__card-footer.vertical-stacked{flex-direction:column-reverse;padding-top:.75rem}.pgn__card .pgn__card-footer.vertical-stacked>*{width:100%;margin-top:.5rem}.pgn__card .pgn__card-footer.horizontal{flex-wrap:wrap}.pgn__card .pgn__card-footer.horizontal>:not(:last-child){margin-inline-end:.5rem}.pgn__card .pgn__card-footer.horizontal-stacked{flex-direction:column-reverse;padding-top:.75rem}.pgn__card .pgn__card-footer.horizontal-stacked>*{margin-top:.5rem}.pgn__card .pgn__card-footer .pgn__card-footer-text{color:#454545;order:1;font-size:75%}.pgn__card .pgn__card-footer .pgn__card-footer-text.vertical{margin-inline-end:auto;order:-1}.pgn__card .pgn__card-footer .pgn__card-footer-text.vertical-stacked{margin-right:auto}.pgn__card .pgn__card-footer .pgn__card-footer-text.horizontal{margin-top:1.25rem;width:100%;text-align:center}.pgn__card .pgn__card-footer .pgn__card-footer-text.horizontal-stacked{margin-top:1.25rem;width:100%;text-align:center;order:-1}.pgn__card .pgn__card-divider{border-top:1px solid #e9e6e4;height:0}.pgn__card .pgn__card-section{padding:1.25rem;flex-grow:1;text-align:start}.pgn__card .pgn__card-section.is-muted{background-color:#f8f7f6}.pgn__card .pgn__card-section .pgn__card-section-title{color:#000;font-weight:700;font-size:.875rem;margin-bottom:.75rem}.pgn__card .pgn__card-section .pgn__card-section-actions{display:flex;justify-content:flex-end;margin-top:.75rem}[dir=rtl] .pgn__card .pgn__card-section dd{margin-right:0;margin-left:40px}.pgn__card .pgn__card-image-cap{object-fit:cover;max-height:inherit;width:100%;border-top-left-radius:.375rem;border-top-right-radius:.375rem;display:none}.pgn__card .pgn__card-image-cap.show{display:block}.pgn__card .pgn__card-wrapper-image-cap{position:relative}.pgn__card .pgn__card-wrapper-image-cap.horizontal{max-width:240px;min-width:240px;overflow:hidden}.pgn__card .pgn__card-wrapper-image-cap.horizontal .pgn__card-image-cap{height:100%;max-width:inherit;border-radius:.375rem 0 0 .375rem;width:auto;object-fit:cover}.pgn__card .pgn__card-wrapper-image-cap.horizontal .pgn__card-logo-cap{inset-inline-start:.4375rem;bottom:.4375rem}.pgn__card .pgn__card-wrapper-image-cap.horizontal .pgn__card-image-cap-loader .react-loading-skeleton{border-top-right-radius:0;border-bottom-right-radius:0}.pgn__card .pgn__card-wrapper-image-cap.vertical{max-height:140px}.pgn__card .pgn__card-wrapper-image-cap .pgn__card-image-cap-loader .react-loading-skeleton{margin-bottom:-.313rem;position:relative;top:-.313rem;height:100%;border-bottom-right-radius:0;border-bottom-left-radius:0}.pgn__card .pgn__card-wrapper-image-cap .pgn__card-logo-cap{position:absolute;inset-inline-start:1.5rem;bottom:-1rem;width:7.25rem;height:4.125rem;border-radius:.25rem;box-shadow:0 .0625rem .125rem #00000026,0 .0625rem .25rem #00000026;padding:.5rem;background-color:#fff;display:none}.pgn__card .pgn__card-wrapper-image-cap .pgn__card-logo-cap.show{display:block}.pgn__card .pgn__card-status{box-shadow:none;margin-bottom:0;font-size:.875rem;line-height:1.5rem;text-align:start;position:relative;padding:.75rem 1.25rem;border:0 solid transparent;border-radius:0 0 .375rem .375rem}.pgn__card .pgn__card-status .pgn__card-status__content{display:flex}.pgn__card .pgn__card-status .pgn__card-status__message-content{flex-grow:1}.pgn__card .pgn__card-status .pgn__card-status__message-content>:last-child{margin-bottom:0}.pgn__card .pgn__card-status .pgn__card-status__actions{margin-top:1rem}.pgn__card .pgn__card-status .pgn__card-status__heading{font-size:1.125rem;color:#000;display:flex;font-weight:700;line-height:1.5rem;margin-bottom:.5rem}.pgn__card .pgn__card-status .pgn__card-status__content-icon{margin-inline-end:.8rem;width:1.5rem;height:1.5rem;flex-shrink:0}.pgn__card .pgn__card-status.pgn__card-status__primary{color:inherit;background-color:#f0f3f5;border-color:#c2cbd5}.pgn__card .pgn__card-status.pgn__card-status__primary .pgn__card-status__content-icon{color:#0a3055}.pgn__card .pgn__card-status.pgn__card-status__secondary{color:inherit;background-color:#f4f4f4;border-color:#d1d1d1}.pgn__card .pgn__card-status.pgn__card-status__secondary .pgn__card-status__content-icon{color:#454545}.pgn__card .pgn__card-status.pgn__card-status__brand{color:inherit;background-color:#f9f0f5;border-color:#e7bfd4}.pgn__card .pgn__card-status.pgn__card-status__brand .pgn__card-status__content-icon{color:#9d0054}.pgn__card .pgn__card-status.pgn__card-status__success{color:inherit;background-color:#f1f8f5;border-color:#c5e0d4}.pgn__card .pgn__card-status.pgn__card-status__success .pgn__card-status__content-icon{color:#178253}.pgn__card .pgn__card-status.pgn__card-status__info{color:inherit;background-color:#f0f6fa;border-color:#bfdbea}.pgn__card .pgn__card-status.pgn__card-status__info .pgn__card-status__content-icon{color:#006daa}.pgn__card .pgn__card-status.pgn__card-status__warning{color:inherit;background-color:#fffdf0;border-color:#fff6bf}.pgn__card .pgn__card-status.pgn__card-status__warning .pgn__card-status__content-icon{color:#ffd900}.pgn__card .pgn__card-status.pgn__card-status__danger{color:inherit;background-color:#fbf2f3;border-color:#f0cbce}.pgn__card .pgn__card-status.pgn__card-status__danger .pgn__card-status__content-icon{color:#c32d3a}.pgn__card .pgn__card-status.pgn__card-status__light{color:inherit;background-color:#fdfdfd;border-color:#f8f7f6}.pgn__card .pgn__card-status.pgn__card-status__light .pgn__card-status__content-icon{color:#e1dddb}.pgn__card .pgn__card-status.pgn__card-status__dark{color:inherit;background-color:#f2f3f3;border-color:#c9cfcb}.pgn__card .pgn__card-status.pgn__card-status__dark .pgn__card-status__content-icon{color:#273f2f}.pgn__card .pgn__card-status.pgn__card-status__gray{color:inherit;background-color:#ebebeb;border-color:#ccc}.pgn__card .pgn__card-status.pgn__card-status__gray .pgn__card-status__content-icon{color:#707070}.pgn__card .pgn__card-status.pgn__card-status__accent-a{color:inherit;background-color:#00bbf9;border-color:#00bbf9}.pgn__card .pgn__card-status.pgn__card-status__accent-a .pgn__card-status__content-icon{color:#00bbf9}.pgn__card .pgn__card-status.pgn__card-status__accent-b{color:inherit;background-color:#fe8;border-color:#fe8}.pgn__card .pgn__card-status.pgn__card-status__accent-b .pgn__card-status__content-icon{color:#fe8}.pgn__card .pgn__card-status.pgn__card-status__primary{color:#fff;background-color:#0a3055;border-color:#0a3055;box-shadow:0 0 0 1px #0a3055}.pgn__card .pgn__card-status.pgn__card-status__primary .pgn__card-status__content-icon{color:#fff}.pgn__card,.pgn__card-body{width:100%;border:0}.pgn__card.pgn__card-dark .pgn__card-footer,.pgn__card.pgn__card-dark .pgn__card-footer-text,.pgn__card.pgn__card-dark .pgn__card-section .pgn__card-section-title,.pgn__card.pgn__card-dark .pgn__card-section,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title-sm,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title-md,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-sm,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-md,.pgn__card.pgn__card-dark .pgn__card-header,.pgn__card .pgn__card.pgn__card-dark,.pgn__card .pgn__card-body.pgn__card-dark,.pgn__card-body.pgn__card-dark .pgn__card-footer,.pgn__card-body.pgn__card-dark .pgn__card-footer-text,.pgn__card-body.pgn__card-dark .pgn__card-section .pgn__card-section-title,.pgn__card-body.pgn__card-dark .pgn__card-section,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title-sm,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title-md,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-sm,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-md,.pgn__card-body.pgn__card-dark .pgn__card-header,.pgn__card-body .pgn__card.pgn__card-dark,.pgn__card-body .pgn__card-body.pgn__card-dark,.pgn__card.pgn__card-dark .pgn__card-footer a,.pgn__card.pgn__card-dark .pgn__card-footer-text a,.pgn__card.pgn__card-dark .pgn__card-section .pgn__card-section-title a,.pgn__card.pgn__card-dark .pgn__card-section a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title-sm a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-title-md a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-sm a,.pgn__card.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-md a,.pgn__card.pgn__card-dark .pgn__card-header a,.pgn__card .pgn__card.pgn__card-dark a,.pgn__card .pgn__card-body.pgn__card-dark a,.pgn__card-body.pgn__card-dark .pgn__card-footer a,.pgn__card-body.pgn__card-dark .pgn__card-footer-text a,.pgn__card-body.pgn__card-dark .pgn__card-section .pgn__card-section-title a,.pgn__card-body.pgn__card-dark .pgn__card-section a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title-sm a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-title-md a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-sm a,.pgn__card-body.pgn__card-dark .pgn__card-header .pgn__card-header-subtitle-md a,.pgn__card-body.pgn__card-dark .pgn__card-header a,.pgn__card-body .pgn__card.pgn__card-dark a,.pgn__card-body .pgn__card-body.pgn__card-dark a{color:#fff}.pgn__card.pgn__card-dark,.pgn__card-body.pgn__card-dark{background-color:#0a3055}.pgn__card.pgn__card-muted,.pgn__card-body.pgn__card-muted{background-color:#f8f7f6}@media (max-width: 576px){.pgn__card-footer.horizontal>:not(:last-child){margin-inline-end:0}.pgn__card-footer .btn{width:100%;margin:.625rem 0 0;margin-inline-end:0}.pgn__action-row .btn:not(:last-child){margin-bottom:.3125rem}.pgn__action-row>*+*{margin-inline-start:0}.pgn__action-row-stacked .btn,.pgn__card-section .btn{width:100%}}.collapsible-card,.collapsible-card-lg{border-radius:0}.collapsible-card .collapsible-trigger,.collapsible-card-lg .collapsible-trigger{padding:.5rem;border-radius:calc(.375rem - 1px);border-bottom:1px solid transparent;transition:border-color .1s ease .15s;cursor:pointer;display:flex;align-items:center;justify-content:space-between;text-align:start}.collapsible-card .collapsible-trigger>*,.collapsible-card-lg .collapsible-trigger>*{margin-bottom:0;margin-top:0}.collapsible-card .collapsible-trigger[aria-expanded=true],.collapsible-card-lg .collapsible-trigger[aria-expanded=true]{border-radius:calc(.375rem - 1px) calc(.375rem - 1px) 0 0;border-color:#00000020;transition:none;text-align:start}.collapsible-card .collapsible-body,.collapsible-card-lg .collapsible-body{padding:.5rem .5rem .5rem .75rem;text-align:start}.collapsible-card .collapsible-body>*:last-child,.collapsible-card-lg .collapsible-body>*:last-child{margin-bottom:0}.collapsible-card .collapsible-icon,.collapsible-card-lg .collapsible-icon{margin-inline-start:2.5rem}.collapsible-card-lg .collapsible-trigger,.collapsible-card-lg .collapsible-body{padding:.75rem 1.25rem}.collapsible-basic .collapsible-trigger{display:flex;cursor:pointer;align-items:center;text-decoration:underline;color:#0a3055;padding:.5rem}.collapsible-basic .collapsible-body{padding:.5rem;text-align:start}.collapsible-basic .collapsible-body.collapsing{transition:height .3s ease}.collapsible-basic .collapsible-icon{margin-left:.625rem}.xblock-accordion .d-flex{display:flex}.xblock-accordion .justify-content-end{justify-content:flex-end}.xblock-accordion .mb-2{margin-bottom:.5rem}.xblock-accordion .px-3,.xblock-accordion .py-2{padding-left:.75rem;padding-right:.75rem}.xblock-accordion .rounded-0{border-radius:0} diff --git a/accordion/public/student-ui.js b/accordion/public/student-ui.js new file mode 100644 index 0000000..55f4928 --- /dev/null +++ b/accordion/public/student-ui.js @@ -0,0 +1,7313 @@ +function Po(e) { + return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; +} +var ia = { exports: {} }, dr = {}; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +var Tu = Object.getOwnPropertySymbols, Pc = Object.prototype.hasOwnProperty, kc = Object.prototype.propertyIsEnumerable; +function Tc(e) { + if (e == null) + throw new TypeError("Object.assign cannot be called with null or undefined"); + return Object(e); +} +function Nc() { + try { + if (!Object.assign) + return !1; + var e = new String("abc"); + if (e[5] = "de", Object.getOwnPropertyNames(e)[0] === "5") + return !1; + for (var t = {}, n = 0; n < 10; n++) + t["_" + String.fromCharCode(n)] = n; + var r = Object.getOwnPropertyNames(t).map(function(i) { + return t[i]; + }); + if (r.join("") !== "0123456789") + return !1; + var o = {}; + return "abcdefghijklmnopqrst".split("").forEach(function(i) { + o[i] = i; + }), Object.keys(Object.assign({}, o)).join("") === "abcdefghijklmnopqrst"; + } catch { + return !1; + } +} +var la = Nc() ? Object.assign : function(e, t) { + for (var n, r = Tc(e), o, i = 1; i < arguments.length; i++) { + n = Object(arguments[i]); + for (var l in n) + Pc.call(n, l) && (r[l] = n[l]); + if (Tu) { + o = Tu(n); + for (var u = 0; u < o.length; u++) + kc.call(n, o[u]) && (r[o[u]] = n[o[u]]); + } + } + return r; +}, ua = { exports: {} }, $ = {}; +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var yl = la, ln = 60103, sa = 60106; +$.Fragment = 60107; +$.StrictMode = 60108; +$.Profiler = 60114; +var aa = 60109, fa = 60110, ca = 60112; +$.Suspense = 60113; +var da = 60115, pa = 60116; +if (typeof Symbol == "function" && Symbol.for) { + var we = Symbol.for; + ln = we("react.element"), sa = we("react.portal"), $.Fragment = we("react.fragment"), $.StrictMode = we("react.strict_mode"), $.Profiler = we("react.profiler"), aa = we("react.provider"), fa = we("react.context"), ca = we("react.forward_ref"), $.Suspense = we("react.suspense"), da = we("react.memo"), pa = we("react.lazy"); +} +var Nu = typeof Symbol == "function" && Symbol.iterator; +function jc(e) { + return e === null || typeof e != "object" ? null : (e = Nu && e[Nu] || e["@@iterator"], typeof e == "function" ? e : null); +} +function pr(e) { + for (var t = "https://reactjs.org/docs/error-decoder.html?invariant=" + e, n = 1; n < arguments.length; n++) t += "&args[]=" + encodeURIComponent(arguments[n]); + return "Minified React error #" + e + "; visit " + t + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."; +} +var ma = { isMounted: function() { + return !1; +}, enqueueForceUpdate: function() { +}, enqueueReplaceState: function() { +}, enqueueSetState: function() { +} }, ha = {}; +function un(e, t, n) { + this.props = e, this.context = t, this.refs = ha, this.updater = n || ma; +} +un.prototype.isReactComponent = {}; +un.prototype.setState = function(e, t) { + if (typeof e != "object" && typeof e != "function" && e != null) throw Error(pr(85)); + this.updater.enqueueSetState(this, e, t, "setState"); +}; +un.prototype.forceUpdate = function(e) { + this.updater.enqueueForceUpdate(this, e, "forceUpdate"); +}; +function va() { +} +va.prototype = un.prototype; +function gl(e, t, n) { + this.props = e, this.context = t, this.refs = ha, this.updater = n || ma; +} +var wl = gl.prototype = new va(); +wl.constructor = gl; +yl(wl, un.prototype); +wl.isPureReactComponent = !0; +var El = { current: null }, ya = Object.prototype.hasOwnProperty, ga = { key: !0, ref: !0, __self: !0, __source: !0 }; +function wa(e, t, n) { + var r, o = {}, i = null, l = null; + if (t != null) for (r in t.ref !== void 0 && (l = t.ref), t.key !== void 0 && (i = "" + t.key), t) ya.call(t, r) && !ga.hasOwnProperty(r) && (o[r] = t[r]); + var u = arguments.length - 2; + if (u === 1) o.children = n; + else if (1 < u) { + for (var s = Array(u), a = 0; a < u; a++) s[a] = arguments[a + 2]; + o.children = s; + } + if (e && e.defaultProps) for (r in u = e.defaultProps, u) o[r] === void 0 && (o[r] = u[r]); + return { $$typeof: ln, type: e, key: i, ref: l, props: o, _owner: El.current }; +} +function Rc(e, t) { + return { $$typeof: ln, type: e.type, key: t, ref: e.ref, props: e.props, _owner: e._owner }; +} +function Sl(e) { + return typeof e == "object" && e !== null && e.$$typeof === ln; +} +function Dc(e) { + var t = { "=": "=0", ":": "=2" }; + return "$" + e.replace(/[=:]/g, function(n) { + return t[n]; + }); +} +var ju = /\/+/g; +function Ko(e, t) { + return typeof e == "object" && e !== null && e.key != null ? Dc("" + e.key) : t.toString(36); +} +function $r(e, t, n, r, o) { + var i = typeof e; + (i === "undefined" || i === "boolean") && (e = null); + var l = !1; + if (e === null) l = !0; + else switch (i) { + case "string": + case "number": + l = !0; + break; + case "object": + switch (e.$$typeof) { + case ln: + case sa: + l = !0; + } + } + if (l) return l = e, o = o(l), e = r === "" ? "." + Ko(l, 0) : r, Array.isArray(o) ? (n = "", e != null && (n = e.replace(ju, "$&/") + "/"), $r(o, t, n, "", function(a) { + return a; + })) : o != null && (Sl(o) && (o = Rc(o, n + (!o.key || l && l.key === o.key ? "" : ("" + o.key).replace(ju, "$&/") + "/") + e)), t.push(o)), 1; + if (l = 0, r = r === "" ? "." : r + ":", Array.isArray(e)) for (var u = 0; u < e.length; u++) { + i = e[u]; + var s = r + Ko(i, u); + l += $r(i, t, n, s, o); + } + else if (s = jc(e), typeof s == "function") for (e = s.call(e), u = 0; !(i = e.next()).done; ) i = i.value, s = r + Ko(i, u++), l += $r(i, t, n, s, o); + else if (i === "object") throw t = "" + e, Error(pr(31, t === "[object Object]" ? "object with keys {" + Object.keys(e).join(", ") + "}" : t)); + return l; +} +function Er(e, t, n) { + if (e == null) return e; + var r = [], o = 0; + return $r(e, r, "", "", function(i) { + return t.call(n, i, o++); + }), r; +} +function Lc(e) { + if (e._status === -1) { + var t = e._result; + t = t(), e._status = 0, e._result = t, t.then(function(n) { + e._status === 0 && (n = n.default, e._status = 1, e._result = n); + }, function(n) { + e._status === 0 && (e._status = 2, e._result = n); + }); + } + if (e._status === 1) return e._result; + throw e._result; +} +var Ea = { current: null }; +function ze() { + var e = Ea.current; + if (e === null) throw Error(pr(321)); + return e; +} +var $c = { ReactCurrentDispatcher: Ea, ReactCurrentBatchConfig: { transition: 0 }, ReactCurrentOwner: El, IsSomeRendererActing: { current: !1 }, assign: yl }; +$.Children = { map: Er, forEach: function(e, t, n) { + Er(e, function() { + t.apply(this, arguments); + }, n); +}, count: function(e) { + var t = 0; + return Er(e, function() { + t++; + }), t; +}, toArray: function(e) { + return Er(e, function(t) { + return t; + }) || []; +}, only: function(e) { + if (!Sl(e)) throw Error(pr(143)); + return e; +} }; +$.Component = un; +$.PureComponent = gl; +$.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = $c; +$.cloneElement = function(e, t, n) { + if (e == null) throw Error(pr(267, e)); + var r = yl({}, e.props), o = e.key, i = e.ref, l = e._owner; + if (t != null) { + if (t.ref !== void 0 && (i = t.ref, l = El.current), t.key !== void 0 && (o = "" + t.key), e.type && e.type.defaultProps) var u = e.type.defaultProps; + for (s in t) ya.call(t, s) && !ga.hasOwnProperty(s) && (r[s] = t[s] === void 0 && u !== void 0 ? u[s] : t[s]); + } + var s = arguments.length - 2; + if (s === 1) r.children = n; + else if (1 < s) { + u = Array(s); + for (var a = 0; a < s; a++) u[a] = arguments[a + 2]; + r.children = u; + } + return { + $$typeof: ln, + type: e.type, + key: o, + ref: i, + props: r, + _owner: l + }; +}; +$.createContext = function(e, t) { + return t === void 0 && (t = null), e = { $$typeof: fa, _calculateChangedBits: t, _currentValue: e, _currentValue2: e, _threadCount: 0, Provider: null, Consumer: null }, e.Provider = { $$typeof: aa, _context: e }, e.Consumer = e; +}; +$.createElement = wa; +$.createFactory = function(e) { + var t = wa.bind(null, e); + return t.type = e, t; +}; +$.createRef = function() { + return { current: null }; +}; +$.forwardRef = function(e) { + return { $$typeof: ca, render: e }; +}; +$.isValidElement = Sl; +$.lazy = function(e) { + return { $$typeof: pa, _payload: { _status: -1, _result: e }, _init: Lc }; +}; +$.memo = function(e, t) { + return { $$typeof: da, type: e, compare: t === void 0 ? null : t }; +}; +$.useCallback = function(e, t) { + return ze().useCallback(e, t); +}; +$.useContext = function(e, t) { + return ze().useContext(e, t); +}; +$.useDebugValue = function() { +}; +$.useEffect = function(e, t) { + return ze().useEffect(e, t); +}; +$.useImperativeHandle = function(e, t, n) { + return ze().useImperativeHandle(e, t, n); +}; +$.useLayoutEffect = function(e, t) { + return ze().useLayoutEffect(e, t); +}; +$.useMemo = function(e, t) { + return ze().useMemo(e, t); +}; +$.useReducer = function(e, t, n) { + return ze().useReducer(e, t, n); +}; +$.useRef = function(e) { + return ze().useRef(e); +}; +$.useState = function(e) { + return ze().useState(e); +}; +$.version = "17.0.2"; +ua.exports = $; +var M = ua.exports; +const P = /* @__PURE__ */ Po(M); +/** @license React v17.0.2 + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var Mc = M, Sa = 60103; +dr.Fragment = 60107; +if (typeof Symbol == "function" && Symbol.for) { + var Ru = Symbol.for; + Sa = Ru("react.element"), dr.Fragment = Ru("react.fragment"); +} +var zc = Mc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, Ic = Object.prototype.hasOwnProperty, Fc = { key: !0, ref: !0, __self: !0, __source: !0 }; +function Oa(e, t, n) { + var r, o = {}, i = null, l = null; + n !== void 0 && (i = "" + n), t.key !== void 0 && (i = "" + t.key), t.ref !== void 0 && (l = t.ref); + for (r in t) Ic.call(t, r) && !Fc.hasOwnProperty(r) && (o[r] = t[r]); + if (e && e.defaultProps) for (r in t = e.defaultProps, t) o[r] === void 0 && (o[r] = t[r]); + return { $$typeof: Sa, type: e, key: i, ref: l, props: o, _owner: zc.current }; +} +dr.jsx = Oa; +dr.jsxs = Oa; +ia.exports = dr; +var le = ia.exports, xa = { exports: {} }, ge = {}, Ca = { exports: {} }, _a = {}; +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +(function(e) { + var t, n, r, o; + if (typeof performance == "object" && typeof performance.now == "function") { + var i = performance; + e.unstable_now = function() { + return i.now(); + }; + } else { + var l = Date, u = l.now(); + e.unstable_now = function() { + return l.now() - u; + }; + } + if (typeof window > "u" || typeof MessageChannel != "function") { + var s = null, a = null, p = function() { + if (s !== null) try { + var O = e.unstable_now(); + s(!0, O), s = null; + } catch (R) { + throw setTimeout(p, 0), R; + } + }; + t = function(O) { + s !== null ? setTimeout(t, 0, O) : (s = O, setTimeout(p, 0)); + }, n = function(O, R) { + a = setTimeout(O, R); + }, r = function() { + clearTimeout(a); + }, e.unstable_shouldYield = function() { + return !1; + }, o = e.unstable_forceFrameRate = function() { + }; + } else { + var w = window.setTimeout, m = window.clearTimeout; + if (typeof console < "u") { + var E = window.cancelAnimationFrame; + typeof window.requestAnimationFrame != "function" && console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"), typeof E != "function" && console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"); + } + var x = !1, _ = null, c = -1, f = 5, d = 0; + e.unstable_shouldYield = function() { + return e.unstable_now() >= d; + }, o = function() { + }, e.unstable_forceFrameRate = function(O) { + 0 > O || 125 < O ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : f = 0 < O ? Math.floor(1e3 / O) : 5; + }; + var v = new MessageChannel(), h = v.port2; + v.port1.onmessage = function() { + if (_ !== null) { + var O = e.unstable_now(); + d = O + f; + try { + _(!0, O) ? h.postMessage(null) : (x = !1, _ = null); + } catch (R) { + throw h.postMessage(null), R; + } + } else x = !1; + }, t = function(O) { + _ = O, x || (x = !0, h.postMessage(null)); + }, n = function(O, R) { + c = w(function() { + O(e.unstable_now()); + }, R); + }, r = function() { + m(c), c = -1; + }; + } + function T(O, R) { + var L = O.length; + O.push(R); + e: for (; ; ) { + var B = L - 1 >>> 1, Y = O[B]; + if (Y !== void 0 && 0 < D(Y, R)) O[B] = R, O[L] = Y, L = B; + else break e; + } + } + function S(O) { + return O = O[0], O === void 0 ? null : O; + } + function N(O) { + var R = O[0]; + if (R !== void 0) { + var L = O.pop(); + if (L !== R) { + O[0] = L; + e: for (var B = 0, Y = O.length; B < Y; ) { + var st = 2 * (B + 1) - 1, at = O[st], mn = st + 1, Tt = O[mn]; + if (at !== void 0 && 0 > D(at, L)) Tt !== void 0 && 0 > D(Tt, at) ? (O[B] = Tt, O[mn] = L, B = mn) : (O[B] = at, O[st] = L, B = st); + else if (Tt !== void 0 && 0 > D(Tt, L)) O[B] = Tt, O[mn] = L, B = mn; + else break e; + } + } + return R; + } + return null; + } + function D(O, R) { + var L = O.sortIndex - R.sortIndex; + return L !== 0 ? L : O.id - R.id; + } + var k = [], Q = [], Bo = 1, de = null, J = 3, wr = !1, ut = !1, pn = !1; + function Vo(O) { + for (var R = S(Q); R !== null; ) { + if (R.callback === null) N(Q); + else if (R.startTime <= O) N(Q), R.sortIndex = R.expirationTime, T(k, R); + else break; + R = S(Q); + } + } + function Wo(O) { + if (pn = !1, Vo(O), !ut) if (S(k) !== null) ut = !0, t(Ho); + else { + var R = S(Q); + R !== null && n(Wo, R.startTime - O); + } + } + function Ho(O, R) { + ut = !1, pn && (pn = !1, r()), wr = !0; + var L = J; + try { + for (Vo(R), de = S(k); de !== null && (!(de.expirationTime > R) || O && !e.unstable_shouldYield()); ) { + var B = de.callback; + if (typeof B == "function") { + de.callback = null, J = de.priorityLevel; + var Y = B(de.expirationTime <= R); + R = e.unstable_now(), typeof Y == "function" ? de.callback = Y : de === S(k) && N(k), Vo(R); + } else N(k); + de = S(k); + } + if (de !== null) var st = !0; + else { + var at = S(Q); + at !== null && n(Wo, at.startTime - R), st = !1; + } + return st; + } finally { + de = null, J = L, wr = !1; + } + } + var _c = o; + e.unstable_IdlePriority = 5, e.unstable_ImmediatePriority = 1, e.unstable_LowPriority = 4, e.unstable_NormalPriority = 3, e.unstable_Profiling = null, e.unstable_UserBlockingPriority = 2, e.unstable_cancelCallback = function(O) { + O.callback = null; + }, e.unstable_continueExecution = function() { + ut || wr || (ut = !0, t(Ho)); + }, e.unstable_getCurrentPriorityLevel = function() { + return J; + }, e.unstable_getFirstCallbackNode = function() { + return S(k); + }, e.unstable_next = function(O) { + switch (J) { + case 1: + case 2: + case 3: + var R = 3; + break; + default: + R = J; + } + var L = J; + J = R; + try { + return O(); + } finally { + J = L; + } + }, e.unstable_pauseExecution = function() { + }, e.unstable_requestPaint = _c, e.unstable_runWithPriority = function(O, R) { + switch (O) { + case 1: + case 2: + case 3: + case 4: + case 5: + break; + default: + O = 3; + } + var L = J; + J = O; + try { + return R(); + } finally { + J = L; + } + }, e.unstable_scheduleCallback = function(O, R, L) { + var B = e.unstable_now(); + switch (typeof L == "object" && L !== null ? (L = L.delay, L = typeof L == "number" && 0 < L ? B + L : B) : L = B, O) { + case 1: + var Y = -1; + break; + case 2: + Y = 250; + break; + case 5: + Y = 1073741823; + break; + case 4: + Y = 1e4; + break; + default: + Y = 5e3; + } + return Y = L + Y, O = { id: Bo++, callback: R, priorityLevel: O, startTime: L, expirationTime: Y, sortIndex: -1 }, L > B ? (O.sortIndex = L, T(Q, O), S(k) === null && O === S(Q) && (pn ? r() : pn = !0, n(Wo, L - B))) : (O.sortIndex = Y, T(k, O), ut || wr || (ut = !0, t(Ho))), O; + }, e.unstable_wrapCallback = function(O) { + var R = J; + return function() { + var L = J; + J = R; + try { + return O.apply(this, arguments); + } finally { + J = L; + } + }; + }; +})(_a); +Ca.exports = _a; +var bc = Ca.exports; +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var ko = M, b = la, K = bc; +function y(e) { + for (var t = "https://reactjs.org/docs/error-decoder.html?invariant=" + e, n = 1; n < arguments.length; n++) t += "&args[]=" + encodeURIComponent(arguments[n]); + return "Minified React error #" + e + "; visit " + t + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."; +} +if (!ko) throw Error(y(227)); +var Pa = /* @__PURE__ */ new Set(), Kn = {}; +function Ct(e, t) { + Zt(e, t), Zt(e + "Capture", t); +} +function Zt(e, t) { + for (Kn[e] = t, e = 0; e < t.length; e++) Pa.add(t[e]); +} +var Me = !(typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u"), Uc = /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, Du = Object.prototype.hasOwnProperty, Lu = {}, $u = {}; +function Ac(e) { + return Du.call($u, e) ? !0 : Du.call(Lu, e) ? !1 : Uc.test(e) ? $u[e] = !0 : (Lu[e] = !0, !1); +} +function Bc(e, t, n, r) { + if (n !== null && n.type === 0) return !1; + switch (typeof t) { + case "function": + case "symbol": + return !0; + case "boolean": + return r ? !1 : n !== null ? !n.acceptsBooleans : (e = e.toLowerCase().slice(0, 5), e !== "data-" && e !== "aria-"); + default: + return !1; + } +} +function Vc(e, t, n, r) { + if (t === null || typeof t > "u" || Bc(e, t, n, r)) return !0; + if (r) return !1; + if (n !== null) switch (n.type) { + case 3: + return !t; + case 4: + return t === !1; + case 5: + return isNaN(t); + case 6: + return isNaN(t) || 1 > t; + } + return !1; +} +function oe(e, t, n, r, o, i, l) { + this.acceptsBooleans = t === 2 || t === 3 || t === 4, this.attributeName = r, this.attributeNamespace = o, this.mustUseProperty = n, this.propertyName = e, this.type = t, this.sanitizeURL = i, this.removeEmptyString = l; +} +var Z = {}; +"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e) { + Z[e] = new oe(e, 0, !1, e, null, !1, !1); +}); +[["acceptCharset", "accept-charset"], ["className", "class"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"]].forEach(function(e) { + var t = e[0]; + Z[t] = new oe(t, 1, !1, e[1], null, !1, !1); +}); +["contentEditable", "draggable", "spellCheck", "value"].forEach(function(e) { + Z[e] = new oe(e, 2, !1, e.toLowerCase(), null, !1, !1); +}); +["autoReverse", "externalResourcesRequired", "focusable", "preserveAlpha"].forEach(function(e) { + Z[e] = new oe(e, 2, !1, e, null, !1, !1); +}); +"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e) { + Z[e] = new oe(e, 3, !1, e.toLowerCase(), null, !1, !1); +}); +["checked", "multiple", "muted", "selected"].forEach(function(e) { + Z[e] = new oe(e, 3, !0, e, null, !1, !1); +}); +["capture", "download"].forEach(function(e) { + Z[e] = new oe(e, 4, !1, e, null, !1, !1); +}); +["cols", "rows", "size", "span"].forEach(function(e) { + Z[e] = new oe(e, 6, !1, e, null, !1, !1); +}); +["rowSpan", "start"].forEach(function(e) { + Z[e] = new oe(e, 5, !1, e.toLowerCase(), null, !1, !1); +}); +var Ol = /[\-:]([a-z])/g; +function xl(e) { + return e[1].toUpperCase(); +} +"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e) { + var t = e.replace( + Ol, + xl + ); + Z[t] = new oe(t, 1, !1, e, null, !1, !1); +}); +"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e) { + var t = e.replace(Ol, xl); + Z[t] = new oe(t, 1, !1, e, "http://www.w3.org/1999/xlink", !1, !1); +}); +["xml:base", "xml:lang", "xml:space"].forEach(function(e) { + var t = e.replace(Ol, xl); + Z[t] = new oe(t, 1, !1, e, "http://www.w3.org/XML/1998/namespace", !1, !1); +}); +["tabIndex", "crossOrigin"].forEach(function(e) { + Z[e] = new oe(e, 1, !1, e.toLowerCase(), null, !1, !1); +}); +Z.xlinkHref = new oe("xlinkHref", 1, !1, "xlink:href", "http://www.w3.org/1999/xlink", !0, !1); +["src", "href", "action", "formAction"].forEach(function(e) { + Z[e] = new oe(e, 1, !1, e.toLowerCase(), null, !0, !0); +}); +function Cl(e, t, n, r) { + var o = Z.hasOwnProperty(t) ? Z[t] : null, i = o !== null ? o.type === 0 : r ? !1 : !(!(2 < t.length) || t[0] !== "o" && t[0] !== "O" || t[1] !== "n" && t[1] !== "N"); + i || (Vc(t, n, o, r) && (n = null), r || o === null ? Ac(t) && (n === null ? e.removeAttribute(t) : e.setAttribute(t, "" + n)) : o.mustUseProperty ? e[o.propertyName] = n === null ? o.type === 3 ? !1 : "" : n : (t = o.attributeName, r = o.attributeNamespace, n === null ? e.removeAttribute(t) : (o = o.type, n = o === 3 || o === 4 && n === !0 ? "" : "" + n, r ? e.setAttributeNS(r, t, n) : e.setAttribute(t, n)))); +} +var _t = ko.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, kn = 60103, pt = 60106, Ae = 60107, _l = 60108, $n = 60114, Pl = 60109, kl = 60110, To = 60112, Mn = 60113, Kr = 60120, No = 60115, Tl = 60116, Nl = 60121, jl = 60128, ka = 60129, Rl = 60130, Ei = 60131; +if (typeof Symbol == "function" && Symbol.for) { + var H = Symbol.for; + kn = H("react.element"), pt = H("react.portal"), Ae = H("react.fragment"), _l = H("react.strict_mode"), $n = H("react.profiler"), Pl = H("react.provider"), kl = H("react.context"), To = H("react.forward_ref"), Mn = H("react.suspense"), Kr = H("react.suspense_list"), No = H("react.memo"), Tl = H("react.lazy"), Nl = H("react.block"), H("react.scope"), jl = H("react.opaque.id"), ka = H("react.debug_trace_mode"), Rl = H("react.offscreen"), Ei = H("react.legacy_hidden"); +} +var Mu = typeof Symbol == "function" && Symbol.iterator; +function hn(e) { + return e === null || typeof e != "object" ? null : (e = Mu && e[Mu] || e["@@iterator"], typeof e == "function" ? e : null); +} +var Qo; +function Tn(e) { + if (Qo === void 0) try { + throw Error(); + } catch (n) { + var t = n.stack.trim().match(/\n( *(at )?)/); + Qo = t && t[1] || ""; + } + return ` +` + Qo + e; +} +var Yo = !1; +function Sr(e, t) { + if (!e || Yo) return ""; + Yo = !0; + var n = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + if (t) if (t = function() { + throw Error(); + }, Object.defineProperty(t.prototype, "props", { set: function() { + throw Error(); + } }), typeof Reflect == "object" && Reflect.construct) { + try { + Reflect.construct(t, []); + } catch (s) { + var r = s; + } + Reflect.construct(e, [], t); + } else { + try { + t.call(); + } catch (s) { + r = s; + } + e.call(t.prototype); + } + else { + try { + throw Error(); + } catch (s) { + r = s; + } + e(); + } + } catch (s) { + if (s && r && typeof s.stack == "string") { + for (var o = s.stack.split(` +`), i = r.stack.split(` +`), l = o.length - 1, u = i.length - 1; 1 <= l && 0 <= u && o[l] !== i[u]; ) u--; + for (; 1 <= l && 0 <= u; l--, u--) if (o[l] !== i[u]) { + if (l !== 1 || u !== 1) + do + if (l--, u--, 0 > u || o[l] !== i[u]) return ` +` + o[l].replace(" at new ", " at "); + while (1 <= l && 0 <= u); + break; + } + } + } finally { + Yo = !1, Error.prepareStackTrace = n; + } + return (e = e ? e.displayName || e.name : "") ? Tn(e) : ""; +} +function Wc(e) { + switch (e.tag) { + case 5: + return Tn(e.type); + case 16: + return Tn("Lazy"); + case 13: + return Tn("Suspense"); + case 19: + return Tn("SuspenseList"); + case 0: + case 2: + case 15: + return e = Sr(e.type, !1), e; + case 11: + return e = Sr(e.type.render, !1), e; + case 22: + return e = Sr(e.type._render, !1), e; + case 1: + return e = Sr(e.type, !0), e; + default: + return ""; + } +} +function At(e) { + if (e == null) return null; + if (typeof e == "function") return e.displayName || e.name || null; + if (typeof e == "string") return e; + switch (e) { + case Ae: + return "Fragment"; + case pt: + return "Portal"; + case $n: + return "Profiler"; + case _l: + return "StrictMode"; + case Mn: + return "Suspense"; + case Kr: + return "SuspenseList"; + } + if (typeof e == "object") switch (e.$$typeof) { + case kl: + return (e.displayName || "Context") + ".Consumer"; + case Pl: + return (e._context.displayName || "Context") + ".Provider"; + case To: + var t = e.render; + return t = t.displayName || t.name || "", e.displayName || (t !== "" ? "ForwardRef(" + t + ")" : "ForwardRef"); + case No: + return At(e.type); + case Nl: + return At(e._render); + case Tl: + t = e._payload, e = e._init; + try { + return At(e(t)); + } catch { + } + } + return null; +} +function qe(e) { + switch (typeof e) { + case "boolean": + case "number": + case "object": + case "string": + case "undefined": + return e; + default: + return ""; + } +} +function Ta(e) { + var t = e.type; + return (e = e.nodeName) && e.toLowerCase() === "input" && (t === "checkbox" || t === "radio"); +} +function Hc(e) { + var t = Ta(e) ? "checked" : "value", n = Object.getOwnPropertyDescriptor(e.constructor.prototype, t), r = "" + e[t]; + if (!e.hasOwnProperty(t) && typeof n < "u" && typeof n.get == "function" && typeof n.set == "function") { + var o = n.get, i = n.set; + return Object.defineProperty(e, t, { configurable: !0, get: function() { + return o.call(this); + }, set: function(l) { + r = "" + l, i.call(this, l); + } }), Object.defineProperty(e, t, { enumerable: n.enumerable }), { getValue: function() { + return r; + }, setValue: function(l) { + r = "" + l; + }, stopTracking: function() { + e._valueTracker = null, delete e[t]; + } }; + } +} +function Or(e) { + e._valueTracker || (e._valueTracker = Hc(e)); +} +function Na(e) { + if (!e) return !1; + var t = e._valueTracker; + if (!t) return !0; + var n = t.getValue(), r = ""; + return e && (r = Ta(e) ? e.checked ? "true" : "false" : e.value), e = r, e !== n ? (t.setValue(e), !0) : !1; +} +function Qr(e) { + if (e = e || (typeof document < "u" ? document : void 0), typeof e > "u") return null; + try { + return e.activeElement || e.body; + } catch { + return e.body; + } +} +function Si(e, t) { + var n = t.checked; + return b({}, t, { defaultChecked: void 0, defaultValue: void 0, value: void 0, checked: n ?? e._wrapperState.initialChecked }); +} +function zu(e, t) { + var n = t.defaultValue == null ? "" : t.defaultValue, r = t.checked != null ? t.checked : t.defaultChecked; + n = qe(t.value != null ? t.value : n), e._wrapperState = { initialChecked: r, initialValue: n, controlled: t.type === "checkbox" || t.type === "radio" ? t.checked != null : t.value != null }; +} +function ja(e, t) { + t = t.checked, t != null && Cl(e, "checked", t, !1); +} +function Oi(e, t) { + ja(e, t); + var n = qe(t.value), r = t.type; + if (n != null) r === "number" ? (n === 0 && e.value === "" || e.value != n) && (e.value = "" + n) : e.value !== "" + n && (e.value = "" + n); + else if (r === "submit" || r === "reset") { + e.removeAttribute("value"); + return; + } + t.hasOwnProperty("value") ? xi(e, t.type, n) : t.hasOwnProperty("defaultValue") && xi(e, t.type, qe(t.defaultValue)), t.checked == null && t.defaultChecked != null && (e.defaultChecked = !!t.defaultChecked); +} +function Iu(e, t, n) { + if (t.hasOwnProperty("value") || t.hasOwnProperty("defaultValue")) { + var r = t.type; + if (!(r !== "submit" && r !== "reset" || t.value !== void 0 && t.value !== null)) return; + t = "" + e._wrapperState.initialValue, n || t === e.value || (e.value = t), e.defaultValue = t; + } + n = e.name, n !== "" && (e.name = ""), e.defaultChecked = !!e._wrapperState.initialChecked, n !== "" && (e.name = n); +} +function xi(e, t, n) { + (t !== "number" || Qr(e.ownerDocument) !== e) && (n == null ? e.defaultValue = "" + e._wrapperState.initialValue : e.defaultValue !== "" + n && (e.defaultValue = "" + n)); +} +function Kc(e) { + var t = ""; + return ko.Children.forEach(e, function(n) { + n != null && (t += n); + }), t; +} +function Ci(e, t) { + return e = b({ children: void 0 }, t), (t = Kc(t.children)) && (e.children = t), e; +} +function Bt(e, t, n, r) { + if (e = e.options, t) { + t = {}; + for (var o = 0; o < n.length; o++) t["$" + n[o]] = !0; + for (n = 0; n < e.length; n++) o = t.hasOwnProperty("$" + e[n].value), e[n].selected !== o && (e[n].selected = o), o && r && (e[n].defaultSelected = !0); + } else { + for (n = "" + qe(n), t = null, o = 0; o < e.length; o++) { + if (e[o].value === n) { + e[o].selected = !0, r && (e[o].defaultSelected = !0); + return; + } + t !== null || e[o].disabled || (t = e[o]); + } + t !== null && (t.selected = !0); + } +} +function _i(e, t) { + if (t.dangerouslySetInnerHTML != null) throw Error(y(91)); + return b({}, t, { value: void 0, defaultValue: void 0, children: "" + e._wrapperState.initialValue }); +} +function Fu(e, t) { + var n = t.value; + if (n == null) { + if (n = t.children, t = t.defaultValue, n != null) { + if (t != null) throw Error(y(92)); + if (Array.isArray(n)) { + if (!(1 >= n.length)) throw Error(y(93)); + n = n[0]; + } + t = n; + } + t == null && (t = ""), n = t; + } + e._wrapperState = { initialValue: qe(n) }; +} +function Ra(e, t) { + var n = qe(t.value), r = qe(t.defaultValue); + n != null && (n = "" + n, n !== e.value && (e.value = n), t.defaultValue == null && e.defaultValue !== n && (e.defaultValue = n)), r != null && (e.defaultValue = "" + r); +} +function bu(e) { + var t = e.textContent; + t === e._wrapperState.initialValue && t !== "" && t !== null && (e.value = t); +} +var Pi = { html: "http://www.w3.org/1999/xhtml", mathml: "http://www.w3.org/1998/Math/MathML", svg: "http://www.w3.org/2000/svg" }; +function Da(e) { + switch (e) { + case "svg": + return "http://www.w3.org/2000/svg"; + case "math": + return "http://www.w3.org/1998/Math/MathML"; + default: + return "http://www.w3.org/1999/xhtml"; + } +} +function ki(e, t) { + return e == null || e === "http://www.w3.org/1999/xhtml" ? Da(t) : e === "http://www.w3.org/2000/svg" && t === "foreignObject" ? "http://www.w3.org/1999/xhtml" : e; +} +var xr, La = function(e) { + return typeof MSApp < "u" && MSApp.execUnsafeLocalFunction ? function(t, n, r, o) { + MSApp.execUnsafeLocalFunction(function() { + return e(t, n, r, o); + }); + } : e; +}(function(e, t) { + if (e.namespaceURI !== Pi.svg || "innerHTML" in e) e.innerHTML = t; + else { + for (xr = xr || document.createElement("div"), xr.innerHTML = "" + t.valueOf().toString() + "", t = xr.firstChild; e.firstChild; ) e.removeChild(e.firstChild); + for (; t.firstChild; ) e.appendChild(t.firstChild); + } +}); +function Qn(e, t) { + if (t) { + var n = e.firstChild; + if (n && n === e.lastChild && n.nodeType === 3) { + n.nodeValue = t; + return; + } + } + e.textContent = t; +} +var zn = { + animationIterationCount: !0, + borderImageOutset: !0, + borderImageSlice: !0, + borderImageWidth: !0, + boxFlex: !0, + boxFlexGroup: !0, + boxOrdinalGroup: !0, + columnCount: !0, + columns: !0, + flex: !0, + flexGrow: !0, + flexPositive: !0, + flexShrink: !0, + flexNegative: !0, + flexOrder: !0, + gridArea: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowSpan: !0, + gridRowStart: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnSpan: !0, + gridColumnStart: !0, + fontWeight: !0, + lineClamp: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + tabSize: !0, + widows: !0, + zIndex: !0, + zoom: !0, + fillOpacity: !0, + floodOpacity: !0, + stopOpacity: !0, + strokeDasharray: !0, + strokeDashoffset: !0, + strokeMiterlimit: !0, + strokeOpacity: !0, + strokeWidth: !0 +}, Qc = ["Webkit", "ms", "Moz", "O"]; +Object.keys(zn).forEach(function(e) { + Qc.forEach(function(t) { + t = t + e.charAt(0).toUpperCase() + e.substring(1), zn[t] = zn[e]; + }); +}); +function $a(e, t, n) { + return t == null || typeof t == "boolean" || t === "" ? "" : n || typeof t != "number" || t === 0 || zn.hasOwnProperty(e) && zn[e] ? ("" + t).trim() : t + "px"; +} +function Ma(e, t) { + e = e.style; + for (var n in t) if (t.hasOwnProperty(n)) { + var r = n.indexOf("--") === 0, o = $a(n, t[n], r); + n === "float" && (n = "cssFloat"), r ? e.setProperty(n, o) : e[n] = o; + } +} +var Yc = b({ menuitem: !0 }, { area: !0, base: !0, br: !0, col: !0, embed: !0, hr: !0, img: !0, input: !0, keygen: !0, link: !0, meta: !0, param: !0, source: !0, track: !0, wbr: !0 }); +function Ti(e, t) { + if (t) { + if (Yc[e] && (t.children != null || t.dangerouslySetInnerHTML != null)) throw Error(y(137, e)); + if (t.dangerouslySetInnerHTML != null) { + if (t.children != null) throw Error(y(60)); + if (!(typeof t.dangerouslySetInnerHTML == "object" && "__html" in t.dangerouslySetInnerHTML)) throw Error(y(61)); + } + if (t.style != null && typeof t.style != "object") throw Error(y(62)); + } +} +function Ni(e, t) { + if (e.indexOf("-") === -1) return typeof t.is == "string"; + switch (e) { + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + return !1; + default: + return !0; + } +} +function Dl(e) { + return e = e.target || e.srcElement || window, e.correspondingUseElement && (e = e.correspondingUseElement), e.nodeType === 3 ? e.parentNode : e; +} +var ji = null, Vt = null, Wt = null; +function Uu(e) { + if (e = hr(e)) { + if (typeof ji != "function") throw Error(y(280)); + var t = e.stateNode; + t && (t = Mo(t), ji(e.stateNode, e.type, t)); + } +} +function za(e) { + Vt ? Wt ? Wt.push(e) : Wt = [e] : Vt = e; +} +function Ia() { + if (Vt) { + var e = Vt, t = Wt; + if (Wt = Vt = null, Uu(e), t) for (e = 0; e < t.length; e++) Uu(t[e]); + } +} +function Ll(e, t) { + return e(t); +} +function Fa(e, t, n, r, o) { + return e(t, n, r, o); +} +function $l() { +} +var ba = Ll, mt = !1, Xo = !1; +function Ml() { + (Vt !== null || Wt !== null) && ($l(), Ia()); +} +function Xc(e, t, n) { + if (Xo) return e(t, n); + Xo = !0; + try { + return ba(e, t, n); + } finally { + Xo = !1, Ml(); + } +} +function Yn(e, t) { + var n = e.stateNode; + if (n === null) return null; + var r = Mo(n); + if (r === null) return null; + n = r[t]; + e: switch (t) { + case "onClick": + case "onClickCapture": + case "onDoubleClick": + case "onDoubleClickCapture": + case "onMouseDown": + case "onMouseDownCapture": + case "onMouseMove": + case "onMouseMoveCapture": + case "onMouseUp": + case "onMouseUpCapture": + case "onMouseEnter": + (r = !r.disabled) || (e = e.type, r = !(e === "button" || e === "input" || e === "select" || e === "textarea")), e = !r; + break e; + default: + e = !1; + } + if (e) return null; + if (n && typeof n != "function") throw Error(y(231, t, typeof n)); + return n; +} +var Ri = !1; +if (Me) try { + var vn = {}; + Object.defineProperty(vn, "passive", { get: function() { + Ri = !0; + } }), window.addEventListener("test", vn, vn), window.removeEventListener("test", vn, vn); +} catch { + Ri = !1; +} +function Gc(e, t, n, r, o, i, l, u, s) { + var a = Array.prototype.slice.call(arguments, 3); + try { + t.apply(n, a); + } catch (p) { + this.onError(p); + } +} +var In = !1, Yr = null, Xr = !1, Di = null, Zc = { onError: function(e) { + In = !0, Yr = e; +} }; +function Jc(e, t, n, r, o, i, l, u, s) { + In = !1, Yr = null, Gc.apply(Zc, arguments); +} +function qc(e, t, n, r, o, i, l, u, s) { + if (Jc.apply(this, arguments), In) { + if (In) { + var a = Yr; + In = !1, Yr = null; + } else throw Error(y(198)); + Xr || (Xr = !0, Di = a); + } +} +function Pt(e) { + var t = e, n = e; + if (e.alternate) for (; t.return; ) t = t.return; + else { + e = t; + do + t = e, t.flags & 1026 && (n = t.return), e = t.return; + while (e); + } + return t.tag === 3 ? n : null; +} +function Ua(e) { + if (e.tag === 13) { + var t = e.memoizedState; + if (t === null && (e = e.alternate, e !== null && (t = e.memoizedState)), t !== null) return t.dehydrated; + } + return null; +} +function Au(e) { + if (Pt(e) !== e) throw Error(y(188)); +} +function ed(e) { + var t = e.alternate; + if (!t) { + if (t = Pt(e), t === null) throw Error(y(188)); + return t !== e ? null : e; + } + for (var n = e, r = t; ; ) { + var o = n.return; + if (o === null) break; + var i = o.alternate; + if (i === null) { + if (r = o.return, r !== null) { + n = r; + continue; + } + break; + } + if (o.child === i.child) { + for (i = o.child; i; ) { + if (i === n) return Au(o), e; + if (i === r) return Au(o), t; + i = i.sibling; + } + throw Error(y(188)); + } + if (n.return !== r.return) n = o, r = i; + else { + for (var l = !1, u = o.child; u; ) { + if (u === n) { + l = !0, n = o, r = i; + break; + } + if (u === r) { + l = !0, r = o, n = i; + break; + } + u = u.sibling; + } + if (!l) { + for (u = i.child; u; ) { + if (u === n) { + l = !0, n = i, r = o; + break; + } + if (u === r) { + l = !0, r = i, n = o; + break; + } + u = u.sibling; + } + if (!l) throw Error(y(189)); + } + } + if (n.alternate !== r) throw Error(y(190)); + } + if (n.tag !== 3) throw Error(y(188)); + return n.stateNode.current === n ? e : t; +} +function Aa(e) { + if (e = ed(e), !e) return null; + for (var t = e; ; ) { + if (t.tag === 5 || t.tag === 6) return t; + if (t.child) t.child.return = t, t = t.child; + else { + if (t === e) break; + for (; !t.sibling; ) { + if (!t.return || t.return === e) return null; + t = t.return; + } + t.sibling.return = t.return, t = t.sibling; + } + } + return null; +} +function Bu(e, t) { + for (var n = e.alternate; t !== null; ) { + if (t === e || t === n) return !0; + t = t.return; + } + return !1; +} +var Ba, zl, Va, Wa, Li = !1, xe = [], He = null, Ke = null, Qe = null, Xn = /* @__PURE__ */ new Map(), Gn = /* @__PURE__ */ new Map(), yn = [], Vu = "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "); +function $i(e, t, n, r, o) { + return { blockedOn: e, domEventName: t, eventSystemFlags: n | 16, nativeEvent: o, targetContainers: [r] }; +} +function Wu(e, t) { + switch (e) { + case "focusin": + case "focusout": + He = null; + break; + case "dragenter": + case "dragleave": + Ke = null; + break; + case "mouseover": + case "mouseout": + Qe = null; + break; + case "pointerover": + case "pointerout": + Xn.delete(t.pointerId); + break; + case "gotpointercapture": + case "lostpointercapture": + Gn.delete(t.pointerId); + } +} +function gn(e, t, n, r, o, i) { + return e === null || e.nativeEvent !== i ? (e = $i(t, n, r, o, i), t !== null && (t = hr(t), t !== null && zl(t)), e) : (e.eventSystemFlags |= r, t = e.targetContainers, o !== null && t.indexOf(o) === -1 && t.push(o), e); +} +function td(e, t, n, r, o) { + switch (t) { + case "focusin": + return He = gn(He, e, t, n, r, o), !0; + case "dragenter": + return Ke = gn(Ke, e, t, n, r, o), !0; + case "mouseover": + return Qe = gn(Qe, e, t, n, r, o), !0; + case "pointerover": + var i = o.pointerId; + return Xn.set(i, gn(Xn.get(i) || null, e, t, n, r, o)), !0; + case "gotpointercapture": + return i = o.pointerId, Gn.set(i, gn(Gn.get(i) || null, e, t, n, r, o)), !0; + } + return !1; +} +function nd(e) { + var t = ht(e.target); + if (t !== null) { + var n = Pt(t); + if (n !== null) { + if (t = n.tag, t === 13) { + if (t = Ua(n), t !== null) { + e.blockedOn = t, Wa(e.lanePriority, function() { + K.unstable_runWithPriority(e.priority, function() { + Va(n); + }); + }); + return; + } + } else if (t === 3 && n.stateNode.hydrate) { + e.blockedOn = n.tag === 3 ? n.stateNode.containerInfo : null; + return; + } + } + } + e.blockedOn = null; +} +function Mr(e) { + if (e.blockedOn !== null) return !1; + for (var t = e.targetContainers; 0 < t.length; ) { + var n = Ul(e.domEventName, e.eventSystemFlags, t[0], e.nativeEvent); + if (n !== null) return t = hr(n), t !== null && zl(t), e.blockedOn = n, !1; + t.shift(); + } + return !0; +} +function Hu(e, t, n) { + Mr(e) && n.delete(t); +} +function rd() { + for (Li = !1; 0 < xe.length; ) { + var e = xe[0]; + if (e.blockedOn !== null) { + e = hr(e.blockedOn), e !== null && Ba(e); + break; + } + for (var t = e.targetContainers; 0 < t.length; ) { + var n = Ul(e.domEventName, e.eventSystemFlags, t[0], e.nativeEvent); + if (n !== null) { + e.blockedOn = n; + break; + } + t.shift(); + } + e.blockedOn === null && xe.shift(); + } + He !== null && Mr(He) && (He = null), Ke !== null && Mr(Ke) && (Ke = null), Qe !== null && Mr(Qe) && (Qe = null), Xn.forEach(Hu), Gn.forEach(Hu); +} +function wn(e, t) { + e.blockedOn === t && (e.blockedOn = null, Li || (Li = !0, K.unstable_scheduleCallback(K.unstable_NormalPriority, rd))); +} +function Ha(e) { + function t(o) { + return wn(o, e); + } + if (0 < xe.length) { + wn(xe[0], e); + for (var n = 1; n < xe.length; n++) { + var r = xe[n]; + r.blockedOn === e && (r.blockedOn = null); + } + } + for (He !== null && wn(He, e), Ke !== null && wn(Ke, e), Qe !== null && wn(Qe, e), Xn.forEach(t), Gn.forEach(t), n = 0; n < yn.length; n++) r = yn[n], r.blockedOn === e && (r.blockedOn = null); + for (; 0 < yn.length && (n = yn[0], n.blockedOn === null); ) nd(n), n.blockedOn === null && yn.shift(); +} +function Cr(e, t) { + var n = {}; + return n[e.toLowerCase()] = t.toLowerCase(), n["Webkit" + e] = "webkit" + t, n["Moz" + e] = "moz" + t, n; +} +var Mt = { animationend: Cr("Animation", "AnimationEnd"), animationiteration: Cr("Animation", "AnimationIteration"), animationstart: Cr("Animation", "AnimationStart"), transitionend: Cr("Transition", "TransitionEnd") }, Go = {}, Ka = {}; +Me && (Ka = document.createElement("div").style, "AnimationEvent" in window || (delete Mt.animationend.animation, delete Mt.animationiteration.animation, delete Mt.animationstart.animation), "TransitionEvent" in window || delete Mt.transitionend.transition); +function jo(e) { + if (Go[e]) return Go[e]; + if (!Mt[e]) return e; + var t = Mt[e], n; + for (n in t) if (t.hasOwnProperty(n) && n in Ka) return Go[e] = t[n]; + return e; +} +var Qa = jo("animationend"), Ya = jo("animationiteration"), Xa = jo("animationstart"), Ga = jo("transitionend"), Za = /* @__PURE__ */ new Map(), Il = /* @__PURE__ */ new Map(), od = [ + "abort", + "abort", + Qa, + "animationEnd", + Ya, + "animationIteration", + Xa, + "animationStart", + "canplay", + "canPlay", + "canplaythrough", + "canPlayThrough", + "durationchange", + "durationChange", + "emptied", + "emptied", + "encrypted", + "encrypted", + "ended", + "ended", + "error", + "error", + "gotpointercapture", + "gotPointerCapture", + "load", + "load", + "loadeddata", + "loadedData", + "loadedmetadata", + "loadedMetadata", + "loadstart", + "loadStart", + "lostpointercapture", + "lostPointerCapture", + "playing", + "playing", + "progress", + "progress", + "seeking", + "seeking", + "stalled", + "stalled", + "suspend", + "suspend", + "timeupdate", + "timeUpdate", + Ga, + "transitionEnd", + "waiting", + "waiting" +]; +function Fl(e, t) { + for (var n = 0; n < e.length; n += 2) { + var r = e[n], o = e[n + 1]; + o = "on" + (o[0].toUpperCase() + o.slice(1)), Il.set(r, t), Za.set(r, o), Ct(o, [r]); + } +} +var id = K.unstable_now; +id(); +var z = 8; +function Dt(e) { + if (1 & e) return z = 15, 1; + if (2 & e) return z = 14, 2; + if (4 & e) return z = 13, 4; + var t = 24 & e; + return t !== 0 ? (z = 12, t) : e & 32 ? (z = 11, 32) : (t = 192 & e, t !== 0 ? (z = 10, t) : e & 256 ? (z = 9, 256) : (t = 3584 & e, t !== 0 ? (z = 8, t) : e & 4096 ? (z = 7, 4096) : (t = 4186112 & e, t !== 0 ? (z = 6, t) : (t = 62914560 & e, t !== 0 ? (z = 5, t) : e & 67108864 ? (z = 4, 67108864) : e & 134217728 ? (z = 3, 134217728) : (t = 805306368 & e, t !== 0 ? (z = 2, t) : 1073741824 & e ? (z = 1, 1073741824) : (z = 8, e)))))); +} +function ld(e) { + switch (e) { + case 99: + return 15; + case 98: + return 10; + case 97: + case 96: + return 8; + case 95: + return 2; + default: + return 0; + } +} +function ud(e) { + switch (e) { + case 15: + case 14: + return 99; + case 13: + case 12: + case 11: + case 10: + return 98; + case 9: + case 8: + case 7: + case 6: + case 4: + case 5: + return 97; + case 3: + case 2: + case 1: + return 95; + case 0: + return 90; + default: + throw Error(y(358, e)); + } +} +function Zn(e, t) { + var n = e.pendingLanes; + if (n === 0) return z = 0; + var r = 0, o = 0, i = e.expiredLanes, l = e.suspendedLanes, u = e.pingedLanes; + if (i !== 0) r = i, o = z = 15; + else if (i = n & 134217727, i !== 0) { + var s = i & ~l; + s !== 0 ? (r = Dt(s), o = z) : (u &= i, u !== 0 && (r = Dt(u), o = z)); + } else i = n & ~l, i !== 0 ? (r = Dt(i), o = z) : u !== 0 && (r = Dt(u), o = z); + if (r === 0) return 0; + if (r = 31 - et(r), r = n & ((0 > r ? 0 : 1 << r) << 1) - 1, t !== 0 && t !== r && !(t & l)) { + if (Dt(t), o <= z) return t; + z = o; + } + if (t = e.entangledLanes, t !== 0) for (e = e.entanglements, t &= r; 0 < t; ) n = 31 - et(t), o = 1 << n, r |= e[n], t &= ~o; + return r; +} +function Ja(e) { + return e = e.pendingLanes & -1073741825, e !== 0 ? e : e & 1073741824 ? 1073741824 : 0; +} +function Gr(e, t) { + switch (e) { + case 15: + return 1; + case 14: + return 2; + case 12: + return e = Lt(24 & ~t), e === 0 ? Gr(10, t) : e; + case 10: + return e = Lt(192 & ~t), e === 0 ? Gr(8, t) : e; + case 8: + return e = Lt(3584 & ~t), e === 0 && (e = Lt(4186112 & ~t), e === 0 && (e = 512)), e; + case 2: + return t = Lt(805306368 & ~t), t === 0 && (t = 268435456), t; + } + throw Error(y(358, e)); +} +function Lt(e) { + return e & -e; +} +function Zo(e) { + for (var t = [], n = 0; 31 > n; n++) t.push(e); + return t; +} +function Ro(e, t, n) { + e.pendingLanes |= t; + var r = t - 1; + e.suspendedLanes &= r, e.pingedLanes &= r, e = e.eventTimes, t = 31 - et(t), e[t] = n; +} +var et = Math.clz32 ? Math.clz32 : fd, sd = Math.log, ad = Math.LN2; +function fd(e) { + return e === 0 ? 32 : 31 - (sd(e) / ad | 0) | 0; +} +var cd = K.unstable_UserBlockingPriority, dd = K.unstable_runWithPriority, zr = !0; +function pd(e, t, n, r) { + mt || $l(); + var o = bl, i = mt; + mt = !0; + try { + Fa(o, e, t, n, r); + } finally { + (mt = i) || Ml(); + } +} +function md(e, t, n, r) { + dd(cd, bl.bind(null, e, t, n, r)); +} +function bl(e, t, n, r) { + if (zr) { + var o; + if ((o = (t & 4) === 0) && 0 < xe.length && -1 < Vu.indexOf(e)) e = $i(null, e, t, n, r), xe.push(e); + else { + var i = Ul(e, t, n, r); + if (i === null) o && Wu(e, r); + else { + if (o) { + if (-1 < Vu.indexOf(e)) { + e = $i(i, e, t, n, r), xe.push(e); + return; + } + if (td(i, e, t, n, r)) return; + Wu(e, r); + } + cf(e, t, r, null, n); + } + } + } +} +function Ul(e, t, n, r) { + var o = Dl(r); + if (o = ht(o), o !== null) { + var i = Pt(o); + if (i === null) o = null; + else { + var l = i.tag; + if (l === 13) { + if (o = Ua(i), o !== null) return o; + o = null; + } else if (l === 3) { + if (i.stateNode.hydrate) return i.tag === 3 ? i.stateNode.containerInfo : null; + o = null; + } else i !== o && (o = null); + } + } + return cf(e, t, r, o, n), null; +} +var Be = null, Al = null, Ir = null; +function qa() { + if (Ir) return Ir; + var e, t = Al, n = t.length, r, o = "value" in Be ? Be.value : Be.textContent, i = o.length; + for (e = 0; e < n && t[e] === o[e]; e++) ; + var l = n - e; + for (r = 1; r <= l && t[n - r] === o[i - r]; r++) ; + return Ir = o.slice(e, 1 < r ? 1 - r : void 0); +} +function Fr(e) { + var t = e.keyCode; + return "charCode" in e ? (e = e.charCode, e === 0 && t === 13 && (e = 13)) : e = t, e === 10 && (e = 13), 32 <= e || e === 13 ? e : 0; +} +function _r() { + return !0; +} +function Ku() { + return !1; +} +function ce(e) { + function t(n, r, o, i, l) { + this._reactName = n, this._targetInst = o, this.type = r, this.nativeEvent = i, this.target = l, this.currentTarget = null; + for (var u in e) e.hasOwnProperty(u) && (n = e[u], this[u] = n ? n(i) : i[u]); + return this.isDefaultPrevented = (i.defaultPrevented != null ? i.defaultPrevented : i.returnValue === !1) ? _r : Ku, this.isPropagationStopped = Ku, this; + } + return b(t.prototype, { preventDefault: function() { + this.defaultPrevented = !0; + var n = this.nativeEvent; + n && (n.preventDefault ? n.preventDefault() : typeof n.returnValue != "unknown" && (n.returnValue = !1), this.isDefaultPrevented = _r); + }, stopPropagation: function() { + var n = this.nativeEvent; + n && (n.stopPropagation ? n.stopPropagation() : typeof n.cancelBubble != "unknown" && (n.cancelBubble = !0), this.isPropagationStopped = _r); + }, persist: function() { + }, isPersistent: _r }), t; +} +var sn = { eventPhase: 0, bubbles: 0, cancelable: 0, timeStamp: function(e) { + return e.timeStamp || Date.now(); +}, defaultPrevented: 0, isTrusted: 0 }, Bl = ce(sn), mr = b({}, sn, { view: 0, detail: 0 }), hd = ce(mr), Jo, qo, En, Do = b({}, mr, { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, getModifierState: Vl, button: 0, buttons: 0, relatedTarget: function(e) { + return e.relatedTarget === void 0 ? e.fromElement === e.srcElement ? e.toElement : e.fromElement : e.relatedTarget; +}, movementX: function(e) { + return "movementX" in e ? e.movementX : (e !== En && (En && e.type === "mousemove" ? (Jo = e.screenX - En.screenX, qo = e.screenY - En.screenY) : qo = Jo = 0, En = e), Jo); +}, movementY: function(e) { + return "movementY" in e ? e.movementY : qo; +} }), Qu = ce(Do), vd = b({}, Do, { dataTransfer: 0 }), yd = ce(vd), gd = b({}, mr, { relatedTarget: 0 }), ei = ce(gd), wd = b({}, sn, { animationName: 0, elapsedTime: 0, pseudoElement: 0 }), Ed = ce(wd), Sd = b({}, sn, { clipboardData: function(e) { + return "clipboardData" in e ? e.clipboardData : window.clipboardData; +} }), Od = ce(Sd), xd = b({}, sn, { data: 0 }), Yu = ce(xd), Cd = { + Esc: "Escape", + Spacebar: " ", + Left: "ArrowLeft", + Up: "ArrowUp", + Right: "ArrowRight", + Down: "ArrowDown", + Del: "Delete", + Win: "OS", + Menu: "ContextMenu", + Apps: "ContextMenu", + Scroll: "ScrollLock", + MozPrintableKey: "Unidentified" +}, _d = { + 8: "Backspace", + 9: "Tab", + 12: "Clear", + 13: "Enter", + 16: "Shift", + 17: "Control", + 18: "Alt", + 19: "Pause", + 20: "CapsLock", + 27: "Escape", + 32: " ", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "ArrowLeft", + 38: "ArrowUp", + 39: "ArrowRight", + 40: "ArrowDown", + 45: "Insert", + 46: "Delete", + 112: "F1", + 113: "F2", + 114: "F3", + 115: "F4", + 116: "F5", + 117: "F6", + 118: "F7", + 119: "F8", + 120: "F9", + 121: "F10", + 122: "F11", + 123: "F12", + 144: "NumLock", + 145: "ScrollLock", + 224: "Meta" +}, Pd = { Alt: "altKey", Control: "ctrlKey", Meta: "metaKey", Shift: "shiftKey" }; +function kd(e) { + var t = this.nativeEvent; + return t.getModifierState ? t.getModifierState(e) : (e = Pd[e]) ? !!t[e] : !1; +} +function Vl() { + return kd; +} +var Td = b({}, mr, { key: function(e) { + if (e.key) { + var t = Cd[e.key] || e.key; + if (t !== "Unidentified") return t; + } + return e.type === "keypress" ? (e = Fr(e), e === 13 ? "Enter" : String.fromCharCode(e)) : e.type === "keydown" || e.type === "keyup" ? _d[e.keyCode] || "Unidentified" : ""; +}, code: 0, location: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, repeat: 0, locale: 0, getModifierState: Vl, charCode: function(e) { + return e.type === "keypress" ? Fr(e) : 0; +}, keyCode: function(e) { + return e.type === "keydown" || e.type === "keyup" ? e.keyCode : 0; +}, which: function(e) { + return e.type === "keypress" ? Fr(e) : e.type === "keydown" || e.type === "keyup" ? e.keyCode : 0; +} }), Nd = ce(Td), jd = b({}, Do, { pointerId: 0, width: 0, height: 0, pressure: 0, tangentialPressure: 0, tiltX: 0, tiltY: 0, twist: 0, pointerType: 0, isPrimary: 0 }), Xu = ce(jd), Rd = b({}, mr, { touches: 0, targetTouches: 0, changedTouches: 0, altKey: 0, metaKey: 0, ctrlKey: 0, shiftKey: 0, getModifierState: Vl }), Dd = ce(Rd), Ld = b({}, sn, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 }), $d = ce(Ld), Md = b({}, Do, { + deltaX: function(e) { + return "deltaX" in e ? e.deltaX : "wheelDeltaX" in e ? -e.wheelDeltaX : 0; + }, + deltaY: function(e) { + return "deltaY" in e ? e.deltaY : "wheelDeltaY" in e ? -e.wheelDeltaY : "wheelDelta" in e ? -e.wheelDelta : 0; + }, + deltaZ: 0, + deltaMode: 0 +}), zd = ce(Md), Id = [9, 13, 27, 32], Wl = Me && "CompositionEvent" in window, Fn = null; +Me && "documentMode" in document && (Fn = document.documentMode); +var Fd = Me && "TextEvent" in window && !Fn, ef = Me && (!Wl || Fn && 8 < Fn && 11 >= Fn), Gu = " ", Zu = !1; +function tf(e, t) { + switch (e) { + case "keyup": + return Id.indexOf(t.keyCode) !== -1; + case "keydown": + return t.keyCode !== 229; + case "keypress": + case "mousedown": + case "focusout": + return !0; + default: + return !1; + } +} +function nf(e) { + return e = e.detail, typeof e == "object" && "data" in e ? e.data : null; +} +var zt = !1; +function bd(e, t) { + switch (e) { + case "compositionend": + return nf(t); + case "keypress": + return t.which !== 32 ? null : (Zu = !0, Gu); + case "textInput": + return e = t.data, e === Gu && Zu ? null : e; + default: + return null; + } +} +function Ud(e, t) { + if (zt) return e === "compositionend" || !Wl && tf(e, t) ? (e = qa(), Ir = Al = Be = null, zt = !1, e) : null; + switch (e) { + case "paste": + return null; + case "keypress": + if (!(t.ctrlKey || t.altKey || t.metaKey) || t.ctrlKey && t.altKey) { + if (t.char && 1 < t.char.length) return t.char; + if (t.which) return String.fromCharCode(t.which); + } + return null; + case "compositionend": + return ef && t.locale !== "ko" ? null : t.data; + default: + return null; + } +} +var Ad = { color: !0, date: !0, datetime: !0, "datetime-local": !0, email: !0, month: !0, number: !0, password: !0, range: !0, search: !0, tel: !0, text: !0, time: !0, url: !0, week: !0 }; +function Ju(e) { + var t = e && e.nodeName && e.nodeName.toLowerCase(); + return t === "input" ? !!Ad[e.type] : t === "textarea"; +} +function rf(e, t, n, r) { + za(r), t = Zr(t, "onChange"), 0 < t.length && (n = new Bl("onChange", "change", null, n, r), e.push({ event: n, listeners: t })); +} +var bn = null, Jn = null; +function Bd(e) { + sf(e, 0); +} +function Lo(e) { + var t = Ft(e); + if (Na(t)) return e; +} +function Vd(e, t) { + if (e === "change") return t; +} +var of = !1; +if (Me) { + var ti; + if (Me) { + var ni = "oninput" in document; + if (!ni) { + var qu = document.createElement("div"); + qu.setAttribute("oninput", "return;"), ni = typeof qu.oninput == "function"; + } + ti = ni; + } else ti = !1; + of = ti && (!document.documentMode || 9 < document.documentMode); +} +function es() { + bn && (bn.detachEvent("onpropertychange", lf), Jn = bn = null); +} +function lf(e) { + if (e.propertyName === "value" && Lo(Jn)) { + var t = []; + if (rf(t, Jn, e, Dl(e)), e = Bd, mt) e(t); + else { + mt = !0; + try { + Ll(e, t); + } finally { + mt = !1, Ml(); + } + } + } +} +function Wd(e, t, n) { + e === "focusin" ? (es(), bn = t, Jn = n, bn.attachEvent("onpropertychange", lf)) : e === "focusout" && es(); +} +function Hd(e) { + if (e === "selectionchange" || e === "keyup" || e === "keydown") return Lo(Jn); +} +function Kd(e, t) { + if (e === "click") return Lo(t); +} +function Qd(e, t) { + if (e === "input" || e === "change") return Lo(t); +} +function Yd(e, t) { + return e === t && (e !== 0 || 1 / e === 1 / t) || e !== e && t !== t; +} +var pe = typeof Object.is == "function" ? Object.is : Yd, Xd = Object.prototype.hasOwnProperty; +function qn(e, t) { + if (pe(e, t)) return !0; + if (typeof e != "object" || e === null || typeof t != "object" || t === null) return !1; + var n = Object.keys(e), r = Object.keys(t); + if (n.length !== r.length) return !1; + for (r = 0; r < n.length; r++) if (!Xd.call(t, n[r]) || !pe(e[n[r]], t[n[r]])) return !1; + return !0; +} +function ts(e) { + for (; e && e.firstChild; ) e = e.firstChild; + return e; +} +function ns(e, t) { + var n = ts(e); + e = 0; + for (var r; n; ) { + if (n.nodeType === 3) { + if (r = e + n.textContent.length, e <= t && r >= t) return { node: n, offset: t - e }; + e = r; + } + e: { + for (; n; ) { + if (n.nextSibling) { + n = n.nextSibling; + break e; + } + n = n.parentNode; + } + n = void 0; + } + n = ts(n); + } +} +function uf(e, t) { + return e && t ? e === t ? !0 : e && e.nodeType === 3 ? !1 : t && t.nodeType === 3 ? uf(e, t.parentNode) : "contains" in e ? e.contains(t) : e.compareDocumentPosition ? !!(e.compareDocumentPosition(t) & 16) : !1 : !1; +} +function rs() { + for (var e = window, t = Qr(); t instanceof e.HTMLIFrameElement; ) { + try { + var n = typeof t.contentWindow.location.href == "string"; + } catch { + n = !1; + } + if (n) e = t.contentWindow; + else break; + t = Qr(e.document); + } + return t; +} +function Mi(e) { + var t = e && e.nodeName && e.nodeName.toLowerCase(); + return t && (t === "input" && (e.type === "text" || e.type === "search" || e.type === "tel" || e.type === "url" || e.type === "password") || t === "textarea" || e.contentEditable === "true"); +} +var Gd = Me && "documentMode" in document && 11 >= document.documentMode, It = null, zi = null, Un = null, Ii = !1; +function os(e, t, n) { + var r = n.window === n ? n.document : n.nodeType === 9 ? n : n.ownerDocument; + Ii || It == null || It !== Qr(r) || (r = It, "selectionStart" in r && Mi(r) ? r = { start: r.selectionStart, end: r.selectionEnd } : (r = (r.ownerDocument && r.ownerDocument.defaultView || window).getSelection(), r = { anchorNode: r.anchorNode, anchorOffset: r.anchorOffset, focusNode: r.focusNode, focusOffset: r.focusOffset }), Un && qn(Un, r) || (Un = r, r = Zr(zi, "onSelect"), 0 < r.length && (t = new Bl("onSelect", "select", null, t, n), e.push({ event: t, listeners: r }), t.target = It))); +} +Fl( + "cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "), + 0 +); +Fl("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "), 1); +Fl(od, 2); +for (var is = "change selectionchange textInput compositionstart compositionend compositionupdate".split(" "), ri = 0; ri < is.length; ri++) Il.set(is[ri], 0); +Zt("onMouseEnter", ["mouseout", "mouseover"]); +Zt("onMouseLeave", ["mouseout", "mouseover"]); +Zt("onPointerEnter", ["pointerout", "pointerover"]); +Zt("onPointerLeave", ["pointerout", "pointerover"]); +Ct("onChange", "change click focusin focusout input keydown keyup selectionchange".split(" ")); +Ct("onSelect", "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")); +Ct("onBeforeInput", ["compositionend", "keypress", "textInput", "paste"]); +Ct("onCompositionEnd", "compositionend focusout keydown keypress keyup mousedown".split(" ")); +Ct("onCompositionStart", "compositionstart focusout keydown keypress keyup mousedown".split(" ")); +Ct("onCompositionUpdate", "compositionupdate focusout keydown keypress keyup mousedown".split(" ")); +var Nn = "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "), Zd = new Set("cancel close invalid load scroll toggle".split(" ").concat(Nn)); +function ls(e, t, n) { + var r = e.type || "unknown-event"; + e.currentTarget = n, qc(r, t, void 0, e), e.currentTarget = null; +} +function sf(e, t) { + t = (t & 4) !== 0; + for (var n = 0; n < e.length; n++) { + var r = e[n], o = r.event; + r = r.listeners; + e: { + var i = void 0; + if (t) for (var l = r.length - 1; 0 <= l; l--) { + var u = r[l], s = u.instance, a = u.currentTarget; + if (u = u.listener, s !== i && o.isPropagationStopped()) break e; + ls(o, u, a), i = s; + } + else for (l = 0; l < r.length; l++) { + if (u = r[l], s = u.instance, a = u.currentTarget, u = u.listener, s !== i && o.isPropagationStopped()) break e; + ls(o, u, a), i = s; + } + } + } + if (Xr) throw e = Di, Xr = !1, Di = null, e; +} +function I(e, t) { + var n = pf(t), r = e + "__bubble"; + n.has(r) || (ff(t, e, 2, !1), n.add(r)); +} +var us = "_reactListening" + Math.random().toString(36).slice(2); +function af(e) { + e[us] || (e[us] = !0, Pa.forEach(function(t) { + Zd.has(t) || ss(t, !1, e, null), ss(t, !0, e, null); + })); +} +function ss(e, t, n, r) { + var o = 4 < arguments.length && arguments[4] !== void 0 ? arguments[4] : 0, i = n; + e === "selectionchange" && n.nodeType !== 9 && (i = n.ownerDocument); + var l = pf(i), u = e + "__" + (t ? "capture" : "bubble"); + l.has(u) || (t && (o |= 4), ff(i, e, o, t), l.add(u)); +} +function ff(e, t, n, r) { + var o = Il.get(t); + switch (o === void 0 ? 2 : o) { + case 0: + o = pd; + break; + case 1: + o = md; + break; + default: + o = bl; + } + n = o.bind(null, t, n, e), o = void 0, !Ri || t !== "touchstart" && t !== "touchmove" && t !== "wheel" || (o = !0), r ? o !== void 0 ? e.addEventListener(t, n, { capture: !0, passive: o }) : e.addEventListener(t, n, !0) : o !== void 0 ? e.addEventListener(t, n, { passive: o }) : e.addEventListener(t, n, !1); +} +function cf(e, t, n, r, o) { + var i = r; + if (!(t & 1) && !(t & 2) && r !== null) e: for (; ; ) { + if (r === null) return; + var l = r.tag; + if (l === 3 || l === 4) { + var u = r.stateNode.containerInfo; + if (u === o || u.nodeType === 8 && u.parentNode === o) break; + if (l === 4) for (l = r.return; l !== null; ) { + var s = l.tag; + if ((s === 3 || s === 4) && (s = l.stateNode.containerInfo, s === o || s.nodeType === 8 && s.parentNode === o)) return; + l = l.return; + } + for (; u !== null; ) { + if (l = ht(u), l === null) return; + if (s = l.tag, s === 5 || s === 6) { + r = i = l; + continue e; + } + u = u.parentNode; + } + } + r = r.return; + } + Xc(function() { + var a = i, p = Dl(n), w = []; + e: { + var m = Za.get(e); + if (m !== void 0) { + var E = Bl, x = e; + switch (e) { + case "keypress": + if (Fr(n) === 0) break e; + case "keydown": + case "keyup": + E = Nd; + break; + case "focusin": + x = "focus", E = ei; + break; + case "focusout": + x = "blur", E = ei; + break; + case "beforeblur": + case "afterblur": + E = ei; + break; + case "click": + if (n.button === 2) break e; + case "auxclick": + case "dblclick": + case "mousedown": + case "mousemove": + case "mouseup": + case "mouseout": + case "mouseover": + case "contextmenu": + E = Qu; + break; + case "drag": + case "dragend": + case "dragenter": + case "dragexit": + case "dragleave": + case "dragover": + case "dragstart": + case "drop": + E = yd; + break; + case "touchcancel": + case "touchend": + case "touchmove": + case "touchstart": + E = Dd; + break; + case Qa: + case Ya: + case Xa: + E = Ed; + break; + case Ga: + E = $d; + break; + case "scroll": + E = hd; + break; + case "wheel": + E = zd; + break; + case "copy": + case "cut": + case "paste": + E = Od; + break; + case "gotpointercapture": + case "lostpointercapture": + case "pointercancel": + case "pointerdown": + case "pointermove": + case "pointerout": + case "pointerover": + case "pointerup": + E = Xu; + } + var _ = (t & 4) !== 0, c = !_ && e === "scroll", f = _ ? m !== null ? m + "Capture" : null : m; + _ = []; + for (var d = a, v; d !== null; ) { + v = d; + var h = v.stateNode; + if (v.tag === 5 && h !== null && (v = h, f !== null && (h = Yn(d, f), h != null && _.push(er(d, h, v)))), c) break; + d = d.return; + } + 0 < _.length && (m = new E(m, x, null, n, p), w.push({ event: m, listeners: _ })); + } + } + if (!(t & 7)) { + e: { + if (m = e === "mouseover" || e === "pointerover", E = e === "mouseout" || e === "pointerout", m && !(t & 16) && (x = n.relatedTarget || n.fromElement) && (ht(x) || x[an])) break e; + if ((E || m) && (m = p.window === p ? p : (m = p.ownerDocument) ? m.defaultView || m.parentWindow : window, E ? (x = n.relatedTarget || n.toElement, E = a, x = x ? ht(x) : null, x !== null && (c = Pt(x), x !== c || x.tag !== 5 && x.tag !== 6) && (x = null)) : (E = null, x = a), E !== x)) { + if (_ = Qu, h = "onMouseLeave", f = "onMouseEnter", d = "mouse", (e === "pointerout" || e === "pointerover") && (_ = Xu, h = "onPointerLeave", f = "onPointerEnter", d = "pointer"), c = E == null ? m : Ft(E), v = x == null ? m : Ft(x), m = new _(h, d + "leave", E, n, p), m.target = c, m.relatedTarget = v, h = null, ht(p) === a && (_ = new _(f, d + "enter", x, n, p), _.target = v, _.relatedTarget = c, h = _), c = h, E && x) t: { + for (_ = E, f = x, d = 0, v = _; v; v = Nt(v)) d++; + for (v = 0, h = f; h; h = Nt(h)) v++; + for (; 0 < d - v; ) _ = Nt(_), d--; + for (; 0 < v - d; ) f = Nt(f), v--; + for (; d--; ) { + if (_ === f || f !== null && _ === f.alternate) break t; + _ = Nt(_), f = Nt(f); + } + _ = null; + } + else _ = null; + E !== null && as(w, m, E, _, !1), x !== null && c !== null && as(w, c, x, _, !0); + } + } + e: { + if (m = a ? Ft(a) : window, E = m.nodeName && m.nodeName.toLowerCase(), E === "select" || E === "input" && m.type === "file") var T = Vd; + else if (Ju(m)) if (of) T = Qd; + else { + T = Hd; + var S = Wd; + } + else (E = m.nodeName) && E.toLowerCase() === "input" && (m.type === "checkbox" || m.type === "radio") && (T = Kd); + if (T && (T = T(e, a))) { + rf(w, T, n, p); + break e; + } + S && S(e, m, a), e === "focusout" && (S = m._wrapperState) && S.controlled && m.type === "number" && xi(m, "number", m.value); + } + switch (S = a ? Ft(a) : window, e) { + case "focusin": + (Ju(S) || S.contentEditable === "true") && (It = S, zi = a, Un = null); + break; + case "focusout": + Un = zi = It = null; + break; + case "mousedown": + Ii = !0; + break; + case "contextmenu": + case "mouseup": + case "dragend": + Ii = !1, os(w, n, p); + break; + case "selectionchange": + if (Gd) break; + case "keydown": + case "keyup": + os(w, n, p); + } + var N; + if (Wl) e: { + switch (e) { + case "compositionstart": + var D = "onCompositionStart"; + break e; + case "compositionend": + D = "onCompositionEnd"; + break e; + case "compositionupdate": + D = "onCompositionUpdate"; + break e; + } + D = void 0; + } + else zt ? tf(e, n) && (D = "onCompositionEnd") : e === "keydown" && n.keyCode === 229 && (D = "onCompositionStart"); + D && (ef && n.locale !== "ko" && (zt || D !== "onCompositionStart" ? D === "onCompositionEnd" && zt && (N = qa()) : (Be = p, Al = "value" in Be ? Be.value : Be.textContent, zt = !0)), S = Zr(a, D), 0 < S.length && (D = new Yu(D, e, null, n, p), w.push({ event: D, listeners: S }), N ? D.data = N : (N = nf(n), N !== null && (D.data = N)))), (N = Fd ? bd(e, n) : Ud(e, n)) && (a = Zr(a, "onBeforeInput"), 0 < a.length && (p = new Yu( + "onBeforeInput", + "beforeinput", + null, + n, + p + ), w.push({ event: p, listeners: a }), p.data = N)); + } + sf(w, t); + }); +} +function er(e, t, n) { + return { instance: e, listener: t, currentTarget: n }; +} +function Zr(e, t) { + for (var n = t + "Capture", r = []; e !== null; ) { + var o = e, i = o.stateNode; + o.tag === 5 && i !== null && (o = i, i = Yn(e, n), i != null && r.unshift(er(e, i, o)), i = Yn(e, t), i != null && r.push(er(e, i, o))), e = e.return; + } + return r; +} +function Nt(e) { + if (e === null) return null; + do + e = e.return; + while (e && e.tag !== 5); + return e || null; +} +function as(e, t, n, r, o) { + for (var i = t._reactName, l = []; n !== null && n !== r; ) { + var u = n, s = u.alternate, a = u.stateNode; + if (s !== null && s === r) break; + u.tag === 5 && a !== null && (u = a, o ? (s = Yn(n, i), s != null && l.unshift(er(n, s, u))) : o || (s = Yn(n, i), s != null && l.push(er(n, s, u)))), n = n.return; + } + l.length !== 0 && e.push({ event: t, listeners: l }); +} +function Jr() { +} +var oi = null, ii = null; +function df(e, t) { + switch (e) { + case "button": + case "input": + case "select": + case "textarea": + return !!t.autoFocus; + } + return !1; +} +function Fi(e, t) { + return e === "textarea" || e === "option" || e === "noscript" || typeof t.children == "string" || typeof t.children == "number" || typeof t.dangerouslySetInnerHTML == "object" && t.dangerouslySetInnerHTML !== null && t.dangerouslySetInnerHTML.__html != null; +} +var fs = typeof setTimeout == "function" ? setTimeout : void 0, Jd = typeof clearTimeout == "function" ? clearTimeout : void 0; +function Hl(e) { + e.nodeType === 1 ? e.textContent = "" : e.nodeType === 9 && (e = e.body, e != null && (e.textContent = "")); +} +function Ht(e) { + for (; e != null; e = e.nextSibling) { + var t = e.nodeType; + if (t === 1 || t === 3) break; + } + return e; +} +function cs(e) { + e = e.previousSibling; + for (var t = 0; e; ) { + if (e.nodeType === 8) { + var n = e.data; + if (n === "$" || n === "$!" || n === "$?") { + if (t === 0) return e; + t--; + } else n === "/$" && t++; + } + e = e.previousSibling; + } + return null; +} +var li = 0; +function qd(e) { + return { $$typeof: jl, toString: e, valueOf: e }; +} +var $o = Math.random().toString(36).slice(2), Ve = "__reactFiber$" + $o, qr = "__reactProps$" + $o, an = "__reactContainer$" + $o, ds = "__reactEvents$" + $o; +function ht(e) { + var t = e[Ve]; + if (t) return t; + for (var n = e.parentNode; n; ) { + if (t = n[an] || n[Ve]) { + if (n = t.alternate, t.child !== null || n !== null && n.child !== null) for (e = cs(e); e !== null; ) { + if (n = e[Ve]) return n; + e = cs(e); + } + return t; + } + e = n, n = e.parentNode; + } + return null; +} +function hr(e) { + return e = e[Ve] || e[an], !e || e.tag !== 5 && e.tag !== 6 && e.tag !== 13 && e.tag !== 3 ? null : e; +} +function Ft(e) { + if (e.tag === 5 || e.tag === 6) return e.stateNode; + throw Error(y(33)); +} +function Mo(e) { + return e[qr] || null; +} +function pf(e) { + var t = e[ds]; + return t === void 0 && (t = e[ds] = /* @__PURE__ */ new Set()), t; +} +var bi = [], bt = -1; +function ot(e) { + return { current: e }; +} +function F(e) { + 0 > bt || (e.current = bi[bt], bi[bt] = null, bt--); +} +function A(e, t) { + bt++, bi[bt] = e.current, e.current = t; +} +var tt = {}, ne = ot(tt), se = ot(!1), St = tt; +function Jt(e, t) { + var n = e.type.contextTypes; + if (!n) return tt; + var r = e.stateNode; + if (r && r.__reactInternalMemoizedUnmaskedChildContext === t) return r.__reactInternalMemoizedMaskedChildContext; + var o = {}, i; + for (i in n) o[i] = t[i]; + return r && (e = e.stateNode, e.__reactInternalMemoizedUnmaskedChildContext = t, e.__reactInternalMemoizedMaskedChildContext = o), o; +} +function ae(e) { + return e = e.childContextTypes, e != null; +} +function eo() { + F(se), F(ne); +} +function ps(e, t, n) { + if (ne.current !== tt) throw Error(y(168)); + A(ne, t), A(se, n); +} +function mf(e, t, n) { + var r = e.stateNode; + if (e = t.childContextTypes, typeof r.getChildContext != "function") return n; + r = r.getChildContext(); + for (var o in r) if (!(o in e)) throw Error(y(108, At(t) || "Unknown", o)); + return b({}, n, r); +} +function br(e) { + return e = (e = e.stateNode) && e.__reactInternalMemoizedMergedChildContext || tt, St = ne.current, A(ne, e), A(se, se.current), !0; +} +function ms(e, t, n) { + var r = e.stateNode; + if (!r) throw Error(y(169)); + n ? (e = mf(e, t, St), r.__reactInternalMemoizedMergedChildContext = e, F(se), F(ne), A(ne, e)) : F(se), A(se, n); +} +var Kl = null, Et = null, ep = K.unstable_runWithPriority, Ql = K.unstable_scheduleCallback, Ui = K.unstable_cancelCallback, tp = K.unstable_shouldYield, hs = K.unstable_requestPaint, Ai = K.unstable_now, np = K.unstable_getCurrentPriorityLevel, zo = K.unstable_ImmediatePriority, hf = K.unstable_UserBlockingPriority, vf = K.unstable_NormalPriority, yf = K.unstable_LowPriority, gf = K.unstable_IdlePriority, ui = {}, rp = hs !== void 0 ? hs : function() { +}, je = null, Ur = null, si = !1, vs = Ai(), ee = 1e4 > vs ? Ai : function() { + return Ai() - vs; +}; +function qt() { + switch (np()) { + case zo: + return 99; + case hf: + return 98; + case vf: + return 97; + case yf: + return 96; + case gf: + return 95; + default: + throw Error(y(332)); + } +} +function wf(e) { + switch (e) { + case 99: + return zo; + case 98: + return hf; + case 97: + return vf; + case 96: + return yf; + case 95: + return gf; + default: + throw Error(y(332)); + } +} +function Ot(e, t) { + return e = wf(e), ep(e, t); +} +function tr(e, t, n) { + return e = wf(e), Ql(e, t, n); +} +function Ne() { + if (Ur !== null) { + var e = Ur; + Ur = null, Ui(e); + } + Ef(); +} +function Ef() { + if (!si && je !== null) { + si = !0; + var e = 0; + try { + var t = je; + Ot(99, function() { + for (; e < t.length; e++) { + var n = t[e]; + do + n = n(!0); + while (n !== null); + } + }), je = null; + } catch (n) { + throw je !== null && (je = je.slice(e + 1)), Ql(zo, Ne), n; + } finally { + si = !1; + } + } +} +var op = _t.ReactCurrentBatchConfig; +function Ee(e, t) { + if (e && e.defaultProps) { + t = b({}, t), e = e.defaultProps; + for (var n in e) t[n] === void 0 && (t[n] = e[n]); + return t; + } + return t; +} +var to = ot(null), no = null, Ut = null, ro = null; +function Yl() { + ro = Ut = no = null; +} +function Xl(e) { + var t = to.current; + F(to), e.type._context._currentValue = t; +} +function Sf(e, t) { + for (; e !== null; ) { + var n = e.alternate; + if ((e.childLanes & t) === t) { + if (n === null || (n.childLanes & t) === t) break; + n.childLanes |= t; + } else e.childLanes |= t, n !== null && (n.childLanes |= t); + e = e.return; + } +} +function Kt(e, t) { + no = e, ro = Ut = null, e = e.dependencies, e !== null && e.firstContext !== null && (e.lanes & t && (Se = !0), e.firstContext = null); +} +function ve(e, t) { + if (ro !== e && t !== !1 && t !== 0) + if ((typeof t != "number" || t === 1073741823) && (ro = e, t = 1073741823), t = { context: e, observedBits: t, next: null }, Ut === null) { + if (no === null) throw Error(y(308)); + Ut = t, no.dependencies = { lanes: 0, firstContext: t, responders: null }; + } else Ut = Ut.next = t; + return e._currentValue; +} +var Fe = !1; +function Gl(e) { + e.updateQueue = { baseState: e.memoizedState, firstBaseUpdate: null, lastBaseUpdate: null, shared: { pending: null }, effects: null }; +} +function Of(e, t) { + e = e.updateQueue, t.updateQueue === e && (t.updateQueue = { baseState: e.baseState, firstBaseUpdate: e.firstBaseUpdate, lastBaseUpdate: e.lastBaseUpdate, shared: e.shared, effects: e.effects }); +} +function Ye(e, t) { + return { eventTime: e, lane: t, tag: 0, payload: null, callback: null, next: null }; +} +function Xe(e, t) { + if (e = e.updateQueue, e !== null) { + e = e.shared; + var n = e.pending; + n === null ? t.next = t : (t.next = n.next, n.next = t), e.pending = t; + } +} +function ys(e, t) { + var n = e.updateQueue, r = e.alternate; + if (r !== null && (r = r.updateQueue, n === r)) { + var o = null, i = null; + if (n = n.firstBaseUpdate, n !== null) { + do { + var l = { eventTime: n.eventTime, lane: n.lane, tag: n.tag, payload: n.payload, callback: n.callback, next: null }; + i === null ? o = i = l : i = i.next = l, n = n.next; + } while (n !== null); + i === null ? o = i = t : i = i.next = t; + } else o = i = t; + n = { baseState: r.baseState, firstBaseUpdate: o, lastBaseUpdate: i, shared: r.shared, effects: r.effects }, e.updateQueue = n; + return; + } + e = n.lastBaseUpdate, e === null ? n.firstBaseUpdate = t : e.next = t, n.lastBaseUpdate = t; +} +function nr(e, t, n, r) { + var o = e.updateQueue; + Fe = !1; + var i = o.firstBaseUpdate, l = o.lastBaseUpdate, u = o.shared.pending; + if (u !== null) { + o.shared.pending = null; + var s = u, a = s.next; + s.next = null, l === null ? i = a : l.next = a, l = s; + var p = e.alternate; + if (p !== null) { + p = p.updateQueue; + var w = p.lastBaseUpdate; + w !== l && (w === null ? p.firstBaseUpdate = a : w.next = a, p.lastBaseUpdate = s); + } + } + if (i !== null) { + w = o.baseState, l = 0, p = a = s = null; + do { + u = i.lane; + var m = i.eventTime; + if ((r & u) === u) { + p !== null && (p = p.next = { + eventTime: m, + lane: 0, + tag: i.tag, + payload: i.payload, + callback: i.callback, + next: null + }); + e: { + var E = e, x = i; + switch (u = t, m = n, x.tag) { + case 1: + if (E = x.payload, typeof E == "function") { + w = E.call(m, w, u); + break e; + } + w = E; + break e; + case 3: + E.flags = E.flags & -4097 | 64; + case 0: + if (E = x.payload, u = typeof E == "function" ? E.call(m, w, u) : E, u == null) break e; + w = b({}, w, u); + break e; + case 2: + Fe = !0; + } + } + i.callback !== null && (e.flags |= 32, u = o.effects, u === null ? o.effects = [i] : u.push(i)); + } else m = { eventTime: m, lane: u, tag: i.tag, payload: i.payload, callback: i.callback, next: null }, p === null ? (a = p = m, s = w) : p = p.next = m, l |= u; + if (i = i.next, i === null) { + if (u = o.shared.pending, u === null) break; + i = u.next, u.next = null, o.lastBaseUpdate = u, o.shared.pending = null; + } + } while (!0); + p === null && (s = w), o.baseState = s, o.firstBaseUpdate = a, o.lastBaseUpdate = p, yr |= l, e.lanes = l, e.memoizedState = w; + } +} +function gs(e, t, n) { + if (e = t.effects, t.effects = null, e !== null) for (t = 0; t < e.length; t++) { + var r = e[t], o = r.callback; + if (o !== null) { + if (r.callback = null, r = n, typeof o != "function") throw Error(y(191, o)); + o.call(r); + } + } +} +var xf = new ko.Component().refs; +function oo(e, t, n, r) { + t = e.memoizedState, n = n(r, t), n = n == null ? t : b({}, t, n), e.memoizedState = n, e.lanes === 0 && (e.updateQueue.baseState = n); +} +var Io = { isMounted: function(e) { + return (e = e._reactInternals) ? Pt(e) === e : !1; +}, enqueueSetState: function(e, t, n) { + e = e._reactInternals; + var r = fe(), o = Ge(e), i = Ye(r, o); + i.payload = t, n != null && (i.callback = n), Xe(e, i), Ze(e, o, r); +}, enqueueReplaceState: function(e, t, n) { + e = e._reactInternals; + var r = fe(), o = Ge(e), i = Ye(r, o); + i.tag = 1, i.payload = t, n != null && (i.callback = n), Xe(e, i), Ze(e, o, r); +}, enqueueForceUpdate: function(e, t) { + e = e._reactInternals; + var n = fe(), r = Ge(e), o = Ye(n, r); + o.tag = 2, t != null && (o.callback = t), Xe(e, o), Ze(e, r, n); +} }; +function ws(e, t, n, r, o, i, l) { + return e = e.stateNode, typeof e.shouldComponentUpdate == "function" ? e.shouldComponentUpdate(r, i, l) : t.prototype && t.prototype.isPureReactComponent ? !qn(n, r) || !qn(o, i) : !0; +} +function Cf(e, t, n) { + var r = !1, o = tt, i = t.contextType; + return typeof i == "object" && i !== null ? i = ve(i) : (o = ae(t) ? St : ne.current, r = t.contextTypes, i = (r = r != null) ? Jt(e, o) : tt), t = new t(n, i), e.memoizedState = t.state !== null && t.state !== void 0 ? t.state : null, t.updater = Io, e.stateNode = t, t._reactInternals = e, r && (e = e.stateNode, e.__reactInternalMemoizedUnmaskedChildContext = o, e.__reactInternalMemoizedMaskedChildContext = i), t; +} +function Es(e, t, n, r) { + e = t.state, typeof t.componentWillReceiveProps == "function" && t.componentWillReceiveProps(n, r), typeof t.UNSAFE_componentWillReceiveProps == "function" && t.UNSAFE_componentWillReceiveProps(n, r), t.state !== e && Io.enqueueReplaceState(t, t.state, null); +} +function Bi(e, t, n, r) { + var o = e.stateNode; + o.props = n, o.state = e.memoizedState, o.refs = xf, Gl(e); + var i = t.contextType; + typeof i == "object" && i !== null ? o.context = ve(i) : (i = ae(t) ? St : ne.current, o.context = Jt(e, i)), nr(e, n, o, r), o.state = e.memoizedState, i = t.getDerivedStateFromProps, typeof i == "function" && (oo(e, t, i, n), o.state = e.memoizedState), typeof t.getDerivedStateFromProps == "function" || typeof o.getSnapshotBeforeUpdate == "function" || typeof o.UNSAFE_componentWillMount != "function" && typeof o.componentWillMount != "function" || (t = o.state, typeof o.componentWillMount == "function" && o.componentWillMount(), typeof o.UNSAFE_componentWillMount == "function" && o.UNSAFE_componentWillMount(), t !== o.state && Io.enqueueReplaceState(o, o.state, null), nr(e, n, o, r), o.state = e.memoizedState), typeof o.componentDidMount == "function" && (e.flags |= 4); +} +var Pr = Array.isArray; +function Sn(e, t, n) { + if (e = n.ref, e !== null && typeof e != "function" && typeof e != "object") { + if (n._owner) { + if (n = n._owner, n) { + if (n.tag !== 1) throw Error(y(309)); + var r = n.stateNode; + } + if (!r) throw Error(y(147, e)); + var o = "" + e; + return t !== null && t.ref !== null && typeof t.ref == "function" && t.ref._stringRef === o ? t.ref : (t = function(i) { + var l = r.refs; + l === xf && (l = r.refs = {}), i === null ? delete l[o] : l[o] = i; + }, t._stringRef = o, t); + } + if (typeof e != "string") throw Error(y(284)); + if (!n._owner) throw Error(y(290, e)); + } + return e; +} +function kr(e, t) { + if (e.type !== "textarea") throw Error(y(31, Object.prototype.toString.call(t) === "[object Object]" ? "object with keys {" + Object.keys(t).join(", ") + "}" : t)); +} +function _f(e) { + function t(c, f) { + if (e) { + var d = c.lastEffect; + d !== null ? (d.nextEffect = f, c.lastEffect = f) : c.firstEffect = c.lastEffect = f, f.nextEffect = null, f.flags = 8; + } + } + function n(c, f) { + if (!e) return null; + for (; f !== null; ) t(c, f), f = f.sibling; + return null; + } + function r(c, f) { + for (c = /* @__PURE__ */ new Map(); f !== null; ) f.key !== null ? c.set(f.key, f) : c.set(f.index, f), f = f.sibling; + return c; + } + function o(c, f) { + return c = rt(c, f), c.index = 0, c.sibling = null, c; + } + function i(c, f, d) { + return c.index = d, e ? (d = c.alternate, d !== null ? (d = d.index, d < f ? (c.flags = 2, f) : d) : (c.flags = 2, f)) : f; + } + function l(c) { + return e && c.alternate === null && (c.flags = 2), c; + } + function u(c, f, d, v) { + return f === null || f.tag !== 6 ? (f = pi(d, c.mode, v), f.return = c, f) : (f = o(f, d), f.return = c, f); + } + function s(c, f, d, v) { + return f !== null && f.elementType === d.type ? (v = o(f, d.props), v.ref = Sn(c, f, d), v.return = c, v) : (v = Wr(d.type, d.key, d.props, null, c.mode, v), v.ref = Sn(c, f, d), v.return = c, v); + } + function a(c, f, d, v) { + return f === null || f.tag !== 4 || f.stateNode.containerInfo !== d.containerInfo || f.stateNode.implementation !== d.implementation ? (f = mi(d, c.mode, v), f.return = c, f) : (f = o(f, d.children || []), f.return = c, f); + } + function p(c, f, d, v, h) { + return f === null || f.tag !== 7 ? (f = Gt(d, c.mode, v, h), f.return = c, f) : (f = o(f, d), f.return = c, f); + } + function w(c, f, d) { + if (typeof f == "string" || typeof f == "number") return f = pi("" + f, c.mode, d), f.return = c, f; + if (typeof f == "object" && f !== null) { + switch (f.$$typeof) { + case kn: + return d = Wr(f.type, f.key, f.props, null, c.mode, d), d.ref = Sn(c, null, f), d.return = c, d; + case pt: + return f = mi(f, c.mode, d), f.return = c, f; + } + if (Pr(f) || hn(f)) return f = Gt( + f, + c.mode, + d, + null + ), f.return = c, f; + kr(c, f); + } + return null; + } + function m(c, f, d, v) { + var h = f !== null ? f.key : null; + if (typeof d == "string" || typeof d == "number") return h !== null ? null : u(c, f, "" + d, v); + if (typeof d == "object" && d !== null) { + switch (d.$$typeof) { + case kn: + return d.key === h ? d.type === Ae ? p(c, f, d.props.children, v, h) : s(c, f, d, v) : null; + case pt: + return d.key === h ? a(c, f, d, v) : null; + } + if (Pr(d) || hn(d)) return h !== null ? null : p(c, f, d, v, null); + kr(c, d); + } + return null; + } + function E(c, f, d, v, h) { + if (typeof v == "string" || typeof v == "number") return c = c.get(d) || null, u(f, c, "" + v, h); + if (typeof v == "object" && v !== null) { + switch (v.$$typeof) { + case kn: + return c = c.get(v.key === null ? d : v.key) || null, v.type === Ae ? p(f, c, v.props.children, h, v.key) : s(f, c, v, h); + case pt: + return c = c.get(v.key === null ? d : v.key) || null, a(f, c, v, h); + } + if (Pr(v) || hn(v)) return c = c.get(d) || null, p(f, c, v, h, null); + kr(f, v); + } + return null; + } + function x(c, f, d, v) { + for (var h = null, T = null, S = f, N = f = 0, D = null; S !== null && N < d.length; N++) { + S.index > N ? (D = S, S = null) : D = S.sibling; + var k = m(c, S, d[N], v); + if (k === null) { + S === null && (S = D); + break; + } + e && S && k.alternate === null && t(c, S), f = i(k, f, N), T === null ? h = k : T.sibling = k, T = k, S = D; + } + if (N === d.length) return n(c, S), h; + if (S === null) { + for (; N < d.length; N++) S = w(c, d[N], v), S !== null && (f = i(S, f, N), T === null ? h = S : T.sibling = S, T = S); + return h; + } + for (S = r(c, S); N < d.length; N++) D = E(S, c, N, d[N], v), D !== null && (e && D.alternate !== null && S.delete(D.key === null ? N : D.key), f = i(D, f, N), T === null ? h = D : T.sibling = D, T = D); + return e && S.forEach(function(Q) { + return t(c, Q); + }), h; + } + function _(c, f, d, v) { + var h = hn(d); + if (typeof h != "function") throw Error(y(150)); + if (d = h.call(d), d == null) throw Error(y(151)); + for (var T = h = null, S = f, N = f = 0, D = null, k = d.next(); S !== null && !k.done; N++, k = d.next()) { + S.index > N ? (D = S, S = null) : D = S.sibling; + var Q = m(c, S, k.value, v); + if (Q === null) { + S === null && (S = D); + break; + } + e && S && Q.alternate === null && t(c, S), f = i(Q, f, N), T === null ? h = Q : T.sibling = Q, T = Q, S = D; + } + if (k.done) return n(c, S), h; + if (S === null) { + for (; !k.done; N++, k = d.next()) k = w(c, k.value, v), k !== null && (f = i(k, f, N), T === null ? h = k : T.sibling = k, T = k); + return h; + } + for (S = r(c, S); !k.done; N++, k = d.next()) k = E(S, c, N, k.value, v), k !== null && (e && k.alternate !== null && S.delete(k.key === null ? N : k.key), f = i(k, f, N), T === null ? h = k : T.sibling = k, T = k); + return e && S.forEach(function(Bo) { + return t(c, Bo); + }), h; + } + return function(c, f, d, v) { + var h = typeof d == "object" && d !== null && d.type === Ae && d.key === null; + h && (d = d.props.children); + var T = typeof d == "object" && d !== null; + if (T) switch (d.$$typeof) { + case kn: + e: { + for (T = d.key, h = f; h !== null; ) { + if (h.key === T) { + switch (h.tag) { + case 7: + if (d.type === Ae) { + n(c, h.sibling), f = o(h, d.props.children), f.return = c, c = f; + break e; + } + break; + default: + if (h.elementType === d.type) { + n(c, h.sibling), f = o(h, d.props), f.ref = Sn(c, h, d), f.return = c, c = f; + break e; + } + } + n(c, h); + break; + } else t(c, h); + h = h.sibling; + } + d.type === Ae ? (f = Gt(d.props.children, c.mode, v, d.key), f.return = c, c = f) : (v = Wr(d.type, d.key, d.props, null, c.mode, v), v.ref = Sn(c, f, d), v.return = c, c = v); + } + return l(c); + case pt: + e: { + for (h = d.key; f !== null; ) { + if (f.key === h) if (f.tag === 4 && f.stateNode.containerInfo === d.containerInfo && f.stateNode.implementation === d.implementation) { + n(c, f.sibling), f = o(f, d.children || []), f.return = c, c = f; + break e; + } else { + n(c, f); + break; + } + else t(c, f); + f = f.sibling; + } + f = mi(d, c.mode, v), f.return = c, c = f; + } + return l(c); + } + if (typeof d == "string" || typeof d == "number") return d = "" + d, f !== null && f.tag === 6 ? (n(c, f.sibling), f = o(f, d), f.return = c, c = f) : (n(c, f), f = pi(d, c.mode, v), f.return = c, c = f), l(c); + if (Pr(d)) return x(c, f, d, v); + if (hn(d)) return _(c, f, d, v); + if (T && kr(c, d), typeof d > "u" && !h) switch (c.tag) { + case 1: + case 22: + case 0: + case 11: + case 15: + throw Error(y(152, At(c.type) || "Component")); + } + return n(c, f); + }; +} +var io = _f(!0), Pf = _f(!1), vr = {}, Pe = ot(vr), rr = ot(vr), or = ot(vr); +function vt(e) { + if (e === vr) throw Error(y(174)); + return e; +} +function Vi(e, t) { + switch (A(or, t), A(rr, e), A(Pe, vr), e = t.nodeType, e) { + case 9: + case 11: + t = (t = t.documentElement) ? t.namespaceURI : ki(null, ""); + break; + default: + e = e === 8 ? t.parentNode : t, t = e.namespaceURI || null, e = e.tagName, t = ki(t, e); + } + F(Pe), A(Pe, t); +} +function en() { + F(Pe), F(rr), F(or); +} +function Ss(e) { + vt(or.current); + var t = vt(Pe.current), n = ki(t, e.type); + t !== n && (A(rr, e), A(Pe, n)); +} +function Zl(e) { + rr.current === e && (F(Pe), F(rr)); +} +var U = ot(0); +function lo(e) { + for (var t = e; t !== null; ) { + if (t.tag === 13) { + var n = t.memoizedState; + if (n !== null && (n = n.dehydrated, n === null || n.data === "$?" || n.data === "$!")) return t; + } else if (t.tag === 19 && t.memoizedProps.revealOrder !== void 0) { + if (t.flags & 64) return t; + } else if (t.child !== null) { + t.child.return = t, t = t.child; + continue; + } + if (t === e) break; + for (; t.sibling === null; ) { + if (t.return === null || t.return === e) return null; + t = t.return; + } + t.sibling.return = t.return, t = t.sibling; + } + return null; +} +var De = null, We = null, ke = !1; +function kf(e, t) { + var n = me(5, null, null, 0); + n.elementType = "DELETED", n.type = "DELETED", n.stateNode = t, n.return = e, n.flags = 8, e.lastEffect !== null ? (e.lastEffect.nextEffect = n, e.lastEffect = n) : e.firstEffect = e.lastEffect = n; +} +function Os(e, t) { + switch (e.tag) { + case 5: + var n = e.type; + return t = t.nodeType !== 1 || n.toLowerCase() !== t.nodeName.toLowerCase() ? null : t, t !== null ? (e.stateNode = t, !0) : !1; + case 6: + return t = e.pendingProps === "" || t.nodeType !== 3 ? null : t, t !== null ? (e.stateNode = t, !0) : !1; + case 13: + return !1; + default: + return !1; + } +} +function Wi(e) { + if (ke) { + var t = We; + if (t) { + var n = t; + if (!Os(e, t)) { + if (t = Ht(n.nextSibling), !t || !Os(e, t)) { + e.flags = e.flags & -1025 | 2, ke = !1, De = e; + return; + } + kf(De, n); + } + De = e, We = Ht(t.firstChild); + } else e.flags = e.flags & -1025 | 2, ke = !1, De = e; + } +} +function xs(e) { + for (e = e.return; e !== null && e.tag !== 5 && e.tag !== 3 && e.tag !== 13; ) e = e.return; + De = e; +} +function Tr(e) { + if (e !== De) return !1; + if (!ke) return xs(e), ke = !0, !1; + var t = e.type; + if (e.tag !== 5 || t !== "head" && t !== "body" && !Fi(t, e.memoizedProps)) for (t = We; t; ) kf(e, t), t = Ht(t.nextSibling); + if (xs(e), e.tag === 13) { + if (e = e.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error(y(317)); + e: { + for (e = e.nextSibling, t = 0; e; ) { + if (e.nodeType === 8) { + var n = e.data; + if (n === "/$") { + if (t === 0) { + We = Ht(e.nextSibling); + break e; + } + t--; + } else n !== "$" && n !== "$!" && n !== "$?" || t++; + } + e = e.nextSibling; + } + We = null; + } + } else We = De ? Ht(e.stateNode.nextSibling) : null; + return !0; +} +function ai() { + We = De = null, ke = !1; +} +var Qt = []; +function Jl() { + for (var e = 0; e < Qt.length; e++) Qt[e]._workInProgressVersionPrimary = null; + Qt.length = 0; +} +var An = _t.ReactCurrentDispatcher, he = _t.ReactCurrentBatchConfig, ir = 0, V = null, q = null, X = null, uo = !1, Bn = !1; +function ie() { + throw Error(y(321)); +} +function ql(e, t) { + if (t === null) return !1; + for (var n = 0; n < t.length && n < e.length; n++) if (!pe(e[n], t[n])) return !1; + return !0; +} +function eu(e, t, n, r, o, i) { + if (ir = i, V = t, t.memoizedState = null, t.updateQueue = null, t.lanes = 0, An.current = e === null || e.memoizedState === null ? lp : up, e = n(r, o), Bn) { + i = 0; + do { + if (Bn = !1, !(25 > i)) throw Error(y(301)); + i += 1, X = q = null, t.updateQueue = null, An.current = sp, e = n(r, o); + } while (Bn); + } + if (An.current = co, t = q !== null && q.next !== null, ir = 0, X = q = V = null, uo = !1, t) throw Error(y(300)); + return e; +} +function yt() { + var e = { memoizedState: null, baseState: null, baseQueue: null, queue: null, next: null }; + return X === null ? V.memoizedState = X = e : X = X.next = e, X; +} +function kt() { + if (q === null) { + var e = V.alternate; + e = e !== null ? e.memoizedState : null; + } else e = q.next; + var t = X === null ? V.memoizedState : X.next; + if (t !== null) X = t, q = e; + else { + if (e === null) throw Error(y(310)); + q = e, e = { memoizedState: q.memoizedState, baseState: q.baseState, baseQueue: q.baseQueue, queue: q.queue, next: null }, X === null ? V.memoizedState = X = e : X = X.next = e; + } + return X; +} +function Ce(e, t) { + return typeof t == "function" ? t(e) : t; +} +function On(e) { + var t = kt(), n = t.queue; + if (n === null) throw Error(y(311)); + n.lastRenderedReducer = e; + var r = q, o = r.baseQueue, i = n.pending; + if (i !== null) { + if (o !== null) { + var l = o.next; + o.next = i.next, i.next = l; + } + r.baseQueue = o = i, n.pending = null; + } + if (o !== null) { + o = o.next, r = r.baseState; + var u = l = i = null, s = o; + do { + var a = s.lane; + if ((ir & a) === a) u !== null && (u = u.next = { lane: 0, action: s.action, eagerReducer: s.eagerReducer, eagerState: s.eagerState, next: null }), r = s.eagerReducer === e ? s.eagerState : e(r, s.action); + else { + var p = { + lane: a, + action: s.action, + eagerReducer: s.eagerReducer, + eagerState: s.eagerState, + next: null + }; + u === null ? (l = u = p, i = r) : u = u.next = p, V.lanes |= a, yr |= a; + } + s = s.next; + } while (s !== null && s !== o); + u === null ? i = r : u.next = l, pe(r, t.memoizedState) || (Se = !0), t.memoizedState = r, t.baseState = i, t.baseQueue = u, n.lastRenderedState = r; + } + return [t.memoizedState, n.dispatch]; +} +function xn(e) { + var t = kt(), n = t.queue; + if (n === null) throw Error(y(311)); + n.lastRenderedReducer = e; + var r = n.dispatch, o = n.pending, i = t.memoizedState; + if (o !== null) { + n.pending = null; + var l = o = o.next; + do + i = e(i, l.action), l = l.next; + while (l !== o); + pe(i, t.memoizedState) || (Se = !0), t.memoizedState = i, t.baseQueue === null && (t.baseState = i), n.lastRenderedState = i; + } + return [i, r]; +} +function Cs(e, t, n) { + var r = t._getVersion; + r = r(t._source); + var o = t._workInProgressVersionPrimary; + if (o !== null ? e = o === r : (e = e.mutableReadLanes, (e = (ir & e) === e) && (t._workInProgressVersionPrimary = r, Qt.push(t))), e) return n(t._source); + throw Qt.push(t), Error(y(350)); +} +function Tf(e, t, n, r) { + var o = re; + if (o === null) throw Error(y(349)); + var i = t._getVersion, l = i(t._source), u = An.current, s = u.useState(function() { + return Cs(o, t, n); + }), a = s[1], p = s[0]; + s = X; + var w = e.memoizedState, m = w.refs, E = m.getSnapshot, x = w.source; + w = w.subscribe; + var _ = V; + return e.memoizedState = { refs: m, source: t, subscribe: r }, u.useEffect(function() { + m.getSnapshot = n, m.setSnapshot = a; + var c = i(t._source); + if (!pe(l, c)) { + c = n(t._source), pe(p, c) || (a(c), c = Ge(_), o.mutableReadLanes |= c & o.pendingLanes), c = o.mutableReadLanes, o.entangledLanes |= c; + for (var f = o.entanglements, d = c; 0 < d; ) { + var v = 31 - et(d), h = 1 << v; + f[v] |= c, d &= ~h; + } + } + }, [n, t, r]), u.useEffect(function() { + return r(t._source, function() { + var c = m.getSnapshot, f = m.setSnapshot; + try { + f(c(t._source)); + var d = Ge(_); + o.mutableReadLanes |= d & o.pendingLanes; + } catch (v) { + f(function() { + throw v; + }); + } + }); + }, [t, r]), pe(E, n) && pe(x, t) && pe(w, r) || (e = { pending: null, dispatch: null, lastRenderedReducer: Ce, lastRenderedState: p }, e.dispatch = a = ru.bind(null, V, e), s.queue = e, s.baseQueue = null, p = Cs(o, t, n), s.memoizedState = s.baseState = p), p; +} +function Nf(e, t, n) { + var r = kt(); + return Tf(r, e, t, n); +} +function Cn(e) { + var t = yt(); + return typeof e == "function" && (e = e()), t.memoizedState = t.baseState = e, e = t.queue = { pending: null, dispatch: null, lastRenderedReducer: Ce, lastRenderedState: e }, e = e.dispatch = ru.bind(null, V, e), [t.memoizedState, e]; +} +function so(e, t, n, r) { + return e = { tag: e, create: t, destroy: n, deps: r, next: null }, t = V.updateQueue, t === null ? (t = { lastEffect: null }, V.updateQueue = t, t.lastEffect = e.next = e) : (n = t.lastEffect, n === null ? t.lastEffect = e.next = e : (r = n.next, n.next = e, e.next = r, t.lastEffect = e)), e; +} +function _s(e) { + var t = yt(); + return e = { current: e }, t.memoizedState = e; +} +function ao() { + return kt().memoizedState; +} +function Hi(e, t, n, r) { + var o = yt(); + V.flags |= e, o.memoizedState = so(1 | t, n, void 0, r === void 0 ? null : r); +} +function tu(e, t, n, r) { + var o = kt(); + r = r === void 0 ? null : r; + var i = void 0; + if (q !== null) { + var l = q.memoizedState; + if (i = l.destroy, r !== null && ql(r, l.deps)) { + so(t, n, i, r); + return; + } + } + V.flags |= e, o.memoizedState = so(1 | t, n, i, r); +} +function Ps(e, t) { + return Hi(516, 4, e, t); +} +function fo(e, t) { + return tu(516, 4, e, t); +} +function jf(e, t) { + return tu(4, 2, e, t); +} +function Rf(e, t) { + if (typeof t == "function") return e = e(), t(e), function() { + t(null); + }; + if (t != null) return e = e(), t.current = e, function() { + t.current = null; + }; +} +function Df(e, t, n) { + return n = n != null ? n.concat([e]) : null, tu(4, 2, Rf.bind(null, t, e), n); +} +function nu() { +} +function Lf(e, t) { + var n = kt(); + t = t === void 0 ? null : t; + var r = n.memoizedState; + return r !== null && t !== null && ql(t, r[1]) ? r[0] : (n.memoizedState = [e, t], e); +} +function $f(e, t) { + var n = kt(); + t = t === void 0 ? null : t; + var r = n.memoizedState; + return r !== null && t !== null && ql(t, r[1]) ? r[0] : (e = e(), n.memoizedState = [e, t], e); +} +function ip(e, t) { + var n = qt(); + Ot(98 > n ? 98 : n, function() { + e(!0); + }), Ot(97 < n ? 97 : n, function() { + var r = he.transition; + he.transition = 1; + try { + e(!1), t(); + } finally { + he.transition = r; + } + }); +} +function ru(e, t, n) { + var r = fe(), o = Ge(e), i = { lane: o, action: n, eagerReducer: null, eagerState: null, next: null }, l = t.pending; + if (l === null ? i.next = i : (i.next = l.next, l.next = i), t.pending = i, l = e.alternate, e === V || l !== null && l === V) Bn = uo = !0; + else { + if (e.lanes === 0 && (l === null || l.lanes === 0) && (l = t.lastRenderedReducer, l !== null)) try { + var u = t.lastRenderedState, s = l(u, n); + if (i.eagerReducer = l, i.eagerState = s, pe(s, u)) return; + } catch { + } finally { + } + Ze(e, o, r); + } +} +var co = { readContext: ve, useCallback: ie, useContext: ie, useEffect: ie, useImperativeHandle: ie, useLayoutEffect: ie, useMemo: ie, useReducer: ie, useRef: ie, useState: ie, useDebugValue: ie, useDeferredValue: ie, useTransition: ie, useMutableSource: ie, useOpaqueIdentifier: ie, unstable_isNewReconciler: !1 }, lp = { readContext: ve, useCallback: function(e, t) { + return yt().memoizedState = [e, t === void 0 ? null : t], e; +}, useContext: ve, useEffect: Ps, useImperativeHandle: function(e, t, n) { + return n = n != null ? n.concat([e]) : null, Hi(4, 2, Rf.bind( + null, + t, + e + ), n); +}, useLayoutEffect: function(e, t) { + return Hi(4, 2, e, t); +}, useMemo: function(e, t) { + var n = yt(); + return t = t === void 0 ? null : t, e = e(), n.memoizedState = [e, t], e; +}, useReducer: function(e, t, n) { + var r = yt(); + return t = n !== void 0 ? n(t) : t, r.memoizedState = r.baseState = t, e = r.queue = { pending: null, dispatch: null, lastRenderedReducer: e, lastRenderedState: t }, e = e.dispatch = ru.bind(null, V, e), [r.memoizedState, e]; +}, useRef: _s, useState: Cn, useDebugValue: nu, useDeferredValue: function(e) { + var t = Cn(e), n = t[0], r = t[1]; + return Ps(function() { + var o = he.transition; + he.transition = 1; + try { + r(e); + } finally { + he.transition = o; + } + }, [e]), n; +}, useTransition: function() { + var e = Cn(!1), t = e[0]; + return e = ip.bind(null, e[1]), _s(e), [e, t]; +}, useMutableSource: function(e, t, n) { + var r = yt(); + return r.memoizedState = { refs: { getSnapshot: t, setSnapshot: null }, source: e, subscribe: n }, Tf(r, e, t, n); +}, useOpaqueIdentifier: function() { + if (ke) { + var e = !1, t = qd(function() { + throw e || (e = !0, n("r:" + (li++).toString(36))), Error(y(355)); + }), n = Cn(t)[1]; + return !(V.mode & 2) && (V.flags |= 516, so( + 5, + function() { + n("r:" + (li++).toString(36)); + }, + void 0, + null + )), t; + } + return t = "r:" + (li++).toString(36), Cn(t), t; +}, unstable_isNewReconciler: !1 }, up = { readContext: ve, useCallback: Lf, useContext: ve, useEffect: fo, useImperativeHandle: Df, useLayoutEffect: jf, useMemo: $f, useReducer: On, useRef: ao, useState: function() { + return On(Ce); +}, useDebugValue: nu, useDeferredValue: function(e) { + var t = On(Ce), n = t[0], r = t[1]; + return fo(function() { + var o = he.transition; + he.transition = 1; + try { + r(e); + } finally { + he.transition = o; + } + }, [e]), n; +}, useTransition: function() { + var e = On(Ce)[0]; + return [ + ao().current, + e + ]; +}, useMutableSource: Nf, useOpaqueIdentifier: function() { + return On(Ce)[0]; +}, unstable_isNewReconciler: !1 }, sp = { readContext: ve, useCallback: Lf, useContext: ve, useEffect: fo, useImperativeHandle: Df, useLayoutEffect: jf, useMemo: $f, useReducer: xn, useRef: ao, useState: function() { + return xn(Ce); +}, useDebugValue: nu, useDeferredValue: function(e) { + var t = xn(Ce), n = t[0], r = t[1]; + return fo(function() { + var o = he.transition; + he.transition = 1; + try { + r(e); + } finally { + he.transition = o; + } + }, [e]), n; +}, useTransition: function() { + var e = xn(Ce)[0]; + return [ + ao().current, + e + ]; +}, useMutableSource: Nf, useOpaqueIdentifier: function() { + return xn(Ce)[0]; +}, unstable_isNewReconciler: !1 }, ap = _t.ReactCurrentOwner, Se = !1; +function ue(e, t, n, r) { + t.child = e === null ? Pf(t, null, n, r) : io(t, e.child, n, r); +} +function ks(e, t, n, r, o) { + n = n.render; + var i = t.ref; + return Kt(t, o), r = eu(e, t, n, r, i, o), e !== null && !Se ? (t.updateQueue = e.updateQueue, t.flags &= -517, e.lanes &= ~o, Le(e, t, o)) : (t.flags |= 1, ue(e, t, r, o), t.child); +} +function Ts(e, t, n, r, o, i) { + if (e === null) { + var l = n.type; + return typeof l == "function" && !au(l) && l.defaultProps === void 0 && n.compare === null && n.defaultProps === void 0 ? (t.tag = 15, t.type = l, Mf(e, t, l, r, o, i)) : (e = Wr(n.type, null, r, t, t.mode, i), e.ref = t.ref, e.return = t, t.child = e); + } + return l = e.child, !(o & i) && (o = l.memoizedProps, n = n.compare, n = n !== null ? n : qn, n(o, r) && e.ref === t.ref) ? Le(e, t, i) : (t.flags |= 1, e = rt(l, r), e.ref = t.ref, e.return = t, t.child = e); +} +function Mf(e, t, n, r, o, i) { + if (e !== null && qn(e.memoizedProps, r) && e.ref === t.ref) if (Se = !1, (i & o) !== 0) e.flags & 16384 && (Se = !0); + else return t.lanes = e.lanes, Le(e, t, i); + return Ki(e, t, n, r, i); +} +function fi(e, t, n) { + var r = t.pendingProps, o = r.children, i = e !== null ? e.memoizedState : null; + if (r.mode === "hidden" || r.mode === "unstable-defer-without-hiding") if (!(t.mode & 4)) t.memoizedState = { baseLanes: 0 }, jr(t, n); + else if (n & 1073741824) t.memoizedState = { baseLanes: 0 }, jr(t, i !== null ? i.baseLanes : n); + else return e = i !== null ? i.baseLanes | n : n, t.lanes = t.childLanes = 1073741824, t.memoizedState = { baseLanes: e }, jr(t, e), null; + else i !== null ? (r = i.baseLanes | n, t.memoizedState = null) : r = n, jr(t, r); + return ue(e, t, o, n), t.child; +} +function zf(e, t) { + var n = t.ref; + (e === null && n !== null || e !== null && e.ref !== n) && (t.flags |= 128); +} +function Ki(e, t, n, r, o) { + var i = ae(n) ? St : ne.current; + return i = Jt(t, i), Kt(t, o), n = eu(e, t, n, r, i, o), e !== null && !Se ? (t.updateQueue = e.updateQueue, t.flags &= -517, e.lanes &= ~o, Le(e, t, o)) : (t.flags |= 1, ue(e, t, n, o), t.child); +} +function Ns(e, t, n, r, o) { + if (ae(n)) { + var i = !0; + br(t); + } else i = !1; + if (Kt(t, o), t.stateNode === null) e !== null && (e.alternate = null, t.alternate = null, t.flags |= 2), Cf(t, n, r), Bi(t, n, r, o), r = !0; + else if (e === null) { + var l = t.stateNode, u = t.memoizedProps; + l.props = u; + var s = l.context, a = n.contextType; + typeof a == "object" && a !== null ? a = ve(a) : (a = ae(n) ? St : ne.current, a = Jt(t, a)); + var p = n.getDerivedStateFromProps, w = typeof p == "function" || typeof l.getSnapshotBeforeUpdate == "function"; + w || typeof l.UNSAFE_componentWillReceiveProps != "function" && typeof l.componentWillReceiveProps != "function" || (u !== r || s !== a) && Es(t, l, r, a), Fe = !1; + var m = t.memoizedState; + l.state = m, nr(t, r, l, o), s = t.memoizedState, u !== r || m !== s || se.current || Fe ? (typeof p == "function" && (oo(t, n, p, r), s = t.memoizedState), (u = Fe || ws(t, n, u, r, m, s, a)) ? (w || typeof l.UNSAFE_componentWillMount != "function" && typeof l.componentWillMount != "function" || (typeof l.componentWillMount == "function" && l.componentWillMount(), typeof l.UNSAFE_componentWillMount == "function" && l.UNSAFE_componentWillMount()), typeof l.componentDidMount == "function" && (t.flags |= 4)) : (typeof l.componentDidMount == "function" && (t.flags |= 4), t.memoizedProps = r, t.memoizedState = s), l.props = r, l.state = s, l.context = a, r = u) : (typeof l.componentDidMount == "function" && (t.flags |= 4), r = !1); + } else { + l = t.stateNode, Of(e, t), u = t.memoizedProps, a = t.type === t.elementType ? u : Ee(t.type, u), l.props = a, w = t.pendingProps, m = l.context, s = n.contextType, typeof s == "object" && s !== null ? s = ve(s) : (s = ae(n) ? St : ne.current, s = Jt(t, s)); + var E = n.getDerivedStateFromProps; + (p = typeof E == "function" || typeof l.getSnapshotBeforeUpdate == "function") || typeof l.UNSAFE_componentWillReceiveProps != "function" && typeof l.componentWillReceiveProps != "function" || (u !== w || m !== s) && Es(t, l, r, s), Fe = !1, m = t.memoizedState, l.state = m, nr(t, r, l, o); + var x = t.memoizedState; + u !== w || m !== x || se.current || Fe ? (typeof E == "function" && (oo(t, n, E, r), x = t.memoizedState), (a = Fe || ws(t, n, a, r, m, x, s)) ? (p || typeof l.UNSAFE_componentWillUpdate != "function" && typeof l.componentWillUpdate != "function" || (typeof l.componentWillUpdate == "function" && l.componentWillUpdate( + r, + x, + s + ), typeof l.UNSAFE_componentWillUpdate == "function" && l.UNSAFE_componentWillUpdate(r, x, s)), typeof l.componentDidUpdate == "function" && (t.flags |= 4), typeof l.getSnapshotBeforeUpdate == "function" && (t.flags |= 256)) : (typeof l.componentDidUpdate != "function" || u === e.memoizedProps && m === e.memoizedState || (t.flags |= 4), typeof l.getSnapshotBeforeUpdate != "function" || u === e.memoizedProps && m === e.memoizedState || (t.flags |= 256), t.memoizedProps = r, t.memoizedState = x), l.props = r, l.state = x, l.context = s, r = a) : (typeof l.componentDidUpdate != "function" || u === e.memoizedProps && m === e.memoizedState || (t.flags |= 4), typeof l.getSnapshotBeforeUpdate != "function" || u === e.memoizedProps && m === e.memoizedState || (t.flags |= 256), r = !1); + } + return Qi(e, t, n, r, i, o); +} +function Qi(e, t, n, r, o, i) { + zf(e, t); + var l = (t.flags & 64) !== 0; + if (!r && !l) return o && ms(t, n, !1), Le(e, t, i); + r = t.stateNode, ap.current = t; + var u = l && typeof n.getDerivedStateFromError != "function" ? null : r.render(); + return t.flags |= 1, e !== null && l ? (t.child = io(t, e.child, null, i), t.child = io(t, null, u, i)) : ue(e, t, u, i), t.memoizedState = r.state, o && ms(t, n, !0), t.child; +} +function js(e) { + var t = e.stateNode; + t.pendingContext ? ps(e, t.pendingContext, t.pendingContext !== t.context) : t.context && ps(e, t.context, !1), Vi(e, t.containerInfo); +} +var Nr = { dehydrated: null, retryLane: 0 }; +function Rs(e, t, n) { + var r = t.pendingProps, o = U.current, i = !1, l; + return (l = (t.flags & 64) !== 0) || (l = e !== null && e.memoizedState === null ? !1 : (o & 2) !== 0), l ? (i = !0, t.flags &= -65) : e !== null && e.memoizedState === null || r.fallback === void 0 || r.unstable_avoidThisFallback === !0 || (o |= 1), A(U, o & 1), e === null ? (r.fallback !== void 0 && Wi(t), e = r.children, o = r.fallback, i ? (e = Ds(t, e, o, n), t.child.memoizedState = { baseLanes: n }, t.memoizedState = Nr, e) : typeof r.unstable_expectedLoadTime == "number" ? (e = Ds(t, e, o, n), t.child.memoizedState = { baseLanes: n }, t.memoizedState = Nr, t.lanes = 33554432, e) : (n = fu({ mode: "visible", children: e }, t.mode, n, null), n.return = t, t.child = n)) : e.memoizedState !== null ? i ? (r = $s(e, t, r.children, r.fallback, n), i = t.child, o = e.child.memoizedState, i.memoizedState = o === null ? { baseLanes: n } : { baseLanes: o.baseLanes | n }, i.childLanes = e.childLanes & ~n, t.memoizedState = Nr, r) : (n = Ls(e, t, r.children, n), t.memoizedState = null, n) : i ? (r = $s(e, t, r.children, r.fallback, n), i = t.child, o = e.child.memoizedState, i.memoizedState = o === null ? { baseLanes: n } : { baseLanes: o.baseLanes | n }, i.childLanes = e.childLanes & ~n, t.memoizedState = Nr, r) : (n = Ls(e, t, r.children, n), t.memoizedState = null, n); +} +function Ds(e, t, n, r) { + var o = e.mode, i = e.child; + return t = { mode: "hidden", children: t }, !(o & 2) && i !== null ? (i.childLanes = 0, i.pendingProps = t) : i = fu(t, o, 0, null), n = Gt(n, o, r, null), i.return = e, n.return = e, i.sibling = n, e.child = i, n; +} +function Ls(e, t, n, r) { + var o = e.child; + return e = o.sibling, n = rt(o, { mode: "visible", children: n }), !(t.mode & 2) && (n.lanes = r), n.return = t, n.sibling = null, e !== null && (e.nextEffect = null, e.flags = 8, t.firstEffect = t.lastEffect = e), t.child = n; +} +function $s(e, t, n, r, o) { + var i = t.mode, l = e.child; + e = l.sibling; + var u = { mode: "hidden", children: n }; + return !(i & 2) && t.child !== l ? (n = t.child, n.childLanes = 0, n.pendingProps = u, l = n.lastEffect, l !== null ? (t.firstEffect = n.firstEffect, t.lastEffect = l, l.nextEffect = null) : t.firstEffect = t.lastEffect = null) : n = rt(l, u), e !== null ? r = rt(e, r) : (r = Gt(r, i, o, null), r.flags |= 2), r.return = t, n.return = t, n.sibling = r, t.child = n, r; +} +function Ms(e, t) { + e.lanes |= t; + var n = e.alternate; + n !== null && (n.lanes |= t), Sf(e.return, t); +} +function ci(e, t, n, r, o, i) { + var l = e.memoizedState; + l === null ? e.memoizedState = { isBackwards: t, rendering: null, renderingStartTime: 0, last: r, tail: n, tailMode: o, lastEffect: i } : (l.isBackwards = t, l.rendering = null, l.renderingStartTime = 0, l.last = r, l.tail = n, l.tailMode = o, l.lastEffect = i); +} +function zs(e, t, n) { + var r = t.pendingProps, o = r.revealOrder, i = r.tail; + if (ue(e, t, r.children, n), r = U.current, r & 2) r = r & 1 | 2, t.flags |= 64; + else { + if (e !== null && e.flags & 64) e: for (e = t.child; e !== null; ) { + if (e.tag === 13) e.memoizedState !== null && Ms(e, n); + else if (e.tag === 19) Ms(e, n); + else if (e.child !== null) { + e.child.return = e, e = e.child; + continue; + } + if (e === t) break e; + for (; e.sibling === null; ) { + if (e.return === null || e.return === t) break e; + e = e.return; + } + e.sibling.return = e.return, e = e.sibling; + } + r &= 1; + } + if (A(U, r), !(t.mode & 2)) t.memoizedState = null; + else switch (o) { + case "forwards": + for (n = t.child, o = null; n !== null; ) e = n.alternate, e !== null && lo(e) === null && (o = n), n = n.sibling; + n = o, n === null ? (o = t.child, t.child = null) : (o = n.sibling, n.sibling = null), ci(t, !1, o, n, i, t.lastEffect); + break; + case "backwards": + for (n = null, o = t.child, t.child = null; o !== null; ) { + if (e = o.alternate, e !== null && lo(e) === null) { + t.child = o; + break; + } + e = o.sibling, o.sibling = n, n = o, o = e; + } + ci(t, !0, n, null, i, t.lastEffect); + break; + case "together": + ci(t, !1, null, null, void 0, t.lastEffect); + break; + default: + t.memoizedState = null; + } + return t.child; +} +function Le(e, t, n) { + if (e !== null && (t.dependencies = e.dependencies), yr |= t.lanes, n & t.childLanes) { + if (e !== null && t.child !== e.child) throw Error(y(153)); + if (t.child !== null) { + for (e = t.child, n = rt(e, e.pendingProps), t.child = n, n.return = t; e.sibling !== null; ) e = e.sibling, n = n.sibling = rt(e, e.pendingProps), n.return = t; + n.sibling = null; + } + return t.child; + } + return null; +} +var If, Yi, Ff, bf; +If = function(e, t) { + for (var n = t.child; n !== null; ) { + if (n.tag === 5 || n.tag === 6) e.appendChild(n.stateNode); + else if (n.tag !== 4 && n.child !== null) { + n.child.return = n, n = n.child; + continue; + } + if (n === t) break; + for (; n.sibling === null; ) { + if (n.return === null || n.return === t) return; + n = n.return; + } + n.sibling.return = n.return, n = n.sibling; + } +}; +Yi = function() { +}; +Ff = function(e, t, n, r) { + var o = e.memoizedProps; + if (o !== r) { + e = t.stateNode, vt(Pe.current); + var i = null; + switch (n) { + case "input": + o = Si(e, o), r = Si(e, r), i = []; + break; + case "option": + o = Ci(e, o), r = Ci(e, r), i = []; + break; + case "select": + o = b({}, o, { value: void 0 }), r = b({}, r, { value: void 0 }), i = []; + break; + case "textarea": + o = _i(e, o), r = _i(e, r), i = []; + break; + default: + typeof o.onClick != "function" && typeof r.onClick == "function" && (e.onclick = Jr); + } + Ti(n, r); + var l; + n = null; + for (a in o) if (!r.hasOwnProperty(a) && o.hasOwnProperty(a) && o[a] != null) if (a === "style") { + var u = o[a]; + for (l in u) u.hasOwnProperty(l) && (n || (n = {}), n[l] = ""); + } else a !== "dangerouslySetInnerHTML" && a !== "children" && a !== "suppressContentEditableWarning" && a !== "suppressHydrationWarning" && a !== "autoFocus" && (Kn.hasOwnProperty(a) ? i || (i = []) : (i = i || []).push(a, null)); + for (a in r) { + var s = r[a]; + if (u = o != null ? o[a] : void 0, r.hasOwnProperty(a) && s !== u && (s != null || u != null)) if (a === "style") if (u) { + for (l in u) !u.hasOwnProperty(l) || s && s.hasOwnProperty(l) || (n || (n = {}), n[l] = ""); + for (l in s) s.hasOwnProperty(l) && u[l] !== s[l] && (n || (n = {}), n[l] = s[l]); + } else n || (i || (i = []), i.push(a, n)), n = s; + else a === "dangerouslySetInnerHTML" ? (s = s ? s.__html : void 0, u = u ? u.__html : void 0, s != null && u !== s && (i = i || []).push(a, s)) : a === "children" ? typeof s != "string" && typeof s != "number" || (i = i || []).push(a, "" + s) : a !== "suppressContentEditableWarning" && a !== "suppressHydrationWarning" && (Kn.hasOwnProperty(a) ? (s != null && a === "onScroll" && I("scroll", e), i || u === s || (i = [])) : typeof s == "object" && s !== null && s.$$typeof === jl ? s.toString() : (i = i || []).push(a, s)); + } + n && (i = i || []).push( + "style", + n + ); + var a = i; + (t.updateQueue = a) && (t.flags |= 4); + } +}; +bf = function(e, t, n, r) { + n !== r && (t.flags |= 4); +}; +function _n(e, t) { + if (!ke) switch (e.tailMode) { + case "hidden": + t = e.tail; + for (var n = null; t !== null; ) t.alternate !== null && (n = t), t = t.sibling; + n === null ? e.tail = null : n.sibling = null; + break; + case "collapsed": + n = e.tail; + for (var r = null; n !== null; ) n.alternate !== null && (r = n), n = n.sibling; + r === null ? t || e.tail === null ? e.tail = null : e.tail.sibling = null : r.sibling = null; + } +} +function fp(e, t, n) { + var r = t.pendingProps; + switch (t.tag) { + case 2: + case 16: + case 15: + case 0: + case 11: + case 7: + case 8: + case 12: + case 9: + case 14: + return null; + case 1: + return ae(t.type) && eo(), null; + case 3: + return en(), F(se), F(ne), Jl(), r = t.stateNode, r.pendingContext && (r.context = r.pendingContext, r.pendingContext = null), (e === null || e.child === null) && (Tr(t) ? t.flags |= 4 : r.hydrate || (t.flags |= 256)), Yi(t), null; + case 5: + Zl(t); + var o = vt(or.current); + if (n = t.type, e !== null && t.stateNode != null) Ff(e, t, n, r, o), e.ref !== t.ref && (t.flags |= 128); + else { + if (!r) { + if (t.stateNode === null) throw Error(y(166)); + return null; + } + if (e = vt(Pe.current), Tr(t)) { + r = t.stateNode, n = t.type; + var i = t.memoizedProps; + switch (r[Ve] = t, r[qr] = i, n) { + case "dialog": + I("cancel", r), I("close", r); + break; + case "iframe": + case "object": + case "embed": + I("load", r); + break; + case "video": + case "audio": + for (e = 0; e < Nn.length; e++) I(Nn[e], r); + break; + case "source": + I("error", r); + break; + case "img": + case "image": + case "link": + I("error", r), I("load", r); + break; + case "details": + I("toggle", r); + break; + case "input": + zu(r, i), I("invalid", r); + break; + case "select": + r._wrapperState = { wasMultiple: !!i.multiple }, I("invalid", r); + break; + case "textarea": + Fu(r, i), I("invalid", r); + } + Ti(n, i), e = null; + for (var l in i) i.hasOwnProperty(l) && (o = i[l], l === "children" ? typeof o == "string" ? r.textContent !== o && (e = ["children", o]) : typeof o == "number" && r.textContent !== "" + o && (e = ["children", "" + o]) : Kn.hasOwnProperty(l) && o != null && l === "onScroll" && I("scroll", r)); + switch (n) { + case "input": + Or(r), Iu(r, i, !0); + break; + case "textarea": + Or(r), bu(r); + break; + case "select": + case "option": + break; + default: + typeof i.onClick == "function" && (r.onclick = Jr); + } + r = e, t.updateQueue = r, r !== null && (t.flags |= 4); + } else { + switch (l = o.nodeType === 9 ? o : o.ownerDocument, e === Pi.html && (e = Da(n)), e === Pi.html ? n === "script" ? (e = l.createElement("div"), e.innerHTML = " +
+ + diff --git a/frontend/studio.html b/frontend/studio.html new file mode 100644 index 0000000..809c058 --- /dev/null +++ b/frontend/studio.html @@ -0,0 +1,23 @@ + + + + + + XBlock Accordion Studio View + + + + + + +
+ + diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..2a3effb --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@edx/typescript-config", + "compilerOptions": { + "outDir": "dist", + "baseUrl": "./src", + "paths": { + "*": ["*"] + }, + "types": [ + "@testing-library/jest-dom" + ] + }, + "include": ["*.js", ".eslintrc.js", "src/**/*"], + "exclude": ["dist", "node_modules"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..7adaadb --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,45 @@ +/// +import {resolve} from 'path'; +import {defineConfig} from 'vite' +import react from '@vitejs/plugin-react' +import {browserslistToTargets} from "lightningcss"; + +// https://vitejs.dev/config/ +export default defineConfig(({command, mode}) => { + let lib = 'student-ui'; + let libName = 'AccordionBlock'; + if (process.env.COMPONENT === 'studio-ui') { + lib = 'studio-ui'; + libName = 'AccordionEditor'; + } + return { + base: "", + build: { + outDir: '../accordion/public', + lib: { + entry: resolve(__dirname, `src/${lib}/index.tsx`), + name: libName, + fileName: lib, + formats: ["es"] + }, + rollupOptions: { + output: { + chunkFileNames: '[name].js', + assetFileNames: `${lib}[extname]`, + } + }, + }, + define: {'process.env.NODE_ENV': '"production"'}, + plugins: [react()], + resolve: { + alias: [ + { + // this is required for the SCSS modules + find: /^~(.*)$/, + replacement: '$1', + }, + ], + }, + test: {}, + }; +}) diff --git a/frontend/vite.web.config.ts b/frontend/vite.web.config.ts new file mode 100644 index 0000000..0060899 --- /dev/null +++ b/frontend/vite.web.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import {resolve} from "path"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + build: { + rollupOptions: { + input: { + main: resolve(__dirname, 'student.html'), + studio: resolve(__dirname, 'studio.html'), + } + } + }, + resolve: { + alias: [ + { + // this is required for the SCSS modules + find: /^~(.*)$/, + replacement: '$1', + }, + ], + }, +}) diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts new file mode 100644 index 0000000..d0534ed --- /dev/null +++ b/frontend/vitest.config.ts @@ -0,0 +1,29 @@ +/// + +import { defineConfig } from 'vite' + +export default defineConfig({ + test: { + environment: 'jsdom', + setupFiles: ['./vitest.setup.ts'], + server: { + deps: { + inline: [ + // Paragon icons are exported in a format that + // node can't handle. This will inline the code so the + // tests can run without issue. + "@openedx/paragon/icons" + ] + } + }, + coverage: { + provider: "istanbul", + include: ["src"], + exclude: [ + "src/*/dev-preview.ts", + "src/*/index.tsx", + "src/studio-ui/TinyMceEditor.tsx", + ], + } + }, +}) diff --git a/frontend/vitest.setup.ts b/frontend/vitest.setup.ts new file mode 100644 index 0000000..3027b04 --- /dev/null +++ b/frontend/vitest.setup.ts @@ -0,0 +1,7 @@ +import '@testing-library/jest-dom/vitest' +import { cleanup } from '@testing-library/react' +import { afterEach } from 'vitest' + +afterEach(() => { + cleanup() +}) diff --git a/manage.py b/manage.py index b182fb4..90ec425 100755 --- a/manage.py +++ b/manage.py @@ -5,15 +5,13 @@ It eases running django related commands with the correct settings already imported. """ + import os import sys from django.core.management import execute_from_command_line if __name__ == "__main__": - os.environ.setdefault( - "DJANGO_SETTINGS_MODULE", - "translation_settings" - ) + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "translation_settings") execute_from_command_line(sys.argv) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..18546b3 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,63 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "xblock-accordion" +dynamic = ["version"] +description = "Accordion XBlock" +readme = "README.rst" +license = {file = "LICENSE.txt"} +requires-python = ">=3.8" +authors = [ + { name = "OpenCraft", email = "help+xblock@opencraft.com" }, +] +keywords = [ + "Python", + "edx", + "XBlock", + "openedx", + "TypeScript", + "plugin", + "tsx", + "jsx", + "vite", +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] +dependencies = [ + "edx-i18n-tools", + "XBlock", + "xblock-utils", + "pydantic < 3.0", +] + +[project.entry-points."xblock.v1"] +accordion = "accordion:AccordionXBlock" + +[project.urls] +Homepage = "https://github.com/open-craft/xblock-accordion" + +[tool.hatch.version] +path = "accordion/__init__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/accordion", +] +[tool.hatch.build.targets.wheel] +packages = ["accordion"] + +[tool.isort] +include_trailing_comma = true +indent = ' ' +line_length = 120 +multi_line_output = 3 +skip=["migrations"] diff --git a/requirements/base.in b/requirements/base.in index 4def84e..f46d6a5 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -1,8 +1,7 @@ # Core requirements for using this application -c constraints.txt -django-statici18n edx-i18n-tools -Mako -XBlock +importlib-resources +XBlock xblock-utils diff --git a/requirements/base.txt b/requirements/base.txt index e01d135..a0bfc2e 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade @@ -8,24 +8,22 @@ appdirs==1.4.4 # via fs asgiref==3.8.1 # via django -boto3==1.34.132 +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # django +boto3==1.34.154 # via fs-s3fs -botocore==1.34.132 +botocore==1.34.154 # via # boto3 # s3transfer -django==4.2.13 +django==4.2.14 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt - # django-appconf - # django-statici18n # edx-i18n-tools # openedx-django-pyfs -django-appconf==1.0.6 - # via django-statici18n -django-statici18n==2.5.0 - # via -r requirements/base.in -edx-i18n-tools==1.6.0 +edx-i18n-tools==1.6.2 # via -r requirements/base.in fs==2.4.16 # via @@ -34,22 +32,20 @@ fs==2.4.16 # xblock fs-s3fs==1.1.1 # via openedx-django-pyfs +importlib-resources==6.4.0 + # via -r requirements/base.in jmespath==1.0.1 # via # boto3 # botocore lazy==1.6 # via xblock -lxml[html-clean,html_clean]==5.2.2 +lxml==5.2.2 # via # edx-i18n-tools - # lxml-html-clean # xblock -lxml-html-clean==0.1.1 - # via lxml mako==1.3.5 # via - # -r requirements/base.in # xblock # xblock-utils markupsafe==2.1.5 @@ -58,7 +54,7 @@ markupsafe==2.1.5 # xblock openedx-django-pyfs==3.6.0 # via xblock -path==16.14.0 +path==16.16.0 # via edx-i18n-tools polib==1.2.0 # via edx-i18n-tools @@ -83,9 +79,11 @@ six==1.16.0 # fs # fs-s3fs # python-dateutil -sqlparse==0.5.0 +sqlparse==0.5.1 # via django -urllib3==2.2.2 +typing-extensions==4.12.2 + # via asgiref +urllib3==1.26.19 # via botocore web-fragments==2.2.0 # via @@ -93,12 +91,14 @@ web-fragments==2.2.0 # xblock-utils webob==1.8.7 # via xblock -xblock[django]==4.0.1 +xblock[django]==5.0.0 # via # -r requirements/base.in # xblock-utils xblock-utils==4.0.0 # via -r requirements/base.in +zipp==3.19.2 + # via importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/ci.txt b/requirements/ci.txt index 28756f0..571a121 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade # -cachetools==5.3.3 +cachetools==5.4.0 # via tox chardet==5.2.0 # via tox @@ -28,7 +28,11 @@ pluggy==1.5.0 # via tox pyproject-api==1.7.1 # via tox -tox==4.15.1 +tomli==2.0.1 + # via + # pyproject-api + # tox +tox==4.17.0 # via -r requirements/ci.in virtualenv==20.26.3 # via tox diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d91704b..6704fb8 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -10,3 +10,7 @@ # Common constraints for edx repos -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + +# This package should only be intalled and only works on python 3.9 and below +# since it is a backport of the standard library zoneinfo module +backports.zoneinfo==0.2.1; python_version<"3.9" diff --git a/requirements/dev.txt b/requirements/dev.txt index 27654a6..8f14669 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade @@ -16,20 +16,25 @@ asgiref==3.8.1 # via # -r requirements/quality.txt # django -astroid==3.2.2 +astroid==3.2.4 # via # -r requirements/quality.txt # pylint # pylint-celery +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # django binaryornot==0.4.4 # via # -r requirements/quality.txt # cookiecutter -boto3==1.34.132 +boto3==1.34.154 # via # -r requirements/quality.txt # fs-s3fs -botocore==1.34.132 +botocore==1.34.154 # via # -r requirements/quality.txt # boto3 @@ -38,11 +43,11 @@ build==1.2.1 # via # -r requirements/pip-tools.txt # pip-tools -cachetools==5.3.3 +cachetools==5.4.0 # via # -r requirements/ci.txt # tox -certifi==2024.6.2 +certifi==2024.7.4 # via # -r requirements/quality.txt # requests @@ -82,11 +87,11 @@ cookiecutter==2.6.0 # via # -r requirements/quality.txt # xblock-sdk -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via # -r requirements/quality.txt # pytest-cov -diff-cover==9.0.0 +diff-cover==9.1.1 # via -r requirements/dev.in dill==0.3.8 # via @@ -96,27 +101,23 @@ distlib==0.3.8 # via # -r requirements/ci.txt # virtualenv -django==4.2.13 +django==4.2.14 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/quality.txt - # django-appconf - # django-statici18n # edx-i18n-tools # openedx-django-pyfs # xblock-sdk -django-appconf==1.0.6 +edx-i18n-tools==1.6.2 # via + # -r requirements/dev.in # -r requirements/quality.txt - # django-statici18n -django-statici18n==2.5.0 +edx-lint==5.3.7 # via -r requirements/quality.txt -edx-i18n-tools==1.6.0 +exceptiongroup==1.2.2 # via - # -r requirements/dev.in # -r requirements/quality.txt -edx-lint==5.3.6 - # via -r requirements/quality.txt + # pytest filelock==3.15.4 # via # -r requirements/ci.txt @@ -137,6 +138,13 @@ idna==3.7 # via # -r requirements/quality.txt # requests +importlib-metadata==6.11.0 + # via + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -r requirements/pip-tools.txt + # build +importlib-resources==6.4.0 + # via -r requirements/quality.txt iniconfig==2.0.0 # via # -r requirements/quality.txt @@ -160,17 +168,12 @@ lazy==1.6 # via # -r requirements/quality.txt # xblock -lxml[html-clean]==5.2.2 +lxml==5.2.2 # via # -r requirements/quality.txt # edx-i18n-tools - # lxml-html-clean # xblock # xblock-sdk -lxml-html-clean==0.1.1 - # via - # -r requirements/quality.txt - # lxml mako==1.3.5 # via # -r requirements/quality.txt @@ -207,7 +210,7 @@ packaging==24.1 # pyproject-api # pytest # tox -path==16.14.0 +path==16.16.0 # via # -r requirements/quality.txt # edx-i18n-tools @@ -235,7 +238,7 @@ polib==1.2.0 # via # -r requirements/quality.txt # edx-i18n-tools -pycodestyle==2.12.0 +pycodestyle==2.12.1 # via -r requirements/quality.txt pydocstyle==6.3.0 # via -r requirements/quality.txt @@ -244,7 +247,7 @@ pygments==2.18.0 # -r requirements/quality.txt # diff-cover # rich -pylint==3.2.3 +pylint==3.2.6 # via # -r requirements/quality.txt # edx-lint @@ -277,7 +280,7 @@ pyproject-hooks==1.1.0 # -r requirements/pip-tools.txt # build # pip-tools -pytest==8.2.2 +pytest==8.3.2 # via # -r requirements/quality.txt # pytest-cov @@ -338,7 +341,7 @@ snowballstemmer==2.2.0 # via # -r requirements/quality.txt # pydocstyle -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/quality.txt # django @@ -350,17 +353,36 @@ text-unidecode==1.3 # via # -r requirements/quality.txt # python-slugify -tomlkit==0.12.5 +tomli==2.0.1 + # via + # -r requirements/ci.txt + # -r requirements/pip-tools.txt + # -r requirements/quality.txt + # build + # coverage + # pip-tools + # pylint + # pyproject-api + # pytest + # tox +tomlkit==0.13.0 # via # -r requirements/quality.txt # pylint -tox==4.15.1 +tox==4.17.0 # via -r requirements/ci.txt types-python-dateutil==2.9.0.20240316 # via # -r requirements/quality.txt # arrow -urllib3==2.2.2 +typing-extensions==4.12.2 + # via + # -r requirements/quality.txt + # asgiref + # astroid + # pylint + # rich +urllib3==1.26.19 # via # -r requirements/quality.txt # botocore @@ -380,11 +402,11 @@ webob==1.8.7 # -r requirements/quality.txt # xblock # xblock-sdk -wheel==0.43.0 +wheel==0.44.0 # via # -r requirements/pip-tools.txt # pip-tools -xblock[django]==4.0.1 +xblock[django]==5.0.0 # via # -r requirements/quality.txt # xblock-sdk @@ -393,6 +415,12 @@ xblock-sdk==0.11.0 # via -r requirements/quality.txt xblock-utils==4.0.0 # via -r requirements/quality.txt +zipp==3.19.2 + # via + # -r requirements/pip-tools.txt + # -r requirements/quality.txt + # importlib-metadata + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/doc.txt b/requirements/doc.txt index b54e2a7..3737094 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade # -accessible-pygments==0.0.5 +accessible-pygments==0.0.4 # via pydata-sphinx-theme -alabaster==0.7.16 +alabaster==0.7.13 # via sphinx appdirs==1.4.4 # via @@ -26,24 +26,29 @@ babel==2.15.0 # sphinx backports-tarfile==1.2.0 # via jaraco-context +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/test.txt + # django beautifulsoup4==4.12.3 # via pydata-sphinx-theme binaryornot==0.4.4 # via # -r requirements/test.txt # cookiecutter -boto3==1.34.132 +boto3==1.34.154 # via # -r requirements/test.txt # fs-s3fs -botocore==1.34.132 +botocore==1.34.154 # via # -r requirements/test.txt # boto3 # s3transfer build==1.2.1 # via -r requirements/doc.in -certifi==2024.6.2 +certifi==2024.7.4 # via # -r requirements/test.txt # requests @@ -68,38 +73,34 @@ cookiecutter==2.6.0 # via # -r requirements/test.txt # xblock-sdk -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via # -r requirements/test.txt # pytest-cov -cryptography==42.0.8 +cryptography==43.0.0 # via secretstorage -django==4.2.13 +django==4.2.14 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt - # django-appconf - # django-statici18n # edx-i18n-tools # openedx-django-pyfs # xblock-sdk -django-appconf==1.0.6 - # via - # -r requirements/test.txt - # django-statici18n -django-statici18n==2.5.0 - # via -r requirements/test.txt doc8==1.1.1 # via -r requirements/doc.in -docutils==0.20.1 +docutils==0.19 # via # doc8 # pydata-sphinx-theme # readme-renderer # restructuredtext-lint # sphinx -edx-i18n-tools==1.6.0 +edx-i18n-tools==1.6.2 # via -r requirements/test.txt +exceptiongroup==1.2.2 + # via + # -r requirements/test.txt + # pytest fs==2.4.16 # via # -r requirements/test.txt @@ -120,8 +121,14 @@ imagesize==1.4.1 importlib-metadata==6.11.0 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # build # keyring + # sphinx # twine +importlib-resources==6.4.0 + # via + # -r requirements/test.txt + # keyring iniconfig==2.0.0 # via # -r requirements/test.txt @@ -130,7 +137,7 @@ jaraco-classes==3.4.0 # via keyring jaraco-context==5.3.0 # via keyring -jaraco-functools==4.0.1 +jaraco-functools==4.0.2 # via keyring jeepney==0.8.0 # via @@ -147,23 +154,18 @@ jmespath==1.0.1 # -r requirements/test.txt # boto3 # botocore -keyring==25.2.1 +keyring==25.3.0 # via twine lazy==1.6 # via # -r requirements/test.txt # xblock -lxml[html-clean]==5.2.2 +lxml==5.2.2 # via # -r requirements/test.txt # edx-i18n-tools - # lxml-html-clean # xblock # xblock-sdk -lxml-html-clean==0.1.1 - # via - # -r requirements/test.txt - # lxml mako==1.3.5 # via # -r requirements/test.txt @@ -187,7 +189,7 @@ more-itertools==10.3.0 # via # jaraco-classes # jaraco-functools -nh3==0.2.17 +nh3==0.2.18 # via readme-renderer openedx-django-pyfs==3.6.0 # via @@ -200,7 +202,7 @@ packaging==24.1 # pydata-sphinx-theme # pytest # sphinx -path==16.14.0 +path==16.16.0 # via # -r requirements/test.txt # edx-i18n-tools @@ -208,7 +210,7 @@ pbr==6.0.0 # via # -r requirements/test.txt # stevedore -pkginfo==1.11.1 +pkginfo==1.10.0 # via twine pluggy==1.5.0 # via @@ -220,7 +222,7 @@ polib==1.2.0 # edx-i18n-tools pycparser==2.22 # via cffi -pydata-sphinx-theme==0.15.3 +pydata-sphinx-theme==0.14.4 # via sphinx-book-theme pygments==2.18.0 # via @@ -237,7 +239,7 @@ pypng==0.20220715.0 # xblock-sdk pyproject-hooks==1.1.0 # via build -pytest==8.2.2 +pytest==8.3.2 # via # -r requirements/test.txt # pytest-cov @@ -260,6 +262,7 @@ python-slugify==8.0.4 pytz==2024.1 # via # -r requirements/test.txt + # babel # xblock pyyaml==6.0.1 # via @@ -311,26 +314,26 @@ snowballstemmer==2.2.0 # via sphinx soupsieve==2.5 # via beautifulsoup4 -sphinx==7.3.7 +sphinx==6.2.1 # via # -r requirements/doc.in # pydata-sphinx-theme # sphinx-book-theme -sphinx-book-theme==1.1.3 +sphinx-book-theme==1.0.1 # via -r requirements/doc.in -sphinxcontrib-applehelp==1.0.8 +sphinxcontrib-applehelp==1.0.4 # via sphinx -sphinxcontrib-devhelp==1.0.6 +sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 +sphinxcontrib-htmlhelp==2.0.1 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.7 +sphinxcontrib-qthelp==1.0.3 # via sphinx -sphinxcontrib-serializinghtml==1.1.10 +sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/test.txt # django @@ -343,15 +346,26 @@ text-unidecode==1.3 # via # -r requirements/test.txt # python-slugify -twine==5.1.0 +tomli==2.0.1 + # via + # -r requirements/test.txt + # build + # coverage + # doc8 + # pytest +twine==5.1.1 # via -r requirements/doc.in types-python-dateutil==2.9.0.20240316 # via # -r requirements/test.txt # arrow typing-extensions==4.12.2 - # via pydata-sphinx-theme -urllib3==2.2.2 + # via + # -r requirements/test.txt + # asgiref + # pydata-sphinx-theme + # rich +urllib3==1.26.19 # via # -r requirements/test.txt # botocore @@ -368,7 +382,7 @@ webob==1.8.7 # -r requirements/test.txt # xblock # xblock-sdk -xblock[django]==4.0.1 +xblock[django]==5.0.0 # via # -r requirements/test.txt # xblock-sdk @@ -378,7 +392,10 @@ xblock-sdk==0.11.0 xblock-utils==4.0.0 # via -r requirements/test.txt zipp==3.19.2 - # via importlib-metadata + # via + # -r requirements/test.txt + # importlib-metadata + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index b544e9f..d479a49 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade @@ -8,6 +8,10 @@ build==1.2.1 # via pip-tools click==8.1.7 # via pip-tools +importlib-metadata==6.11.0 + # via + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # build packaging==24.1 # via build pip-tools==7.4.1 @@ -16,8 +20,14 @@ pyproject-hooks==1.1.0 # via # build # pip-tools -wheel==0.43.0 +tomli==2.0.1 + # via + # build + # pip-tools +wheel==0.44.0 # via pip-tools +zipp==3.19.2 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/pip.txt b/requirements/pip.txt index 1001c3d..a056b76 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,14 +1,14 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade # -wheel==0.43.0 +wheel==0.44.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==24.1 +pip==24.2 # via -r requirements/pip.in -setuptools==70.1.1 +setuptools==72.1.0 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index 6ecf6a9..1999c25 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade @@ -16,24 +16,29 @@ asgiref==3.8.1 # via # -r requirements/test.txt # django -astroid==3.2.2 +astroid==3.2.4 # via # pylint # pylint-celery +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/test.txt + # django binaryornot==0.4.4 # via # -r requirements/test.txt # cookiecutter -boto3==1.34.132 +boto3==1.34.154 # via # -r requirements/test.txt # fs-s3fs -botocore==1.34.132 +botocore==1.34.154 # via # -r requirements/test.txt # boto3 # s3transfer -certifi==2024.6.2 +certifi==2024.7.4 # via # -r requirements/test.txt # requests @@ -62,31 +67,27 @@ cookiecutter==2.6.0 # via # -r requirements/test.txt # xblock-sdk -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via # -r requirements/test.txt # pytest-cov dill==0.3.8 # via pylint -django==4.2.13 +django==4.2.14 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt - # django-appconf - # django-statici18n # edx-i18n-tools # openedx-django-pyfs # xblock-sdk -django-appconf==1.0.6 - # via - # -r requirements/test.txt - # django-statici18n -django-statici18n==2.5.0 - # via -r requirements/test.txt -edx-i18n-tools==1.6.0 +edx-i18n-tools==1.6.2 # via -r requirements/test.txt -edx-lint==5.3.6 +edx-lint==5.3.7 # via -r requirements/quality.in +exceptiongroup==1.2.2 + # via + # -r requirements/test.txt + # pytest fs==2.4.16 # via # -r requirements/test.txt @@ -102,6 +103,8 @@ idna==3.7 # via # -r requirements/test.txt # requests +importlib-resources==6.4.0 + # via -r requirements/test.txt iniconfig==2.0.0 # via # -r requirements/test.txt @@ -124,17 +127,12 @@ lazy==1.6 # via # -r requirements/test.txt # xblock -lxml[html-clean]==5.2.2 +lxml==5.2.2 # via # -r requirements/test.txt # edx-i18n-tools - # lxml-html-clean # xblock # xblock-sdk -lxml-html-clean==0.1.1 - # via - # -r requirements/test.txt - # lxml mako==1.3.5 # via # -r requirements/test.txt @@ -164,7 +162,7 @@ packaging==24.1 # via # -r requirements/test.txt # pytest -path==16.14.0 +path==16.16.0 # via # -r requirements/test.txt # edx-i18n-tools @@ -182,7 +180,7 @@ polib==1.2.0 # via # -r requirements/test.txt # edx-i18n-tools -pycodestyle==2.12.0 +pycodestyle==2.12.1 # via -r requirements/quality.in pydocstyle==6.3.0 # via -r requirements/quality.in @@ -190,7 +188,7 @@ pygments==2.18.0 # via # -r requirements/test.txt # rich -pylint==3.2.3 +pylint==3.2.6 # via # edx-lint # pylint-celery @@ -208,7 +206,7 @@ pypng==0.20220715.0 # via # -r requirements/test.txt # xblock-sdk -pytest==8.2.2 +pytest==8.3.2 # via # -r requirements/test.txt # pytest-cov @@ -267,7 +265,7 @@ six==1.16.0 # python-dateutil snowballstemmer==2.2.0 # via pydocstyle -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/test.txt # django @@ -279,13 +277,26 @@ text-unidecode==1.3 # via # -r requirements/test.txt # python-slugify -tomlkit==0.12.5 +tomli==2.0.1 + # via + # -r requirements/test.txt + # coverage + # pylint + # pytest +tomlkit==0.13.0 # via pylint types-python-dateutil==2.9.0.20240316 # via # -r requirements/test.txt # arrow -urllib3==2.2.2 +typing-extensions==4.12.2 + # via + # -r requirements/test.txt + # asgiref + # astroid + # pylint + # rich +urllib3==1.26.19 # via # -r requirements/test.txt # botocore @@ -301,7 +312,7 @@ webob==1.8.7 # -r requirements/test.txt # xblock # xblock-sdk -xblock[django]==4.0.1 +xblock[django]==5.0.0 # via # -r requirements/test.txt # xblock-sdk @@ -310,6 +321,10 @@ xblock-sdk==0.11.0 # via -r requirements/test.txt xblock-utils==4.0.0 # via -r requirements/test.txt +zipp==3.19.2 + # via + # -r requirements/test.txt + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/test.txt b/requirements/test.txt index cb89304..d25bfa4 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # # make upgrade @@ -14,18 +14,23 @@ asgiref==3.8.1 # via # -r requirements/base.txt # django +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/base.txt + # django binaryornot==0.4.4 # via cookiecutter -boto3==1.34.132 +boto3==1.34.154 # via # -r requirements/base.txt # fs-s3fs -botocore==1.34.132 +botocore==1.34.154 # via # -r requirements/base.txt # boto3 # s3transfer -certifi==2024.6.2 +certifi==2024.7.4 # via requests chardet==5.2.0 # via binaryornot @@ -39,24 +44,18 @@ code-annotations==1.8.0 # via -r requirements/test.in cookiecutter==2.6.0 # via xblock-sdk -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via pytest-cov # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.txt - # django-appconf - # django-statici18n # edx-i18n-tools # openedx-django-pyfs # xblock-sdk -django-appconf==1.0.6 - # via - # -r requirements/base.txt - # django-statici18n -django-statici18n==2.5.0 - # via -r requirements/base.txt -edx-i18n-tools==1.6.0 +edx-i18n-tools==1.6.2 # via -r requirements/base.txt +exceptiongroup==1.2.2 + # via pytest fs==2.4.16 # via # -r requirements/base.txt @@ -70,6 +69,8 @@ fs-s3fs==1.1.1 # xblock-sdk idna==3.7 # via requests +importlib-resources==6.4.0 + # via -r requirements/base.txt iniconfig==2.0.0 # via pytest jinja2==3.1.4 @@ -85,17 +86,12 @@ lazy==1.6 # via # -r requirements/base.txt # xblock -lxml[html-clean]==5.2.2 +lxml==5.2.2 # via # -r requirements/base.txt # edx-i18n-tools - # lxml-html-clean # xblock # xblock-sdk -lxml-html-clean==0.1.1 - # via - # -r requirements/base.txt - # lxml mako==1.3.5 # via # -r requirements/base.txt @@ -117,7 +113,7 @@ openedx-django-pyfs==3.6.0 # xblock packaging==24.1 # via pytest -path==16.14.0 +path==16.16.0 # via # -r requirements/base.txt # edx-i18n-tools @@ -133,7 +129,7 @@ pygments==2.18.0 # via rich pypng==0.20220715.0 # via xblock-sdk -pytest==8.2.2 +pytest==8.3.2 # via # pytest-cov # pytest-django @@ -184,7 +180,7 @@ six==1.16.0 # fs # fs-s3fs # python-dateutil -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/base.txt # django @@ -192,9 +188,18 @@ stevedore==5.2.0 # via code-annotations text-unidecode==1.3 # via python-slugify +tomli==2.0.1 + # via + # coverage + # pytest types-python-dateutil==2.9.0.20240316 # via arrow -urllib3==2.2.2 +typing-extensions==4.12.2 + # via + # -r requirements/base.txt + # asgiref + # rich +urllib3==1.26.19 # via # -r requirements/base.txt # botocore @@ -210,7 +215,7 @@ webob==1.8.7 # -r requirements/base.txt # xblock # xblock-sdk -xblock[django]==4.0.1 +xblock[django]==5.0.0 # via # -r requirements/base.txt # xblock-sdk @@ -219,6 +224,10 @@ xblock-sdk==0.11.0 # via -r requirements/test.in xblock-utils==4.0.0 # via -r requirements/base.txt +zipp==3.19.2 + # via + # -r requirements/base.txt + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index d782599..0000000 --- a/setup.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[isort] -include_trailing_comma = True -indent = ' ' -line_length = 120 -multi_line_output = 3 -skip= - migrations - -[wheel] -universal = 1 diff --git a/setup.py b/setup.py index bded433..5c7921a 100755 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ """ Package metadata for accordion. """ + import os import re import sys @@ -19,11 +20,10 @@ def get_version(*file_paths): """ filename = os.path.join(os.path.dirname(__file__), *file_paths) version_file = open(filename, encoding="utf8").read() - version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", - version_file, re.M) + version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M) if version_match: return version_match.group(1) - raise RuntimeError('Unable to find version string.') + raise RuntimeError("Unable to find version string.") def load_requirements(*requirements_paths): @@ -46,14 +46,14 @@ def check_name_consistent(package): with extras we don't constrain it without mentioning the extras (since that too would interfere with matching constraints.) """ - canonical = package.lower().replace('_', '-').split('[')[0] + canonical = package.lower().replace("_", "-").split("[")[0] seen_spelling = by_canonical_name.get(canonical) if seen_spelling is None: by_canonical_name[canonical] = package elif seen_spelling != package: raise Exception( f'Encountered both "{seen_spelling}" and "{package}" in requirements ' - 'and constraints files; please use just one or the other.' + "and constraints files; please use just one or the other." ) requirements = {} @@ -67,7 +67,9 @@ def check_name_consistent(package): % (re_package_name_base_chars, re_package_name_base_chars) ) - def add_version_constraint_or_raise(current_line, current_requirements, add_if_not_present): + def add_version_constraint_or_raise( + current_line, current_requirements, add_if_not_present + ): regex_match = requirement_line_regex.match(current_line) if regex_match: package = regex_match.group(1) @@ -76,11 +78,16 @@ def add_version_constraint_or_raise(current_line, current_requirements, add_if_n existing_version_constraints = current_requirements.get(package, None) # It's fine to add constraints to an unconstrained package, # but raise an error if there are already constraints in place. - if existing_version_constraints and existing_version_constraints != version_constraints: - raise BaseException(f'Multiple constraint definitions found for {package}:' - f' "{existing_version_constraints}" and "{version_constraints}".' - f'Combine constraints into one location with {package}' - f'{existing_version_constraints},{version_constraints}.') + if ( + existing_version_constraints + and existing_version_constraints != version_constraints + ): + raise BaseException( + f"Multiple constraint definitions found for {package}:" + f' "{existing_version_constraints}" and "{version_constraints}".' + f"Combine constraints into one location with {package}" + f"{existing_version_constraints},{version_constraints}." + ) if add_if_not_present or package in current_requirements: current_requirements[package] = version_constraints @@ -91,8 +98,12 @@ def add_version_constraint_or_raise(current_line, current_requirements, add_if_n for line in reqs: if is_requirement(line): add_version_constraint_or_raise(line, requirements, True) - if line and line.startswith('-c') and not line.startswith('-c http'): - constraint_files.add(os.path.dirname(path) + '/' + line.split('#')[0].replace('-c', '').strip()) + if line and line.startswith("-c") and not line.startswith("-c http"): + constraint_files.add( + os.path.dirname(path) + + "/" + + line.split("#")[0].replace("-c", "").strip() + ) # process constraint files: add constraints to existing requirements for constraint_file in constraint_files: @@ -102,7 +113,9 @@ def add_version_constraint_or_raise(current_line, current_requirements, add_if_n add_version_constraint_or_raise(line, requirements, False) # process back into list of pkg><=constraints strings - constrained_requirements = [f'{pkg}{version or ""}' for (pkg, version) in sorted(requirements.items())] + constrained_requirements = [ + f'{pkg}{version or ""}' for (pkg, version) in sorted(requirements.items()) + ] return constrained_requirements @@ -114,7 +127,9 @@ def is_requirement(line): bool: True if the line is not blank, a comment, a URL, or an included file """ - return line and line.strip() and not line.startswith(("-r", "#", "-e", "git+", "-c")) + return ( + line and line.strip() and not line.startswith(("-r", "#", "-e", "git+", "-c")) + ) def package_data(pkg, roots): @@ -134,49 +149,51 @@ def package_data(pkg, roots): return {pkg: data} -VERSION = get_version('accordion', '__init__.py') +VERSION = get_version("accordion", "__init__.py") -if sys.argv[-1] == 'tag': +if sys.argv[-1] == "tag": print("Tagging the version on github:") os.system("git tag -a %s -m 'version %s'" % (VERSION, VERSION)) os.system("git push --tags") sys.exit() -README = open(os.path.join(os.path.dirname(__file__), 'README.rst'), encoding="utf8").read() -CHANGELOG = open(os.path.join(os.path.dirname(__file__), 'CHANGELOG.rst'), encoding="utf8").read() +README = open( + os.path.join(os.path.dirname(__file__), "README.rst"), encoding="utf8" +).read() +CHANGELOG = open( + os.path.join(os.path.dirname(__file__), "CHANGELOG.rst"), encoding="utf8" +).read() setup( - name='xblock-accordion', + name="xblock-accordion", version=VERSION, description="""Accordion XBlock""", - long_description=README + '\n\n' + CHANGELOG, - author='OpenCraft', - author_email='help+xblock@opencraft.com', - url='https://github.com/open-craft/xblock-accordion', + long_description=README + "\n\n" + CHANGELOG, + author="OpenCraft", + author_email="help+xblock@opencraft.com", + url="https://github.com/open-craft/xblock-accordion", packages=find_packages( - include=['accordion', 'accordion.*'], + include=["accordion", "accordion.*"], exclude=["*tests"], ), - include_package_data=True, - install_requires=load_requirements('requirements/base.in'), + install_requires=load_requirements("requirements/base.in"), python_requires=">=3.8", license="Apache 2.0", zip_safe=False, - keywords='Python edx', + keywords="Python edx", classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Natural Language :: English', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.11', + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", ], entry_points={ - 'xblock.v1': [ - 'accordion = accordion:AccordionXBlock', + "xblock.v1": [ + "accordion = accordion:AccordionXBlock", ] }, package_data=package_data("accordion", ["static", "public"]), - ) diff --git a/test_utils/__init__.py b/test_utils/__init__.py deleted file mode 100644 index 7961e47..0000000 --- a/test_utils/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -""" -Test utilities. - -Since pytest discourages putting __init__.py into testdirectory -(i.e. making tests a package) one cannot import from anywhere -under tests folder. However, some utility classes/methods might be useful -in multiple test modules (i.e. factoryboy factories, base test classes). - -So this package is the place to put them. -""" diff --git a/tests/test_accordion.py b/tests/test_accordion.py index ed08dc0..0e1355e 100644 --- a/tests/test_accordion.py +++ b/tests/test_accordion.py @@ -6,16 +6,26 @@ from xblock.fields import ScopeIds from xblock.test.toy_runtime import ToyRuntime -from my_xblock import MyXBlock +from accordion import AccordionXBlock -class TestAccordionXBlock(TestCase): - """Tests for AccordionXBlock""" - def test_my_student_view(self): - """Test the basic view loads.""" - scope_ids = ScopeIds('1', '2', '3', '4') - block = MyXBlock(ToyRuntime(), scope_ids=scope_ids) - frag = block.student_view() - as_dict = frag.to_dict() - content = as_dict['content'] - self.assertIn('MyXBlock: count is now', content, 'XBlock did not render correct student view') +def test_student_view_json_data(): + """Test the data structure returned by student_view.""" + scope_ids = ScopeIds("1", "2", "3", "4") + block = AccordionXBlock(ToyRuntime(), scope_ids=scope_ids) + frag = block.student_view() + as_dict = frag.to_dict() + assert "panels" in as_dict["json_init_args"] + assert "styling" in as_dict["json_init_args"] + assert "url" in as_dict["json_init_args"] + + +def test_studio_view_json_data(): + """Test the data structure returned by studio_view.""" + scope_ids = ScopeIds("1", "2", "3", "4") + block = AccordionXBlock(ToyRuntime(), scope_ids=scope_ids) + frag = block.studio_view() + as_dict = frag.to_dict() + assert "panels" in as_dict["json_init_args"] + assert "styling" in as_dict["json_init_args"] + assert "url" in as_dict["json_init_args"] diff --git a/tox.ini b/tox.ini index 7bafe18..c1585cf 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py38-django{32,40}, quality, docs +envlist = py38-django32,py{311,312}-django42, quality, docs skipsdist = true [doc8] @@ -38,7 +38,7 @@ norecursedirs = .* docs requirements site-packages [testenv] deps = django32: Django>=3.2,<4.0 - django40: Django>=4.0,<4.1 + django42: Django>=4.2,<5.0 -r{toxinidir}/requirements/test.txt allowlist_externals = mkdir @@ -78,8 +78,8 @@ allowlist_externals = deps = -r{toxinidir}/requirements/quality.txt commands = - pylint accordion test_utils manage.py + pylint accordion manage.py pycodestyle accordion manage.py pydocstyle accordion manage.py - isort --check-only --diff test_utils accordion manage.py + isort --check-only --diff accordion manage.py make selfcheck diff --git a/translation_settings.py b/translation_settings.py index 569c222..e221b03 100644 --- a/translation_settings.py +++ b/translation_settings.py @@ -6,25 +6,23 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ + import os BASE_DIR = os.path.dirname(__file__) -SECRET_KEY = os.getenv('DJANGO_SECRET', 'open_secret') +SECRET_KEY = os.getenv("DJANGO_SECRET", "open_secret") # Application definition -INSTALLED_APPS = ( - 'statici18n', - 'accordion', -) +INSTALLED_APPS = ("accordion",) # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'UTC' +TIME_ZONE = "UTC" USE_I18N = True @@ -36,17 +34,15 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/ -STATIC_URL = '/static/' +STATIC_URL = "/static/" # statici18n # https://django-statici18n.readthedocs.io/en/latest/settings.html -LOCALE_PATHS = [os.path.join(BASE_DIR, 'accordion', 'conf', 'locale')] +LOCALE_PATHS = [os.path.join(BASE_DIR, "accordion", "conf", "locale")] -STATICI18N_DOMAIN = 'text' -STATICI18N_NAMESPACE = 'AccordionI18n' -STATICI18N_PACKAGES = ( - 'accordion', -) -STATICI18N_ROOT = 'accordion/public/js' -STATICI18N_OUTPUT_DIR = 'translations' +STATICI18N_DOMAIN = "text" +STATICI18N_NAMESPACE = "AccordionI18n" +STATICI18N_PACKAGES = ("accordion",) +STATICI18N_ROOT = "accordion/public/js" +STATICI18N_OUTPUT_DIR = "translations"