diff --git a/.circleci/config.yml b/.circleci/config.yml index fc4cead7a9..61357bf13d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,7 +20,9 @@ jobs: - image: ualbertalib/docker-fcrepo4:4.7 environment: CATALINA_OPTS: '-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC' - - image: zookeeper:3.4 + - image: zookeeper:3.9 + environment: + ZOO_ADMINSERVER_ENABLED: false - image: solr:9 environment: VERBOSE: yes diff --git a/.gitignore b/.gitignore index 1270104b50..96e25700a6 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,9 @@ yarn-debug.log* # Cypress test output /cypress +/spec/cypress/downloads +/spec/cypress/screenshots +/spec/cypress/videos # ActiveStorage /storage diff --git a/Dockerfile b/Dockerfile index 45119f25e1..0942a04acc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -133,7 +133,7 @@ COPY --from=node-modules --chown=app:app /node_modules ./node_modules USER app ENV RAILS_ENV=production -RUN SECRET_KEY_BASE=$(ruby -r 'securerandom' -e 'puts SecureRandom.hex(64)') bundle exec rake assets:precompile +RUN SECRET_KEY_BASE=$(ruby -r 'securerandom' -e 'puts SecureRandom.hex(64)') SHAKAPACKER_ASSET_HOST='' bundle exec rake assets:precompile RUN cp config/controlled_vocabulary.yml.example config/controlled_vocabulary.yml diff --git a/Gemfile b/Gemfile index a6274460e6..e108dde2c8 100644 --- a/Gemfile +++ b/Gemfile @@ -53,7 +53,7 @@ gem 'avalon-about', git: 'https://github.com/avalonmediasystem/avalon-about.git' #gem 'bootstrap-sass', '< 3.4.1' # Pin to less than 3.4.1 due to change in behavior with popovers gem 'bootstrap-toggle-rails' gem 'bootstrap_form' -gem 'iiif_manifest', '~> 1.5' +gem 'iiif_manifest', '~> 1.6' gem 'rack-cors', require: 'rack/cors' gem 'rails_same_site_cookie' gem 'recaptcha', require: 'recaptcha/rails' diff --git a/Gemfile.lock b/Gemfile.lock index 2871b823f9..a1027bec21 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,47 +68,47 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8.1) - actionpack (= 7.0.8.1) - activesupport (= 7.0.8.1) + actioncable (7.0.8.4) + actionpack (= 7.0.8.4) + activesupport (= 7.0.8.4) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.1) - actionpack (= 7.0.8.1) - activejob (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionmailbox (7.0.8.4) + actionpack (= 7.0.8.4) + activejob (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8.1) - actionpack (= 7.0.8.1) - actionview (= 7.0.8.1) - activejob (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionmailer (7.0.8.4) + actionpack (= 7.0.8.4) + actionview (= 7.0.8.4) + activejob (= 7.0.8.4) + activesupport (= 7.0.8.4) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8.1) - actionview (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionpack (7.0.8.4) + actionview (= 7.0.8.4) + activesupport (= 7.0.8.4) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.1) - actionpack (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + actiontext (7.0.8.4) + actionpack (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.1) - activesupport (= 7.0.8.1) + actionview (7.0.8.4) + activesupport (= 7.0.8.4) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -145,8 +145,8 @@ GEM om (~> 3.1) rdf (~> 3.2) rdf-rdfxml (~> 3.2) - activejob (7.0.8.1) - activesupport (= 7.0.8.1) + activejob (7.0.8.4) + activesupport (= 7.0.8.4) globalid (>= 0.3.6) activejob-traffic_control (0.1.3) activejob (>= 4.2) @@ -155,25 +155,25 @@ GEM activejob-uniqueness (0.2.5) activejob (>= 4.2, < 7.1) redlock (>= 1.2, < 2) - activemodel (7.0.8.1) - activesupport (= 7.0.8.1) - activerecord (7.0.8.1) - activemodel (= 7.0.8.1) - activesupport (= 7.0.8.1) + activemodel (7.0.8.4) + activesupport (= 7.0.8.4) + activerecord (7.0.8.4) + activemodel (= 7.0.8.4) + activesupport (= 7.0.8.4) activerecord-session_store (2.0.0) actionpack (>= 5.2.4.1) activerecord (>= 5.2.4.1) multi_json (~> 1.11, >= 1.11.2) rack (>= 2.0.8, < 3) railties (>= 5.2.4.1) - activestorage (7.0.8.1) - actionpack (= 7.0.8.1) - activejob (= 7.0.8.1) - activerecord (= 7.0.8.1) - activesupport (= 7.0.8.1) + activestorage (7.0.8.4) + actionpack (= 7.0.8.4) + activejob (= 7.0.8.4) + activerecord (= 7.0.8.4) + activesupport (= 7.0.8.4) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8.1) + activesupport (7.0.8.4) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -274,7 +274,7 @@ GEM bootstrap_form (5.2.3) actionpack (>= 6.0) activemodel (>= 6.0) - builder (3.2.4) + builder (3.3.0) byebug (11.1.3) cancancan (3.4.0) capistrano (3.17.3) @@ -319,7 +319,7 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.3) config (4.2.1) deep_merge (~> 1.2, >= 1.2.1) dry-validation (~> 1.0, >= 1.0.0) @@ -406,7 +406,7 @@ GEM mail (~> 2.7) equivalent-xml (0.6.0) nokogiri (>= 1.4.3) - erubi (1.12.0) + erubi (1.13.0) et-orbi (1.2.7) tzinfo ethon (0.16.0) @@ -491,10 +491,10 @@ GEM hydra-access-controls (= 12.1.0) hydra-core (= 12.1.0) rails (>= 5.2, < 7.1) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) iconv (1.0.8) - iiif_manifest (1.5.0) + iiif_manifest (1.6.0) activesupport (>= 4) ims-lti (1.1.13) builder @@ -508,7 +508,7 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (6.0.1) + jquery-ui-rails (7.0.0) railties (>= 3.2.16) json (2.6.3) json-canonicalization (0.3.1) @@ -572,20 +572,20 @@ GEM marcel (1.0.4) matrix (0.4.2) memoist (0.16.2) - method_source (1.0.0) + method_source (1.1.0) mime-types (3.4.1) mime-types-data (~> 3.2015) mime-types-data (3.2022.0105) mini_mime (1.1.5) - mini_portile2 (2.8.5) + mini_portile2 (2.8.7) minitar (0.9) - minitest (5.22.3) + minitest (5.24.1) msgpack (1.6.0) multi_json (1.15.0) multi_xml (0.6.0) multipart-post (2.3.0) mysql2 (0.5.5) - net-imap (0.4.10) + net-imap (0.4.14) date net-protocol net-ldap (0.18.0) @@ -595,16 +595,16 @@ GEM timeout net-scp (4.0.0) net-ssh (>= 2.6.5, < 8.0.0) - net-smtp (0.4.0.1) + net-smtp (0.5.0) net-protocol net-ssh (7.0.1) netrc (0.11.0) - nio4r (2.7.1) + nio4r (2.7.3) noid (0.9.0) noid-rails (3.1.0) actionpack (>= 5.0.0, < 7.1) noid (~> 0.9) - nokogiri (1.16.3) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) nom-xml (1.2.0) @@ -653,7 +653,7 @@ GEM puma (6.4.2) nio4r (~> 2.0) raabro (1.4.0) - racc (1.7.3) + racc (1.8.0) rack (2.2.9) rack-cors (2.0.2) rack (>= 2.0.0) @@ -663,20 +663,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8.1) - actioncable (= 7.0.8.1) - actionmailbox (= 7.0.8.1) - actionmailer (= 7.0.8.1) - actionpack (= 7.0.8.1) - actiontext (= 7.0.8.1) - actionview (= 7.0.8.1) - activejob (= 7.0.8.1) - activemodel (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + rails (7.0.8.4) + actioncable (= 7.0.8.4) + actionmailbox (= 7.0.8.4) + actionmailer (= 7.0.8.4) + actionpack (= 7.0.8.4) + actiontext (= 7.0.8.4) + actionview (= 7.0.8.4) + activejob (= 7.0.8.4) + activemodel (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) bundler (>= 1.15.0) - railties (= 7.0.8.1) + railties (= 7.0.8.4) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -691,15 +691,15 @@ GEM rails_same_site_cookie (0.1.9) rack (>= 1.5) user_agent_parser (~> 2.6) - railties (7.0.8.1) - actionpack (= 7.0.8.1) - activesupport (= 7.0.8.1) + railties (7.0.8.4) + actionpack (= 7.0.8.4) + activesupport (= 7.0.8.4) method_source rake (>= 12.2) thor (~> 1.0) zeitwerk (~> 2.5) rainbow (3.1.1) - rake (13.1.0) + rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) @@ -766,7 +766,8 @@ GEM mime-types (>= 1.16, < 4.0) netrc (~> 0.8) retriable (3.1.2) - rexml (3.2.5) + rexml (3.3.1) + strscan roo (2.10.0) nokogiri (~> 1) rubyzip (>= 1.3.0, < 3.0.0) @@ -909,6 +910,7 @@ GEM net-scp (>= 1.1.2) net-ssh (>= 2.8.0) stomp (1.4.10) + strscan (3.1.0) suo (0.4.0) dalli msgpack @@ -966,7 +968,7 @@ GEM rexml xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.13) + zeitwerk (2.6.16) zk (1.10.0) zookeeper (~> 1.5.0) zookeeper (1.5.5) @@ -1037,7 +1039,7 @@ DEPENDENCIES httpx hydra-head (~> 12.0) iconv (~> 1.0.6) - iiif_manifest (~> 1.5) + iiif_manifest (~> 1.6) ims-lti (~> 1.1.13) jbuilder (~> 2.0) jquery-datatables diff --git a/app/assets/images/iiif-logo.svg b/app/assets/images/iiif-logo.svg new file mode 100644 index 0000000000..529ba51ee9 --- /dev/null +++ b/app/assets/images/iiif-logo.svg @@ -0,0 +1,34 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/app/assets/javascripts/add-playlist-option.js.coffee b/app/assets/javascripts/add-playlist-option.js.coffee index 682f6ea7ca..a11a513531 100644 --- a/app/assets/javascripts/add-playlist-option.js.coffee +++ b/app/assets/javascripts/add-playlist-option.js.coffee @@ -32,7 +32,7 @@ $ -> has_new_opt = true if !has_new_opt - select_element.prepend(new Option(addnew)) + select_element.append(new Option(addnew)) getSearchTerm = () -> return $('span.select2-search--dropdown input').val() @@ -103,7 +103,7 @@ $ -> $('#add-playlist-modal').on('hidden.bs.modal', () -> if (!add_success) - op = select_element.children()[1] + op = select_element.children()[0] if (op) newval = op.value else diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 8e041b1aa6..19c78f1385 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -47,8 +47,4 @@ // include all of our vendored js //= require_tree ../../../vendor/assets/javascripts/. -// Require VideoJS and VideoJS quality selector for embedded player -//= require video.js/dist/video.min.js -//= require @silvermine/videojs-quality-selector/dist/js/silvermine-videojs-quality-selector.min.js - //= require_tree . diff --git a/app/assets/javascripts/player_listeners.js b/app/assets/javascripts/player_listeners.js new file mode 100644 index 0000000000..fb66f3fceb --- /dev/null +++ b/app/assets/javascripts/player_listeners.js @@ -0,0 +1,511 @@ +/* + * Copyright 2011-2024, The Trustees of Indiana University and Northwestern + * University. Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * --- END LICENSE_HEADER BLOCK --- +*/ + +let canvasIndex = -1; +let currentSectionLabel = undefined; +let addToPlaylistListenersAdded = false; +let firstLoad = true; +let streamId = ''; +let isMobile = false; +let isPlaying = false; + +/** + * Bind action buttons on the page with player events and re-populate details + * related to the current section (masterfile) for each action form when a new + * section is loaded into the player. + * This function is called on 500ms interval and it keeps polling for player events + * to update action forms and buttons. + * @param {Object} player + * @param {String} mediaObjectId + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + */ +function addActionButtonListeners(player, mediaObjectId, sectionIds) { + if (player && player.player != undefined) { + let currentIndex = parseInt(player.dataset.canvasindex); + /* + For both Android and iOS, player.readyState() is 0 until media playback is + started. Therefore, use player.src() to check whether there's a playable media + loaded into the player instead of player.readyState(). + Keep the player.readyState() >= 2 check for desktop browsers, because without + that check the add to playlist form populates NaN values for time fields when user + clicks the 'Add to Playlist' button immediately on page load, which does not + happen in mobile context. + */ + const USER_AGENT = window.navigator.userAgent; + // Identify both iPad and iPhone devices + const IS_IPHONE = (/iPhone/i).test(USER_AGENT); + const IS_MOBILE = (/Mobi/i).test(USER_AGENT); + const IS_TOUCH_ONLY = navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && !window.matchMedia("(pointer: fine").matches; + const IS_SAFARI = (/Safari/i).test(USER_AGENT); + // For mobile devices use this check instead of player.readyState() >= 2 for enabling action buttons + isMobile = (IS_TOUCH_ONLY || IS_IPHONE || IS_MOBILE) && IS_SAFARI && player?.player.src() != ''; + if (currentIndex != canvasIndex && !player.player.canvasIsEmpty) { + if (isMobile || player?.player.readyState() >= 2) { + canvasIndex = currentIndex; + buildActionButtons(player, mediaObjectId, sectionIds); + firstLoad = false; + } + } + /* + Update only share links when Canvas/section is empty, + i.e. Canvas/section is empty with an inaccessible media source + */ + if (currentIndex != canvasIndex && player.player.canvasIsEmpty) { + canvasIndex = currentIndex; + setUpShareLinks(mediaObjectId, sectionIds); + resetAllActionButtons(); + } + + /* Add player event listeners to update UI components on the page */ + // Listen to 'seeked' event to udate add to playlist form + player.player.on('seeked', () => { + if (getActiveItem() != undefined) { + activeTrack = getActiveItem(false); + if (activeTrack != undefined) { + streamId = activeTrack.streamId; + } + disableEnableCurrentTrack(activeTrack, player.player.currentTime(), isPlaying, currentSectionLabel); + } + }); + + player.player.on('play', () => { isPlaying = true; }); + + player.player.on('pause', () => { isPlaying = false; }); + + /* + Disable action buttons tied to player related information on player's 'loadstart' event which functions + parallel to the player's src changes. So, that the user doesn't interact with them get corrupted data + in the UI when player is loading the new section media into it. + Once the player is fully loaded these buttons are enabled as needed. + */ + player.player.on('loadstart', () => { + resetAllActionButtons(); + }); + + // Collapse sub-panel related to the selected option in the add to playlist form when it is collapsed + let playlistSection = $('#playlistitem_scope_section'); + let playlistTrack = $('#playlistitem_scope_track'); + let multiItemExpanded = $('#multiItemCheck.show').val(); + let moreDetailsExpanded = $('#moreDetails.show').val(); + if (playlistSection.prop("checked") && multiItemExpanded === undefined && moreDetailsExpanded === undefined) { + collapseMultiItemCheck(); + } else if (playlistTrack.prop("checked") && multiItemExpanded === undefined && moreDetailsExpanded === undefined) { + collapseMoreDetails(); + } + } +} +/** + * Reset the action buttons and global variables on Canvas/section change + */ +function resetAllActionButtons() { + currentSectionLabel = undefined; + let addToPlaylistBtn = document.getElementById('addToPlaylistBtn'); + $('#addToPlaylistPanel').collapse('hide'); + resetAddToPlaylistForm(); + if (addToPlaylistBtn) { + addToPlaylistBtn.disabled = true; + } + let thumbnailBtn = document.getElementById('thumbnailBtn'); + if (thumbnailBtn) { + thumbnailBtn.disabled = true; + } + let timelineBtn = document.getElementById('timelineBtn'); + if (timelineBtn) { + timelineBtn.disabled = true; + } +} + +/** + * Build action buttons for create thumbnail, add to playlist, create timeline and share + * for the current section (masterfile) loaded into the player + * @param {Object} player player object on page + * @param {String} mediaObjectId + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + */ +function buildActionButtons(player, mediaObjectId, sectionIds) { + setUpShareLinks(mediaObjectId, sectionIds); + setUpAddToPlaylist(player, sectionIds, mediaObjectId); + setUpCreateThumbnail(player, sectionIds); + setUpCreateTimeline(player); +} + +/** + * Populate the relevant share links for the current section (masterfile) loaded into + * the player on page + * @param {String} mediaObjectId + * @param {Array} sectionIds array of ordered masterfile id in the mediaobject + */ +function setUpShareLinks(mediaObjectId, sectionIds) { + const sectionId = sectionIds[canvasIndex]; + $.ajax({ + url: '/media_objects/' + mediaObjectId + '/section/' + sectionId + '/stream', + type: 'GET', + success: function (data) { + const { lti_share_link, link_back_url, embed_code } = data; + $('#share-link-section') + .val(link_back_url) + .attr('placeholder', link_back_url); + $('#ltilink-section') + .val(lti_share_link) + .attr('placeholder', lti_share_link); + $('#embed-part').val(embed_code); + }, + error: function (err) { + console.log(err); + } + }); + shareListeners(); +} + +/** + * Event listeners for the share panel and tabs + */ +function shareListeners() { + // Hide add to playlist panel when share resource panel is collapsed + $('#shareResourcePanel').on('show.bs.collapse', function (e) { + $('#addToPlaylistPanel').collapse('hide'); + }); + + if (!$('nav.share-tabs').first().hasClass('active')) { + $('nav.share-tabs').first().toggleClass('active'); + $('.share-tabs a').first().attr('aria-selected', true); + $('#share-list .tab-content .tab-pane').first().toggleClass('active'); + } + + $('.share-tabs a').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + $('.share-tabs a').attr('aria-selected', false); + $(this).attr('aria-selected', true); + }); +} + +/** + * Build and setup add to playlist form on section (masterfile) change + * @param {Object} player + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + * @param {String} mediaObjectId + */ +function setUpAddToPlaylist(player, sectionIds, mediaObjectId) { + let addToPlaylistBtn = document.getElementById('addToPlaylistBtn'); + + if (addToPlaylistBtn && addToPlaylistBtn.disabled + && (player.player?.readyState() >= 2 || isMobile)) { + addToPlaylistBtn.disabled = false; + if (!addToPlaylistListenersAdded) { + // Add 'Add new playlist' option to dropdown + window.add_new_playlist_option(); + addToPlaylistListeners(sectionIds, mediaObjectId); + } + } +} + +/** + * Event listeners for HTML elementes associated with add to playlist action + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + * @param {String} mediaObjectId + */ +function addToPlaylistListeners(sectionIds, mediaObjectId) { + $('#addToPlaylistPanel').on('show.bs.collapse', function (e) { + // Hide add to playlist alert on panel show + $('#add_to_playlist_alert').slideUp(0); + // Hide share resource panel on add to playlist panel show + $('#shareResourcePanel').collapse('hide'); + + let playlistForm = $('#add_to_playlist')[0]; + if (!playlistForm) { + return; + } + + // For custom scope set start, end times as current time and media duration respectively + let start, end, currentTime, duration = 0; + let currentPlayer = document.getElementById('iiif-media-player'); + if (currentPlayer && currentPlayer.player) { + currentTime = currentPlayer.player.currentTime(); + duration = currentPlayer.player.duration(); + } + + let activeTrack = null; + let mediaObjectTitle = playlistForm.dataset.title; + let timelineScopes = getTimelineScopes(); + let scopes = timelineScopes.scopes; + streamId = timelineScopes.streamId || sectionIds[canvasIndex]; + currentSectionLabel = `${mediaObjectTitle || mediaObjectId} - ${streamId}`; + + // Fill in the current track and section titles and custom scope times + if (scopes?.length > 0) { + let sectionInfo = scopes.filter(s => s.tags.includes('current-section')); + let trackInfo = scopes.filter(s => s.tags.includes('current-track')); + + if (sectionInfo?.length > 0) { + currentSectionLabel = sectionInfo[0].label || currentSectionLabel; + + if (trackInfo.length === 0 && event?.target.id === "addToPlaylistBtn") { + $('#playlistitem_scope_section').prop('checked', true); + } + } + + if (trackInfo.length > 0) { + activeTrack = trackInfo[0]; + let trackName = activeTrack.tags.includes('current-section') + ? activeTrack.label || streamId + : `${currentSectionLabel} - ${activeTrack.label || streamId}`; + $('#current-track-name').text(trackName); + if (event?.target.id === "addToPlaylistBtn") { + $('#playlistitem_scope_track').prop('checked', true); + } + // Update start, end times for custom scope from the active timespan + start = activeTrack.times.begin; + end = activeTrack.times.end; + } else { + activeTrack = undefined; + } + } + + disableEnableCurrentTrack( + activeTrack, + currentTime, + isPlaying, + $('#playlist_item_title').val() || currentSectionLabel // Preserve user edits for the title when available + ); + $('#current-section-name').text(currentSectionLabel); + $('#playlist_item_start').val(createTimestamp(start || currentTime, true)); + $('#playlist_item_end').val(createTimestamp(duration || end, true)); + + // Show add to playlist form on show and reset initially + $('#add_to_playlist_form_group').slideDown(); + }); + + $('#addToPlaylistSave').on('click', function (e) { + e.preventDefault(); + let playlistId = $('#post_playlist_id').val(); + if ($('#playlistitem_scope_track')[0].checked) { + let starttime = createTimestamp(activeTrack.times.begin, true); + let endtime = createTimestamp(activeTrack.times.end, true); + addPlaylistItem(playlistId, streamId, starttime, endtime); + } else if ($('#playlistitem_timeselection')[0].checked) { + let starttime = $('#playlist_item_start').val(); + let endtime = $('#playlist_item_end').val(); + addPlaylistItem(playlistId, streamId, starttime, endtime); + } else if ($('#playlistitem_scope_section')[0].checked) { + let multiItemCheck = $('#playlistitem_scope_structure')[0].checked; + let scope = multiItemCheck ? 'structure' : 'section'; + addToPlaylist(playlistId, scope, streamId, mediaObjectId); + } else if ($('#playlistitem_scope_item')[0].checked) { + let multiItemCheck = $('#playlistitem_scope_structure')[0].checked; + let scope = multiItemCheck ? 'structure' : 'section'; + addToPlaylist(playlistId, scope, '', mediaObjectId); + } else { + handleAddError({ responseJSON: { message: ['Please select a playlist option'] } }); + } + }); + + // In testing, this action did not function properly using `hide.bs.collapse` + // or `hidden.bs.collapse`. Triggering on click and limiting via if-statement + // was consistent. + $('#addToPlaylistBtn').on('click', function (e) { + // Only reset the form when the panel is closing to mitigate risk + // of conflicting actions when populating panel. + if ($('#addToPlaylistPanel.show').length > 0) { + resetAddToPlaylistForm(); + } + }); + + addToPlaylistListenersAdded = true; +} + +/** + * Build and setup create thubmnail button for the current section (masterfile) + * @param {Object} player + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + */ +function setUpCreateThumbnail(player, sectionIds) { + let thumbnailBtn = document.getElementById('thumbnailBtn'); + let baseUrl = ''; + let offset = ''; + + // Leave 'Create Thumbnail' button disabled when item is audio + if (thumbnailBtn && thumbnailBtn.disabled + && (player.player?.readyState() >= 2 || isMobile) && !player.player.isAudio()) { + thumbnailBtn.disabled = false; + + /* + Only add the click event handlers for 'Create Thumbnail' and 'Update Poster Image' + buttons only once (on initial page load). This is to avoid adding the same event + handler on each new section load, which results in exponentially growing API requests + each time the thumbnail is updated. + */ + if (firstLoad) { + thumbnailBtn.addEventListener('click', + () => handleCreateThumbnailModalShow(sectionIds, offset, baseUrl)); + document.getElementById('create-thumbnail-submit-button').addEventListener('click', + () => handleUpdateThumbnail(sectionIds, offset, baseUrl)); + } + } +}; + +/** + * Event handler for the click event on 'Create Thumbnail' button + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + * @param {String} offset time offset for the selected frame + * @param {String} baseUrl base URL for the API request to get the still frame + */ +function handleCreateThumbnailModalShow(sectionIds, offset, baseUrl) { + let currentPlayer = document.getElementById('iiif-media-player'); + let $imgPolaroid = document.getElementById('img-polaroid'); + offset = currentPlayer.player.currentTime(); + + const sectionId = sectionIds[canvasIndex]; + baseUrl = '/master_files/' + sectionId; + + if ($imgPolaroid) { + let src = baseUrl + '/poster?offset=' + offset + '&preview=true'; + + // Display a preview of thumbnail to user + $imgPolaroid.setAttribute('src', src); + $($imgPolaroid).fadeIn('slow'); + } +}; + +/** + * Event handler for the click event on 'Update Poster Image' button in the modal + * @param {Array} sectionIds array of ordered masterfile ids in the mediaobject + * @param {String} offset time offset for the selected frame + * @param {String} baseUrl base URL for the API request to set the thumbnail + */ +function handleUpdateThumbnail(sectionIds, offset, baseUrl) { + let currentPlayer = document.getElementById('iiif-media-player'); + const sectionId = sectionIds[canvasIndex]; + baseUrl = '/master_files/' + sectionId; + offset = currentPlayer.player.currentTime(); + + const modalBody = document.getElementsByClassName('modal-body')[0]; + // Put in a loading spinner and disable buttons to prevent double clicks + modalBody.classList.add('spinner'); + $('#thumbnailModal') + .find('button') + .attr({ disabled: true }); + + $.ajax({ + url: baseUrl + '/still', + type: 'POST', + data: { + offset: offset + } + }) + .done(response => { + $('#thumbnailModal').modal('hide'); + }) + .fail(error => { + console.log(error); + }) + .always(() => { + modalBody.classList.remove('spinner'); + $('#thumbnailModal') + .find('button') + .attr({ disabled: false }); + }); +}; + +/** + * Build and setup create timeline button for the current section (masterfile) + * @param {Object} player + */ +function setUpCreateTimeline(player) { + let timelineBtn = document.getElementById('timelineBtn'); + + if (timelineBtn && timelineBtn.disabled + && (player.player?.readyState() >= 2 || isMobile)) { + timelineBtn.disabled = false; + timelineBtn.addEventListener('click', + () => handleCreateTimelineModalShow() + ); + } +} + +/** + * Event handler for the click event on 'Create Timeline' button + */ +function handleCreateTimelineModalShow() { + let title; + let currentPlayer = document.getElementById('iiif-media-player').player; + + let $modalBody = $('#timelineModal').find('div#new-timeline-inputs')[0]; + let bodyText = "

Choose scope for new timeline:

"; + + title = $('#timelineModal')[0].dataset.title; + let timelineScopes = getTimelineScopes(); + let scopes = timelineScopes.scopes; + streamId = timelineScopes.streamId; + + for (let index = 0; index < scopes.length; index++) { + let scope = scopes[index]; + let label = scope.label; + // Add mediaobject title for the option representing the current section + if (scope.tags.includes('current-section')) { + label = `${title} - ${label}`; + } + if (scope.tracks > 1) { + label += " (" + scope.tracks + " tracks)"; + } + checked = (index == scopes.length - 1) ? 'checked' : ''; + bodyText += "
"; + bodyText += ""; + bodyText += ""; + bodyText += "
"; + } + bodyText += "
"; + bodyText += ""; + bodyText += ""; + bodyText += " to "; + bodyText += ""; + bodyText += "
"; + $modalBody.innerHTML = bodyText; + + $('#timelineModalSave').on('click', function (e) { + let label, t, id; + if ($('#timelinescope_custom')[0].checked) { + let pattern = /^(\d+:){0,2}\d+(\.\d+)?$/; + let beginval = $('#custombegin')[0].value; + let endval = $('#customend')[0].value; + if (pattern.test(beginval) && pattern.test(endval)) { + label = 'custom scope'; + t = 't=' + timeToS($('#custombegin')[0].value) + ',' + timeToS($('#customend')[0].value); + } else { + $('#custombegin').css('color', (pattern.test(beginval) ? 'black' : 'red')); + $('#customend').css('color', (pattern.test(endval) ? 'black' : 'red')); + return; + } + } else { + let selectedIndex = -1; + for (let index = 0; index < scopes.length; index++) { + if ($('#timelinescope' + index)[0].checked) { + selectedIndex = index; + break; + } + } + if (selectedIndex === -1) return; + let scope = scopes[selectedIndex]; + label = scope.label; + let { begin, end } = scope.times; + t = `t=${begin},${end}`; + } + id = streamId; + $('#new-timeline-title')[0].value = label; + $('#new-timeline-source')[0].value = '/master_files/' + id + '?' + t; + $('#new-timeline-form')[0].submit(); + }); +} diff --git a/app/assets/javascripts/ramp_utils.js b/app/assets/javascripts/ramp_utils.js index 438053825b..ea82abd688 100644 --- a/app/assets/javascripts/ramp_utils.js +++ b/app/assets/javascripts/ramp_utils.js @@ -25,7 +25,7 @@ function getActiveItem(checkSection = true) { let currentStructureItem = $('li[class="ramp--structured-nav__list-item active"]'); let currentSection = $('div[class="ramp--structured-nav__section active"]'); - if(currentStructureItem?.length > 0) { + if (currentStructureItem?.length > 0) { /** * When there's an active timespan in the structured navigation * use its details to populate the create timeline and add to @@ -34,9 +34,9 @@ function getActiveItem(checkSection = true) { let label = currentStructureItem[0].dataset.label; let activeCanvasOnly = currentSection.parent().is(currentStructureItem); // When canvas item is the only active structure item, add it as an option - if(activeCanvasOnly) { + if (activeCanvasOnly) { let { mediafrag, label } = currentSection[0].dataset; - let [ itemId, timeHash ] = mediafrag.split('#t='); + let [itemId, timeHash] = mediafrag.split('#t='); return { label, times: { @@ -46,17 +46,17 @@ function getActiveItem(checkSection = true) { tags: ['current-track', 'current-section'], streamId: itemId.split('/').pop(), sectionLabel: label, - } + }; } // When structure has an active timespan child - if(currentStructureItem.find('a').length > 0) { + if (currentStructureItem.find('a').length > 0) { let item = currentStructureItem.find('a')[0]; let timeHash = item.hash.split('#t=').pop(); let times = { begin: parseFloat(timeHash.split(',')[0]) || 0, end: parseFloat(timeHash.split(',')[1]) || duration - } + }; let streamId = item.pathname.split('/').pop(); return { label, @@ -70,8 +70,8 @@ function getActiveItem(checkSection = true) { /** When the structured navigation doesn't have an active timespan * get the current active section to populate the timeline and add * to playlist options */ - let { mediafrag, label } = currentSection[0].dataset; - let [ itemId, timeHash ] = mediafrag.split('#t='); + let { mediafrag, label } = currentSection[0].dataset; + let [itemId, timeHash] = mediafrag.split('#t='); return { label, times: { @@ -81,7 +81,7 @@ function getActiveItem(checkSection = true) { tags: ['current-section'], streamId: itemId.split('/').pop(), sectionLabel: label, - } + }; } } @@ -95,11 +95,11 @@ function getTimelineScopes() { let scopes = new Array(); let trackCount = 1; let currentStructureItem = $('li[class="ramp--structured-nav__list-item active"]') || - $('div[class="ramp--structured-nav__section active"]'); + $('div[class="ramp--structured-nav__section active"]'); let activeItem = getActiveItem(); let streamId = ''; - if(activeItem != undefined) { + if (activeItem != undefined) { streamId = activeItem.streamId; scopes.push({ ...activeItem, @@ -108,12 +108,22 @@ function getTimelineScopes() { } let parent = currentStructureItem.closest('ul').closest('li'); + if (parent.length === 0) { + let begin = 0; + let end = activeItem.times.end; + scopes[0].times = { begin: 0, end: end }; + } while (parent.length > 0) { let next = parent.closest('ul').closest('li'); + let begin = 0; + let end = ''; let tracks = parent.find('li a'); trackCount = tracks.length; - let begin = parseFloat(tracks[0].hash.split('#t=').reverse()[0].split(',')[0]) || 0; - let end = parseFloat(tracks[trackCount - 1].hash.split('#t=').reverse()[0].split(',')[1]) || ''; + // Only assign begin/end when structure item is a subsection, not a top level section + if (next.length > 0) { + begin = parseFloat(tracks[0].hash.split('#t=').reverse()[0].split(',')[0]) || 0; + end = parseFloat(tracks[trackCount - 1].hash.split('#t=').reverse()[0].split(',')[1]) || ''; + } streamId = tracks[0].pathname.split('/').reverse()[0]; let label = parent[0].dataset.label; scopes.push({ @@ -170,40 +180,22 @@ function timeToS(time) { return timeSeconds; } -/** - * Update section and lti section share links and embed code when switching sections - * @function updateShareLinks - * @return {void} - */ -function updateShareLinks (e) { - const sectionShareLink = e.detail.link_back_url; - const ltiShareLink = e.detail.lti_share_link; - const embedCode = e.detail.embed_code; - $('#share-link-section') - .val(sectionShareLink) - .attr('placeholder', sectionShareLink); - $('#ltilink-section') - .val(ltiShareLink) - .attr('placeholder', ltiShareLink); - $('#embed-part').val(embedCode); -} - /** Collapse multi item check for creating a playlist item for each structure item of * the selected scope */ -function collapseMultiItemCheck () { +function collapseMultiItemCheck() { $('#multiItemCheck').collapse('show'); $('#moreDetails').collapse('hide'); } /** Collapse title and description forms */ function collapseMoreDetails() { - if(!$('#moreDetails').hasClass('show')) { + if (!$('#moreDetails').hasClass('show')) { $('#moreDetails').collapse('show'); $('#multiItemCheck').collapse('hide'); // When the title field is empty fill it with either // current track or current section name - if($('#playlist_item_title').val() == '') { + if ($('#playlist_item_title').val() == '') { $('#playlist_item_title').val( $('#current-track-name').text() || $('#current-section-name').text() ); @@ -217,27 +209,28 @@ function collapseMoreDetails() { * disable the option otherwise enable it. * @param {Object} activeTrack JSON object for the active timespans * @param {Number} currentTime player's playhead position - * @param {Boolean} isSeeked flag to indicate player 'seeked' event happened/not + * @param {Boolean} isPlaying flag to inidicate media is playing or not * @param {String} sectionTitle name of the current section */ -function disableEnableCurrentTrack(activeTrack, currentTime, isSeeked, sectionTitle) { - // Return when add to playlist form is not visible +function disableEnableCurrentTrack(activeTrack, currentTime, isPlaying, sectionTitle) { + // Return when add to playlist form is not visible let playlistForm = $('#add_to_playlist')[0]; - if(!playlistForm) { + if (!playlistForm) { return; } let title = sectionTitle; - if(activeTrack != undefined) { + if (activeTrack != undefined) { streamId = activeTrack.streamId; let { label, times, sectionLabel } = activeTrack; - let starttime = currentTime || times.begin; + // Update starttime when media is not playing + let starttime = isPlaying ? times.begin : currentTime || times.begin; $('#playlist_item_start').val(createTimestamp(starttime, true)); $('#playlist_item_end').val(createTimestamp(times.end, true)); title = `${sectionLabel} - ${label}`; $('#current-track-name').text(title); // When player's currentTime is in between the activeTrack's begin and // end times, enable the current track option - if(times.begin <= starttime && starttime <= times.end) { + if (times.begin <= starttime && starttime <= times.end) { $('#playlistitem_scope_track')[0].disabled = false; $('#current-track-text').removeClass('disabled-option'); $('#playlistitem_scope_track').closest('label').css('cursor', 'pointer'); @@ -248,14 +241,12 @@ function disableEnableCurrentTrack(activeTrack, currentTime, isSeeked, sectionTi $('#current-track-name').text(''); $('#current-track-text').addClass('disabled-option'); $('#playlistitem_scope_track').closest('label').css('cursor', 'not-allowed'); - if($('#playlistitem_scope_track')[0].checked) { + if ($('#playlistitem_scope_track')[0].checked) { $('#moreDetails').collapse('hide'); $('#playlistitem_scope_track').prop('checked', false); } } - // Only change the title when user actively seeked to a different timestamp, - // persisting the user changes to the field unless the active track is changed - if(isSeeked && sectionTitle != undefined) { + if (sectionTitle != undefined) { $('#playlist_item_title').val(title); } } @@ -263,7 +254,7 @@ function disableEnableCurrentTrack(activeTrack, currentTime, isSeeked, sectionTi /** AJAX request for add to playlist for submission for playlist item for * a selected clip */ -function addPlaylistItem (playlistId, masterfileId, starttime, endtime) { +function addPlaylistItem(playlistId, masterfileId, starttime, endtime) { $.ajax({ url: '/playlists/' + playlistId + '/items', type: 'POST', @@ -276,11 +267,11 @@ function addPlaylistItem (playlistId, masterfileId, starttime, endtime) { end_time: endtime, } }, - success: function(res) { + success: function (res) { handleAddSuccess(res); }, - error: function(err) { - handleAddError(err) + error: function (err) { + handleAddError(err); } }); } @@ -299,11 +290,11 @@ function addToPlaylist(playlistId, scope, masterfileId, moId) { playlistitem_scope: scope } }, - success: function(res) { + success: function (res) { handleAddSuccess(res); }, - error: function(err) { - handleAddError(err) + error: function (err) { + handleAddError(err); } }); } @@ -353,4 +344,10 @@ function resetAddToPlaylistForm() { function closeAlert() { $('#add_to_playlist_alert').slideUp(); $('#add_to_playlist_form_group').slideDown(); + // Set default selection in options list when alert is closed + if ($('#playlistitem_scope_track')[0].disabled) { + $('#playlistitem_scope_section').prop('checked', true); + } else { + $('#playlistitem_scope_track').prop('checked', true); + } } diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 30153ba8ee..f4af972a20 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -55,6 +55,3 @@ @import 'avalon'; @import "datatables"; - -@import "video.js/dist/video-js.css"; -@import "@silvermine/videojs-quality-selector/dist/css/quality-selector.css"; diff --git a/app/assets/stylesheets/avalon.scss b/app/assets/stylesheets/avalon.scss index 46d3ece523..2a686d88f2 100644 --- a/app/assets/stylesheets/avalon.scss +++ b/app/assets/stylesheets/avalon.scss @@ -932,6 +932,9 @@ h5.card-title { .file-remove { display: none; } + .form-group { + margin-bottom: 0.2rem; + } display: flex; } margin-top: 0.75rem; @@ -949,6 +952,10 @@ h5.card-title { } } + div.supplemental-file-data.is-editing:not(.edit-item) + div.supplemental-file-data { + margin-top: 2.5rem; + } + .supplemental-file-form { float: left; width: 100%; @@ -970,6 +977,12 @@ h5.card-title { .form-control { height: 25px; } + + &.captions, &.transcripts { + div.supplemental-file-data.is-editing:last-child { + margin-bottom: 1.75rem; + } + } } } diff --git a/app/assets/stylesheets/avalon/_footer.scss b/app/assets/stylesheets/avalon/_footer.scss index bd8499adc6..413099019c 100644 --- a/app/assets/stylesheets/avalon/_footer.scss +++ b/app/assets/stylesheets/avalon/_footer.scss @@ -21,6 +21,7 @@ width: 100%; min-height: 2.5rem; color: #999999; + z-index: 0; } footer { diff --git a/app/assets/stylesheets/avalon/_form.scss b/app/assets/stylesheets/avalon/_form.scss index 28bf7dfda1..378c3299ba 100644 --- a/app/assets/stylesheets/avalon/_form.scss +++ b/app/assets/stylesheets/avalon/_form.scss @@ -80,6 +80,11 @@ $border-radius-base: 4px !default; margin-bottom: 2px; } +.form-group label.checkbox { + margin-left: 0.5rem !important; + padding-right: 1rem !important; +} + /* * Fix that shouldn't be needed to make sure that the text behaves like a regular * link diff --git a/app/assets/stylesheets/avalon/_playlists.scss b/app/assets/stylesheets/avalon/_playlists.scss index f0d6e5468b..485fb18c1b 100644 --- a/app/assets/stylesheets/avalon/_playlists.scss +++ b/app/assets/stylesheets/avalon/_playlists.scss @@ -176,6 +176,7 @@ #Playlists_paginate { float: right; + z-index: 10; } /* Playlist copy modal */ diff --git a/app/assets/stylesheets/blacklight.scss b/app/assets/stylesheets/blacklight.scss index 4e4bd3f9f5..0615b155f4 100644 --- a/app/assets/stylesheets/blacklight.scss +++ b/app/assets/stylesheets/blacklight.scss @@ -18,11 +18,13 @@ @import 'blacklight/blacklight'; -.result-thumbnail img, img.result-thumbnail { +.result-thumbnail img, +img.result-thumbnail { max-width: 160px; } -.no-icon img, img.no-icon { +.no-icon img, +img.no-icon { max-height: 90px; } @@ -31,7 +33,8 @@ @extend .btn-outline; } -#sort-dropdown, #per_page-dropdown { +#sort-dropdown, +#per_page-dropdown { .dropdown-item.active { color: $dark; background-color: $white; @@ -44,7 +47,9 @@ // Access control update modal form in Bookmarks #update_access_control_form { - .item-discovery, .item-access, .special-access { + .item-discovery, + .item-access, + .special-access { legend { border-bottom: 1px solid #e5e5e5; } @@ -55,7 +60,7 @@ // Needed to override btn-secondary-outline .applied-filter .remove:hover { color: white !important; - background-color: #f44336 !important; + background-color: #df3603 !important; } .page-item span.page-link { diff --git a/app/assets/stylesheets/branding.scss b/app/assets/stylesheets/branding.scss index 0ce2e48e41..f376a9bb55 100644 --- a/app/assets/stylesheets/branding.scss +++ b/app/assets/stylesheets/branding.scss @@ -53,7 +53,7 @@ $lightblue: #31708f; $info: #fbb040; $success: #429453; $warning: #bf841b; -$danger: #f44336; +$danger: #df3603; /** * Bootstrap variable overrides @@ -118,8 +118,7 @@ $navbar-light-toggle-border-color: $white; // Inverted navbar toggle $navbar-inverse-toggle-hover-bg: #e6e6e6; $navbar-inverse-toggle-icon-bar-bg: $lightgray; -$navbar-inverse-toggle-border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) - rgba(0, 0, 0, 0.25); +$navbar-inverse-toggle-border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); $grid-gutter-width: 16px; diff --git a/app/assets/stylesheets/embed.scss b/app/assets/stylesheets/embed.scss deleted file mode 100644 index 1dfb32109b..0000000000 --- a/app/assets/stylesheets/embed.scss +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2011-2024, The Trustees of Indiana University and Northwestern - * University. Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * --- END LICENSE_HEADER BLOCK --- -*/ - -.video-container { - position: absolute; -} - -.video-js { - position: relative; - z-index: 0; -} - -.video-title { - position: absolute; - z-index: 1; - top: 5px; - left: 8px; -} - -.video-title .video-link { - color: white; - font-size:150%; -} - -.video-js.vjs-playing + .video-title { - display: none; -} - -// @silvermine/videojs-quality-selector -.vjs-menu { - li { - font-size: 1em; - } -} - -.video-js .vjs-control-bar { - /* Audio: Make the controlbar visible by default */ - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - /* Increase the control-bar icons/text size */ - font-size: 120%; -} - -/* Make player height minimum to the controls height so when we hide -video/poster area the controls are displayed correctly. */ -.video-js.vjs-audio { - min-height: 3.7em; -} - -.video-js .vjs-progress-control:hover .vjs-play-progress:after { - display: none; -} - -/* Show poster image when playback ends */ -.video-js.vjs-ended .vjs-poster { - display: block; -} - -.video-js .vjs-current-time { - display: block; -} - -/* Put playhead on top of markers */ -.video-js .vjs-play-progress:before { - z-index: 101; -} - -/* time-control elements */ -.video-js .vjs-time-control { - min-width: 0.5rem; - padding: 0 0.25rem; -} - -.vjs-time-divider { - display: block; -} - -.vjs-duration { - display: block !important; -} - -/* big-play button */ -.video-js .vjs-big-play-button { - margin-left: auto; - margin-right: auto; - height: 2.5rem; - width: 2.5rem; - line-height: 2.5rem; - border-radius: 50%; - scale: 2; - border: 0.1rem solid #fff; -} - -/* captions button selection */ -.captions-on { - border-bottom: 0.45rem ridge; -} - -.vjs-custom-external-link .vjs-icon-placeholder { - font-size: 120%; -} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2dd6966e8b..d1893db102 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -29,11 +29,16 @@ class ApplicationController < ActionController::Base helper_method :render_bookmarks_control? - around_action :handle_api_request, if: proc{|c| request.format.json? || request.format.atom? } + around_action :handle_api_request, if: proc{|c| request.format.json? || request.format.atom? || request.headers['Avalon-Api-Key'].present? } before_action :rewrite_v4_ids, if: proc{|c| request.method_symbol == :get && [params[:id], params[:content]].flatten.compact.any? { |i| i =~ /^[a-z]+:[0-9]+$/}} before_action :set_no_cache_headers, if: proc{|c| request.xhr? } prepend_before_action :remove_zero_width_chars + rescue_from RSolr::Error::ConnectionRefused, :with => :handle_solr_connection_error + rescue_from RSolr::Error::Timeout, :with => :handle_solr_connection_error + rescue_from Blacklight::Exceptions::ECONNREFUSED, :with => :handle_solr_connection_error + rescue_from Faraday::ConnectionFailed, :with => :handle_fedora_connection_error + def set_no_cache_headers response.headers["Cache-Control"] = "no-cache, no-store" response.headers["Pragma"] = "no-cache" @@ -245,4 +250,26 @@ def strip_zero_width_chars!(obj) def should_store_return_url? !(request.xhr? || request.format != "html" || request.path.start_with?("/users/") || request.path.end_with?("poster") || request.path.end_with?("thumbnail")) end + + def handle_solr_connection_error(exception) + raise if Settings.app_controller.solr_and_fedora.raise_on_connection_error + Rails.logger.error(exception.class.to_s + ': ' + exception.message + '\n' + exception.backtrace.join('\n')) + + if request.format == :json + render json: {errors: [exception.message]}, status: 503 + else + render '/errors/solr_connection', layout: false, status: 503 + end + end + + def handle_fedora_connection_error(exception) + raise if Settings.app_controller.solr_and_fedora.raise_on_connection_error + Rails.logger.error(exception.class.to_s + ': ' + exception.message + '\n' + exception.backtrace.join('\n')) + + if request.format == :json + render json: {errors: [exception.message]}, status: 503 + else + render '/errors/fedora_connection', status: 503 + end + end end diff --git a/app/controllers/bookmarks_controller.rb b/app/controllers/bookmarks_controller.rb index 5da807b68a..f6938628dd 100644 --- a/app/controllers/bookmarks_controller.rb +++ b/app/controllers/bookmarks_controller.rb @@ -141,7 +141,7 @@ def add_to_playlist_action documents playlist = Playlist.find(params[:target_playlist_id]) Array(documents.map(&:id)).each do |id| media_object = SpeedyAF::Proxy::MediaObject.find(id) - media_object.ordered_master_files.to_a.each do |mf| + media_object.sections.each do |mf| clip = AvalonClip.create(master_file: mf) PlaylistItem.create(clip: clip, playlist: playlist) end diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index dd9b3adb7f..3371bbb4db 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -80,7 +80,7 @@ class CatalogController < ApplicationController # # :show may be set to false if you don't want the facet to be drawn in the # facet bar - config.add_facet_field 'avalon_resource_type_ssim', label: 'Format', limit: 5, collapse: false + config.add_facet_field 'avalon_resource_type_ssim', label: 'Format', limit: 5, collapse: false, helper_method: :titleize config.add_facet_field 'creator_ssim', label: 'Main contributor', limit: 5 config.add_facet_field 'date_sim', label: 'Date', limit: 5 config.add_facet_field 'genre_ssim', label: 'Genres', limit: 5 @@ -89,16 +89,18 @@ class CatalogController < ApplicationController config.add_facet_field 'unit_ssim', label: 'Unit', limit: 5 config.add_facet_field 'language_ssim', label: 'Language', limit: 5 # Hide these facets if not a Collection Manager - config.add_facet_field 'workflow_published_sim', label: 'Published', limit: 5, if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow" - config.add_facet_field 'avalon_uploader_ssi', label: 'Created by', limit: 5, if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow" - config.add_facet_field 'read_access_group_ssim', label: 'Item access', if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow", query: { + config.add_facet_field 'workflow_published_sim', label: 'Published', limit: 5, if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow" + config.add_facet_field 'avalon_uploader_ssi', label: 'Created by', limit: 5, if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow" + config.add_facet_field 'read_access_group_ssim', label: 'Item access', if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow", query: { public: { label: "Public", fq: "has_model_ssim:MediaObject AND read_access_group_ssim:#{Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC}" }, restricted: { label: "Authenticated", fq: "has_model_ssim:MediaObject AND read_access_group_ssim:#{Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED}" }, private: { label: "Private", fq: "has_model_ssim:MediaObject AND NOT read_access_group_ssim:#{Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC} AND NOT read_access_group_ssim:#{Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED}" } } - config.add_facet_field 'read_access_virtual_group_ssim', label: 'External Group', limit: 5, if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow", helper_method: :vgroup_display - config.add_facet_field 'date_digitized_ssim', label: 'Date Digitized', limit: 5, if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow"#, partial: 'blacklight/hierarchy/facet_hierarchy' - config.add_facet_field 'date_ingested_ssim', label: 'Date Ingested', limit: 5, if: Proc.new {|context, config, opts| Ability.new(context.current_user, context.user_session).can? :create, MediaObject}, group: "workflow" + config.add_facet_field 'read_access_virtual_group_ssim', label: 'External Group', limit: 5, if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow", helper_method: :vgroup_display + config.add_facet_field 'date_digitized_ssim', label: 'Date Digitized', limit: 5, if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow"#, partial: 'blacklight/hierarchy/facet_hierarchy' + config.add_facet_field 'date_ingested_ssim', label: 'Date Ingested', limit: 5, if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow" + config.add_facet_field 'has_captions_bsi', label: 'Has Captions', if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow", helper_method: :display_has_caption_or_transcript + config.add_facet_field 'has_transcripts_bsi', label: 'Has Transcripts', if: Proc.new {|context, config, opts| context.current_ability.can? :create, MediaObject}, group: "workflow", helper_method: :display_has_caption_or_transcript # Have BL send all facet field names to Solr, which has been the default # previously. Simply remove these lines if you'd rather use Solr request diff --git a/app/controllers/master_files_controller.rb b/app/controllers/master_files_controller.rb index 31f2011ffe..1589b5d0ca 100644 --- a/app/controllers/master_files_controller.rb +++ b/app/controllers/master_files_controller.rb @@ -13,6 +13,7 @@ # --- END LICENSE_HEADER BLOCK --- # require 'avalon/controller/controller_behavior' +require 'avalon/transcript_search' include SecurityHelper @@ -71,14 +72,6 @@ def show end def embed - if can? :read, @master_file - @stream_info = secure_streams(@master_file.stream_details, @master_file.media_object_id) - @stream_info['t'] = view_context.parse_media_fragment(params[:t]) # add MediaFragment from params - @stream_info['link_back_url'] = view_context.share_link_for(@master_file) - end - - @player_width = "100%" - @player_height = "100%" respond_to do |format| format.html do response.headers.delete "X-Frame-Options" @@ -210,13 +203,10 @@ def destroy authorize! :destroy, @master_file, message: "You do not have sufficient privileges to delete files" filename = File.basename(@master_file.file_location) if @master_file.file_location.present? filename ||= @master_file.id - media_object = MediaObject.find(@master_file.media_object_id) - media_object.ordered_master_files.delete(@master_file) - media_object.master_files.delete(@master_file) - media_object.save + media_object_id = @master_file.media_object_id @master_file.destroy flash[:notice] = "#{filename} has been deleted from the system" - redirect_to edit_media_object_path(media_object, step: "file-upload") + redirect_to edit_media_object_path(media_object_id, step: "file-upload") end def set_frame @@ -334,6 +324,39 @@ def transcript send_data @supplemental_file.file.download, filename: @supplemental_file.file.filename.to_s, type: @supplemental_file.file.content_type, disposition: 'inline' end + def download_derivative + authorize! :download, @master_file + + begin + high_deriv = @master_file.derivatives.find { |deriv| deriv.quality == 'high' } + path = high_deriv.download_path + + unless FileLocator.new(path).exist? + flash[:error] = "Unable to find or access derivative file." + redirect_back(fallback_location: edit_media_object_path(@master_file.media_object)) + return + end + + case path + when /^s3:/ + # Use an AWS presigned URL to facilitate direct download of the derivative to avoid + # having to download the file to the server as a tmp file and then sending that to + # the client. Doing this reduces latency and server load. + redirect_to FileLocator::S3File.new(path).download_url + else + send_file path, filename: File.basename(path), disposition: 'attachment' + end + rescue => error + Rails.logger.error(error.class.to_s + ': ' + error.message + '\n' + error.backtrace.join('\n')) + flash[:error] = "A problem was encountered while attempting to download derivative file. Please contact your support person if this issue persists." + redirect_back(fallback_location: edit_media_object_path(@master_file.media_object)) + end + end + + def search + render json: search_response_json + end + protected def set_masterfile if params[:id].blank? || (not MasterFile.exists?(params[:id])) @@ -400,4 +423,10 @@ def master_file_params def samples_per_frame Settings.waveform.sample_rate * Settings.waveform.finest_zoom / Settings.waveform.player_width end + +private + + def search_response_json + Avalon::TranscriptSearch.new(query: params[:q], master_file: @master_file, request_url: request.url).iiif_content_search.to_json + end end diff --git a/app/controllers/media_objects_controller.rb b/app/controllers/media_objects_controller.rb index 0de5e37fbc..0d6a36c329 100644 --- a/app/controllers/media_objects_controller.rb +++ b/app/controllers/media_objects_controller.rb @@ -119,7 +119,7 @@ def add_to_playlist end playlistitem_scope = params[:post][:playlistitem_scope] #'section', 'structure' # If a single masterfile_id wasn't in the request, then create playlist_items for all masterfiles - masterfile_ids = masterfile_id.present? ? [masterfile_id] : @media_object.ordered_master_file_ids + masterfile_ids = masterfile_id.present? ? [masterfile_id] : @media_object.section_ids masterfile_ids.each do |mf_id| mf = SpeedyAF::Proxy::MasterFile.find(mf_id) if playlistitem_scope=='structure' && mf.has_structuralMetadata? && mf.structuralMetadata.xpath('//Span').present? @@ -139,7 +139,7 @@ def add_to_playlist end else #create a single item for the entire masterfile - item_title = @media_object.master_file_ids.count>1? mf.embed_title : @media_object.title + item_title = @media_object.section_ids.count > 1 ? mf.embed_title : @media_object.title clip = AvalonClip.new(title: item_title, master_file: mf) playlist.items += [PlaylistItem.new(clip: clip, playlist: playlist)] end @@ -216,7 +216,7 @@ def update_media_object if !@media_object.save error_messages += ['Failed to create media object:']+@media_object.errors.full_messages elsif master_files_params.respond_to?('each') - old_ordered_master_files = @media_object.ordered_master_files.to_a.collect(&:id) + old_ordered_sections = @media_object.section_ids master_files_params.each_with_index do |file_spec, index| master_file = MasterFile.new(file_spec.except(:structure, :captions, :captions_type, :files, :other_identifier, :label, :date_digitized)) # master_file.media_object = @media_object @@ -230,12 +230,11 @@ def update_media_object master_file.date_digitized = DateTime.parse(file_spec[:date_digitized]).to_time.utc.iso8601 if file_spec[:date_digitized].present? master_file.identifier += Array(params[:files][index][:other_identifier]) master_file.comment += Array(params[:files][index][:comment]) - master_file._media_object = @media_object + master_file.media_object = @media_object if file_spec[:files].present? if master_file.update_derivatives(file_spec[:files], false) master_file.update_stills_from_offset! WaveformJob.perform_later(master_file.id) - @media_object.ordered_master_files += [master_file] else file_location = file_spec.dig(:file_location) || '' message = "Problem saving MasterFile for #{file_location}:" @@ -248,10 +247,10 @@ def update_media_object if error_messages.empty? if api_params[:replace_masterfiles] - old_ordered_master_files.each do |mf| + old_ordered_sections.each do |mf| p = MasterFile.find(mf) - @media_object.master_files.delete(p) - @media_object.ordered_master_files.delete(p) + # Need to manually remove from section_ids in memory to match changes that will persist when the master file is destroyed + @media_object.section_ids -= [p.id] p.destroy end end @@ -284,7 +283,7 @@ def update_media_object def custom_edit if ['preview', 'structure', 'file-upload'].include? @active_step - @masterFiles = load_master_files + @masterFiles = load_sections end if 'preview' == @active_step @@ -364,9 +363,9 @@ def show_progress [encode.master_file_id, mf_status] end ] - master_files_count = @media_object.master_files.size - if master_files_count > 0 - overall.each { |k,v| overall[k] = [0,[100,v.to_f/master_files_count.to_f].min].max.floor } + sections_count = @media_object.sections.size + if sections_count > 0 + overall.each { |k,v| overall[k] = [0,[100,v.to_f/sections_count.to_f].min].max.floor } else overall = {success: 0, error: 0} end @@ -452,7 +451,7 @@ def tree } format.json { result = { @media_object.id => {} } - @media_object.indexed_master_files.each do |mf| + @media_object.sections.each do |mf| result[@media_object.id][mf.id] = mf.derivatives.collect(&:id) end render :json => result @@ -525,11 +524,11 @@ def load_resource def master_file_presenters # Assume that @media_object is a SpeedyAF::Proxy::MediaObject - @media_object.ordered_master_files + @media_object.sections end - def load_master_files(mode = :rw) - @masterFiles ||= mode == :rw ? @media_object.indexed_master_files.to_a : master_file_presenters + def load_sections(mode = :rw) + @masterFiles ||= mode == :rw ? @media_object.sections : master_file_presenters end def set_player_token @@ -554,13 +553,13 @@ def load_player_context if params[:part] index = params[:part].to_i-1 - if index < 0 or index > @media_object.master_files.size-1 + if index < 0 or index > @media_object.sections.size - 1 raise ActiveFedora::ObjectNotFoundError end - params[:content] = @media_object.indexed_master_file_ids[index] + params[:content] = @media_object.section_ids[index] end - load_master_files(mode: :ro) + load_sections(mode: :ro) load_current_stream end @@ -583,7 +582,7 @@ def set_active_file end end if @currentStream.nil? - @currentStream = @media_object.indexed_master_files.first + @currentStream = @media_object.sections.first end return @currentStream end diff --git a/app/controllers/supplemental_files_controller.rb b/app/controllers/supplemental_files_controller.rb index 298289a855..8b1adf6430 100644 --- a/app/controllers/supplemental_files_controller.rb +++ b/app/controllers/supplemental_files_controller.rb @@ -14,6 +14,8 @@ # frozen_string_literal: true class SupplementalFilesController < ApplicationController + include Rails::Pagination + before_action :set_object before_action :authorize_object @@ -30,68 +32,109 @@ class SupplementalFilesController < ApplicationController handle_error(message: exception.full_message, status: 404) end - def create - # FIXME: move filedata to permanent location - raise Avalon::BadRequest, "Missing required parameters" unless supplemental_file_params[:file] + def index + files = paginate SupplementalFile.where("parent_id = ?", @object.id) + render json: files.to_a.collect { |f| f.as_json } + end - @supplemental_file = SupplementalFile.new(label: supplemental_file_params[:label], tags: supplemental_file_params[:tags]) - begin - @supplemental_file.attach_file(supplemental_file_params[:file]) - rescue StandardError, LoadError => e - raise Avalon::SaveError, "File could not be attached: #{e.full_message}" + def create + if metadata_upload? && !attachment + raise Avalon::BadRequest, "Missing required Content-type headers" unless request.headers["Content-Type"] == 'application/json' end + raise Avalon::BadRequest, "Missing required parameters" unless validate_params + + @supplemental_file = SupplementalFile.new(**metadata_from_params) + + if attachment + begin + @supplemental_file.attach_file(attachment) + rescue StandardError, LoadError => e + raise Avalon::SaveError, "File could not be attached: #{e.full_message}" + end - # Raise errror if file wasn't attached - raise Avalon::SaveError, "File could not be attached." unless @supplemental_file.file.attached? + # Raise errror if file wasn't attached + raise Avalon::SaveError, "File could not be attached." unless @supplemental_file.file.attached? + end raise Avalon::SaveError, @supplemental_file.errors.full_messages unless @supplemental_file.save @object.supplemental_files += [@supplemental_file] - raise Avalon::SaveError, @object.errors[:supplemental_files_json].full_messages unless @object.save + raise Avalon::SaveError, @object.errors[:supplemental_files_json] unless @object.save flash[:success] = "Supplemental file successfully added." respond_to do |format| - format.html { redirect_to edit_structure_path } - format.json { head :created, location: object_supplemental_file_path } + format.html { + # This path is for uploading the binary file. We need to provide a JSON response + # for the case of someone uploading through a CLI. + if request.headers['Accept'] == 'application/json' + render json: { id: @supplemental_file.id }, status: :created + else + redirect_to edit_structure_path + end + } + # This path is for uploading the metadata payload. + format.json { render json: { id: @supplemental_file.id }, status: :created } end end def show find_supplemental_file - # Redirect or proxy the content - if Settings.supplemental_files.proxy - send_data @supplemental_file.file.download, filename: @supplemental_file.file.filename.to_s, type: @supplemental_file.file.content_type, disposition: 'attachment' - else - redirect_to rails_blob_path(@supplemental_file.file, disposition: "attachment") + respond_to do |format| + format.html { + # Redirect or proxy the content + if Settings.supplemental_files.proxy + send_data @supplemental_file.file.download, filename: @supplemental_file.file.filename.to_s, type: @supplemental_file.file.content_type, disposition: 'attachment' + else + redirect_to rails_blob_path(@supplemental_file.file, disposition: "attachment") + end + } + format.json { render json: @supplemental_file.as_json } end end - # Update the label and tags of the supplemental file def update - raise Avalon::NotFound, "Cannot update the supplemental file: #{params[:id]} not found" unless SupplementalFile.exists? params[:id].to_s - @supplemental_file = SupplementalFile.find(params[:id]) - raise Avalon::NotFound, "Cannot update the supplemental file: #{@supplemental_file.id} not found" unless @object.supplemental_files.any? { |f| f.id == @supplemental_file.id } - raise Avalon::BadRequest, "Updating file contents not allowed" if supplemental_file_params[:file].present? + if metadata_upload? + raise Avalon::BadRequest, "Incorrect request format. Use HTML if updating attached file." if attachment + raise Avalon::BadRequest, "Missing required Content-type headers" unless request.headers["Content-Type"] == 'application/json' + elsif request.headers['Avalon-Api-Key'].present? + raise Avalon::BadRequest, "Incorrect request format. Use JSON if updating metadata." unless attachment + raise Avalon::BadRequest, "Missing required Accept headers" unless request.headers["Accept"] == 'application/json' + end + raise Avalon::BadRequest, "Missing required parameters" unless validate_params + + find_supplemental_file + + edit_file_information if !attachment + + @supplemental_file.attach_file(attachment) if attachment - edit_file_information raise Avalon::SaveError, @supplemental_file.errors.full_messages unless @supplemental_file.save + # Updates parent object's solr document + @object.update_index flash[:success] = "Supplemental file successfully updated." respond_to do |format| - format.html { redirect_to edit_structure_path } - format.json { head :ok, location: object_supplemental_file_path } + format.html { + # This path is for uploading the binary file. We need to provide a JSON response + # for the case of someone uploading through a CLI. + if request.headers['Accept'] == 'application/json' + render json: { id: @supplemental_file.id } + else + redirect_to edit_structure_path + end + } + # This path is for uploading the metadata payload. + format.json { render json: { id: @supplemental_file.id }, status: :ok } end end def destroy - raise Avalon::NotFound, "Cannot delete the supplemental file: #{params[:id]} not found" unless SupplementalFile.exists? params[:id].to_s - @supplemental_file = SupplementalFile.find(params[:id]) - raise Avalon::NotFound, "Cannot delete the supplemental file: #{@supplemental_file.id} not found" unless @object.supplemental_files.any? { |f| f.id == @supplemental_file.id } + find_supplemental_file @object.supplemental_files -= [@supplemental_file] - raise Avalon::SaveError, "An error occurred when deleting the supplemental file: #{@object.errors[:supplemental_files_json].full_messages}" unless @object.save + raise Avalon::SaveError, "An error occurred when deleting the supplemental file: #{@object.errors[:supplemental_files_json]}" unless @object.save # FIXME: also wrap this in a transaction raise Avalon::SaveError, "An error occurred when deleting the supplemental file: #{@supplemental_file.errors.full_messages}" unless @supplemental_file.destroy @@ -117,9 +160,34 @@ def set_object @object = fetch_object params[:master_file_id] || params[:media_object_id] end + def validate_params + attachment.present? || [:label, :language, :tags].any? { |v| supplemental_file_params[v].present? } + end + def supplemental_file_params # TODO: Add parameters for minio and s3 - params.fetch(:supplemental_file, {}).permit(:label, :language, :file, tags: []) + sup_file_params = params.fetch(:supplemental_file, {}).permit(:label, :language, :file, tags: []) + return sup_file_params unless metadata_upload? + + meta_params = params[:metadata].present? ? JSON.parse(params[:metadata]).symbolize_keys : params + + type = case meta_params[:type] + when 'caption' + 'caption' + when 'transcript' + 'transcript' + else + nil + end + treat_as_transcript = 'transcript' if meta_params[:treat_as_transcript] == true + machine_generated = 'machine_generated' if meta_params[:machine_generated] == true + + sup_file_params[:label] ||= meta_params[:label].presence + sup_file_params[:language] ||= meta_params[:language].presence + # The uniq is to prevent multiple instances of 'transcript' tag if an update is performed with + # `{ type: transcript, treat_as_transcript: 1}` + sup_file_params[:tags] ||= [type, treat_as_transcript, machine_generated].compact.uniq + sup_file_params end def find_supplemental_file @@ -133,7 +201,7 @@ def find_supplemental_file def handle_error(message:, status:) - if request.format == :json + if request.format == :json || request.headers['Avalon-Api-Key'].present? render json: { errors: message }, status: status else flash[:error] = message @@ -151,18 +219,56 @@ def edit_structure_path end def edit_file_information - ident = "machine_generated_#{params[:id]}".to_sym + update_tags - if params[ident] && !@supplemental_file.machine_generated? - @supplemental_file.tags += ['machine_generated'] - elsif !params[ident] && @supplemental_file.machine_generated? - @supplemental_file.tags -= ['machine_generated'] - end @supplemental_file.label = supplemental_file_params[:label] return unless supplemental_file_params[:language].present? @supplemental_file.language = LanguageTerm.find(supplemental_file_params[:language]).code end + def update_tags + # The edit page only provides supplemental_file_params[:tags] on object creation. + # Thus, we need to provide individual handling for both updates triggered by page + # actions and updates through the JSON api. + if request.format == 'json' + @supplemental_file.tags = supplemental_file_params[:tags].presence + return + end + + file_params = [ + { param: "machine_generated_#{params[:id]}".to_sym, tag: "machine_generated", method: :machine_generated? }, + { param: "treat_as_transcript_#{params[:id]}".to_sym, tag: "transcript", method: :caption_transcript? } + ] + + file_params.each do |v| + param_name = v[:param] + tag = v[:tag] + method = v[:method] + if params[param_name] && !@supplemental_file.send(method) + @supplemental_file.tags += [tag] + elsif !params[param_name] && @supplemental_file.send(method) + @supplemental_file.tags -= [tag] + end + end + end + + def metadata_from_params + { + label: supplemental_file_params[:label], + tags: supplemental_file_params[:tags], + language: supplemental_file_params[:language].present? ? LanguageTerm.find(supplemental_file_params[:language]).code : Settings.caption_default.language, + parent_id: @object.id + }.compact + end + + def metadata_upload? + params[:format] == 'json' + end + + def attachment + params[:file] || supplemental_file_params[:file] + end + def object_supplemental_file_path if @object.is_a? MasterFile master_file_supplemental_file_path(id: @supplemental_file.id, master_file_id: @object.id) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 53d2e26dbc..2f3e8e3c7f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -58,12 +58,11 @@ def lti_share_url_for(obj, _opts = {}) user_omniauth_callback_lti_url(target_id: target) end - # TODO: Fix me with latest changes from 5.1.4 def image_for(document) master_file_id = document["section_id_ssim"].try :first - video_count = document["avalon_resource_type_ssim"].count{|m| m.start_with?('moving image'.titleize) } rescue 0 - audio_count = document["avalon_resource_type_ssim"].count{|m| m.start_with?('sound recording'.titleize) } rescue 0 + video_count = document["avalon_resource_type_ssim"].count{|m| m.downcase.start_with?('moving image') } rescue 0 + audio_count = document["avalon_resource_type_ssim"].count{|m| m.downcase.start_with?('sound recording') } rescue 0 if master_file_id if video_count > 0 @@ -104,6 +103,10 @@ def display_metadata(label, value, default=nil) content_tag(:dt, label) + contents end + def display_has_caption_or_transcript value + value = value == "true" ? 'Yes' : 'No' + end + def search_result_label item if item['title_tesi'].present? label = truncate(item['title_tesi'], length: 100) @@ -222,6 +225,10 @@ def truncate_center label, output_label_length, end_length = 0 omission: "...#{label.last(end_length)}") end + def titleize value + value.is_a?(Array) ? value.map(&:titleize) : value.titleize + end + def master_file_meta_properties( m ) formatted_duration = m.duration ? Time.new(m.duration.to_i / 1000).iso8601 : '' item_type = m.is_video? ? 'http://schema.org/VideoObject' : 'http://schema.org/AudioObject' diff --git a/app/helpers/blacklight/local_blacklight_helper.rb b/app/helpers/blacklight/local_blacklight_helper.rb index ecc2e18ca6..c11b38074e 100644 --- a/app/helpers/blacklight/local_blacklight_helper.rb +++ b/app/helpers/blacklight/local_blacklight_helper.rb @@ -26,7 +26,7 @@ def facet_group_names end def url_for_document doc, options = {} - SpeedyAF::Base.find(doc[:id]) + SpeedyAF::Base.for(doc.to_h.with_indifferent_access) end def contributor_index_display args diff --git a/app/helpers/catalog_helper.rb b/app/helpers/catalog_helper.rb index f0c573d881..ec884f12ca 100644 --- a/app/helpers/catalog_helper.rb +++ b/app/helpers/catalog_helper.rb @@ -21,4 +21,15 @@ def current_sort_field blacklight_config.sort_fields[actualSort] || default_sort_field end + def display_found_in(document) + metadata_count = document.to_h.sum {|k,v| k =~ /metadata_tf_/ ? v : 0 } + transcript_count = document["sections"]["docs"].sum { |d| Array(d.dig("transcripts", "docs")).sum {|s| s.sum {|k,v| k =~ /transcript_tf_/ ? v : 0 }}} + section_count = document.to_h.sum {|k,v| k =~ /structure_tf_/ ? v : 0 } + + metadata = "metadata (#{metadata_count})" if metadata_count > 0 + transcript = "transcript (#{transcript_count})" if transcript_count > 0 + sections = "sections (#{section_count})" if section_count > 0 + + [metadata, transcript, sections].compact.join(', ') + end end diff --git a/app/helpers/media_objects_helper.rb b/app/helpers/media_objects_helper.rb index 84f370eb1e..04b0d60968 100644 --- a/app/helpers/media_objects_helper.rb +++ b/app/helpers/media_objects_helper.rb @@ -13,195 +13,200 @@ # --- END LICENSE_HEADER BLOCK --- module MediaObjectsHelper - # Quick and dirty solution to the problem of displaying the right template. - # Quick and dirty also gets it done faster. - def current_step_for(status=nil) - if status.nil? - status = HYDRANT_STEPS.first - end - - HYDRANT_STEPS.template(status) - end - - # Based on the current context it will choose which class should be - # applied to the display. If you are not using Twitter Bootstrap or - # want different defaults then change them here. - # - # The context here is the media_object you are working with. - def class_for_step(context, step) - css_class = case - # when context.workflow.current?(step) - # 'nav-info' - when context.workflow.completed?(step) - 'nav-success' - else 'nav-disabled' - end - - css_class - end - - def form_id_for_step(step) - "#{step.gsub('-','_')}_form" - end - - def dropbox_url collection - ic = Iconv.new('UTF-8//IGNORE', 'UTF-8') - path = Addressable::URI.escape_component(collection.dropbox_directory_name || "", %r{[/\\%& #]}) - url = File.join(Settings.dropbox.upload_uri, path) - ic.iconv(url) - end - - def combined_display_date media_object - (issued,created) = case media_object - when MediaObject, SpeedyAF::Proxy::MediaObject - [media_object.date_issued, media_object.date_created] - when Hash - [media_object[:document]['date_issued_ssi'], media_object[:document]['date_created_ssi']] - end - result = issued - result += " (Creation date: #{created})" if created.present? - result - end - - def display_other_identifiers media_object - # bibliographic_id has form [:type,"value"], other_identifier has form [[:type,"value],[:type,"value"],...] - ids = media_object.bibliographic_id.present? ? [media_object.bibliographic_id] : [] - ids += Array(media_object.other_identifier) - ids.uniq.collect{|i| "#{ ModsDocument::IDENTIFIER_TYPES[i[:source]] }: #{ i[:id] }" } - end - - def display_notes media_object - note_string = "" - note_types = ModsDocument::NOTE_TYPES.clone - note_types['table of contents']='Contents' - sorted_note_types = note_types.keys.sort - sorted_note_types.prepend(sorted_note_types.delete 'general') - sorted_note_types.each do |note_type| - notes = note_type == 'table of contents'? media_object.table_of_contents : gather_notes_of_type(media_object, note_type) - notes.each_with_index do |note, i| - note_string += "

#{note_types[note_type]}

" if i==0 and note_type!='general' - note_string += "
#{note}
" - end - end - note_string - end - - def gather_notes_of_type media_object, type - media_object.note.present? ? media_object.note.select{|n| n[:type]==type}.collect{|n|n[:note]} : [] - end - - def display_collection(media_object) - link_to(media_object.collection.name, collection_path(media_object.collection.id)) - end - - def display_unit(media_object) - link_to(media_object.collection.unit, collections_path(filter: media_object.collection.unit)) - end - - def display_language media_object - media_object.language.collect{|l|l[:text]}.uniq - end - - def display_related_item media_object - media_object.related_item_url.collect{ |r| link_to( r[:label], r[:url]) } - end - - def display_series media_object - media_object.series.collect { |s| link_to(s, blacklight_path({ "f[collection_ssim][]" => media_object.collection.name, "f[series_ssim][]" => s }))} - end - - def display_rights_statement media_object - return nil unless media_object.rights_statement.present? - label = ModsDocument::RIGHTS_STATEMENTS[media_object.rights_statement] - return nil unless label.present? - link = link_to label, media_object.rights_statement, target: '_blank' - content_tag(:dt, 'Rights Statement') + content_tag(:dd) { link } - end - - def current_quality stream_info - available_qualities = Array(stream_info[:stream_flash]).collect {|s| s[:quality]} - available_qualities += Array(stream_info[:stream_hls]).collect {|s| s[:quality]} - available_qualities.uniq! - quality ||= session[:quality] if session['quality'].present? && available_qualities.include?(session[:quality]) - quality ||= Settings.streaming.default_quality if available_qualities.include?(Settings.streaming.default_quality) - quality ||= available_qualities.first - quality - end - - def is_current_section? section - @currentStream && ( section.id == @currentStream.id ) - end - - def show_progress?(sections) - encode_gids = sections.collect { |mf| "gid://ActiveEncode/#{mf.encoder_class}/#{mf.workflow_id}" } - ActiveEncode::EncodeRecord.where(global_id: encode_gids).any? { |encode| encode.state.to_s.upcase != 'COMPLETED' } - end - - def any_failed?(sections) - encode_gids = sections.collect { |mf| "gid://ActiveEncode/#{mf.encoder_class}/#{mf.workflow_id}" } - ActiveEncode::EncodeRecord.where(global_id: encode_gids).any? { |encode| encode.state.to_s.upcase == 'FAILED' } - end - - def parse_section section, node, index - sectionnode = section.structuralMetadata.xpath('//Item') - if sectionnode.children.present? - tracknumber = 0 - contents = '' - sectionnode.children.each do |node| - next if node.blank? - st, tracknumber = parse_node section, node, tracknumber - contents+=st - end - else - contents, tracknumber = parse_node section, sectionnode.first, index - end - return contents, tracknumber - end - - def parse_node section, node, tracknumber - if node.name.upcase=="DIV" - contents = '' - node.children.each do |n| - next if n.blank? - nodecontent, tracknumber = parse_node section, n, tracknumber - contents+=nodecontent - end - return "
  • #{node.attribute('label')}
    • #{contents}
  • ", tracknumber - elsif ['SPAN','ITEM'].include? node.name.upcase - tracknumber += 1 - start, stop = get_xml_media_fragment node, section - label = "#{tracknumber}. #{node.attribute('label').value} (#{get_duration_from_fragment(start, stop)})" - native_url = "#{id_section_media_object_path(@media_object, section.id)}?t=#{start},#{stop}" - url = "#{share_link_for( section )}?t=#{start},#{stop}" - segment_id = "#{section.id}-#{tracknumber}" - data = {segment: section.id, is_video: section.file_format != 'Sound', native_url: native_url, fragmentbegin: start, fragmentend: stop} - link = link_to label.html_safe, url, id: segment_id, data: data, class: 'playable structure wrap' - return "
  • #{link}
  • ", tracknumber - end - end - - def get_xml_media_fragment node, section - start = node.attribute('begin').present? ? node.attribute('begin').value : 0 - stop = node.attribute('end').present? ? node.attribute('end').value : section.duration.blank? ? 0 : milliseconds_to_formatted_time(section.duration.to_i) - parse_media_fragment "#{start},#{stop}" - end - - def get_duration node, section - start,stop = get_xml_media_fragment node, section - milliseconds_to_formatted_time((stop.to_i - start.to_i) * 1000, false) - end - - def get_duration_from_fragment(start, stop) - milliseconds_to_formatted_time((stop.to_i - start.to_i) * 1000, false) - end - - # This method mirrors the one in the MediaObject model but makes use of the master files passed in which can be SpeedyAF Objects - # This would be good to refactor in the future but speeds things up considerably for now - def gather_all_comments(media_object, master_files) - media_object.comment.sort + master_files.collect do |mf| - mf.comment.reject(&:blank?).collect do |c| - mf.display_title.present? ? "[#{mf.display_title}] #{c}" : c - end.sort - end.flatten.uniq - end + # Quick and dirty solution to the problem of displaying the right template. + # Quick and dirty also gets it done faster. + def current_step_for(status=nil) + if status.nil? + status = HYDRANT_STEPS.first + end + + HYDRANT_STEPS.template(status) + end + + # Based on the current context it will choose which class should be + # applied to the display. If you are not using Twitter Bootstrap or + # want different defaults then change them here. + # + # The context here is the media_object you are working with. + def class_for_step(context, step) + css_class = case + # when context.workflow.current?(step) + # 'nav-info' + when context.workflow.completed?(step) + 'nav-success' + else 'nav-disabled' + end + + css_class + end + + def form_id_for_step(step) + "#{step.gsub('-','_')}_form" + end + + def dropbox_url collection + ic = Iconv.new('UTF-8//IGNORE', 'UTF-8') + path = Addressable::URI.escape_component(collection.dropbox_directory_name || "", %r{[/\\%& #]}) + url = File.join(Settings.dropbox.upload_uri, path) + ic.iconv(url) + end + + def combined_display_date media_object + (issued,created) = case media_object + when MediaObject, SpeedyAF::Proxy::MediaObject + [media_object.date_issued, media_object.date_created] + when Hash + [media_object[:document]['date_issued_ssi'], media_object[:document]['date_created_ssi']] + end + result = issued + result += " (Creation date: #{created})" if created.present? + result + end + + def display_other_identifiers media_object + # bibliographic_id has form [:type,"value"], other_identifier has form [[:type,"value],[:type,"value"],...] + ids = media_object.bibliographic_id.present? ? [media_object.bibliographic_id] : [] + ids += Array(media_object.other_identifier) + ids.uniq.collect{|i| "#{ ModsDocument::IDENTIFIER_TYPES[i[:source]] }: #{ i[:id] }" } + end + + def display_notes media_object + note_string = "" + note_types = ModsDocument::NOTE_TYPES.clone + note_types['table of contents']='Contents' + sorted_note_types = note_types.keys.sort + sorted_note_types.prepend(sorted_note_types.delete 'general') + sorted_note_types.each do |note_type| + notes = note_type == 'table of contents'? media_object.table_of_contents : gather_notes_of_type(media_object, note_type) + notes.each_with_index do |note, i| + note_string += "

    #{note_types[note_type]}

    " if i==0 and note_type!='general' + note_string += "
    #{note}
    " + end + end + note_string + end + + def gather_notes_of_type media_object, type + media_object.note.present? ? media_object.note.select{|n| n[:type]==type}.collect{|n|n[:note]} : [] + end + + def display_collection(media_object) + link_to(media_object.collection.name, collection_path(media_object.collection.id)) + end + + def display_unit(media_object) + link_to(media_object.collection.unit, collections_path(filter: media_object.collection.unit)) + end + + def display_language media_object + media_object.language.collect{|l|l[:text]}.uniq + end + + def display_related_item media_object + media_object.related_item_url.collect{ |r| link_to( r[:label], r[:url]) } + end + + def display_series media_object + media_object.series.collect { |s| link_to(s, blacklight_path({ "f[collection_ssim][]" => media_object.collection.name, "f[series_ssim][]" => s }))} + end + + def display_rights_statement media_object + return nil unless media_object.rights_statement.present? + label = ModsDocument::RIGHTS_STATEMENTS[media_object.rights_statement] + return nil unless label.present? + link = link_to label, media_object.rights_statement, target: '_blank' + content_tag(:dt, 'Rights Statement') + content_tag(:dd) { link } + end + + def current_quality stream_info + available_qualities = Array(stream_info[:stream_flash]).collect {|s| s[:quality]} + available_qualities += Array(stream_info[:stream_hls]).collect {|s| s[:quality]} + available_qualities.uniq! + quality ||= session[:quality] if session['quality'].present? && available_qualities.include?(session[:quality]) + quality ||= Settings.streaming.default_quality if available_qualities.include?(Settings.streaming.default_quality) + quality ||= available_qualities.first + quality + end + + def is_current_section? section + @currentStream && ( section.id == @currentStream.id ) + end + + def show_progress?(sections) + encode_gids = sections.collect { |mf| "gid://ActiveEncode/#{mf.encoder_class}/#{mf.workflow_id}" } + ActiveEncode::EncodeRecord.where(global_id: encode_gids).any? { |encode| encode.state.to_s.upcase != 'COMPLETED' } + end + + def any_failed?(sections) + encode_gids = sections.collect { |mf| "gid://ActiveEncode/#{mf.encoder_class}/#{mf.workflow_id}" } + ActiveEncode::EncodeRecord.where(global_id: encode_gids).any? { |encode| encode.state.to_s.upcase == 'FAILED' } + end + + def parse_section section, node, index + sectionnode = section.structuralMetadata.xpath('//Item') + if sectionnode.children.present? + tracknumber = 0 + contents = '' + sectionnode.children.each do |node| + next if node.blank? + st, tracknumber = parse_node section, node, tracknumber + contents+=st + end + else + contents, tracknumber = parse_node section, sectionnode.first, index + end + return contents, tracknumber + end + + def parse_node section, node, tracknumber + if node.name.upcase=="DIV" + contents = '' + node.children.each do |n| + next if n.blank? + nodecontent, tracknumber = parse_node section, n, tracknumber + contents+=nodecontent + end + return "
  • #{node.attribute('label')}
    • #{contents}
  • ", tracknumber + elsif ['SPAN','ITEM'].include? node.name.upcase + tracknumber += 1 + start, stop = get_xml_media_fragment node, section + label = "#{tracknumber}. #{node.attribute('label').value} (#{get_duration_from_fragment(start, stop)})" + native_url = "#{id_section_media_object_path(@media_object, section.id)}?t=#{start},#{stop}" + url = "#{share_link_for( section )}?t=#{start},#{stop}" + segment_id = "#{section.id}-#{tracknumber}" + data = {segment: section.id, is_video: section.file_format != 'Sound', native_url: native_url, fragmentbegin: start, fragmentend: stop} + link = link_to label.html_safe, url, id: segment_id, data: data, class: 'playable structure wrap' + return "
  • #{link}
  • ", tracknumber + end + end + + def get_xml_media_fragment node, section + start = node.attribute('begin').present? ? node.attribute('begin').value : 0 + stop = node.attribute('end').present? ? node.attribute('end').value : section.duration.blank? ? 0 : milliseconds_to_formatted_time(section.duration.to_i) + parse_media_fragment "#{start},#{stop}" + end + + def get_duration node, section + start,stop = get_xml_media_fragment node, section + milliseconds_to_formatted_time((stop.to_i - start.to_i) * 1000, false) + end + + def get_duration_from_fragment(start, stop) + milliseconds_to_formatted_time((stop.to_i - start.to_i) * 1000, false) + end + + # This method mirrors the one in the MediaObject model but makes use of the sections passed in which can be SpeedyAF Objects + # This would be good to refactor in the future but speeds things up considerably for now + def gather_all_comments(media_object, sections) + media_object.comment.sort + sections.collect do |mf| + mf.comment.reject(&:blank?).collect do |c| + mf.display_title.present? ? "[#{mf.display_title}] #{c}" : c + end.sort + end.flatten.uniq + end + + def display_supplemental_file_language(language) + return LanguageTerm.find(language).text if language.present? + Settings.caption_default.name + end end diff --git a/app/helpers/security_helper.rb b/app/helpers/security_helper.rb index 850e33438b..8b6113dbb3 100644 --- a/app/helpers/security_helper.rb +++ b/app/helpers/security_helper.rb @@ -30,20 +30,20 @@ def secure_streams(stream_info, media_object_id) # media_object CDL check only happens once # session tokens retrieved in batch then passed into add_stream_url # Returns Hash[MasterFile.id, stream_info] - def secure_stream_infos(master_files, media_objects) + def secure_stream_infos(sections, media_objects) stream_info_hash = {} not_checked_out_hash = {} - mo_ids = master_files.collect(&:media_object_id) + mo_ids = sections.collect(&:media_object_id) mo_ids.each { |mo_id| not_checked_out_hash[mo_id] ||= not_checked_out?(mo_id, media_object: media_objects.find {|mo| mo.id == mo_id}) } - not_checked_out_master_files = master_files.select { |mf| not_checked_out_hash[mf.media_object_id] } - checked_out_master_files = master_files - not_checked_out_master_files + not_checked_out_sections = sections.select { |mf| not_checked_out_hash[mf.media_object_id] } + checked_out_sections = sections - not_checked_out_sections - not_checked_out_master_files.each { |mf| stream_info_hash[mf.id] = mf.stream_details } + not_checked_out_sections.each { |mf| stream_info_hash[mf.id] = mf.stream_details } - stream_tokens = StreamToken.get_session_tokens_for(session: session, targets: checked_out_master_files.map(&:id)) + stream_tokens = StreamToken.get_session_tokens_for(session: session, targets: checked_out_sections.map(&:id)) stream_token_hash = stream_tokens.pluck(:target, :token).to_h - checked_out_master_files.each { |mf| stream_info_hash[mf.id] = secure_stream_info(mf.stream_details, stream_token_hash[mf.id]) } + checked_out_sections.each { |mf| stream_info_hash[mf.id] = secure_stream_info(mf.stream_details, stream_token_hash[mf.id]) } stream_info_hash end diff --git a/app/javascript/components/MediaObjectRamp.jsx b/app/javascript/components/MediaObjectRamp.jsx index 8dd48fecb9..250e4d3ef1 100644 --- a/app/javascript/components/MediaObjectRamp.jsx +++ b/app/javascript/components/MediaObjectRamp.jsx @@ -1,5 +1,5 @@ /* - * Copyright 2011-2023, The Trustees of Indiana University and Northwestern + * Copyright 2011-2024, The Trustees of Indiana University and Northwestern * University. Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * @@ -40,7 +40,7 @@ const ExpandCollapseArrow = () => { const Ramp = ({ urls, - master_files_count, + sections_count, has_structure, title, share, @@ -153,9 +153,9 @@ const Ramp = ({ ) : ( - {master_files_count > 0 && + {sections_count > 0 && - +
    {
    }
    @@ -217,7 +217,7 @@ const Ramp = ({ ref={expandCollapseBtnRef} > - {isClosed ? ' Expand' : ' Close'} {master_files_count > 1 ? `${master_files_count} Sections` : 'Section'} + {isClosed ? ' Expand' : ' Close'} {sections_count > 1 ? `${sections_count} Sections` : 'Section'} } @@ -244,13 +244,13 @@ const Ramp = ({ ) } - + {cdl.enabled &&
    } - {(cdl.can_stream && master_files_count != 0 && has_transcripts) && + {(cdl.can_stream && sections_count != 0 && has_transcripts) && { const [manifestUrl, setManifestUrl] = React.useState(''); const [activeItemTitle, setActiveItemTitle] = React.useState(); const [activeItemSummary, setActiveItemSummary] = React.useState(); const [startCanvasId, setStartCanvasId] = React.useState(); + const [expanded, setExpanded] = React.useState(false); + const [description, setDescription] = React.useState(); let interval; + let descriptionCheck; const USER_AGENT = window.navigator.userAgent; const IS_MOBILE = (/Mobi/i).test(USER_AGENT); @@ -61,19 +66,25 @@ const Ramp = ({ let url = `${base_url}/playlists/${playlist_id}/manifest.json`; if (token) url += `?token=${token}`; - let [fullpath, position] = fullpath_url.split('?position='); - let start_canvas = playlist_item_ids[position - 1] + let [_, position] = fullpath_url.split('?position='); + let start_canvas = playlist_item_ids[position - 1]; setStartCanvasId( start_canvas && start_canvas != undefined - ? `${base_url}/playlists/${playlist_id}/manifest/canvas/${start_canvas}` - : undefined + ? `${base_url}/playlists/${playlist_id}/manifest/canvas/${start_canvas}` + : undefined ); setManifestUrl(url); interval = setInterval(addPlayerEventListeners, 500); + /** + * The passed in description is not immediately available for some reason. + * Use an interval to wait and set initial description. + */ + descriptionCheck = setInterval(prepInitialDescription, 100); // Clear interval upon component unmounting return () => clearInterval(interval); + return () => clearInterval(descriptionCheck); }, []); /** @@ -94,43 +105,94 @@ const Ramp = ({ } }; + const expandBtn = { + paddingLeft: '2px', + cursor: 'pointer' + }; + + const wordCount = 32; + const words = comment ? comment.split(' ') : []; + + function prepInitialDescription() { + if (words !== undefined && words.length > 0) { + clearInterval(descriptionCheck); + let desc = words.length > wordCount + ? `${words.slice(0, wordCount).join(' ')}...` + : words.join(' '); + + setDescription(desc); + } else if (words.length === 0) { + clearInterval(descriptionCheck); + } + } + + const handleDescriptionMoreLessClick = () => { + setDescription( + expanded ? `${words.slice(0, wordCount).join(' ')}...` : words.join(' ') + ); + setExpanded(!expanded); + }; + + // Update scrolling indicators when end of scrolling has been reached + const handleScrollableDescription = (e) => { + let elem = e.target; + const scrollMsg = elem.nextSibling; + const structureEnd = Math.abs(elem.scrollHeight - (elem.scrollTop + elem.clientHeight)) <= 1; + + if (scrollMsg && structureEnd && scrollMsg.classList.contains('scrollable')) { + scrollMsg.classList.remove('scrollable'); + } else if (scrollMsg && !structureEnd && !scrollMsg.classList.contains('scrollable')) { + scrollMsg.classList.add('scrollable'); + } + }; + + // Update scrolling indicators when page is resized + const resizeObserver = new ResizeObserver(entries => { + for (let entry of entries) { + handleScrollableDescription(entry); + } + }); + return ( - - - -

    {activeItemTitle}

    - {activeItemSummary &&
    {activeItemSummary}
    } -
    - - - - - - - - - - Markers - - - - - - - - - - Source Item Details - - - - -
    + + {playlist_item_ids?.length > 0 && ( + + +

    {activeItemTitle}

    + {activeItemSummary &&
    {activeItemSummary}
    } +
    + + + + + + + + + + Markers + + + + + + + + + + Source Item Details + + + + +
    + )} @@ -154,16 +216,45 @@ const Ramp = ({ } - +
    -
    -

    Playlist Items

    - + + {comment && ( +
    +

    {comment_label}

    +
    + +
    + {expanded && ( +
    + Scroll to see more +
    + )} + {words.length > wordCount && ( + + Show {expanded ? 'less' : 'more'} + + )} +
    + )} + {tags && ( +
    +

    Tags

    +
    +
    + )} + + {playlist_item_ids?.length > 0 && ( + +

    Playlist Items

    + +
    + )} diff --git a/app/javascript/components/Ramp.scss b/app/javascript/components/Ramp.scss index fb47b8101e..1956294053 100644 --- a/app/javascript/components/Ramp.scss +++ b/app/javascript/components/Ramp.scss @@ -198,6 +198,10 @@ } } + .iiif-manifest-logo { + width: 1.5em; + } + @media (max-width: 585px) { .ramp--tabs-panel { padding-top: 1rem; @@ -360,6 +364,41 @@ flex-basis: auto; height: 70vh; + .ramp--playlist-desc-tags { + flex-direction: column; + } + + .ramp--playlist-description { + overflow: auto; + max-height: 25vh; + } + + // Scroll to see more message + .ramp--playlist-description-scroll { + display: none; + } + + .ramp--playlist-description-scroll.scrollable { + background: #bbbbbb; + text-align: center; + display: block; + position: absolute; + color: black; + font-size: 13px; + width: fit-content; + bottom: 0; + left: 35.5%; + border: 1px solid #ddd; + border-radius: 0.25rem 0.25rem 0 0; + border-bottom: none; + padding: 0.25em; + transform: translateY(-1.5rem); + + @media (min-width: 585px) and (max-width: 768px) { + left: 25%; + } + } + .ramp--structured-nav__border { margin-top: 0; overflow: auto; diff --git a/app/javascript/components/embeds/EmbeddedRamp.jsx b/app/javascript/components/embeds/EmbeddedRamp.jsx new file mode 100644 index 0000000000..867bc07a96 --- /dev/null +++ b/app/javascript/components/embeds/EmbeddedRamp.jsx @@ -0,0 +1,122 @@ +/* + * Copyright 2011-2024, The Trustees of Indiana University and Northwestern + * University. Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * --- END LICENSE_HEADER BLOCK --- +*/ + +import React from 'react'; +import { + IIIFPlayer, + MediaPlayer +} from '@samvera/ramp'; +import 'video.js/dist/video-js.css'; +import "@samvera/ramp/dist/ramp.css"; +import './Ramp.scss'; + +const Ramp = ({ + urls, + media_object_id, + is_video +}) => { + const [manifestUrl, setManifestUrl] = React.useState(''); + const [startCanvasId, setStartCanvasId] = React.useState(); + const [startCanvasTime, setStartCanvasTime] = React.useState(); + let interval; + + React.useEffect(() => { + const { base_url, fullpath_url } = urls; + // Split the current path from the time fragment in the format .../:id?t=time + let [fullpath, start_time] = fullpath_url.split('?t='); + // Split the current path in the format /master_files/:mf_id/embed + let [_, __, mf_id, ___] = fullpath.split('/'); + // Build the manifest URL + let url = `${base_url}/media_objects/${media_object_id}/manifest.json`; + + // Set start Canvas ID and start time in the state for Ramp + setStartCanvasId( + mf_id && mf_id != undefined + ? `${base_url}/media_objects/${media_object_id}/manifest/canvas/${mf_id}` + : undefined + ); + setStartCanvasTime( + start_time && start_time != undefined + ? parseFloat(start_time) + : undefined + ); + setManifestUrl(url); + + interval = setInterval(addControls, 500); + + // Clear interval upon component unmounting + return () => clearInterval(interval); + }, []); + + const addControls = () => { + let player = document.getElementById('iiif-media-player'); + if (player && player.player) { + let embeddedPlayer = player.player + + // Player API handling + window.addEventListener('message', function(event) { + var command = event.data.command; + + if (command=='play') embeddedPlayer.play(); + else if (command=='pause') embeddedPlayer.pause(); + else if (command=='toggle_loop') { + embeddedPlayer.loop() ? embeddedPlayer.loop(false): embeddedPlayer.loop(true); + embeddedPlayer.autoplay() ? embeddedPlayer.autoplay(false) : embeddedPlayer.autoplay(true); + } + else if (command=='set_offset') embeddedPlayer.currentTime(event.data.offset); // time is in seconds + else if (command=='get_offset') event.source.postMessage({'command': 'currentTime','currentTime': embeddedPlayer.currentTime()}, event.origin); + }); + + if (embeddedPlayer.audioOnlyMode()) { + /* + Quality selector extends outside iframe for audio items, so we need to disable that control + and rely on the quality automatically selected by the user's system. + */ + embeddedPlayer.controlBar.qualitySelector.dispose(); + } + + // Create button component for "View in Repository" and add to control bar + let repositoryUrl = Object.values(urls).join('/').replace('/embed', ''); + let position = embeddedPlayer.audioOnlyMode() ? embeddedPlayer.controlBar.children_.length : embeddedPlayer.controlBar.children_.length - 1; + var viewInRepoButton = embeddedPlayer.controlBar.addChild('button', { + clickHandler: function(event) { + window.open(repositoryUrl, '_blank').focus(); + } + }, position); + + viewInRepoButton.addClass('vjs-custom-external-link'); + viewInRepoButton.el_.setAttribute('style', 'cursor: pointer;'); + viewInRepoButton.controlText('View in Repository'); + + // Add button icon + document.querySelector('.vjs-custom-external-link').innerHTML = '' + + // This function only needs to run once, so we clear the interval here + clearInterval(interval); + } + }; + + return ( + + + + ); +}; + +export default Ramp; diff --git a/app/javascript/components/embeds/Ramp.scss b/app/javascript/components/embeds/Ramp.scss new file mode 100644 index 0000000000..4a54fa8771 --- /dev/null +++ b/app/javascript/components/embeds/Ramp.scss @@ -0,0 +1,51 @@ +/* + * Copyright 2011-2024, The Trustees of Indiana University and Northwestern + * University. Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * --- END LICENSE_HEADER BLOCK --- +*/ + +[class*="ramp--"] { + font-family: Arial, Helvetica, sans-serif; +} + +.ramp--media_player { + .video-js .vjs-big-play-button { + left: 55% !important; + } + .video-js.vjs-audio-only-mode { + // Disable tooltips for volume and progress in embedded + // audio. Viewport is too small to display them. + .vjs-volume-panel:hover .vjs-mouse-display, + .vjs-custom-progress-bar .tooltiptext { + display: none !important; + } + } + @media (max-width: 585px) { + .video-js .vjs-big-play-button { + scale: 1.5; + } + + .video-js .vjs-control-bar { + font-size: 90% !important; + } + + // reduce player height to match with adjusted font-size + // for smaller screens + .video-js.vjs-audio { + min-height: 2.9em; + } + } + .video-js .vjs-title-bar .vjs-title-link { + font-size: 125%; + } +} diff --git a/app/javascript/iiif-timeliner-styles.css b/app/javascript/iiif-timeliner-styles.css index e73d5a9a73..d17e6edbc1 100644 --- a/app/javascript/iiif-timeliner-styles.css +++ b/app/javascript/iiif-timeliner-styles.css @@ -15,23 +15,23 @@ */ @import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500); -*,:after,:before{box-sizing:border-box}body,html{font-family:Roboto,sans-serif;margin:0;padding:0;overflow:hidden;background:#eee;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.homepage{margin:20px}.homepage h1{font-weight:500}.container{max-width:500px;margin:100px auto}.container h1{color:#005cc5;text-align:center}.container code{border:1px solid #ddd;background:#eee}.container .panel{line-height:25px;text-align:justify;background:#dad0e4;padding:1px 15px;margin-bottom:15px}.container .button{border:1px solid #3f50b5;background-color:#3f50b5;color:#fff;-webkit-text-decoration:solid;text-decoration:solid;border-radius:3px;margin:35%;padding:5px}::-webkit-scrollbar{width:2px;height:2px}::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}::-webkit-scrollbar-thumb{border-radius:0;background:rgba(0,0,0,.2)}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}::-webkit-scrollbar-thumb:window-inactive{background:rgba(0,0,0,.05)}#app{width:100%;height:100%}.documentation{position:fixed;top:0;right:0;background:#000;color:#fff;border-radius:0 0 0 3px;text-decoration:none;padding:10px} +*,:after,:before{box-sizing:border-box}body,html{font-family:Roboto,sans-serif;margin:0;padding:0;background:#eee;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.homepage{margin:20px}.homepage h1{font-weight:500}.container{max-width:500px;margin:100px auto}.container h1{color:#005cc5;text-align:center}.container code{border:1px solid #ddd;background:#eee}.container .panel{line-height:25px;text-align:justify;background:#dad0e4;padding:1px 15px;margin-bottom:15px}.container .button{border:1px solid #3f50b5;background-color:#3f50b5;color:#fff;-webkit-text-decoration:solid;text-decoration:solid;border-radius:3px;margin:35%;padding:5px}::-webkit-scrollbar{width:2px;height:2px}::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}::-webkit-scrollbar-thumb{border-radius:0;background:rgba(0,0,0,.2)}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}::-webkit-scrollbar-thumb:window-inactive{background:rgba(0,0,0,.05)}#app{width:100%;height:100%}.documentation{position:fixed;top:0;right:0;background:#000;color:#fff;border-radius:0 0 0 3px;text-decoration:none;padding:10px} .variations-app-bar{background:#3f50b5;color:#fff}.variations-app-bar-no-header{background:#fff} -.current-time-indicator{color:#777;margin-right:30px}.current-time-indicator--error{color:darkred}.current-time-indicator__current-time{color:#000}.current-time-indicator__runtime{font-size:.85em} +.current-time-indicator{margin-right:30px}.current-time-indicator--error{color:#8b0000} .zoom-controls{position:relative;top:0;right:0} .audio-transport-bar{padding:8px 30px;background:#fff}.audio-transport-bar__actions{display:flex;align-items:center;flex-direction:row;justify-content:flex-start}.audio-transport-bar__buttons{display:flex;flex-direction:row;align-items:center;justify-content:center}.audio-transport-bar__volume{display:flex;align-items:end;flex-direction:row;justify-content:flex-end}div .audio-transport-bar__tooltip{font-size:12px}.audio-transport-bar .audio-transport-bar__button-text{min-width:40px} .volume-slider-compact{width:160px;position:relative;font-size:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-left:20px}.volume-slider-compact--flipped{flex-direction:row-reverse;margin-right:20px;margin-left:10px}.volume-slider-compact__muter{margin:0 10px} .colour-swatch-picker__option{width:64px;height:40px} .time-picker{display:flex;flex-direction:row-reverse;align-items:flex-end;justify-content:space-evenly;width:80px;margin-right:8px;margin-top:13px;border:2px solid #ccc;padding:8px}.time-picker__unit{width:21px;border:0;outline:0;-webkit-appearance:none;-moz-appearance:none;border-radius:0} .metadata-editor__button-bar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center} -.metadata{display:flex;flex-direction:row;align-items:stretch;flex-grow:1;flex-shrink:1;flex-basis:0px;min-height:0}.metadata__annotations{flex:2;padding-right:8px;display:flex;flex-direction:column}.metadata__annotations-content{background:#fff;padding:8px 16px;flex:1 1 0px;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.metadata__video-playback{flex:1;padding-right:8px;display:flex;flex-direction:column}.metadata__video-playback-content{background:#fff;padding:8px 16px;flex:1 1 0px;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.metadata__project{align-items:stretch;justify-content:stretch}.metadata__project,.metadata__project-content{flex:1 1 0px;display:flex;flex-direction:column}.metadata__project-content{width:100%;background:#fff;padding:8px 16px;overflow-y:auto;overflow-x:hidden}.metadata__content{padding:0 8px} +.metadata{display:flex;flex-direction:row;align-items:stretch;flex-grow:1;flex-shrink:1;flex-basis:0px;min-height:calc(50vh - 48px)}.metadata__annotations{flex:2;padding-right:8px;display:flex;flex-direction:column}.metadata__annotations-content{background:#fff;padding:8px 16px;flex:1 1 0px;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.metadata__video-playback{flex:1;padding-right:8px;display:flex;flex-direction:column}.metadata__video-playback-content{background:#fff;padding:8px 16px;flex:1 1 0px;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.metadata__project{align-items:stretch;justify-content:stretch}.metadata__project,.metadata__project-content{flex:1 1 0px;display:flex;flex-direction:column}.metadata__project-content{width:100%;background:#fff;padding:8px 16px;overflow-y:auto;overflow-x:hidden}.metadata__content{padding:0 8px} .file-upload{padding:14px;border:1px solid #ccc;border-radius:2px;margin-top:16px;margin-bottom:20px}.file-upload__label{line-height:34px;margin:0 15px} .footer{margin-top:24px;height:24px} -.content-overlay{width:100%;height:100%;background:hsla(0,0%,100%,.9);position:absolute;z-index:1;display:flex;justify-content:center;align-items:center} -.bubble-display{display:block;vertical-align:top}.bubble-display *{transition:all .3s}.bubble-display--mouseDown *,.bubble-display--mouseDown+.timeline-scrubber{transition:none}.bubble-display__rect{fill:transparent;stroke-width:0;stroke:transparent;cursor:-webkit-grab;cursor:grab}.bubble-display__rect:active{cursor:-webkit-grabbing;cursor:grabbing} -.single-bubble{cursor:pointer;paint-order:stroke}.single-bubble:active{cursor:-webkit-grabbing;cursor:grabbing} -.timeline-marker{position:absolute;width:4px;height:11px;display:block;margin-left:-2px;margin-top:-5px;cursor:-webkit-grab;cursor:grab;z-index:1;background:#000;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.timeline-marker:after{content:"";position:absolute;background:transparent;height:11px;margin-left:-5px;width:11px}.timeline-marker--marker:hover{-webkit-transform:scaleY(2);transform:scaleY(2)}.timeline-marker--marker:active{cursor:-webkit-grabbing;cursor:grabbing;-webkit-transform:scaleY(3);transform:scaleY(3);background:#000;box-shadow:0 5px 10px 0 rgba(0,0,0,.1)}.timeline-marker--bookmark{background:transparent;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PHBhdGggZD0iTTcgMTRsNS01IDUgNUg3eiIvPjwvc3ZnPg==) no-repeat 0 0;background-size:contain;width:29px;height:29px;margin-left:-14px}.timeline-marker--bookmark:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.timeline-marker--bookmark:active{box-shadow:none;-webkit-transform:scale(1.5) translateY(10px);transform:scale(1.5) translateY(10px)}.timeline-marker--bookmark:active:after{content:"";position:absolute;background:rgba(0,0,0,.5);width:1px;height:16px;top:-5px;left:19px}.timeline-marker__tooltip{position:absolute;top:15px;left:0;margin-left:5px;color:#777;border-radius:2px;font-size:11px;-webkit-transform:translate(-50%);transform:translate(-50%);text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff} -.playhead{position:absolute;background:#ff4081;left:0;top:0;bottom:0;margin-top:-2px;margin-bottom:-2px;pointer-events:none;overflow:visible;z-index:-1;transition:width .2s linear}.playhead:after{transition:all .4s;content:"";height:100%;border-bottom:0 solid #424242;border-left:0 solid transparent;border-right:0 solid transparent;position:absolute;right:0;top:5px;cursor:ew-resize}.playhead:before{position:absolute;content:"";background:transparent;right:-6px;top:-3px;border-radius:50%;height:12px;width:12px;-webkit-transform:scale(0);transform:scale(0);transition:all .2s}.timeline-scrubber:active .playhead,.timeline-scrubber:hover .playhead{transition:none}.timeline-scrubber:active .playhead:before,.timeline-scrubber:hover .playhead:before{background:#b32d5a;-webkit-transform:scale(1);transform:scale(1)} -.timeline-scrubber{position:relative;height:6px;z-index:2;box-sizing:border-box;border-bottom:2px solid transparent;border-top:2px solid transparent;background:#eee;cursor:pointer;transition:width .3s,margin-left .3s}.timeline-scrubber:focus{outline:none}.timeline-scrubber:before{z-index:1;background:transparent;content:"";width:100%;position:absolute;left:0;right:0;top:-10px;height:20px}.timeline-scrubber__tooltip{position:absolute;background:rgba(0,0,0,.5);transition:opacity .4s;color:#fff;width:80px;height:25px;line-height:25px;text-align:center;top:-35;border-radius:3px;left:0;pointer-events:none} +.content-overlay{width:100%;height:100%;background:hsla(0,0%,100%,.9);position:absolute;z-index:1000;display:flex;justify-content:center;align-items:center} +.bubble-display{display:block;vertical-align:top}.bubble-display *{transition:all .3s}.bubble-display--mouseDown *,.bubble-display--mouseDown+.timeline-scrubber{transition:none}.bubble-display__rect{fill:transparent;stroke-width:0;stroke:transparent;cursor:grab}.bubble-display__rect:active{cursor:grabbing} +.single-bubble{cursor:pointer;paint-order:stroke}.single-bubble:active{cursor:grabbing} +.timeline-marker{position:absolute;width:4px;height:11px;display:block;margin-left:-2px;margin-top:-5px;cursor:grab;z-index:10;background:#000;transition:transform .2s}.timeline-marker:after{content:"";position:absolute;background:transparent;height:11px;margin-left:-5px;width:11px}.timeline-marker--marker:hover{transform:scaleY(2)}.timeline-marker--marker:active{cursor:grabbing;transform:scaleY(3);background:#000;box-shadow:0 5px 10px 0 rgba(0,0,0,.1)}.timeline-marker--bookmark{background:transparent;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PHBhdGggZD0iTTcgMTRsNS01IDUgNUg3eiIvPjwvc3ZnPg==) no-repeat 0 0;background-size:contain;width:29px;height:29px;margin-left:-14px}.timeline-marker--bookmark:hover{transform:scale(1.2)}.timeline-marker--bookmark:active{box-shadow:none;transform:scale(1.5) translateY(10px)}.timeline-marker--bookmark:active:after{content:"";position:absolute;background:rgba(0,0,0,.5);width:1px;height:16px;top:-5px;left:19px}.timeline-marker__tooltip{position:absolute;top:15px;left:0;margin-left:5px;color:#777;border-radius:2px;font-size:11px;transform:translate(-50%);text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff} +.playhead{position:absolute;background:#ff4081;left:0;top:0;bottom:0;margin-top:-2px;margin-bottom:-2px;pointer-events:none;overflow:visible;z-index:-1;transition:width .2s linear}.playhead:after{transition:all .4s;content:"";height:100%;border-bottom:0 solid #424242;border-left:0 solid transparent;border-right:0 solid transparent;position:absolute;right:0;top:5px;cursor:ew-resize}.playhead:before{position:absolute;content:"";background:transparent;right:-6px;top:-3px;border-radius:50%;height:12px;width:12px;transform:scale(0);transition:all .2s}.timeline-scrubber:active .playhead,.timeline-scrubber:hover .playhead{transition:none}.timeline-scrubber:active .playhead:before,.timeline-scrubber:hover .playhead:before{background:#b32d5a;transform:scale(1)} +.timeline-scrubber{position:relative;height:6px;z-index:10;box-sizing:border-box;border-bottom:2px solid transparent;border-top:2px solid transparent;background:#eee;cursor:pointer;transition:width .3s,margin-left .3s}.timeline-scrubber:focus{outline:none}.timeline-scrubber:before{z-index:1;background:transparent;content:"";width:100%;position:absolute;left:0;right:0;top:-10px;height:20px}.timeline-scrubber__tooltip{position:absolute;background:rgba(0,0,0,.5);transition:opacity .4s;color:#fff;width:80px;height:25px;line-height:25px;text-align:center;top:-35px;border-radius:3px;left:0;pointer-events:none} .variations-app,.variations-app__content{width:100%;height:100%;display:flex;flex-direction:column}.variations-app__metadata-editor{padding:8px;background:#eee;flex:1 1 0px;display:flex;flex-direction:column}.variations-app__metadata-grid{margin-top:24px;height:24px} diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 37464816a0..f6046a0933 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -25,6 +25,11 @@ // console.log('Hello World from Webpacker') // Support component names relative to this directory: -var componentRequireContext = require.context("components", true) + +/* + * For some reason including the `embeds` directory in this `require.context` breaks + * the player. Filtering out the directory allows everything to operate as intended. + */ +var componentRequireContext = require.context("components", true, /^(?!embed)/) var ReactRailsUJS = require("react_ujs") ReactRailsUJS.useContext(componentRequireContext) diff --git a/spec/cypress/cypress.json b/app/javascript/packs/embed.js similarity index 59% rename from spec/cypress/cypress.json rename to app/javascript/packs/embed.js index 9b643838da..0a89e1c8ae 100644 --- a/spec/cypress/cypress.json +++ b/app/javascript/packs/embed.js @@ -13,18 +13,6 @@ * specific language governing permissions and limitations under the License. * --- END LICENSE_HEADER BLOCK --- */ - -{ - "baseUrl": "http://localhost:3000", - "fixtureFolder": "spec/cypress/fixtures", - "integrationFolder": "spec/cypress/integration", - "pluginsFile": "spec/cypress/plugins/index.js", - "supportFile": "spec/cypress/support/index.js", - "env": { - "USERS_ADMINISTRATOR_EMAIL": "administrator@example.com", - "USERS_ADMINISTRATOR_PASSWORD": "password", - "USERS_USER_EMAIL": "user@example.com", - "USERS_USER_PASSWORD": "password", - "MEDIA_OBJECT_ID": "123456789" - } -} +var embedRequireContext = require.context("components/embeds", false) +var ReactRailsUJS = require("react_ujs") +ReactRailsUJS.useContext(embedRequireContext) \ No newline at end of file diff --git a/app/javascript/packs/iiif-timeliner.js b/app/javascript/packs/iiif-timeliner.js index 1658b2c30e..b08d6086e0 100644 --- a/app/javascript/packs/iiif-timeliner.js +++ b/app/javascript/packs/iiif-timeliner.js @@ -111,13195 +111,11853 @@ import "../iiif-timeliner-styles.css" /*! no static exports found */ /***/ (function(module, exports) { - eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": - /*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! - \**********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": - /*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/createClass.js": - /*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/createClass.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": - /*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js": - /*!**************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***! - \**************************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! - \*******************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperty(obj, key, value) {\n key = Object(_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": - /*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! - \************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _extends; });\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! - \******************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _inheritsLoose; });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n Object(_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js ***! - \******************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectSpread2; });\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n Object(_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js": - /*!*********************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***! - \*********************************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutPropertiesLoose; });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! - \*******************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _setPrototypeOf; });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js": - /*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***! - \****************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _toPrimitive; });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\nfunction _toPrimitive(input, hint) {\n if (Object(_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (Object(_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***! - \******************************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _toPropertyKey; });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\");\n\n\nfunction _toPropertyKey(arg) {\n var key = Object(_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arg, \"string\");\n return Object(_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key) === \"symbol\" ? key : String(key);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js": - /*!***********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***! - \***********************************************************/ - /*! exports provided: default */ - /***/ (function(module, __webpack_exports__, __webpack_require__) { - - "use strict"; - eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _typeof; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/extends.js": - /*!********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/extends.js ***! - \********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/extends.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js": - /*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/inherits.js": - /*!*********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/inherits.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/inherits.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/inheritsLoose.js": - /*!**************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/inheritsLoose.js ***! - \**************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": - /*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! - \**********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js": - /*!***********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/interopRequireWildcard.js ***! - \***********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj[\"default\"] = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\nmodule.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/interopRequireWildcard.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js": - /*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***! - \****************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js": - /*!************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***! - \************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ \"./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js": - /*!*****************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***! - \*****************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": - /*!**************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! - \**************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": - /*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js": - /*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/iterableToArray.js\");\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ \"./node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/toPrimitive.js": - /*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toPrimitive.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/toPropertyKey.js": - /*!**************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toPropertyKey.js ***! - \**************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/typeof.js": - /*!*******************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports) { - - eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/typeof.js?"); - - /***/ }), - - /***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": - /*!***************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! - \***************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js?"); - - /***/ }), - - /***/ "./node_modules/@fesk/bem-js/lib/index.js": - /*!************************************************!*\ - !*** ./node_modules/@fesk/bem-js/lib/index.js ***! - \************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nexports.__esModule = true;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2017-present, Digirati Limited.\n * All rights reserved.\n */\n\nvar Element = function () {\n function Element(name) {\n _classCallCheck(this, Element);\n\n this.name = name;\n }\n\n Element.prototype.modifier = function modifier(m, c) {\n if (m.toString() === '[object Object]') return this.ms(m);\n if (!c && c !== undefined) {\n return this.name;\n }\n return this.name + ' ' + this.name + '--' + m;\n };\n\n Element.prototype.m = function m(_m, c) {\n this.modifier(_m, c);\n };\n\n Element.prototype.modifiers = function modifiers(m) {\n var join = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var ms = [this.name];\n for (var k in m) {\n if (m.hasOwnProperty(k) && m[k]) {\n ms.push(this.name + '--' + k);\n }\n }\n return join ? ms.join(' ') : ms;\n };\n\n Element.prototype.ms = function ms(m, join) {\n this.modifiers(m, join);\n };\n\n Element.prototype.toString = function toString() {\n return this.name;\n };\n\n return Element;\n}();\n\nvar Block = function (_Element) {\n _inherits(Block, _Element);\n\n function Block() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Block);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Element.call.apply(_Element, [this].concat(args))), _this), _this.e = _this.element, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Block.prototype.element = function element(name) {\n return new Element(this.name + '__' + name);\n };\n\n return Block;\n}(Element);\n\nvar BEM = {\n block: function block(blockName) {\n // Block.\n return new Block(blockName);\n }\n};\n\nBEM.b = BEM.block;\n\nexports.default = BEM;\nmodule.exports = exports['default'];\n\n//# sourceURL=webpack:///./node_modules/@fesk/bem-js/lib/index.js?"); - - /***/ }), - - /***/ "./node_modules/@icons/material/CheckIcon.js": - /*!***************************************************!*\ - !*** ./node_modules/@icons/material/CheckIcon.js ***! - \***************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar DEFAULT_SIZE = 24;\n\nexports.default = function (_ref) {\n var _ref$fill = _ref.fill,\n fill = _ref$fill === undefined ? 'currentColor' : _ref$fill,\n _ref$width = _ref.width,\n width = _ref$width === undefined ? DEFAULT_SIZE : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === undefined ? DEFAULT_SIZE : _ref$height,\n _ref$style = _ref.style,\n style = _ref$style === undefined ? {} : _ref$style,\n props = _objectWithoutProperties(_ref, ['fill', 'width', 'height', 'style']);\n\n return _react2.default.createElement(\n 'svg',\n _extends({\n viewBox: '0 0 ' + DEFAULT_SIZE + ' ' + DEFAULT_SIZE,\n style: _extends({ fill: fill, width: width, height: height }, style)\n }, props),\n _react2.default.createElement('path', { d: 'M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z' })\n );\n};\n\n//# sourceURL=webpack:///./node_modules/@icons/material/CheckIcon.js?"); - - /***/ }), - - /***/ "./node_modules/@icons/material/UnfoldMoreHorizontalIcon.js": - /*!******************************************************************!*\ - !*** ./node_modules/@icons/material/UnfoldMoreHorizontalIcon.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar DEFAULT_SIZE = 24;\n\nexports.default = function (_ref) {\n var _ref$fill = _ref.fill,\n fill = _ref$fill === undefined ? 'currentColor' : _ref$fill,\n _ref$width = _ref.width,\n width = _ref$width === undefined ? DEFAULT_SIZE : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === undefined ? DEFAULT_SIZE : _ref$height,\n _ref$style = _ref.style,\n style = _ref$style === undefined ? {} : _ref$style,\n props = _objectWithoutProperties(_ref, ['fill', 'width', 'height', 'style']);\n\n return _react2.default.createElement(\n 'svg',\n _extends({\n viewBox: '0 0 ' + DEFAULT_SIZE + ' ' + DEFAULT_SIZE,\n style: _extends({ fill: fill, width: width, height: height }, style)\n }, props),\n _react2.default.createElement('path', { d: 'M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z' })\n );\n};\n\n//# sourceURL=webpack:///./node_modules/@icons/material/UnfoldMoreHorizontalIcon.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Backdrop/Backdrop.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/Backdrop/Backdrop.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Fade = _interopRequireDefault(__webpack_require__(/*! ../Fade */ \"./node_modules/@material-ui/core/Fade/index.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n zIndex: -1,\n position: 'fixed',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n // Disable scroll capabilities.\n touchAction: 'none'\n },\n\n /* Styles applied to the root element if `invisible={true}`. */\n invisible: {\n backgroundColor: 'transparent'\n }\n};\nexports.styles = styles;\n\nfunction Backdrop(props) {\n var classes = props.classes,\n className = props.className,\n invisible = props.invisible,\n open = props.open,\n transitionDuration = props.transitionDuration,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\"]);\n return _react.default.createElement(_Fade.default, (0, _extends2.default)({\n in: open,\n timeout: transitionDuration\n }, other), _react.default.createElement(\"div\", {\n className: (0, _classnames.default)(classes.root, (0, _defineProperty2.default)({}, classes.invisible, invisible), className),\n \"aria-hidden\": \"true\"\n }));\n}\n\n true ? Backdrop.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n */\n invisible: _propTypes.default.bool,\n\n /**\n * If `true`, the backdrop is open.\n */\n open: _propTypes.default.bool.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n })])\n} : undefined;\nBackdrop.defaultProps = {\n invisible: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBackdrop'\n})(Backdrop);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Backdrop/Backdrop.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Backdrop/index.js": - /*!**********************************************************!*\ - !*** ./node_modules/@material-ui/core/Backdrop/index.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Backdrop.default;\n }\n});\n\nvar _Backdrop = _interopRequireDefault(__webpack_require__(/*! ./Backdrop */ \"./node_modules/@material-ui/core/Backdrop/Backdrop.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Backdrop/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Button/Button.js": - /*!*********************************************************!*\ - !*** ./node_modules/@material-ui/core/Button/Button.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _colorManipulator = __webpack_require__(/*! ../styles/colorManipulator */ \"./node_modules/@material-ui/core/styles/colorManipulator.js\");\n\nvar _ButtonBase = _interopRequireDefault(__webpack_require__(/*! ../ButtonBase */ \"./node_modules/@material-ui/core/ButtonBase/index.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\n// @inheritedComponent ButtonBase\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: (0, _extends2.default)({\n lineHeight: 1.75\n }, theme.typography.button, {\n boxSizing: 'border-box',\n minWidth: 64,\n padding: '6px 16px',\n borderRadius: theme.shape.borderRadius,\n color: theme.palette.text.primary,\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n duration: theme.transitions.duration.short\n }),\n '&:hover': {\n textDecoration: 'none',\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n },\n '&$disabled': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }),\n\n /* Styles applied to the span element that wraps the children. */\n label: {\n width: '100%',\n // assure the correct width for iOS Safari\n display: 'inherit',\n alignItems: 'inherit',\n justifyContent: 'inherit'\n },\n\n /* Styles applied to the root element if `variant=\"text\"`. */\n text: {\n padding: '6px 8px'\n },\n\n /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n textPrimary: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n textSecondary: {\n color: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n flat: {},\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n flatPrimary: {},\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n flatSecondary: {},\n\n /* Styles applied to the root element if `variant=\"outlined\"`. */\n outlined: {\n padding: '5px 16px',\n border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n '&$disabled': {\n border: \"1px solid \".concat(theme.palette.action.disabled)\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n outlinedPrimary: {\n color: theme.palette.primary.main,\n border: \"1px solid \".concat((0, _colorManipulator.fade)(theme.palette.primary.main, 0.5)),\n '&:hover': {\n border: \"1px solid \".concat(theme.palette.primary.main),\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n outlinedSecondary: {\n color: theme.palette.secondary.main,\n border: \"1px solid \".concat((0, _colorManipulator.fade)(theme.palette.secondary.main, 0.5)),\n '&:hover': {\n border: \"1px solid \".concat(theme.palette.secondary.main),\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n border: \"1px solid \".concat(theme.palette.action.disabled)\n }\n },\n\n /* Styles applied to the root element if `variant=\"[contained | fab]\"`. */\n contained: {\n color: theme.palette.getContrastText(theme.palette.grey[300]),\n backgroundColor: theme.palette.grey[300],\n boxShadow: theme.shadows[2],\n '&$focusVisible': {\n boxShadow: theme.shadows[6]\n },\n '&:active': {\n boxShadow: theme.shadows[8]\n },\n '&$disabled': {\n color: theme.palette.action.disabled,\n boxShadow: theme.shadows[0],\n backgroundColor: theme.palette.action.disabledBackground\n },\n '&:hover': {\n backgroundColor: theme.palette.grey.A100,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.grey[300]\n },\n '&$disabled': {\n backgroundColor: theme.palette.action.disabledBackground\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"[contained | fab]\"` and `color=\"primary\"`. */\n containedPrimary: {\n color: theme.palette.primary.contrastText,\n backgroundColor: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.primary.main\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"[contained | fab]\"` and `color=\"secondary\"`. */\n containedSecondary: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: theme.palette.secondary.dark,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.secondary.main\n }\n }\n },\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n raised: {},\n // legacy\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n raisedPrimary: {},\n // legacy\n\n /* Styles applied to the root element for backwards compatibility with legacy variant naming. */\n raisedSecondary: {},\n // legacy\n\n /* Styles applied to the root element if `variant=\"[fab | extendedFab]\"`. */\n fab: {\n borderRadius: '50%',\n padding: 0,\n minWidth: 0,\n width: 56,\n height: 56,\n boxShadow: theme.shadows[6],\n '&:active': {\n boxShadow: theme.shadows[12]\n }\n },\n\n /* Styles applied to the root element if `variant=\"extendedFab\"`. */\n extendedFab: {\n borderRadius: 48 / 2,\n padding: '0 16px',\n width: 'auto',\n minWidth: 48,\n height: 48\n },\n\n /* Styles applied to the ButtonBase root element if the button is keyboard focused. */\n focusVisible: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `color=\"inherit\"`. */\n colorInherit: {\n color: 'inherit',\n borderColor: 'currentColor'\n },\n\n /* Styles applied to the root element if `mini={true}` & `variant=\"[fab | extendedFab]\"`. */\n mini: {\n width: 40,\n height: 40\n },\n\n /* Styles applied to the root element if `size=\"small\"`. */\n sizeSmall: {\n padding: '4px 8px',\n minWidth: 64,\n fontSize: theme.typography.pxToRem(13)\n },\n\n /* Styles applied to the root element if `size=\"large\"`. */\n sizeLarge: {\n padding: '8px 24px',\n fontSize: theme.typography.pxToRem(15)\n },\n\n /* Styles applied to the root element if `fullWidth={true}`. */\n fullWidth: {\n width: '100%'\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Button(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n color = props.color,\n disabled = props.disabled,\n disableFocusRipple = props.disableFocusRipple,\n focusVisibleClassName = props.focusVisibleClassName,\n fullWidth = props.fullWidth,\n mini = props.mini,\n size = props.size,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"disabled\", \"disableFocusRipple\", \"focusVisibleClassName\", \"fullWidth\", \"mini\", \"size\", \"variant\"]);\n var fab = variant === 'fab' || variant === 'extendedFab';\n var contained = variant === 'contained' || variant === 'raised';\n var text = variant === 'text' || variant === 'flat';\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.fab, fab), (0, _defineProperty2.default)(_classNames, classes.mini, fab && mini), (0, _defineProperty2.default)(_classNames, classes.extendedFab, variant === 'extendedFab'), (0, _defineProperty2.default)(_classNames, classes.text, text), (0, _defineProperty2.default)(_classNames, classes.textPrimary, text && color === 'primary'), (0, _defineProperty2.default)(_classNames, classes.textSecondary, text && color === 'secondary'), (0, _defineProperty2.default)(_classNames, classes.flat, text), (0, _defineProperty2.default)(_classNames, classes.flatPrimary, text && color === 'primary'), (0, _defineProperty2.default)(_classNames, classes.flatSecondary, text && color === 'secondary'), (0, _defineProperty2.default)(_classNames, classes.contained, contained || fab), (0, _defineProperty2.default)(_classNames, classes.containedPrimary, (contained || fab) && color === 'primary'), (0, _defineProperty2.default)(_classNames, classes.containedSecondary, (contained || fab) && color === 'secondary'), (0, _defineProperty2.default)(_classNames, classes.raised, contained || fab), (0, _defineProperty2.default)(_classNames, classes.raisedPrimary, (contained || fab) && color === 'primary'), (0, _defineProperty2.default)(_classNames, classes.raisedSecondary, (contained || fab) && color === 'secondary'), (0, _defineProperty2.default)(_classNames, classes.outlined, variant === 'outlined'), (0, _defineProperty2.default)(_classNames, classes.outlinedPrimary, variant === 'outlined' && color === 'primary'), (0, _defineProperty2.default)(_classNames, classes.outlinedSecondary, variant === 'outlined' && color === 'secondary'), (0, _defineProperty2.default)(_classNames, classes[\"size\".concat((0, _helpers.capitalize)(size))], size !== 'medium'), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.fullWidth, fullWidth), (0, _defineProperty2.default)(_classNames, classes.colorInherit, color === 'inherit'), _classNames), classNameProp);\n return _react.default.createElement(_ButtonBase.default, (0, _extends2.default)({\n className: className,\n disabled: disabled,\n focusRipple: !disableFocusRipple,\n focusVisibleClassName: (0, _classnames.default)(classes.focusVisible, focusVisibleClassName)\n }, other), _react.default.createElement(\"span\", {\n className: classes.label\n }, children));\n}\n\n true ? Button.propTypes = {\n /**\n * The content of the button.\n */\n children: _propTypes.default.node.isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the button will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the keyboard focus ripple will be disabled.\n * `disableRipple` must also be true.\n */\n disableFocusRipple: _propTypes.default.bool,\n\n /**\n * If `true`, the ripple effect will be disabled.\n */\n disableRipple: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\n * If `true`, the button will take up the full width of its container.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * The URL to link to when the button is clicked.\n * If defined, an `a` element will be used as the root node.\n */\n href: _propTypes.default.string,\n\n /**\n * If `true`, and `variant` is `'fab'`, will use mini floating action button styling.\n */\n mini: _propTypes.default.bool,\n\n /**\n * The size of the button.\n * `small` is equivalent to the dense button styling.\n */\n size: _propTypes.default.oneOf(['small', 'medium', 'large']),\n\n /**\n * @ignore\n */\n type: _propTypes.default.string,\n\n /**\n * The variant to use.\n * __WARNING__: `flat` and `raised` are deprecated.\n * Instead use `text` and `contained` respectively.\n * `fab` and `extendedFab` are deprecated.\n * Instead use `` and ``\n */\n variant: (0, _utils.chainPropTypes)(_propTypes.default.oneOf(['text', 'outlined', 'contained', 'fab', 'extendedFab', 'flat', 'raised']), function (props) {\n if (props.variant === 'flat') {\n return new Error('Material-UI: the `flat` variant will be removed in the next major release. ' + '`text` is equivalent and should be used instead.');\n }\n\n if (props.variant === 'raised') {\n return new Error('Material-UI: the `raised` variant will be removed in the next major release. ' + '`contained` is equivalent and should be used instead.');\n }\n\n if (props.variant === 'fab') {\n return new Error('Material-UI: the `fab` variant will be removed in the next major release. ' + 'The `` component is equivalent and should be used instead.');\n }\n\n if (props.variant === 'extendedFab') {\n return new Error('Material-UI: the `fab` variant will be removed in the next major release. ' + 'The `` component with `variant=\"extended\"` is equivalent ' + 'and should be used instead.');\n }\n\n return null;\n })\n} : undefined;\nButton.defaultProps = {\n color: 'default',\n component: 'button',\n disabled: false,\n disableFocusRipple: false,\n fullWidth: false,\n mini: false,\n size: 'medium',\n type: 'button',\n variant: 'text'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiButton'\n})(Button);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Button/Button.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Button/index.js": - /*!********************************************************!*\ - !*** ./node_modules/@material-ui/core/Button/index.js ***! - \********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Button.default;\n }\n});\n\nvar _Button = _interopRequireDefault(__webpack_require__(/*! ./Button */ \"./node_modules/@material-ui/core/Button/Button.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Button/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/ButtonBase.js": - /*!*****************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/ButtonBase.js ***! - \*****************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _ownerWindow = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerWindow */ \"./node_modules/@material-ui/core/utils/ownerWindow.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _NoSsr = _interopRequireDefault(__webpack_require__(/*! ../NoSsr */ \"./node_modules/@material-ui/core/NoSsr/index.js\"));\n\nvar _focusVisible = __webpack_require__(/*! ./focusVisible */ \"./node_modules/@material-ui/core/ButtonBase/focusVisible.js\");\n\nvar _TouchRipple = _interopRequireDefault(__webpack_require__(/*! ./TouchRipple */ \"./node_modules/@material-ui/core/ButtonBase/TouchRipple.js\"));\n\nvar _createRippleHandler = _interopRequireDefault(__webpack_require__(/*! ./createRippleHandler */ \"./node_modules/@material-ui/core/ButtonBase/createRippleHandler.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n '&$disabled': {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n }\n },\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if keyboard focused. */\n focusVisible: {}\n};\n/* istanbul ignore if */\n\nexports.styles = styles;\n\nif ( true && !_react.default.createContext) {\n throw new Error('Material-UI: react@16.3.0 or greater is required.');\n}\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\n\nvar ButtonBase =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(ButtonBase, _React$Component);\n\n function ButtonBase() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, ButtonBase);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(ButtonBase)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {};\n _this.keyDown = false;\n _this.focusVisibleCheckTime = 50;\n _this.focusVisibleMaxCheckTimes = 5;\n _this.handleMouseDown = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseDown', 'start', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n _this.handleMouseUp = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseUp', 'stop');\n _this.handleMouseLeave = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseLeave', 'stop', function (event) {\n if (_this.state.focusVisible) {\n event.preventDefault();\n }\n });\n _this.handleTouchStart = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchStart', 'start');\n _this.handleTouchEnd = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchEnd', 'stop');\n _this.handleTouchMove = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchMove', 'stop');\n _this.handleContextMenu = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'ContextMenu', 'stop');\n _this.handleBlur = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'Blur', 'stop', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n\n _this.onRippleRef = function (node) {\n _this.ripple = node;\n };\n\n _this.onFocusVisibleHandler = function (event) {\n _this.keyDown = false;\n\n _this.setState({\n focusVisible: true\n });\n\n if (_this.props.onFocusVisible) {\n _this.props.onFocusVisible(event);\n }\n };\n\n _this.handleKeyDown = function (event) {\n var _this$props = _this.props,\n component = _this$props.component,\n focusRipple = _this$props.focusRipple,\n onKeyDown = _this$props.onKeyDown,\n onClick = _this$props.onClick; // Check if key is already down to avoid repeats being counted as multiple activations\n\n if (focusRipple && !_this.keyDown && _this.state.focusVisible && _this.ripple && event.key === ' ') {\n _this.keyDown = true;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.start(event);\n });\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && component && component !== 'button' && (event.key === ' ' || event.key === 'Enter') && !(_this.button.tagName === 'A' && _this.button.href)) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n };\n\n _this.handleKeyUp = function (event) {\n if (_this.props.focusRipple && event.key === ' ' && _this.ripple && _this.state.focusVisible) {\n _this.keyDown = false;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.pulsate(event);\n });\n }\n\n if (_this.props.onKeyUp) {\n _this.props.onKeyUp(event);\n }\n };\n\n _this.handleFocus = function (event) {\n if (_this.props.disabled) {\n return;\n } // Fix for https://github.com/facebook/react/issues/7769\n\n\n if (!_this.button) {\n _this.button = event.currentTarget;\n }\n\n event.persist();\n (0, _focusVisible.detectFocusVisible)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), _this.button, function () {\n _this.onFocusVisibleHandler(event);\n });\n\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(ButtonBase, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.button = _reactDom.default.findDOMNode(this);\n (0, _focusVisible.listenForFocusKeys)((0, _ownerWindow.default)(this.button));\n\n if (this.props.action) {\n this.props.action({\n focusVisible: function focusVisible() {\n _this2.setState({\n focusVisible: true\n });\n\n _this2.button.focus();\n }\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.focusRipple && !this.props.disableRipple && !prevState.focusVisible && this.state.focusVisible) {\n this.ripple.pulsate();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.focusVisibleTimeout);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames;\n\n var _this$props2 = this.props,\n action = _this$props2.action,\n buttonRef = _this$props2.buttonRef,\n centerRipple = _this$props2.centerRipple,\n children = _this$props2.children,\n classes = _this$props2.classes,\n classNameProp = _this$props2.className,\n component = _this$props2.component,\n disabled = _this$props2.disabled,\n disableRipple = _this$props2.disableRipple,\n disableTouchRipple = _this$props2.disableTouchRipple,\n focusRipple = _this$props2.focusRipple,\n focusVisibleClassName = _this$props2.focusVisibleClassName,\n onBlur = _this$props2.onBlur,\n onFocus = _this$props2.onFocus,\n onFocusVisible = _this$props2.onFocusVisible,\n onKeyDown = _this$props2.onKeyDown,\n onKeyUp = _this$props2.onKeyUp,\n onMouseDown = _this$props2.onMouseDown,\n onMouseLeave = _this$props2.onMouseLeave,\n onMouseUp = _this$props2.onMouseUp,\n onTouchEnd = _this$props2.onTouchEnd,\n onTouchMove = _this$props2.onTouchMove,\n onTouchStart = _this$props2.onTouchStart,\n tabIndex = _this$props2.tabIndex,\n TouchRippleProps = _this$props2.TouchRippleProps,\n type = _this$props2.type,\n other = (0, _objectWithoutProperties2.default)(_this$props2, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.focusVisible, this.state.focusVisible), (0, _defineProperty2.default)(_classNames, focusVisibleClassName, this.state.focusVisible), _classNames), classNameProp);\n var ComponentProp = component;\n\n if (ComponentProp === 'button' && other.href) {\n ComponentProp = 'a';\n }\n\n var buttonProps = {};\n\n if (ComponentProp === 'button') {\n buttonProps.type = type || 'button';\n buttonProps.disabled = disabled;\n } else {\n buttonProps.role = 'button';\n }\n\n return _react.default.createElement(ComponentProp, (0, _extends2.default)({\n className: className,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseLeave: this.handleMouseLeave,\n onMouseUp: this.handleMouseUp,\n onTouchEnd: this.handleTouchEnd,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onContextMenu: this.handleContextMenu,\n ref: buttonRef,\n tabIndex: disabled ? '-1' : tabIndex\n }, buttonProps, other), children, !disableRipple && !disabled ? _react.default.createElement(_NoSsr.default, null, _react.default.createElement(_TouchRipple.default, (0, _extends2.default)({\n innerRef: this.onRippleRef,\n center: centerRipple\n }, TouchRippleProps))) : null);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (typeof prevState.focusVisible === 'undefined') {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n } // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n\n\n if (!prevState.prevState && nextProps.disabled && prevState.focusVisible) {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n }\n\n return {\n lastDisabled: nextProps.disabled\n };\n }\n }]);\n return ButtonBase;\n}(_react.default.Component);\n\n true ? ButtonBase.propTypes = {\n /**\n * Callback fired when the component mounts.\n * This is useful when you want to trigger an action programmatically.\n * It currently only supports `focusVisible()` action.\n *\n * @param {object} actions This object contains all possible actions\n * that can be triggered programmatically.\n */\n action: _propTypes.default.func,\n\n /**\n * Use that property to pass a ref callback to the native button component.\n */\n buttonRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * If `true`, the ripples will be centered.\n * They won't start at the cursor interaction position.\n */\n centerRipple: _propTypes.default.bool,\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the base button will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the ripple effect will be disabled.\n */\n disableRipple: _propTypes.default.bool,\n\n /**\n * If `true`, the touch ripple effect will be disabled.\n */\n disableTouchRipple: _propTypes.default.bool,\n\n /**\n * If `true`, the base button will have a keyboard focus ripple.\n * `disableRipple` must also be `false`.\n */\n focusRipple: _propTypes.default.bool,\n\n /**\n * This property can help a person know which element has the keyboard focus.\n * The class name will be applied when the element gain the focus through a keyboard interaction.\n * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\n * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n * if needed.\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\n * @ignore\n */\n onBlur: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onClick: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onFocus: _propTypes.default.func,\n\n /**\n * Callback fired when the component is focused with a keyboard.\n * We trigger a `onFocus` callback too.\n */\n onFocusVisible: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onKeyDown: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onKeyUp: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onMouseDown: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onMouseLeave: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onMouseUp: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onTouchEnd: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onTouchMove: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onTouchStart: _propTypes.default.func,\n\n /**\n * @ignore\n */\n role: _propTypes.default.string,\n\n /**\n * @ignore\n */\n tabIndex: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n\n /**\n * Properties applied to the `TouchRipple` element.\n */\n TouchRippleProps: _propTypes.default.object,\n\n /**\n * Used to control the button's purpose.\n * This property passes the value to the `type` attribute of the native button component.\n * Valid property values include `button`, `submit`, and `reset`.\n */\n type: _propTypes.default.string\n} : undefined;\nButtonBase.defaultProps = {\n centerRipple: false,\n component: 'button',\n disableRipple: false,\n disableTouchRipple: false,\n focusRipple: false,\n tabIndex: '0',\n type: 'button'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiButtonBase'\n})(ButtonBase);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/ButtonBase.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/Ripple.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/Ripple.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _Transition = _interopRequireDefault(__webpack_require__(/*! react-transition-group/Transition */ \"./node_modules/react-transition-group/Transition.js\"));\n\n/**\n * @ignore - internal component.\n */\nvar Ripple =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Ripple, _React$Component);\n\n function Ripple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Ripple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Ripple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n visible: false,\n leaving: false\n };\n\n _this.handleEnter = function () {\n _this.setState({\n visible: true\n });\n };\n\n _this.handleExit = function () {\n _this.setState({\n leaving: true\n });\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Ripple, [{\n key: \"render\",\n value: function render() {\n var _classNames, _classNames2;\n\n var _this$props = this.props,\n classes = _this$props.classes,\n classNameProp = _this$props.className,\n pulsate = _this$props.pulsate,\n rippleX = _this$props.rippleX,\n rippleY = _this$props.rippleY,\n rippleSize = _this$props.rippleSize,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"pulsate\", \"rippleX\", \"rippleY\", \"rippleSize\"]);\n var _this$state = this.state,\n visible = _this$state.visible,\n leaving = _this$state.leaving;\n var rippleClassName = (0, _classnames.default)(classes.ripple, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.rippleVisible, visible), (0, _defineProperty2.default)(_classNames, classes.ripplePulsate, pulsate), _classNames), classNameProp);\n var rippleStyles = {\n width: rippleSize,\n height: rippleSize,\n top: -(rippleSize / 2) + rippleY,\n left: -(rippleSize / 2) + rippleX\n };\n var childClassName = (0, _classnames.default)(classes.child, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.childLeaving, leaving), (0, _defineProperty2.default)(_classNames2, classes.childPulsate, pulsate), _classNames2));\n return _react.default.createElement(_Transition.default, (0, _extends2.default)({\n onEnter: this.handleEnter,\n onExit: this.handleExit\n }, other), _react.default.createElement(\"span\", {\n className: rippleClassName,\n style: rippleStyles\n }, _react.default.createElement(\"span\", {\n className: childClassName\n })));\n }\n }]);\n return Ripple;\n}(_react.default.Component);\n\n true ? Ripple.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n */\n pulsate: _propTypes.default.bool,\n\n /**\n * Diameter of the ripple.\n */\n rippleSize: _propTypes.default.number,\n\n /**\n * Horizontal position of the ripple center.\n */\n rippleX: _propTypes.default.number,\n\n /**\n * Vertical position of the ripple center.\n */\n rippleY: _propTypes.default.number\n} : undefined;\nRipple.defaultProps = {\n pulsate: false\n};\nvar _default = Ripple;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/Ripple.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/TouchRipple.js": - /*!******************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/TouchRipple.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = exports.DELAY_RIPPLE = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\n\nvar _TransitionGroup = _interopRequireDefault(__webpack_require__(/*! react-transition-group/TransitionGroup */ \"./node_modules/react-transition-group/TransitionGroup.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Ripple = _interopRequireDefault(__webpack_require__(/*! ./Ripple */ \"./node_modules/@material-ui/core/ButtonBase/Ripple.js\"));\n\nvar DURATION = 550;\nvar DELAY_RIPPLE = 80;\nexports.DELAY_RIPPLE = DELAY_RIPPLE;\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'block',\n position: 'absolute',\n overflow: 'hidden',\n borderRadius: 'inherit',\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n pointerEvents: 'none',\n zIndex: 0\n },\n\n /* Styles applied to the internal `Ripple` components `ripple` class. */\n ripple: {\n width: 50,\n height: 50,\n left: 0,\n top: 0,\n opacity: 0,\n position: 'absolute'\n },\n\n /* Styles applied to the internal `Ripple` components `rippleVisible` class. */\n rippleVisible: {\n opacity: 0.3,\n transform: 'scale(1)',\n animation: \"mui-ripple-enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-enter'\n },\n\n /* Styles applied to the internal `Ripple` components `ripplePulsate` class. */\n ripplePulsate: {\n animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n },\n\n /* Styles applied to the internal `Ripple` components `child` class. */\n child: {\n opacity: 1,\n display: 'block',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: 'currentColor'\n },\n\n /* Styles applied to the internal `Ripple` components `childLeaving` class. */\n childLeaving: {\n opacity: 0,\n animation: \"mui-ripple-exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-exit'\n },\n\n /* Styles applied to the internal `Ripple` components `childPulsate` class. */\n childPulsate: {\n position: 'absolute',\n left: 0,\n top: 0,\n animation: \"mui-ripple-pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\"),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-pulsate'\n },\n '@keyframes mui-ripple-enter': {\n '0%': {\n transform: 'scale(0)',\n opacity: 0.1\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 0.3\n }\n },\n '@keyframes mui-ripple-exit': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n },\n '@keyframes mui-ripple-pulsate': {\n '0%': {\n transform: 'scale(1)'\n },\n '50%': {\n transform: 'scale(0.92)'\n },\n '100%': {\n transform: 'scale(1)'\n }\n }\n };\n};\n\nexports.styles = styles;\n\nvar TouchRipple =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n (0, _inherits2.default)(TouchRipple, _React$PureComponent);\n\n function TouchRipple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, TouchRipple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(TouchRipple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n nextKey: 0,\n ripples: []\n };\n\n _this.pulsate = function () {\n _this.start({}, {\n pulsate: true\n });\n };\n\n _this.start = function () {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var cb = arguments.length > 2 ? arguments[2] : undefined;\n var _options$pulsate = options.pulsate,\n pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n _options$center = options.center,\n center = _options$center === void 0 ? _this.props.center || options.pulsate : _options$center,\n _options$fakeElement = options.fakeElement,\n fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n if (event.type === 'mousedown' && _this.ignoringMouseDown) {\n _this.ignoringMouseDown = false;\n return;\n }\n\n if (event.type === 'touchstart') {\n _this.ignoringMouseDown = true;\n }\n\n var element = fakeElement ? null : _reactDom.default.findDOMNode((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));\n var rect = element ? element.getBoundingClientRect() : {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }; // Get the size of the ripple\n\n var rippleX;\n var rippleY;\n var rippleSize;\n\n if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n rippleX = Math.round(rect.width / 2);\n rippleY = Math.round(rect.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n rippleX = Math.round(clientX - rect.left);\n rippleY = Math.round(clientY - rect.top);\n }\n\n if (center) {\n rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n if (rippleSize % 2 === 0) {\n rippleSize += 1;\n }\n } else {\n var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n } // Touche devices\n\n\n if (event.touches) {\n // Prepare the ripple effect.\n _this.startTimerCommit = function () {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }; // Delay the execution of the ripple effect.\n\n\n _this.startTimer = setTimeout(function () {\n if (_this.startTimerCommit) {\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n }\n }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n } else {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }\n };\n\n _this.startCommit = function (params) {\n var pulsate = params.pulsate,\n rippleX = params.rippleX,\n rippleY = params.rippleY,\n rippleSize = params.rippleSize,\n cb = params.cb;\n\n _this.setState(function (state) {\n return {\n nextKey: state.nextKey + 1,\n ripples: [].concat((0, _toConsumableArray2.default)(state.ripples), [_react.default.createElement(_Ripple.default, {\n key: state.nextKey,\n classes: _this.props.classes,\n timeout: {\n exit: DURATION,\n enter: DURATION\n },\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize\n })])\n };\n }, cb);\n };\n\n _this.stop = function (event, cb) {\n clearTimeout(_this.startTimer);\n var ripples = _this.state.ripples; // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n\n if (event.type === 'touchend' && _this.startTimerCommit) {\n event.persist();\n\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n _this.startTimer = setTimeout(function () {\n _this.stop(event, cb);\n });\n return;\n }\n\n _this.startTimerCommit = null;\n\n if (ripples && ripples.length) {\n _this.setState({\n ripples: ripples.slice(1)\n }, cb);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(TouchRipple, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.startTimer);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n center = _this$props.center,\n classes = _this$props.classes,\n className = _this$props.className,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"center\", \"classes\", \"className\"]);\n return _react.default.createElement(_TransitionGroup.default, (0, _extends2.default)({\n component: \"span\",\n enter: true,\n exit: true,\n className: (0, _classnames.default)(classes.root, className)\n }, other), this.state.ripples);\n }\n }]);\n return TouchRipple;\n}(_react.default.PureComponent);\n\n true ? TouchRipple.propTypes = {\n /**\n * If `true`, the ripple starts at the center of the component\n * rather than at the point of interaction.\n */\n center: _propTypes.default.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string\n} : undefined;\nTouchRipple.defaultProps = {\n center: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n flip: false,\n name: 'MuiTouchRipple'\n})(TouchRipple);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/TouchRipple.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/createRippleHandler.js": - /*!**************************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/createRippleHandler.js ***! - \**************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable import/no-mutable-exports */\nvar createRippleHandler = function createRippleHandler(instance, eventName, action, cb) {\n return function (event) {\n if (cb) {\n cb.call(instance, event);\n }\n\n var ignore = false; // Ignore events that have been `event.preventDefault()` marked.\n\n if (event.defaultPrevented) {\n ignore = true;\n }\n\n if (instance.props.disableTouchRipple && eventName !== 'Blur') {\n ignore = true;\n }\n\n if (!ignore && instance.ripple) {\n instance.ripple[action](event);\n }\n\n if (typeof instance.props[\"on\".concat(eventName)] === 'function') {\n instance.props[\"on\".concat(eventName)](event);\n }\n\n return true;\n };\n};\n/* istanbul ignore if */\n\n\nif (typeof window === 'undefined') {\n createRippleHandler = function createRippleHandler() {\n return function () {};\n };\n}\n\nvar _default = createRippleHandler;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/createRippleHandler.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/focusVisible.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/focusVisible.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectFocusVisible = detectFocusVisible;\nexports.listenForFocusKeys = listenForFocusKeys;\n\nvar _warning = _interopRequireDefault(__webpack_require__(/*! warning */ \"./node_modules/warning/warning.js\"));\n\nvar _ownerDocument = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@material-ui/core/utils/ownerDocument.js\"));\n\nvar internal = {\n focusKeyPressed: false,\n keyUpEventTimeout: -1\n};\n\nfunction findActiveElement(doc) {\n var activeElement = doc.activeElement;\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n}\n\nfunction detectFocusVisible(instance, element, callback) {\n var attempt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n true ? (0, _warning.default)(instance.focusVisibleCheckTime, 'Material-UI: missing instance.focusVisibleCheckTime.') : undefined;\n true ? (0, _warning.default)(instance.focusVisibleMaxCheckTimes, 'Material-UI: missing instance.focusVisibleMaxCheckTimes.') : undefined;\n instance.focusVisibleTimeout = setTimeout(function () {\n var doc = (0, _ownerDocument.default)(element);\n var activeElement = findActiveElement(doc);\n\n if (internal.focusKeyPressed && (activeElement === element || element.contains(activeElement))) {\n callback();\n } else if (attempt < instance.focusVisibleMaxCheckTimes) {\n detectFocusVisible(instance, element, callback, attempt + 1);\n }\n }, instance.focusVisibleCheckTime);\n}\n\nvar FOCUS_KEYS = [9, // 'Tab',\n13, // 'Enter',\n27, // 'Escape',\n32, // ' ',\n37, // 'ArrowLeft',\n38, // 'ArrowUp',\n39, // 'ArrowRight',\n40];\n\nfunction isFocusKey(event) {\n // Use event.keyCode to support IE 11\n return FOCUS_KEYS.indexOf(event.keyCode) > -1;\n}\n\nvar handleKeyUpEvent = function handleKeyUpEvent(event) {\n if (isFocusKey(event)) {\n internal.focusKeyPressed = true; // Let's consider that the user is using a keyboard during a window frame of 500ms.\n\n clearTimeout(internal.keyUpEventTimeout);\n internal.keyUpEventTimeout = setTimeout(function () {\n internal.focusKeyPressed = false;\n }, 500);\n }\n};\n\nfunction listenForFocusKeys(win) {\n // The event listener will only be added once per window.\n // Duplicate event listeners will be ignored by addEventListener.\n // Also, this logic is client side only, we don't need a teardown.\n win.addEventListener('keyup', handleKeyUpEvent);\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/focusVisible.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/ButtonBase/index.js": - /*!************************************************************!*\ - !*** ./node_modules/@material-ui/core/ButtonBase/index.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ButtonBase.default;\n }\n});\n\nvar _ButtonBase = _interopRequireDefault(__webpack_require__(/*! ./ButtonBase */ \"./node_modules/@material-ui/core/ButtonBase/ButtonBase.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/ButtonBase/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Card/Card.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/Card/Card.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _Paper = _interopRequireDefault(__webpack_require__(/*! ../Paper */ \"./node_modules/@material-ui/core/Paper/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\n// @inheritedComponent Paper\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n overflow: 'hidden'\n }\n};\nexports.styles = styles;\n\nfunction Card(props) {\n var classes = props.classes,\n className = props.className,\n raised = props.raised,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"raised\"]);\n return _react.default.createElement(_Paper.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className),\n elevation: raised ? 8 : 1\n }, other));\n}\n\n true ? Card.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the card will use raised styling.\n */\n raised: _propTypes.default.bool\n} : undefined;\nCard.defaultProps = {\n raised: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiCard'\n})(Card);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Card/Card.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Card/index.js": - /*!******************************************************!*\ - !*** ./node_modules/@material-ui/core/Card/index.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Card.default;\n }\n});\n\nvar _Card = _interopRequireDefault(__webpack_require__(/*! ./Card */ \"./node_modules/@material-ui/core/Card/Card.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Card/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/CardContent/CardContent.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/CardContent/CardContent.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n padding: 16,\n '&:last-child': {\n paddingBottom: 24\n }\n }\n};\nexports.styles = styles;\n\nfunction CardContent(props) {\n var classes = props.classes,\n className = props.className,\n Component = props.component,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other));\n}\n\n true ? CardContent.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType\n} : undefined;\nCardContent.defaultProps = {\n component: 'div'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiCardContent'\n})(CardContent);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/CardContent/CardContent.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/CardContent/index.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/CardContent/index.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _CardContent.default;\n }\n});\n\nvar _CardContent = _interopRequireDefault(__webpack_require__(/*! ./CardContent */ \"./node_modules/@material-ui/core/CardContent/CardContent.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/CardContent/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Checkbox/Checkbox.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/Checkbox/Checkbox.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _SwitchBase = _interopRequireDefault(__webpack_require__(/*! ../internal/SwitchBase */ \"./node_modules/@material-ui/core/internal/SwitchBase.js\"));\n\nvar _CheckBoxOutlineBlank = _interopRequireDefault(__webpack_require__(/*! ../internal/svg-icons/CheckBoxOutlineBlank */ \"./node_modules/@material-ui/core/internal/svg-icons/CheckBoxOutlineBlank.js\"));\n\nvar _CheckBox = _interopRequireDefault(__webpack_require__(/*! ../internal/svg-icons/CheckBox */ \"./node_modules/@material-ui/core/internal/svg-icons/CheckBox.js\"));\n\nvar _IndeterminateCheckBox = _interopRequireDefault(__webpack_require__(/*! ../internal/svg-icons/IndeterminateCheckBox */ \"./node_modules/@material-ui/core/internal/svg-icons/IndeterminateCheckBox.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: theme.palette.text.secondary\n },\n\n /* Styles applied to the root element if `checked={true}`. */\n checked: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `indeterminate={true}`. */\n indeterminate: {},\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n '&$checked': {\n color: theme.palette.primary.main\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n '&$checked': {\n color: theme.palette.secondary.main\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Checkbox(props) {\n var checkedIcon = props.checkedIcon,\n classes = props.classes,\n className = props.className,\n color = props.color,\n icon = props.icon,\n indeterminate = props.indeterminate,\n indeterminateIcon = props.indeterminateIcon,\n inputProps = props.inputProps,\n other = (0, _objectWithoutProperties2.default)(props, [\"checkedIcon\", \"classes\", \"className\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\"]);\n return _react.default.createElement(_SwitchBase.default, (0, _extends2.default)({\n type: \"checkbox\",\n checkedIcon: indeterminate ? indeterminateIcon : checkedIcon,\n className: (0, _classnames.default)((0, _defineProperty2.default)({}, classes.indeterminate, indeterminate), className),\n classes: {\n root: (0, _classnames.default)(classes.root, classes[\"color\".concat((0, _helpers.capitalize)(color))]),\n checked: classes.checked,\n disabled: classes.disabled\n },\n inputProps: (0, _extends2.default)({\n 'data-indeterminate': indeterminate\n }, inputProps),\n icon: indeterminate ? indeterminateIcon : icon\n }, other));\n}\n\n true ? Checkbox.propTypes = {\n /**\n * If `true`, the component is checked.\n */\n checked: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),\n\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['primary', 'secondary', 'default']),\n\n /**\n * If `true`, the switch will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the ripple effect will be disabled.\n */\n disableRipple: _propTypes.default.bool,\n\n /**\n * The icon to display when the component is unchecked.\n */\n icon: _propTypes.default.node,\n\n /**\n * The id of the `input` element.\n */\n id: _propTypes.default.string,\n\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the input.\n */\n indeterminate: _propTypes.default.bool,\n\n /**\n * The icon to display when the component is indeterminate.\n */\n indeterminateIcon: _propTypes.default.node,\n\n /**\n * Properties applied to the `input` element.\n */\n inputProps: _propTypes.default.object,\n\n /**\n * Use that property to pass a ref callback to the native input component.\n */\n inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.checked`.\n * @param {boolean} checked The `checked` value of the switch\n */\n onChange: _propTypes.default.func,\n\n /**\n * The input component property `type`.\n */\n type: _propTypes.default.string,\n\n /**\n * The value of the component.\n */\n value: _propTypes.default.string\n} : undefined;\nCheckbox.defaultProps = {\n checkedIcon: _react.default.createElement(_CheckBox.default, null),\n color: 'secondary',\n icon: _react.default.createElement(_CheckBoxOutlineBlank.default, null),\n indeterminate: false,\n indeterminateIcon: _react.default.createElement(_IndeterminateCheckBox.default, null)\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiCheckbox'\n})(Checkbox);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Checkbox/Checkbox.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Checkbox/index.js": - /*!**********************************************************!*\ - !*** ./node_modules/@material-ui/core/Checkbox/index.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Checkbox.default;\n }\n});\n\nvar _Checkbox = _interopRequireDefault(__webpack_require__(/*! ./Checkbox */ \"./node_modules/@material-ui/core/Checkbox/Checkbox.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Checkbox/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/CircularProgress/CircularProgress.js": - /*!*****************************************************************************!*\ - !*** ./node_modules/@material-ui/core/CircularProgress/CircularProgress.js ***! - \*****************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar SIZE = 44;\n\nfunction getRelativeValue(value, min, max) {\n var clampedValue = Math.min(Math.max(min, value), max);\n return (clampedValue - min) / (max - min);\n}\n\nfunction easeOut(t) {\n t = getRelativeValue(t, 0, 1); // https://gist.github.com/gre/1650294\n\n t = (t -= 1) * t * t + 1;\n return t;\n}\n\nfunction easeIn(t) {\n return t * t;\n}\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-block',\n lineHeight: 1 // Keep the progress centered\n\n },\n\n /* Styles applied to the root element if `variant=\"static\"`. */\n static: {\n transition: theme.transitions.create('transform')\n },\n\n /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n indeterminate: {\n animation: 'mui-progress-circular-rotate 1.4s linear infinite',\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-progress-circular-rotate'\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the `svg` element. */\n svg: {},\n\n /* Styles applied to the `circle` svg path. */\n circle: {\n stroke: 'currentColor' // Use butt to follow the specification, by chance, it's already the default CSS value.\n // strokeLinecap: 'butt',\n\n },\n\n /* Styles applied to the `circle` svg path if `variant=\"static\"`. */\n circleStatic: {\n transition: theme.transitions.create('stroke-dashoffset')\n },\n\n /* Styles applied to the `circle` svg path if `variant=\"indeterminate\"`. */\n circleIndeterminate: {\n animation: 'mui-progress-circular-dash 1.4s ease-in-out infinite',\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-progress-circular-dash',\n // Some default value that looks fine waiting for the animation to kicks in.\n strokeDasharray: '80px, 200px',\n strokeDashoffset: '0px' // Add the unit to fix a Edge 16 and below bug.\n\n },\n '@keyframes mui-progress-circular-rotate': {\n '100%': {\n transform: 'rotate(360deg)'\n }\n },\n '@keyframes mui-progress-circular-dash': {\n '0%': {\n strokeDasharray: '1px, 200px',\n strokeDashoffset: '0px'\n },\n '50%': {\n strokeDasharray: '100px, 200px',\n strokeDashoffset: '-15px'\n },\n '100%': {\n strokeDasharray: '100px, 200px',\n strokeDashoffset: '-125px'\n }\n },\n\n /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n circleDisableShrink: {\n animation: 'none'\n }\n };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\n\nexports.styles = styles;\n\nfunction CircularProgress(props) {\n var _classNames, _classNames2;\n\n var classes = props.classes,\n className = props.className,\n color = props.color,\n disableShrink = props.disableShrink,\n size = props.size,\n style = props.style,\n thickness = props.thickness,\n value = props.value,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"]);\n var circleStyle = {};\n var rootStyle = {};\n var rootProps = {};\n\n if (variant === 'determinate' || variant === 'static') {\n var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n circleStyle.strokeDasharray = circumference.toFixed(3);\n rootProps['aria-valuenow'] = Math.round(value);\n\n if (variant === 'static') {\n circleStyle.strokeDashoffset = \"\".concat(((100 - value) / 100 * circumference).toFixed(3), \"px\");\n rootStyle.transform = 'rotate(-90deg)';\n } else {\n circleStyle.strokeDashoffset = \"\".concat((easeIn((100 - value) / 100) * circumference).toFixed(3), \"px\");\n rootStyle.transform = \"rotate(\".concat((easeOut(value / 70) * 270).toFixed(3), \"deg)\");\n }\n }\n\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes.indeterminate, variant === 'indeterminate'), (0, _defineProperty2.default)(_classNames, classes.static, variant === 'static'), _classNames), className),\n style: (0, _extends2.default)({\n width: size,\n height: size\n }, rootStyle, style),\n role: \"progressbar\"\n }, rootProps, other), _react.default.createElement(\"svg\", {\n className: classes.svg,\n viewBox: \"\".concat(SIZE / 2, \" \").concat(SIZE / 2, \" \").concat(SIZE, \" \").concat(SIZE)\n }, _react.default.createElement(\"circle\", {\n className: (0, _classnames.default)(classes.circle, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.circleIndeterminate, variant === 'indeterminate'), (0, _defineProperty2.default)(_classNames2, classes.circleStatic, variant === 'static'), (0, _defineProperty2.default)(_classNames2, classes.circleDisableShrink, disableShrink), _classNames2)),\n style: circleStyle,\n cx: SIZE,\n cy: SIZE,\n r: (SIZE - thickness) / 2,\n fill: \"none\",\n strokeWidth: thickness\n })));\n}\n\n true ? CircularProgress.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['primary', 'secondary', 'inherit']),\n\n /**\n * If `true`, the shrink animation is disabled.\n * This only works if variant is `indeterminate`.\n */\n disableShrink: (0, _utils.chainPropTypes)(_propTypes.default.bool, function (props) {\n /* istanbul ignore if */\n if (props.disableShrink && props.variant !== 'indeterminate') {\n return new Error('Material-UI: you have provided the `disableShrink` property ' + 'with a variant other than `indeterminate`. This will have no effect.');\n }\n\n return null;\n }),\n\n /**\n * The size of the circle.\n */\n size: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n\n /**\n * @ignore\n */\n style: _propTypes.default.object,\n\n /**\n * The thickness of the circle.\n */\n thickness: _propTypes.default.number,\n\n /**\n * The value of the progress indicator for the determinate and static variants.\n * Value between 0 and 100.\n */\n value: _propTypes.default.number,\n\n /**\n * The variant to use.\n * Use indeterminate when there is no progress value.\n */\n variant: _propTypes.default.oneOf(['determinate', 'indeterminate', 'static'])\n} : undefined;\nCircularProgress.defaultProps = {\n color: 'primary',\n disableShrink: false,\n size: 40,\n thickness: 3.6,\n value: 0,\n variant: 'indeterminate'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiCircularProgress',\n flip: false\n})(CircularProgress);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/CircularProgress/CircularProgress.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/CircularProgress/index.js": - /*!******************************************************************!*\ - !*** ./node_modules/@material-ui/core/CircularProgress/index.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _CircularProgress.default;\n }\n});\n\nvar _CircularProgress = _interopRequireDefault(__webpack_require__(/*! ./CircularProgress */ \"./node_modules/@material-ui/core/CircularProgress/CircularProgress.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/CircularProgress/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Dialog/Dialog.js": - /*!*********************************************************!*\ - !*** ./node_modules/@material-ui/core/Dialog/Dialog.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar _Modal = _interopRequireDefault(__webpack_require__(/*! ../Modal */ \"./node_modules/@material-ui/core/Modal/index.js\"));\n\nvar _Fade = _interopRequireDefault(__webpack_require__(/*! ../Fade */ \"./node_modules/@material-ui/core/Fade/index.js\"));\n\nvar _transitions = __webpack_require__(/*! ../styles/transitions */ \"./node_modules/@material-ui/core/styles/transitions.js\");\n\nvar _Paper = _interopRequireDefault(__webpack_require__(/*! ../Paper */ \"./node_modules/@material-ui/core/Paper/index.js\"));\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n// @inheritedComponent Modal\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {},\n\n /* Styles applied to the root element if `scroll=\"paper\"`. */\n scrollPaper: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if `scroll=\"body\"`. */\n scrollBody: {\n overflowY: 'auto',\n overflowX: 'hidden'\n },\n\n /* Styles applied to the container element. */\n container: {\n height: '100%',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none'\n },\n\n /* Styles applied to the `Paper` component. */\n paper: {\n display: 'flex',\n flexDirection: 'column',\n margin: 48,\n position: 'relative',\n overflowY: 'auto' // Fix IE 11 issue, to remove at some point.\n\n },\n\n /* Styles applied to the `Paper` component if `scroll=\"paper\"`. */\n paperScrollPaper: {\n flex: '0 1 auto',\n maxHeight: 'calc(100% - 96px)'\n },\n\n /* Styles applied to the `Paper` component if `scroll=\"body\"`. */\n paperScrollBody: {\n margin: '48px auto'\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"xs\"`. */\n paperWidthXs: {\n maxWidth: Math.max(theme.breakpoints.values.xs, 360),\n '&$paperScrollBody': (0, _defineProperty2.default)({}, theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 360) + 48 * 2), {\n margin: 48\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"sm\"`. */\n paperWidthSm: {\n maxWidth: theme.breakpoints.values.sm,\n '&$paperScrollBody': (0, _defineProperty2.default)({}, theme.breakpoints.down(theme.breakpoints.values.sm + 48 * 2), {\n margin: 48\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"md\"`. */\n paperWidthMd: {\n maxWidth: theme.breakpoints.values.md,\n '&$paperScrollBody': (0, _defineProperty2.default)({}, theme.breakpoints.down(theme.breakpoints.values.md + 48 * 2), {\n margin: 48\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"lg\"`. */\n paperWidthLg: {\n maxWidth: theme.breakpoints.values.lg,\n '&$paperScrollBody': (0, _defineProperty2.default)({}, theme.breakpoints.down(theme.breakpoints.values.lg + 48 * 2), {\n margin: 48\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"xl\"`. */\n paperWidthXl: {\n maxWidth: theme.breakpoints.values.xl,\n '&$paperScrollBody': (0, _defineProperty2.default)({}, theme.breakpoints.down(theme.breakpoints.values.xl + 48 * 2), {\n margin: 48\n })\n },\n\n /* Styles applied to the `Paper` component if `fullWidth={true}`. */\n paperFullWidth: {\n width: '100%'\n },\n\n /* Styles applied to the `Paper` component if `fullScreen={true}`. */\n paperFullScreen: {\n margin: 0,\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: 'none',\n borderRadius: 0,\n '&$paperScrollBody': {\n margin: 0\n }\n }\n };\n};\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\n\nexports.styles = styles;\n\nvar Dialog =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Dialog, _React$Component);\n\n function Dialog() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Dialog);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Dialog)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _this.handleMouseDown = function (event) {\n _this.mouseDownTarget = event.target;\n };\n\n _this.handleBackdropClick = function (event) {\n // Ignore the events not coming from the \"backdrop\"\n // We don't want to close the dialog when clicking the dialog content.\n if (event.target !== event.currentTarget) {\n return;\n } // Make sure the event starts and ends on the same DOM element.\n\n\n if (event.target !== _this.mouseDownTarget) {\n return;\n }\n\n _this.mouseDownTarget = null;\n\n if (_this.props.onBackdropClick) {\n _this.props.onBackdropClick(event);\n }\n\n if (!_this.props.disableBackdropClick && _this.props.onClose) {\n _this.props.onClose(event, 'backdropClick');\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Dialog, [{\n key: \"render\",\n value: function render() {\n var _classNames;\n\n var _this$props = this.props,\n BackdropProps = _this$props.BackdropProps,\n children = _this$props.children,\n classes = _this$props.classes,\n className = _this$props.className,\n disableBackdropClick = _this$props.disableBackdropClick,\n disableEscapeKeyDown = _this$props.disableEscapeKeyDown,\n fullScreen = _this$props.fullScreen,\n fullWidth = _this$props.fullWidth,\n maxWidth = _this$props.maxWidth,\n onBackdropClick = _this$props.onBackdropClick,\n onClose = _this$props.onClose,\n onEnter = _this$props.onEnter,\n onEntered = _this$props.onEntered,\n onEntering = _this$props.onEntering,\n onEscapeKeyDown = _this$props.onEscapeKeyDown,\n onExit = _this$props.onExit,\n onExited = _this$props.onExited,\n onExiting = _this$props.onExiting,\n open = _this$props.open,\n PaperComponent = _this$props.PaperComponent,\n _this$props$PaperProp = _this$props.PaperProps,\n PaperProps = _this$props$PaperProp === void 0 ? {} : _this$props$PaperProp,\n scroll = _this$props.scroll,\n TransitionComponent = _this$props.TransitionComponent,\n transitionDuration = _this$props.transitionDuration,\n TransitionProps = _this$props.TransitionProps,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"BackdropProps\", \"children\", \"classes\", \"className\", \"disableBackdropClick\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onEscapeKeyDown\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n return _react.default.createElement(_Modal.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className),\n BackdropProps: (0, _extends2.default)({\n transitionDuration: transitionDuration\n }, BackdropProps),\n closeAfterTransition: true,\n disableBackdropClick: disableBackdropClick,\n disableEscapeKeyDown: disableEscapeKeyDown,\n onBackdropClick: onBackdropClick,\n onEscapeKeyDown: onEscapeKeyDown,\n onClose: onClose,\n open: open,\n role: \"dialog\"\n }, other), _react.default.createElement(TransitionComponent, (0, _extends2.default)({\n appear: true,\n in: open,\n timeout: transitionDuration,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited\n }, TransitionProps), _react.default.createElement(\"div\", {\n className: (0, _classnames.default)(classes.container, classes[\"scroll\".concat((0, _helpers.capitalize)(scroll))]),\n onClick: this.handleBackdropClick,\n onMouseDown: this.handleMouseDown,\n role: \"document\"\n }, _react.default.createElement(PaperComponent, (0, _extends2.default)({\n elevation: 24\n }, PaperProps, {\n className: (0, _classnames.default)(classes.paper, classes[\"paperScroll\".concat((0, _helpers.capitalize)(scroll))], (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"paperWidth\".concat(maxWidth ? (0, _helpers.capitalize)(maxWidth) : '')], maxWidth), (0, _defineProperty2.default)(_classNames, classes.paperFullScreen, fullScreen), (0, _defineProperty2.default)(_classNames, classes.paperFullWidth, fullWidth), _classNames), PaperProps.className)\n }), children))));\n }\n }]);\n return Dialog;\n}(_react.default.Component);\n\n true ? Dialog.propTypes = {\n /**\n * @ignore\n */\n BackdropProps: _propTypes.default.object,\n\n /**\n * Dialog children, usually the included sub-components.\n */\n children: _propTypes.default.node.isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, clicking the backdrop will not fire the `onClose` callback.\n */\n disableBackdropClick: _propTypes.default.bool,\n\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n */\n disableEscapeKeyDown: _propTypes.default.bool,\n\n /**\n * If `true`, the dialog will be full-screen\n */\n fullScreen: _propTypes.default.bool,\n\n /**\n * If `true`, the dialog stretches to `maxWidth`.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * Determine the max width of the dialog.\n * The dialog width grows with the size of the screen, this property is useful\n * on the desktop where you might need some coherent different width size across your\n * application. Set to `false` to disable `maxWidth`.\n */\n maxWidth: _propTypes.default.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]),\n\n /**\n * Callback fired when the backdrop is clicked.\n */\n onBackdropClick: _propTypes.default.func,\n\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {object} event The event source of the callback\n * @param {string} reason Can be:`\"escapeKeyDown\"`, `\"backdropClick\"`\n */\n onClose: _propTypes.default.func,\n\n /**\n * Callback fired before the dialog enters.\n */\n onEnter: _propTypes.default.func,\n\n /**\n * Callback fired when the dialog has entered.\n */\n onEntered: _propTypes.default.func,\n\n /**\n * Callback fired when the dialog is entering.\n */\n onEntering: _propTypes.default.func,\n\n /**\n * Callback fired when the escape key is pressed,\n * `disableKeyboard` is false and the modal is in focus.\n */\n onEscapeKeyDown: _propTypes.default.func,\n\n /**\n * Callback fired before the dialog exits.\n */\n onExit: _propTypes.default.func,\n\n /**\n * Callback fired when the dialog has exited.\n */\n onExited: _propTypes.default.func,\n\n /**\n * Callback fired when the dialog is exiting.\n */\n onExiting: _propTypes.default.func,\n\n /**\n * If `true`, the Dialog is open.\n */\n open: _propTypes.default.bool.isRequired,\n\n /**\n * The component used to render the body of the dialog.\n */\n PaperComponent: _utils.componentPropType,\n\n /**\n * Properties applied to the [`Paper`](/api/paper/) element.\n */\n PaperProps: _propTypes.default.object,\n\n /**\n * Determine the container for scrolling the dialog.\n */\n scroll: _propTypes.default.oneOf(['body', 'paper']),\n\n /**\n * The component used for the transition.\n */\n TransitionComponent: _utils.componentPropType,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n })]),\n\n /**\n * Properties applied to the `Transition` element.\n */\n TransitionProps: _propTypes.default.object\n} : undefined;\nDialog.defaultProps = {\n disableBackdropClick: false,\n disableEscapeKeyDown: false,\n fullScreen: false,\n fullWidth: false,\n maxWidth: 'sm',\n PaperComponent: _Paper.default,\n scroll: 'paper',\n TransitionComponent: _Fade.default,\n transitionDuration: {\n enter: _transitions.duration.enteringScreen,\n exit: _transitions.duration.leavingScreen\n }\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiDialog'\n})(Dialog);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Dialog/Dialog.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Dialog/index.js": - /*!********************************************************!*\ - !*** ./node_modules/@material-ui/core/Dialog/index.js ***! - \********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Dialog.default;\n }\n});\n\nvar _Dialog = _interopRequireDefault(__webpack_require__(/*! ./Dialog */ \"./node_modules/@material-ui/core/Dialog/Dialog.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Dialog/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogActions/DialogActions.js": - /*!***********************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogActions/DialogActions.js ***! - \***********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _reactHelpers = __webpack_require__(/*! ../utils/reactHelpers */ \"./node_modules/@material-ui/core/utils/reactHelpers.js\");\n\n__webpack_require__(/*! ../Button */ \"./node_modules/@material-ui/core/Button/index.js\");\n\n// So we don't have any override priority issue.\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n flex: '0 0 auto',\n margin: '8px 4px'\n },\n\n /* Styles applied to the children. */\n action: {\n margin: '0 4px'\n }\n};\nexports.styles = styles;\n\nfunction DialogActions(props) {\n var disableActionSpacing = props.disableActionSpacing,\n children = props.children,\n classes = props.classes,\n className = props.className,\n other = (0, _objectWithoutProperties2.default)(props, [\"disableActionSpacing\", \"children\", \"classes\", \"className\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other), disableActionSpacing ? children : (0, _reactHelpers.cloneChildrenWithClassName)(children, classes.action));\n}\n\n true ? DialogActions.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the dialog actions do not have additional margin.\n */\n disableActionSpacing: _propTypes.default.bool\n} : undefined;\nDialogActions.defaultProps = {\n disableActionSpacing: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiDialogActions'\n})(DialogActions);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogActions/DialogActions.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogActions/index.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogActions/index.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _DialogActions.default;\n }\n});\n\nvar _DialogActions = _interopRequireDefault(__webpack_require__(/*! ./DialogActions */ \"./node_modules/@material-ui/core/DialogActions/DialogActions.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogActions/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogContent/DialogContent.js": - /*!***********************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogContent/DialogContent.js ***! - \***********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n flex: '1 1 auto',\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n // Add iOS momentum scrolling.\n padding: '0 24px 24px',\n '&:first-child': {\n paddingTop: 24\n }\n }\n};\nexports.styles = styles;\n\nfunction DialogContent(props) {\n var classes = props.classes,\n children = props.children,\n className = props.className,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"children\", \"className\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other), children);\n}\n\n true ? DialogContent.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string\n} : undefined;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiDialogContent'\n})(DialogContent);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogContent/DialogContent.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogContent/index.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogContent/index.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _DialogContent.default;\n }\n});\n\nvar _DialogContent = _interopRequireDefault(__webpack_require__(/*! ./DialogContent */ \"./node_modules/@material-ui/core/DialogContent/DialogContent.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogContent/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogContentText/DialogContentText.js": - /*!*******************************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogContentText/DialogContentText.js ***! - \*******************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Typography = _interopRequireDefault(__webpack_require__(/*! ../Typography */ \"./node_modules/@material-ui/core/Typography/index.js\"));\n\n// @inheritedComponent Typography\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n // Should use variant=\"body1\" in v4\n lineHeight: 1.5\n }\n};\nexports.styles = styles;\n\nfunction DialogContentText(props) {\n return _react.default.createElement(_Typography.default, (0, _extends2.default)({\n component: \"p\",\n internalDeprecatedVariant: true,\n variant: \"subheading\",\n color: \"textSecondary\"\n }, props));\n}\n\n true ? DialogContentText.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired\n} : undefined;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiDialogContentText'\n})(DialogContentText);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogContentText/DialogContentText.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogContentText/index.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogContentText/index.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _DialogContentText.default;\n }\n});\n\nvar _DialogContentText = _interopRequireDefault(__webpack_require__(/*! ./DialogContentText */ \"./node_modules/@material-ui/core/DialogContentText/DialogContentText.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogContentText/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogTitle/DialogTitle.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogTitle/DialogTitle.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Typography = _interopRequireDefault(__webpack_require__(/*! ../Typography */ \"./node_modules/@material-ui/core/Typography/index.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n margin: 0,\n padding: '24px 24px 20px',\n flex: '0 0 auto'\n }\n};\nexports.styles = styles;\n\nfunction DialogTitle(props) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n disableTypography = props.disableTypography,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableTypography\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other), disableTypography ? children : _react.default.createElement(_Typography.default, {\n variant: \"title\",\n internalDeprecatedVariant: true\n }, children));\n}\n\n true ? DialogTitle.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node.isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the children won't be wrapped by a typography component.\n * For instance, this can be useful to render an h4 instead of the default h2.\n */\n disableTypography: _propTypes.default.bool\n} : undefined;\nDialogTitle.defaultProps = {\n disableTypography: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiDialogTitle'\n})(DialogTitle);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogTitle/DialogTitle.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/DialogTitle/index.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/DialogTitle/index.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _DialogTitle.default;\n }\n});\n\nvar _DialogTitle = _interopRequireDefault(__webpack_require__(/*! ./DialogTitle */ \"./node_modules/@material-ui/core/DialogTitle/DialogTitle.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/DialogTitle/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Fade/Fade.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/Fade/Fade.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _Transition = _interopRequireDefault(__webpack_require__(/*! react-transition-group/Transition */ \"./node_modules/react-transition-group/Transition.js\"));\n\nvar _transitions = __webpack_require__(/*! ../styles/transitions */ \"./node_modules/@material-ui/core/styles/transitions.js\");\n\nvar _withTheme = _interopRequireDefault(__webpack_require__(/*! ../styles/withTheme */ \"./node_modules/@material-ui/core/styles/withTheme.js\"));\n\nvar _utils = __webpack_require__(/*! ../transitions/utils */ \"./node_modules/@material-ui/core/transitions/utils.js\");\n\n// @inheritedComponent Transition\nvar styles = {\n entering: {\n opacity: 1\n },\n entered: {\n opacity: 1\n }\n};\n/**\n * The Fade transition is used by the [Modal](/utils/modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Fade =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Fade, _React$Component);\n\n function Fade() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Fade);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Fade)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _this.handleEnter = function (node) {\n var theme = _this.props.theme;\n (0, _utils.reflow)(node); // So the animation always start from the start.\n\n var transitionProps = (0, _utils.getTransitionProps)(_this.props, {\n mode: 'enter'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node);\n }\n };\n\n _this.handleExit = function (node) {\n var theme = _this.props.theme;\n var transitionProps = (0, _utils.getTransitionProps)(_this.props, {\n mode: 'exit'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Fade, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n onEnter = _this$props.onEnter,\n onExit = _this$props.onExit,\n styleProp = _this$props.style,\n theme = _this$props.theme,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"children\", \"onEnter\", \"onExit\", \"style\", \"theme\"]);\n var style = (0, _extends2.default)({}, styleProp, _react.default.isValidElement(children) ? children.props.style : {});\n return _react.default.createElement(_Transition.default, (0, _extends2.default)({\n appear: true,\n onEnter: this.handleEnter,\n onExit: this.handleExit\n }, other), function (state, childProps) {\n return _react.default.cloneElement(children, (0, _extends2.default)({\n style: (0, _extends2.default)({\n opacity: 0\n }, styles[state], style)\n }, childProps));\n });\n }\n }]);\n return Fade;\n}(_react.default.Component);\n\n true ? Fade.propTypes = {\n /**\n * A single child content element.\n */\n children: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),\n\n /**\n * If `true`, the component will transition in.\n */\n in: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n onEnter: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onExit: _propTypes.default.func,\n\n /**\n * @ignore\n */\n style: _propTypes.default.object,\n\n /**\n * @ignore\n */\n theme: _propTypes.default.object.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n timeout: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n })])\n} : undefined;\nFade.defaultProps = {\n timeout: {\n enter: _transitions.duration.enteringScreen,\n exit: _transitions.duration.leavingScreen\n }\n};\n\nvar _default = (0, _withTheme.default)()(Fade);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Fade/Fade.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Fade/index.js": - /*!******************************************************!*\ - !*** ./node_modules/@material-ui/core/Fade/index.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Fade.default;\n }\n});\n\nvar _Fade = _interopRequireDefault(__webpack_require__(/*! ./Fade */ \"./node_modules/@material-ui/core/Fade/Fade.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Fade/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FilledInput/FilledInput.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/FilledInput/FilledInput.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _InputBase = _interopRequireDefault(__webpack_require__(/*! ../InputBase */ \"./node_modules/@material-ui/core/InputBase/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\n// @inheritedComponent InputBase\nvar styles = function styles(theme) {\n var light = theme.palette.type === 'light';\n var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n var backgroundColor = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)';\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n backgroundColor: backgroundColor,\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut\n }),\n '&:hover': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: backgroundColor\n }\n },\n '&$focused': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)'\n },\n '&$disabled': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)'\n }\n },\n\n /* Styles applied to the root element if `disableUnderline={false}`. */\n underline: {\n '&:after': {\n borderBottom: \"2px solid \".concat(theme.palette.primary[light ? 'dark' : 'light']),\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut\n }),\n pointerEvents: 'none' // Transparent to the hover style.\n\n },\n '&$focused:after': {\n transform: 'scaleX(1)'\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)' // error is always underlined in red\n\n },\n '&:before': {\n borderBottom: \"1px solid \".concat(bottomLineColor),\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter\n }),\n pointerEvents: 'none' // Transparent to the hover style.\n\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: \"1px solid \".concat(theme.palette.text.primary)\n },\n '&$disabled:before': {\n borderBottom: \"1px dotted \".concat(bottomLineColor)\n }\n },\n\n /* Styles applied to the root element if the component is focused. */\n focused: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `startAdornment` is provided. */\n adornedStart: {\n paddingLeft: 12\n },\n\n /* Styles applied to the root element if `endAdornment` is provided. */\n adornedEnd: {\n paddingRight: 12\n },\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the root element if `multiline={true}`. */\n multiline: {\n padding: '27px 12px 10px',\n boxSizing: 'border-box' // Prevent padding issue with fullWidth.\n\n },\n\n /* Styles applied to the `input` element. */\n input: {\n padding: '27px 12px 10px'\n },\n\n /* Styles applied to the `input` element if `margin=\"dense\"`. */\n inputMarginDense: {\n paddingTop: 24,\n paddingBottom: 6\n },\n\n /* Styles applied to the `input` element if `multiline={true}`. */\n inputMultiline: {\n padding: 0\n },\n\n /* Styles applied to the `input` element if `startAdornment` is provided. */\n inputAdornedStart: {\n paddingLeft: 0\n },\n\n /* Styles applied to the `input` element if `endAdornment` is provided. */\n inputAdornedEnd: {\n paddingRight: 0\n }\n };\n};\n\nexports.styles = styles;\n\nfunction FilledInput(props) {\n var disableUnderline = props.disableUnderline,\n classes = props.classes,\n other = (0, _objectWithoutProperties2.default)(props, [\"disableUnderline\", \"classes\"]);\n return _react.default.createElement(_InputBase.default, (0, _extends2.default)({\n classes: (0, _extends2.default)({}, classes, {\n root: (0, _classnames.default)(classes.root, (0, _defineProperty2.default)({}, classes.underline, !disableUnderline)),\n underline: null\n })\n }, other));\n}\n\n true ? FilledInput.propTypes = {\n /**\n * This property helps users to fill forms faster, especially on mobile devices.\n * The name can be confusing, as it's more like an autofill.\n * You can learn more about it here:\n * https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill\n */\n autoComplete: _propTypes.default.string,\n\n /**\n * If `true`, the input will be focused during the first mount.\n */\n autoFocus: _propTypes.default.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * The CSS class name of the wrapper element.\n */\n className: _propTypes.default.string,\n\n /**\n * The default input value, useful when not controlling the component.\n */\n defaultValue: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))]),\n\n /**\n * If `true`, the input will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the input will not have an underline.\n */\n disableUnderline: _propTypes.default.bool,\n\n /**\n * End `InputAdornment` for this component.\n */\n endAdornment: _propTypes.default.node,\n\n /**\n * If `true`, the input will indicate an error. This is normally obtained via context from\n * FormControl.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the input will take up the full width of its container.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * The id of the `input` element.\n */\n id: _propTypes.default.string,\n\n /**\n * The component used for the native input.\n * Either a string to use a DOM element or a component.\n */\n inputComponent: _utils.componentPropType,\n\n /**\n * Attributes applied to the `input` element.\n */\n inputProps: _propTypes.default.object,\n\n /**\n * Use that property to pass a ref callback to the native input component.\n */\n inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: _propTypes.default.oneOf(['dense', 'none']),\n\n /**\n * If `true`, a textarea element will be rendered.\n */\n multiline: _propTypes.default.bool,\n\n /**\n * Name attribute of the `input` element.\n */\n name: _propTypes.default.string,\n\n /**\n * Callback fired when the value is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value`.\n */\n onChange: _propTypes.default.func,\n\n /**\n * The short hint displayed in the input before the user enters a value.\n */\n placeholder: _propTypes.default.string,\n\n /**\n * It prevents the user from changing the value of the field\n * (not from interacting with the field).\n */\n readOnly: _propTypes.default.bool,\n\n /**\n * If `true`, the input will be required.\n */\n required: _propTypes.default.bool,\n\n /**\n * Number of rows to display when multiline option is set to true.\n */\n rows: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Maximum number of rows to display when multiline option is set to true.\n */\n rowsMax: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Start `InputAdornment` for this component.\n */\n startAdornment: _propTypes.default.node,\n\n /**\n * Type of the input element. It should be a valid HTML5 input type.\n */\n type: _propTypes.default.string,\n\n /**\n * The input value, required for a controlled component.\n */\n value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))])\n} : undefined;\n_InputBase.default.defaultProps = {\n fullWidth: false,\n inputComponent: 'input',\n multiline: false,\n type: 'text'\n};\nFilledInput.muiName = 'Input';\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFilledInput'\n})(FilledInput);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FilledInput/FilledInput.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FilledInput/index.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/FilledInput/index.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FilledInput.default;\n }\n});\n\nvar _FilledInput = _interopRequireDefault(__webpack_require__(/*! ./FilledInput */ \"./node_modules/@material-ui/core/FilledInput/FilledInput.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FilledInput/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControl/FormControl.js": - /*!*******************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControl/FormControl.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _utils2 = __webpack_require__(/*! ../InputBase/utils */ \"./node_modules/@material-ui/core/InputBase/utils.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar _reactHelpers = __webpack_require__(/*! ../utils/reactHelpers */ \"./node_modules/@material-ui/core/utils/reactHelpers.js\");\n\nvar _FormControlContext = _interopRequireDefault(__webpack_require__(/*! ./FormControlContext */ \"./node_modules/@material-ui/core/FormControl/FormControlContext.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n flexDirection: 'column',\n position: 'relative',\n // Reset fieldset default style.\n minWidth: 0,\n padding: 0,\n margin: 0,\n border: 0,\n verticalAlign: 'top' // Fix alignment issue on Safari.\n\n },\n\n /* Styles applied to the root element if `margin=\"normal\"`. */\n marginNormal: {\n marginTop: 16,\n marginBottom: 8\n },\n\n /* Styles applied to the root element if `margin=\"dense\"`. */\n marginDense: {\n marginTop: 8,\n marginBottom: 4\n },\n\n /* Styles applied to the root element if `fullWidth={true}`. */\n fullWidth: {\n width: '100%'\n }\n};\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n * - FormLabel\n * - FormHelperText\n * - Input\n * - InputLabel\n *\n * ⚠️ Only one input can be used within a FormControl.\n */\n\nexports.styles = styles;\n\nvar FormControl =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(FormControl, _React$Component);\n (0, _createClass2.default)(FormControl, null, [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.disabled && state.focused) {\n return {\n focused: false\n };\n }\n\n return null;\n }\n }]);\n\n function FormControl(props) {\n var _this;\n\n (0, _classCallCheck2.default)(this, FormControl);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FormControl).call(this));\n\n _this.handleFocus = function () {\n _this.setState(function (state) {\n return !state.focused ? {\n focused: true\n } : null;\n });\n };\n\n _this.handleBlur = function () {\n _this.setState(function (state) {\n return state.focused ? {\n focused: false\n } : null;\n });\n };\n\n _this.handleDirty = function () {\n if (!_this.state.filled) {\n _this.setState({\n filled: true\n });\n }\n };\n\n _this.handleClean = function () {\n if (_this.state.filled) {\n _this.setState({\n filled: false\n });\n }\n };\n\n _this.state = {\n adornedStart: false,\n filled: false,\n focused: false\n }; // We need to iterate through the children and find the Input in order\n // to fully support server-side rendering.\n\n var children = props.children;\n\n if (children) {\n _react.default.Children.forEach(children, function (child) {\n if (!(0, _reactHelpers.isMuiElement)(child, ['Input', 'Select'])) {\n return;\n }\n\n if ((0, _utils2.isFilled)(child.props, true)) {\n _this.state.filled = true;\n }\n\n var input = (0, _reactHelpers.isMuiElement)(child, ['Select']) ? child.props.input : child;\n\n if (input && (0, _utils2.isAdornedStart)(input.props)) {\n _this.state.adornedStart = true;\n }\n });\n }\n\n return _this;\n }\n\n (0, _createClass2.default)(FormControl, [{\n key: \"render\",\n value: function render() {\n var _classNames;\n\n var _this$props = this.props,\n classes = _this$props.classes,\n className = _this$props.className,\n Component = _this$props.component,\n disabled = _this$props.disabled,\n error = _this$props.error,\n fullWidth = _this$props.fullWidth,\n margin = _this$props.margin,\n required = _this$props.required,\n variant = _this$props.variant,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"component\", \"disabled\", \"error\", \"fullWidth\", \"margin\", \"required\", \"variant\"]);\n var _this$state = this.state,\n adornedStart = _this$state.adornedStart,\n filled = _this$state.filled,\n focused = _this$state.focused;\n var childContext = {\n adornedStart: adornedStart,\n disabled: disabled,\n error: error,\n filled: filled,\n focused: focused,\n margin: margin,\n onBlur: this.handleBlur,\n onEmpty: this.handleClean,\n onFilled: this.handleDirty,\n onFocus: this.handleFocus,\n required: required,\n variant: variant\n };\n return _react.default.createElement(_FormControlContext.default.Provider, {\n value: childContext\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"margin\".concat((0, _helpers.capitalize)(margin))], margin !== 'none'), (0, _defineProperty2.default)(_classNames, classes.fullWidth, fullWidth), _classNames), className)\n }, other)));\n }\n }]);\n return FormControl;\n}(_react.default.Component);\n\n true ? FormControl.propTypes = {\n /**\n * The contents of the form control.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the label, input and helper text should be displayed in a disabled state.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the label should be displayed in an error state.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the component will take up the full width of its container.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n */\n margin: _propTypes.default.oneOf(['none', 'dense', 'normal']),\n\n /**\n * If `true`, the label will indicate that the input is required.\n */\n required: _propTypes.default.bool,\n\n /**\n * The variant to use.\n */\n variant: _propTypes.default.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\nFormControl.defaultProps = {\n component: 'div',\n disabled: false,\n error: false,\n fullWidth: false,\n margin: 'none',\n required: false,\n variant: 'standard'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFormControl'\n})(FormControl);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControl/FormControl.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControl/FormControlContext.js": - /*!**************************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControl/FormControlContext.js ***! - \**************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\n/**\n * @ignore - internal component.\n */\nvar FormControlContext = _react.default.createContext();\n\nvar _default = FormControlContext;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControl/FormControlContext.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControl/formControlState.js": - /*!************************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControl/formControlState.js ***! - \************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = formControlState;\n\nfunction formControlState(_ref) {\n var props = _ref.props,\n states = _ref.states,\n muiFormControl = _ref.muiFormControl;\n return states.reduce(function (acc, state) {\n acc[state] = props[state];\n\n if (muiFormControl) {\n if (typeof props[state] === 'undefined') {\n acc[state] = muiFormControl[state];\n }\n }\n\n return acc;\n }, {});\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControl/formControlState.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControl/index.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControl/index.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FormControl.default;\n }\n});\n\nvar _FormControl = _interopRequireDefault(__webpack_require__(/*! ./FormControl */ \"./node_modules/@material-ui/core/FormControl/FormControl.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControl/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControl/withFormControlContext.js": - /*!******************************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControl/withFormControlContext.js ***! - \******************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = withFormControlContext;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _hoistNonReactStatics = _interopRequireDefault(__webpack_require__(/*! hoist-non-react-statics */ \"./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\"));\n\nvar _FormControlContext = _interopRequireDefault(__webpack_require__(/*! ./FormControlContext */ \"./node_modules/@material-ui/core/FormControl/FormControlContext.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nfunction withFormControlContext(Component) {\n var EnhancedComponent = function EnhancedComponent(props) {\n return _react.default.createElement(_FormControlContext.default.Consumer, null, function (context) {\n return _react.default.createElement(Component, (0, _extends2.default)({\n muiFormControl: context\n }, props));\n });\n };\n\n if (true) {\n EnhancedComponent.displayName = \"WithFormControlContext(\".concat((0, _utils.getDisplayName)(Component), \")\");\n }\n\n (0, _hoistNonReactStatics.default)(EnhancedComponent, Component);\n return EnhancedComponent;\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControl/withFormControlContext.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControlLabel/FormControlLabel.js": - /*!*****************************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControlLabel/FormControlLabel.js ***! - \*****************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Typography = _interopRequireDefault(__webpack_require__(/*! ../Typography */ \"./node_modules/@material-ui/core/Typography/index.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n cursor: 'pointer',\n // For correct alignment with the text.\n verticalAlign: 'middle',\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n marginLeft: -14,\n marginRight: 16,\n // used for row presentation of radio/checkbox\n '&$disabled': {\n cursor: 'default'\n }\n },\n\n /* Styles applied to the root element if `labelPlacement=\"start\"`. */\n labelPlacementStart: {\n flexDirection: 'row-reverse',\n marginLeft: 16,\n // used for row presentation of radio/checkbox\n marginRight: -14\n },\n\n /* Styles applied to the root element if `labelPlacement=\"top\"`. */\n labelPlacementTop: {\n flexDirection: 'column-reverse',\n marginLeft: 16\n },\n\n /* Styles applied to the root element if `labelPlacement=\"bottom\"`. */\n labelPlacementBottom: {\n flexDirection: 'column',\n marginLeft: 16\n },\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the label's Typography component. */\n label: {\n '&$disabled': {\n color: theme.palette.text.disabled\n }\n }\n };\n};\n/**\n * Drop in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\n\n\nexports.styles = styles;\n\nfunction FormControlLabel(props) {\n var _classNames;\n\n var checked = props.checked,\n classes = props.classes,\n classNameProp = props.className,\n control = props.control,\n disabledProp = props.disabled,\n inputRef = props.inputRef,\n label = props.label,\n labelPlacement = props.labelPlacement,\n muiFormControl = props.muiFormControl,\n name = props.name,\n onChange = props.onChange,\n value = props.value,\n other = (0, _objectWithoutProperties2.default)(props, [\"checked\", \"classes\", \"className\", \"control\", \"disabled\", \"inputRef\", \"label\", \"labelPlacement\", \"muiFormControl\", \"name\", \"onChange\", \"value\"]);\n var disabled = disabledProp;\n\n if (typeof disabled === 'undefined' && typeof control.props.disabled !== 'undefined') {\n disabled = control.props.disabled;\n }\n\n if (typeof disabled === 'undefined' && muiFormControl) {\n disabled = muiFormControl.disabled;\n }\n\n var controlProps = {\n disabled: disabled\n };\n ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(function (key) {\n if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n controlProps[key] = props[key];\n }\n });\n return _react.default.createElement(\"label\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"labelPlacement\".concat((0, _helpers.capitalize)(labelPlacement))], labelPlacement !== 'end'), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), _classNames), classNameProp)\n }, other), _react.default.cloneElement(control, controlProps), _react.default.createElement(_Typography.default, {\n component: \"span\",\n className: (0, _classnames.default)(classes.label, (0, _defineProperty2.default)({}, classes.disabled, disabled))\n }, label));\n}\n\n true ? FormControlLabel.propTypes = {\n /**\n * If `true`, the component appears selected.\n */\n checked: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * A control element. For instance, it can be be a `Radio`, a `Switch` or a `Checkbox`.\n */\n control: _propTypes.default.element,\n\n /**\n * If `true`, the control will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * Use that property to pass a ref callback to the native input component.\n */\n inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * The text to be used in an enclosing label element.\n */\n label: _propTypes.default.node,\n\n /**\n * The position of the label.\n */\n labelPlacement: _propTypes.default.oneOf(['end', 'start', 'top', 'bottom']),\n\n /**\n * @ignore\n */\n muiFormControl: _propTypes.default.object,\n\n /*\n * @ignore\n */\n name: _propTypes.default.string,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.checked`.\n * @param {boolean} checked The `checked` value of the switch\n */\n onChange: _propTypes.default.func,\n\n /**\n * The value of the component.\n */\n value: _propTypes.default.string\n} : undefined;\nFormControlLabel.defaultProps = {\n labelPlacement: 'end'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFormControlLabel'\n})((0, _withFormControlContext.default)(FormControlLabel));\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControlLabel/FormControlLabel.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormControlLabel/index.js": - /*!******************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormControlLabel/index.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FormControlLabel.default;\n }\n});\n\nvar _FormControlLabel = _interopRequireDefault(__webpack_require__(/*! ./FormControlLabel */ \"./node_modules/@material-ui/core/FormControlLabel/FormControlLabel.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormControlLabel/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormGroup/FormGroup.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormGroup/FormGroup.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap'\n },\n\n /* Styles applied to the root element if `row={true}`. */\n row: {\n flexDirection: 'row'\n }\n};\n/**\n * `FormGroup` wraps controls such as `Checkbox` and `Switch`.\n * It provides compact row layout.\n * For the `Radio`, you should be using the `RadioGroup` component instead of this one.\n */\n\nexports.styles = styles;\n\nfunction FormGroup(props) {\n var classes = props.classes,\n className = props.className,\n children = props.children,\n row = props.row,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"children\", \"row\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (0, _defineProperty2.default)({}, classes.row, row), className)\n }, other), children);\n}\n\n true ? FormGroup.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * Display group of elements in a compact row.\n */\n row: _propTypes.default.bool\n} : undefined;\nFormGroup.defaultProps = {\n row: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFormGroup'\n})(FormGroup);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormGroup/FormGroup.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormGroup/index.js": - /*!***********************************************************!*\ - !*** ./node_modules/@material-ui/core/FormGroup/index.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FormGroup.default;\n }\n});\n\nvar _FormGroup = _interopRequireDefault(__webpack_require__(/*! ./FormGroup */ \"./node_modules/@material-ui/core/FormGroup/FormGroup.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormGroup/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormHelperText/FormHelperText.js": - /*!*************************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormHelperText/FormHelperText.js ***! - \*************************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _formControlState = _interopRequireDefault(__webpack_require__(/*! ../FormControl/formControlState */ \"./node_modules/@material-ui/core/FormControl/formControlState.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: theme.palette.text.secondary,\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(12),\n textAlign: 'left',\n marginTop: 8,\n lineHeight: '1em',\n minHeight: '1em',\n margin: 0,\n '&$disabled': {\n color: theme.palette.text.disabled\n },\n '&$error': {\n color: theme.palette.error.main\n }\n },\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `margin=\"dense\"`. */\n marginDense: {\n marginTop: 4\n },\n\n /* Styles applied to the root element if `variant=\"filled\"` or `variant=\"outlined\"`. */\n contained: {\n margin: '8px 12px 0'\n },\n\n /* Styles applied to the root element if `focused={true}`. */\n focused: {},\n\n /* Styles applied to the root element if `filled={true}`. */\n filled: {},\n\n /* Styles applied to the root element if `required={true}`. */\n required: {}\n };\n};\n\nexports.styles = styles;\n\nfunction FormHelperText(props) {\n var _classNames;\n\n var classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n disabled = props.disabled,\n error = props.error,\n filled = props.filled,\n focused = props.focused,\n margin = props.margin,\n muiFormControl = props.muiFormControl,\n required = props.required,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"margin\", \"muiFormControl\", \"required\", \"variant\"]);\n var fcs = (0, _formControlState.default)({\n props: props,\n muiFormControl: muiFormControl,\n states: ['variant', 'margin', 'disabled', 'error', 'filled', 'focused', 'required']\n });\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.contained, fcs.variant === 'filled' || fcs.variant === 'outlined'), (0, _defineProperty2.default)(_classNames, classes.marginDense, fcs.margin === 'dense'), (0, _defineProperty2.default)(_classNames, classes.disabled, fcs.disabled), (0, _defineProperty2.default)(_classNames, classes.error, fcs.error), (0, _defineProperty2.default)(_classNames, classes.filled, fcs.filled), (0, _defineProperty2.default)(_classNames, classes.focused, fcs.focused), (0, _defineProperty2.default)(_classNames, classes.required, fcs.required), _classNames), classNameProp)\n }, other));\n}\n\n true ? FormHelperText.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the helper text should be displayed in a disabled state.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, helper text should be displayed in an error state.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the helper text should use filled classes key.\n */\n filled: _propTypes.default.bool,\n\n /**\n * If `true`, the helper text should use focused classes key.\n */\n focused: _propTypes.default.bool,\n\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: _propTypes.default.oneOf(['dense']),\n\n /**\n * @ignore\n */\n muiFormControl: _propTypes.default.object,\n\n /**\n * If `true`, the helper text should use required classes key.\n */\n required: _propTypes.default.bool,\n\n /**\n * The variant to use.\n */\n variant: _propTypes.default.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\nFormHelperText.defaultProps = {\n component: 'p'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFormHelperText'\n})((0, _withFormControlContext.default)(FormHelperText));\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormHelperText/FormHelperText.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormHelperText/index.js": - /*!****************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormHelperText/index.js ***! - \****************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FormHelperText.default;\n }\n});\n\nvar _FormHelperText = _interopRequireDefault(__webpack_require__(/*! ./FormHelperText */ \"./node_modules/@material-ui/core/FormHelperText/FormHelperText.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormHelperText/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormLabel/FormLabel.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/FormLabel/FormLabel.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _formControlState = _interopRequireDefault(__webpack_require__(/*! ../FormControl/formControlState */ \"./node_modules/@material-ui/core/FormControl/formControlState.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n fontFamily: theme.typography.fontFamily,\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(16),\n lineHeight: 1,\n padding: 0,\n '&$focused': {\n color: theme.palette.primary[theme.palette.type === 'light' ? 'dark' : 'light']\n },\n '&$disabled': {\n color: theme.palette.text.disabled\n },\n '&$error': {\n color: theme.palette.error.main\n }\n },\n\n /* Styles applied to the root element if `focused={true}`. */\n focused: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the root element if `filled={true}`. */\n filled: {},\n\n /* Styles applied to the root element if `required={true}`. */\n required: {},\n asterisk: {\n '&$error': {\n color: theme.palette.error.main\n }\n }\n };\n};\n\nexports.styles = styles;\n\nfunction FormLabel(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n disabled = props.disabled,\n error = props.error,\n filled = props.filled,\n focused = props.focused,\n muiFormControl = props.muiFormControl,\n required = props.required,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"muiFormControl\", \"required\"]);\n var fcs = (0, _formControlState.default)({\n props: props,\n muiFormControl: muiFormControl,\n states: ['required', 'focused', 'disabled', 'error', 'filled']\n });\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, fcs.disabled), (0, _defineProperty2.default)(_classNames, classes.error, fcs.error), (0, _defineProperty2.default)(_classNames, classes.filled, fcs.filled), (0, _defineProperty2.default)(_classNames, classes.focused, fcs.focused), (0, _defineProperty2.default)(_classNames, classes.required, fcs.required), _classNames), classNameProp)\n }, other), children, fcs.required && _react.default.createElement(\"span\", {\n className: (0, _classnames.default)(classes.asterisk, (0, _defineProperty2.default)({}, classes.error, fcs.error))\n }, \"\\u2009*\"));\n}\n\n true ? FormLabel.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the label should be displayed in a disabled state.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the label should be displayed in an error state.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the label should use filled classes key.\n */\n filled: _propTypes.default.bool,\n\n /**\n * If `true`, the input of this label is focused (used by `FormGroup` components).\n */\n focused: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n muiFormControl: _propTypes.default.object,\n\n /**\n * If `true`, the label will indicate that the input is required.\n */\n required: _propTypes.default.bool\n} : undefined;\nFormLabel.defaultProps = {\n component: 'label'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiFormLabel'\n})((0, _withFormControlContext.default)(FormLabel));\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormLabel/FormLabel.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/FormLabel/index.js": - /*!***********************************************************!*\ - !*** ./node_modules/@material-ui/core/FormLabel/index.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _FormLabel.default;\n }\n});\n\nvar _FormLabel = _interopRequireDefault(__webpack_require__(/*! ./FormLabel */ \"./node_modules/@material-ui/core/FormLabel/FormLabel.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/FormLabel/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Grid/Grid.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/Grid/Grid.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _createBreakpoints = __webpack_require__(/*! ../styles/createBreakpoints */ \"./node_modules/@material-ui/core/styles/createBreakpoints.js\");\n\nvar _requirePropFactory = _interopRequireDefault(__webpack_require__(/*! ../utils/requirePropFactory */ \"./node_modules/@material-ui/core/utils/requirePropFactory.js\"));\n\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - http://v4-alpha.getbootstrap.com/layout/flexbox-grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\nvar GUTTERS = [0, 8, 16, 24, 32, 40];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n var styles = {};\n GRID_SIZES.forEach(function (size) {\n var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n if (size === true) {\n // For the auto layouting\n styles[key] = {\n flexBasis: 0,\n flexGrow: 1,\n maxWidth: '100%'\n };\n return;\n }\n\n if (size === 'auto') {\n styles[key] = {\n flexBasis: 'auto',\n flexGrow: 0,\n maxWidth: 'none'\n };\n return;\n } // Keep 7 significant numbers.\n\n\n var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n styles[key] = {\n flexBasis: width,\n flexGrow: 0,\n maxWidth: width\n };\n }); // No need for a media query for the first size.\n\n if (breakpoint === 'xs') {\n (0, _extends2.default)(globalStyles, styles);\n } else {\n globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n }\n}\n\nfunction generateGutter(theme, breakpoint) {\n var styles = {};\n GUTTERS.forEach(function (spacing, index) {\n if (index === 0) {\n // Skip the default style.\n return;\n }\n\n styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n margin: -spacing / 2,\n width: \"calc(100% + \".concat(spacing, \"px)\"),\n '& > $item': {\n padding: spacing / 2\n }\n };\n });\n return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nvar styles = function styles(theme) {\n return (0, _extends2.default)({\n /* Styles applied to the root element if `container={true}`. */\n container: {\n boxSizing: 'border-box',\n display: 'flex',\n flexWrap: 'wrap',\n width: '100%'\n },\n\n /* Styles applied to the root element if `item={true}`. */\n item: {\n boxSizing: 'border-box',\n margin: '0' // For instance, it's useful when used with a `figure` element.\n\n },\n\n /* Styles applied to the root element if `zeroMinWidth={true}`. */\n zeroMinWidth: {\n minWidth: 0\n },\n\n /* Styles applied to the root element if `direction=\"column\"`. */\n 'direction-xs-column': {\n flexDirection: 'column'\n },\n\n /* Styles applied to the root element if `direction=\"column-reverse\"`. */\n 'direction-xs-column-reverse': {\n flexDirection: 'column-reverse'\n },\n\n /* Styles applied to the root element if `direction=\"rwo-reverse\"`. */\n 'direction-xs-row-reverse': {\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if `wrap=\"nowrap\"`. */\n 'wrap-xs-nowrap': {\n flexWrap: 'nowrap'\n },\n\n /* Styles applied to the root element if `wrap=\"reverse\"`. */\n 'wrap-xs-wrap-reverse': {\n flexWrap: 'wrap-reverse'\n },\n\n /* Styles applied to the root element if `alignItems=\"center\"`. */\n 'align-items-xs-center': {\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if `alignItems=\"flex-start\"`. */\n 'align-items-xs-flex-start': {\n alignItems: 'flex-start'\n },\n\n /* Styles applied to the root element if `alignItems=\"flex-end\"`. */\n 'align-items-xs-flex-end': {\n alignItems: 'flex-end'\n },\n\n /* Styles applied to the root element if `alignItems=\"baseline\"`. */\n 'align-items-xs-baseline': {\n alignItems: 'baseline'\n },\n\n /* Styles applied to the root element if `alignContent=\"center\"`. */\n 'align-content-xs-center': {\n alignContent: 'center'\n },\n\n /* Styles applied to the root element if `alignContent=\"flex-start\"`. */\n 'align-content-xs-flex-start': {\n alignContent: 'flex-start'\n },\n\n /* Styles applied to the root element if `alignContent=\"flex-end\"`. */\n 'align-content-xs-flex-end': {\n alignContent: 'flex-end'\n },\n\n /* Styles applied to the root element if `alignContent=\"space-between\"`. */\n 'align-content-xs-space-between': {\n alignContent: 'space-between'\n },\n\n /* Styles applied to the root element if `alignContent=\"space-around\"`. */\n 'align-content-xs-space-around': {\n alignContent: 'space-around'\n },\n\n /* Styles applied to the root element if `justify=\"center\"`. */\n 'justify-xs-center': {\n justifyContent: 'center'\n },\n\n /* Styles applied to the root element if `justify=\"flex-end\"`. */\n 'justify-xs-flex-end': {\n justifyContent: 'flex-end'\n },\n\n /* Styles applied to the root element if `justify=\"space-between\"`. */\n 'justify-xs-space-between': {\n justifyContent: 'space-between'\n },\n\n /* Styles applied to the root element if `justify=\"space-around\"`. */\n 'justify-xs-space-around': {\n justifyContent: 'space-around'\n },\n\n /* Styles applied to the root element if `justify=\"space-evenly\"`. */\n 'justify-xs-space-evenly': {\n justifyContent: 'space-evenly'\n }\n }, generateGutter(theme, 'xs'), _createBreakpoints.keys.reduce(function (accumulator, key) {\n // Use side effect over immutability for better performance.\n generateGrid(accumulator, theme, key);\n return accumulator;\n }, {}));\n};\n\nexports.styles = styles;\n\nfunction Grid(props) {\n var _classNames;\n\n var alignContent = props.alignContent,\n alignItems = props.alignItems,\n classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n container = props.container,\n direction = props.direction,\n item = props.item,\n justify = props.justify,\n lg = props.lg,\n md = props.md,\n sm = props.sm,\n spacing = props.spacing,\n wrap = props.wrap,\n xl = props.xl,\n xs = props.xs,\n zeroMinWidth = props.zeroMinWidth,\n other = (0, _objectWithoutProperties2.default)(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n var className = (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.container, container), (0, _defineProperty2.default)(_classNames, classes.item, item), (0, _defineProperty2.default)(_classNames, classes.zeroMinWidth, zeroMinWidth), (0, _defineProperty2.default)(_classNames, classes[\"spacing-xs-\".concat(String(spacing))], container && spacing !== 0), (0, _defineProperty2.default)(_classNames, classes[\"direction-xs-\".concat(String(direction))], direction !== Grid.defaultProps.direction), (0, _defineProperty2.default)(_classNames, classes[\"wrap-xs-\".concat(String(wrap))], wrap !== Grid.defaultProps.wrap), (0, _defineProperty2.default)(_classNames, classes[\"align-items-xs-\".concat(String(alignItems))], alignItems !== Grid.defaultProps.alignItems), (0, _defineProperty2.default)(_classNames, classes[\"align-content-xs-\".concat(String(alignContent))], alignContent !== Grid.defaultProps.alignContent), (0, _defineProperty2.default)(_classNames, classes[\"justify-xs-\".concat(String(justify))], justify !== Grid.defaultProps.justify), (0, _defineProperty2.default)(_classNames, classes[\"grid-xs-\".concat(String(xs))], xs !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-sm-\".concat(String(sm))], sm !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-md-\".concat(String(md))], md !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-lg-\".concat(String(lg))], lg !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-xl-\".concat(String(xl))], xl !== false), _classNames), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\n true ? Grid.propTypes = {\n /**\n * Defines the `align-content` style property.\n * It's applied for all screen sizes.\n */\n alignContent: _propTypes.default.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n /**\n * Defines the `align-items` style property.\n * It's applied for all screen sizes.\n */\n alignItems: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, the component will have the flex *container* behavior.\n * You should be wrapping *items* with a *container*.\n */\n container: _propTypes.default.bool,\n\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n */\n direction: _propTypes.default.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n /**\n * If `true`, the component will have the flex *item* behavior.\n * You should be wrapping *items* with a *container*.\n */\n item: _propTypes.default.bool,\n\n /**\n * Defines the `justify-content` style property.\n * It is applied for all screen sizes.\n */\n justify: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n /**\n * Defines the number of grids the component is going to use.\n * It's applied for the `lg` breakpoint and wider screens if not overridden.\n */\n lg: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\n * Defines the number of grids the component is going to use.\n * It's applied for the `md` breakpoint and wider screens if not overridden.\n */\n md: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\n * Defines the number of grids the component is going to use.\n * It's applied for the `sm` breakpoint and wider screens if not overridden.\n */\n sm: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\n * Defines the space between the type `item` component.\n * It can only be used on a type `container` component.\n */\n spacing: _propTypes.default.oneOf(GUTTERS),\n\n /**\n * Defines the `flex-wrap` style property.\n * It's applied for all screen sizes.\n */\n wrap: _propTypes.default.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n /**\n * Defines the number of grids the component is going to use.\n * It's applied for the `xl` breakpoint and wider screens.\n */\n xl: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\n * Defines the number of grids the component is going to use.\n * It's applied for all the screen sizes with the lowest priority.\n */\n xs: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\n * If `true`, it sets `min-width: 0` on the item.\n * Refer to the limitations section of the documentation to better understand the use case.\n */\n zeroMinWidth: _propTypes.default.bool\n} : undefined;\nGrid.defaultProps = {\n alignContent: 'stretch',\n alignItems: 'stretch',\n component: 'div',\n container: false,\n direction: 'row',\n item: false,\n justify: 'flex-start',\n lg: false,\n md: false,\n sm: false,\n spacing: 0,\n wrap: 'wrap',\n xl: false,\n xs: false,\n zeroMinWidth: false\n};\nvar StyledGrid = (0, _withStyles.default)(styles, {\n name: 'MuiGrid'\n})(Grid);\n\nif (true) {\n var requireProp = (0, _requirePropFactory.default)('Grid');\n StyledGrid.propTypes = (0, _extends2.default)({}, StyledGrid.propTypes, {\n alignContent: requireProp('container'),\n alignItems: requireProp('container'),\n direction: requireProp('container'),\n justify: requireProp('container'),\n lg: requireProp('item'),\n md: requireProp('item'),\n sm: requireProp('item'),\n spacing: requireProp('container'),\n wrap: requireProp('container'),\n xs: requireProp('item'),\n zeroMinWidth: requireProp('zeroMinWidth')\n });\n}\n\nvar _default = StyledGrid;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Grid/Grid.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Grid/index.js": - /*!******************************************************!*\ - !*** ./node_modules/@material-ui/core/Grid/index.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Grid.default;\n }\n});\n\nvar _Grid = _interopRequireDefault(__webpack_require__(/*! ./Grid */ \"./node_modules/@material-ui/core/Grid/Grid.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Grid/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Grow/Grow.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/Grow/Grow.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _Transition = _interopRequireDefault(__webpack_require__(/*! react-transition-group/Transition */ \"./node_modules/react-transition-group/Transition.js\"));\n\nvar _withTheme = _interopRequireDefault(__webpack_require__(/*! ../styles/withTheme */ \"./node_modules/@material-ui/core/styles/withTheme.js\"));\n\nvar _utils = __webpack_require__(/*! ../transitions/utils */ \"./node_modules/@material-ui/core/transitions/utils.js\");\n\n// @inheritedComponent Transition\nfunction getScale(value) {\n return \"scale(\".concat(value, \", \").concat(Math.pow(value, 2), \")\");\n}\n\nvar styles = {\n entering: {\n opacity: 1,\n transform: getScale(1)\n },\n entered: {\n opacity: 1,\n // Use translateZ to scrolling issue on Chrome.\n transform: \"\".concat(getScale(1), \" translateZ(0)\")\n }\n};\n/**\n * The Grow transition is used by the [Tooltip](/demos/tooltips/) and\n * [Popover](/utils/popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Grow =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Grow, _React$Component);\n\n function Grow() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Grow);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Grow)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _this.handleEnter = function (node) {\n var _this$props = _this.props,\n theme = _this$props.theme,\n timeout = _this$props.timeout;\n (0, _utils.reflow)(node); // So the animation always start from the start.\n\n var _getTransitionProps = (0, _utils.getTransitionProps)(_this.props, {\n mode: 'enter'\n }),\n transitionDuration = _getTransitionProps.duration,\n delay = _getTransitionProps.delay;\n\n var duration = 0;\n\n if (timeout === 'auto') {\n duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n _this.autoTimeout = duration;\n } else {\n duration = transitionDuration;\n }\n\n node.style.transition = [theme.transitions.create('opacity', {\n duration: duration,\n delay: delay\n }), theme.transitions.create('transform', {\n duration: duration * 0.666,\n delay: delay\n })].join(',');\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node);\n }\n };\n\n _this.handleExit = function (node) {\n var _this$props2 = _this.props,\n theme = _this$props2.theme,\n timeout = _this$props2.timeout;\n var duration = 0;\n\n var _getTransitionProps2 = (0, _utils.getTransitionProps)(_this.props, {\n mode: 'exit'\n }),\n transitionDuration = _getTransitionProps2.duration,\n delay = _getTransitionProps2.delay;\n\n if (timeout === 'auto') {\n duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n _this.autoTimeout = duration;\n } else {\n duration = transitionDuration;\n }\n\n node.style.transition = [theme.transitions.create('opacity', {\n duration: duration,\n delay: delay\n }), theme.transitions.create('transform', {\n duration: duration * 0.666,\n delay: delay || duration * 0.333\n })].join(',');\n node.style.opacity = '0';\n node.style.transform = getScale(0.75);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n _this.addEndListener = function (_, next) {\n if (_this.props.timeout === 'auto') {\n _this.timer = setTimeout(next, _this.autoTimeout || 0);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Grow, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.timer);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n children = _this$props3.children,\n onEnter = _this$props3.onEnter,\n onExit = _this$props3.onExit,\n styleProp = _this$props3.style,\n theme = _this$props3.theme,\n timeout = _this$props3.timeout,\n other = (0, _objectWithoutProperties2.default)(_this$props3, [\"children\", \"onEnter\", \"onExit\", \"style\", \"theme\", \"timeout\"]);\n var style = (0, _extends2.default)({}, styleProp, _react.default.isValidElement(children) ? children.props.style : {});\n return _react.default.createElement(_Transition.default, (0, _extends2.default)({\n appear: true,\n onEnter: this.handleEnter,\n onExit: this.handleExit,\n addEndListener: this.addEndListener,\n timeout: timeout === 'auto' ? null : timeout\n }, other), function (state, childProps) {\n return _react.default.cloneElement(children, (0, _extends2.default)({\n style: (0, _extends2.default)({\n opacity: 0,\n transform: getScale(0.75)\n }, styles[state], style)\n }, childProps));\n });\n }\n }]);\n return Grow;\n}(_react.default.Component);\n\n true ? Grow.propTypes = {\n /**\n * A single child content element.\n */\n children: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),\n\n /**\n * If `true`, show the component; triggers the enter or exit animation.\n */\n in: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n onEnter: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onExit: _propTypes.default.func,\n\n /**\n * @ignore\n */\n style: _propTypes.default.object,\n\n /**\n * @ignore\n */\n theme: _propTypes.default.object.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n *\n * Set to 'auto' to automatically calculate transition time based on height.\n */\n timeout: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n }), _propTypes.default.oneOf(['auto'])])\n} : undefined;\nGrow.defaultProps = {\n timeout: 'auto'\n};\nGrow.muiSupportAuto = true;\n\nvar _default = (0, _withTheme.default)()(Grow);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Grow/Grow.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Grow/index.js": - /*!******************************************************!*\ - !*** ./node_modules/@material-ui/core/Grow/index.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Grow.default;\n }\n});\n\nvar _Grow = _interopRequireDefault(__webpack_require__(/*! ./Grow */ \"./node_modules/@material-ui/core/Grow/Grow.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Grow/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/IconButton/IconButton.js": - /*!*****************************************************************!*\ - !*** ./node_modules/@material-ui/core/IconButton/IconButton.js ***! - \*****************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _colorManipulator = __webpack_require__(/*! ../styles/colorManipulator */ \"./node_modules/@material-ui/core/styles/colorManipulator.js\");\n\nvar _ButtonBase = _interopRequireDefault(__webpack_require__(/*! ../ButtonBase */ \"./node_modules/@material-ui/core/ButtonBase/index.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\n// @inheritedComponent ButtonBase\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n textAlign: 'center',\n flex: '0 0 auto',\n fontSize: theme.typography.pxToRem(24),\n padding: 12,\n borderRadius: '50%',\n overflow: 'visible',\n // Explicitly set the default value to solve a bug on IE 11.\n color: theme.palette.action.active,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest\n }),\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n },\n '&$disabled': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n },\n\n /* Styles applied to the root element if `color=\"inherit\"`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n color: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the children container element. */\n label: {\n width: '100%',\n display: 'flex',\n alignItems: 'inherit',\n justifyContent: 'inherit'\n }\n };\n};\n/**\n * Refer to the [Icons](/style/icons/) section of the documentation\n * regarding the available icon options.\n */\n\n\nexports.styles = styles;\n\nfunction IconButton(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n color = props.color,\n disabled = props.disabled,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"disabled\"]);\n return _react.default.createElement(_ButtonBase.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'default'), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), _classNames), className),\n centerRipple: true,\n focusRipple: true,\n disabled: disabled\n }, other), _react.default.createElement(\"span\", {\n className: classes.label\n }, children));\n}\n\n true ? IconButton.propTypes = {\n /**\n * The icon element.\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node, function (props) {\n var found = _react.default.Children.toArray(props.children).some(function (child) {\n return _react.default.isValidElement(child) && child.props.onClick;\n });\n\n if (found) {\n return new Error(['Material-UI: you are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957', // Change error message slightly on every check to prevent caching when testing\n // which would not trigger console errors on subsequent fails\n false ? undefined : ''].join('\\n'));\n }\n\n return null;\n }),\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n /**\n * If `true`, the button will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the ripple will be disabled.\n */\n disableRipple: _propTypes.default.bool\n} : undefined;\nIconButton.defaultProps = {\n color: 'default',\n disabled: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiIconButton'\n})(IconButton);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/IconButton/IconButton.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/IconButton/index.js": - /*!************************************************************!*\ - !*** ./node_modules/@material-ui/core/IconButton/index.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _IconButton.default;\n }\n});\n\nvar _IconButton = _interopRequireDefault(__webpack_require__(/*! ./IconButton */ \"./node_modules/@material-ui/core/IconButton/IconButton.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/IconButton/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Input/Input.js": - /*!*******************************************************!*\ - !*** ./node_modules/@material-ui/core/Input/Input.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _InputBase = _interopRequireDefault(__webpack_require__(/*! ../InputBase */ \"./node_modules/@material-ui/core/InputBase/index.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\n// @inheritedComponent InputBase\nvar styles = function styles(theme) {\n var light = theme.palette.type === 'light';\n var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative'\n },\n\n /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n formControl: {\n 'label + &': {\n marginTop: 16\n }\n },\n\n /* Styles applied to the root element if the component is focused. */\n focused: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `disableUnderline={false}`. */\n underline: {\n '&:after': {\n borderBottom: \"2px solid \".concat(theme.palette.primary[light ? 'dark' : 'light']),\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut\n }),\n pointerEvents: 'none' // Transparent to the hover style.\n\n },\n '&$focused:after': {\n transform: 'scaleX(1)'\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)' // error is always underlined in red\n\n },\n '&:before': {\n borderBottom: \"1px solid \".concat(bottomLineColor),\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter\n }),\n pointerEvents: 'none' // Transparent to the hover style.\n\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: \"2px solid \".concat(theme.palette.text.primary),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: \"1px solid \".concat(bottomLineColor)\n }\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted'\n }\n },\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the root element if `multiline={true}`. */\n multiline: {},\n\n /* Styles applied to the root element if `fullWidth={true}`. */\n fullWidth: {},\n\n /* Styles applied to the `input` element. */\n input: {},\n\n /* Styles applied to the `input` element if `margin=\"dense\"`. */\n inputMarginDense: {},\n\n /* Styles applied to the `input` element if `multiline={true}`. */\n inputMultiline: {},\n\n /* Styles applied to the `input` element if `type` is not \"text\"`. */\n inputType: {},\n\n /* Styles applied to the `input` element if `type=\"search\"`. */\n inputTypeSearch: {}\n };\n};\n\nexports.styles = styles;\n\nfunction Input(props) {\n var disableUnderline = props.disableUnderline,\n classes = props.classes,\n other = (0, _objectWithoutProperties2.default)(props, [\"disableUnderline\", \"classes\"]);\n return _react.default.createElement(_InputBase.default, (0, _extends2.default)({\n classes: (0, _extends2.default)({}, classes, {\n root: (0, _classnames.default)(classes.root, (0, _defineProperty2.default)({}, classes.underline, !disableUnderline)),\n underline: null\n })\n }, other));\n}\n\n true ? Input.propTypes = {\n /**\n * This property helps users to fill forms faster, especially on mobile devices.\n * The name can be confusing, as it's more like an autofill.\n * You can learn more about it here:\n * https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill\n */\n autoComplete: _propTypes.default.string,\n\n /**\n * If `true`, the input will be focused during the first mount.\n */\n autoFocus: _propTypes.default.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * The CSS class name of the wrapper element.\n */\n className: _propTypes.default.string,\n\n /**\n * The default input value, useful when not controlling the component.\n */\n defaultValue: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))]),\n\n /**\n * If `true`, the input will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the input will not have an underline.\n */\n disableUnderline: _propTypes.default.bool,\n\n /**\n * End `InputAdornment` for this component.\n */\n endAdornment: _propTypes.default.node,\n\n /**\n * If `true`, the input will indicate an error. This is normally obtained via context from\n * FormControl.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the input will take up the full width of its container.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * The id of the `input` element.\n */\n id: _propTypes.default.string,\n\n /**\n * The component used for the native input.\n * Either a string to use a DOM element or a component.\n */\n inputComponent: _utils.componentPropType,\n\n /**\n * Attributes applied to the `input` element.\n */\n inputProps: _propTypes.default.object,\n\n /**\n * Use that property to pass a ref callback to the native input component.\n */\n inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: _propTypes.default.oneOf(['dense', 'none']),\n\n /**\n * If `true`, a textarea element will be rendered.\n */\n multiline: _propTypes.default.bool,\n\n /**\n * Name attribute of the `input` element.\n */\n name: _propTypes.default.string,\n\n /**\n * Callback fired when the value is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value`.\n */\n onChange: _propTypes.default.func,\n\n /**\n * The short hint displayed in the input before the user enters a value.\n */\n placeholder: _propTypes.default.string,\n\n /**\n * It prevents the user from changing the value of the field\n * (not from interacting with the field).\n */\n readOnly: _propTypes.default.bool,\n\n /**\n * If `true`, the input will be required.\n */\n required: _propTypes.default.bool,\n\n /**\n * Number of rows to display when multiline option is set to true.\n */\n rows: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Maximum number of rows to display when multiline option is set to true.\n */\n rowsMax: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Start `InputAdornment` for this component.\n */\n startAdornment: _propTypes.default.node,\n\n /**\n * Type of the input element. It should be a valid HTML5 input type.\n */\n type: _propTypes.default.string,\n\n /**\n * The input value, required for a controlled component.\n */\n value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))])\n} : undefined;\n_InputBase.default.defaultProps = {\n fullWidth: false,\n inputComponent: 'input',\n multiline: false,\n type: 'text'\n};\nInput.muiName = 'Input';\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiInput'\n})(Input);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Input/Input.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Input/index.js": - /*!*******************************************************!*\ - !*** ./node_modules/@material-ui/core/Input/index.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Input.default;\n }\n});\n\nvar _Input = _interopRequireDefault(__webpack_require__(/*! ./Input */ \"./node_modules/@material-ui/core/Input/Input.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Input/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputBase/InputBase.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/InputBase/InputBase.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _warning = _interopRequireDefault(__webpack_require__(/*! warning */ \"./node_modules/warning/warning.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _formControlState = _interopRequireDefault(__webpack_require__(/*! ../FormControl/formControlState */ \"./node_modules/@material-ui/core/FormControl/formControlState.js\"));\n\nvar _FormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/FormControlContext */ \"./node_modules/@material-ui/core/FormControl/FormControlContext.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _reactHelpers = __webpack_require__(/*! ../utils/reactHelpers */ \"./node_modules/@material-ui/core/utils/reactHelpers.js\");\n\nvar _Textarea = _interopRequireDefault(__webpack_require__(/*! ./Textarea */ \"./node_modules/@material-ui/core/InputBase/Textarea.js\"));\n\nvar _utils2 = __webpack_require__(/*! ./utils */ \"./node_modules/@material-ui/core/InputBase/utils.js\");\n\n/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\nvar styles = function styles(theme) {\n var light = theme.palette.type === 'light';\n var placeholder = {\n color: 'currentColor',\n opacity: light ? 0.42 : 0.5,\n transition: theme.transitions.create('opacity', {\n duration: theme.transitions.duration.shorter\n })\n };\n var placeholderHidden = {\n opacity: 0\n };\n var placeholderVisible = {\n opacity: light ? 0.42 : 0.5\n };\n return {\n /* Styles applied to the root element. */\n root: {\n // Mimics the default input display property used by browsers for an input.\n fontFamily: theme.typography.fontFamily,\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(16),\n lineHeight: '1.1875em',\n // Reset (19px), match the native input line-height\n cursor: 'text',\n display: 'inline-flex',\n alignItems: 'center',\n '&$disabled': {\n color: theme.palette.text.disabled,\n cursor: 'default'\n }\n },\n\n /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n formControl: {},\n\n /* Styles applied to the root element if the component is focused. */\n focused: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `startAdornment` is provided. */\n adornedStart: {},\n\n /* Styles applied to the root element if `endAdornment` is provided. */\n adornedEnd: {},\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the `input` element if `margin=\"dense\"`. */\n marginDense: {},\n\n /* Styles applied to the root element if `multiline={true}`. */\n multiline: {\n padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\")\n },\n\n /* Styles applied to the root element if `fullWidth={true}`. */\n fullWidth: {\n width: '100%'\n },\n\n /* Styles applied to the `input` element. */\n input: {\n font: 'inherit',\n color: 'currentColor',\n padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n border: 0,\n boxSizing: 'content-box',\n background: 'none',\n margin: 0,\n // Reset for Safari\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n display: 'block',\n // Make the flex item shrink with Firefox\n minWidth: 0,\n width: '100%',\n // Fix IE 11 width issue\n '&::-webkit-input-placeholder': placeholder,\n '&::-moz-placeholder': placeholder,\n // Firefox 19+\n '&:-ms-input-placeholder': placeholder,\n // IE 11\n '&::-ms-input-placeholder': placeholder,\n // Edge\n '&:focus': {\n outline: 0\n },\n // Reset Firefox invalid required input style\n '&:invalid': {\n boxShadow: 'none'\n },\n '&::-webkit-search-decoration': {\n // Remove the padding when type=search.\n '-webkit-appearance': 'none'\n },\n // Show and hide the placeholder logic\n 'label[data-shrink=false] + $formControl &': {\n '&::-webkit-input-placeholder': placeholderHidden,\n '&::-moz-placeholder': placeholderHidden,\n // Firefox 19+\n '&:-ms-input-placeholder': placeholderHidden,\n // IE 11\n '&::-ms-input-placeholder': placeholderHidden,\n // Edge\n '&:focus::-webkit-input-placeholder': placeholderVisible,\n '&:focus::-moz-placeholder': placeholderVisible,\n // Firefox 19+\n '&:focus:-ms-input-placeholder': placeholderVisible,\n // IE 11\n '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n\n },\n '&$disabled': {\n opacity: 1 // Reset iOS opacity\n\n }\n },\n\n /* Styles applied to the `input` element if `margin=\"dense\"`. */\n inputMarginDense: {\n paddingTop: 4 - 1\n },\n\n /* Styles applied to the `input` element if `multiline={true}`. */\n inputMultiline: {\n resize: 'none',\n padding: 0\n },\n\n /* Styles applied to the `input` element if `type` is not \"text\"`. */\n inputType: {\n // type=\"date\" or type=\"time\", etc. have specific styles we need to reset.\n height: '1.1875em' // Reset (19px), match the native input line-height\n\n },\n\n /* Styles applied to the `input` element if `type=\"search\"`. */\n inputTypeSearch: {\n // Improve type search style.\n '-moz-appearance': 'textfield',\n '-webkit-appearance': 'textfield'\n },\n\n /* Styles applied to the `input` element if `startAdornment` is provided. */\n inputAdornedStart: {},\n\n /* Styles applied to the `input` element if `endAdornment` is provided. */\n inputAdornedEnd: {}\n };\n};\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\n\n\nexports.styles = styles;\n\nvar InputBase =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(InputBase, _React$Component);\n (0, _createClass2.default)(InputBase, null, [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n if (props.disabled && state.focused) {\n return {\n focused: false\n };\n }\n\n return null;\n }\n }]);\n\n function InputBase(props) {\n var _this;\n\n (0, _classCallCheck2.default)(this, InputBase);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(InputBase).call(this, props));\n _this.state = {\n focused: false\n };\n\n _this.handleFocus = function (event) {\n var muiFormControl = _this.props.muiFormControl; // Fix a bug with IE 11 where the focus/blur events are triggered\n // while the input is disabled.\n\n if ((0, _formControlState.default)({\n props: _this.props,\n muiFormControl: muiFormControl,\n states: ['disabled']\n }).disabled) {\n event.stopPropagation();\n return;\n }\n\n _this.setState({\n focused: true\n });\n\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n\n if (muiFormControl && muiFormControl.onFocus) {\n muiFormControl.onFocus(event);\n }\n };\n\n _this.handleBlur = function (event) {\n _this.setState({\n focused: false\n });\n\n if (_this.props.onBlur) {\n _this.props.onBlur(event);\n }\n\n var muiFormControl = _this.props.muiFormControl;\n\n if (muiFormControl && muiFormControl.onBlur) {\n muiFormControl.onBlur(event);\n }\n };\n\n _this.handleChange = function () {\n if (!_this.isControlled) {\n _this.checkDirty(_this.inputRef);\n } // Perform in the willUpdate\n\n\n if (_this.props.onChange) {\n var _this$props;\n\n (_this$props = _this.props).onChange.apply(_this$props, arguments);\n }\n };\n\n _this.handleRefInput = function (ref) {\n _this.inputRef = ref;\n true ? (0, _warning.default)(!ref || ref instanceof HTMLInputElement || ref.focus, ['Material-UI: you have provided a `inputComponent` to the input component', 'that does not correctly handle the `inputRef` property.', 'Make sure the `inputRef` property is called with a HTMLInputElement.'].join('\\n')) : undefined;\n var refProp;\n\n if (_this.props.inputRef) {\n refProp = _this.props.inputRef;\n } else if (_this.props.inputProps && _this.props.inputProps.ref) {\n refProp = _this.props.inputProps.ref;\n }\n\n (0, _reactHelpers.setRef)(refProp, ref);\n };\n\n _this.handleClick = function (event) {\n if (_this.inputRef && event.currentTarget === event.target) {\n _this.inputRef.focus();\n }\n\n if (_this.props.onClick) {\n _this.props.onClick(event);\n }\n };\n\n _this.isControlled = props.value != null;\n\n if (_this.isControlled) {\n _this.checkDirty(props);\n }\n\n return _this;\n }\n\n (0, _createClass2.default)(InputBase, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this.isControlled) {\n this.checkDirty(this.inputRef);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // Book keep the focused state.\n if (!prevProps.disabled && this.props.disabled) {\n var muiFormControl = this.props.muiFormControl;\n\n if (muiFormControl && muiFormControl.onBlur) {\n muiFormControl.onBlur();\n }\n }\n\n if (this.isControlled) {\n this.checkDirty(this.props);\n } // else performed in the onChange\n\n }\n }, {\n key: \"checkDirty\",\n value: function checkDirty(obj) {\n var muiFormControl = this.props.muiFormControl;\n\n if ((0, _utils2.isFilled)(obj)) {\n if (muiFormControl && muiFormControl.onFilled) {\n muiFormControl.onFilled();\n }\n\n if (this.props.onFilled) {\n this.props.onFilled();\n }\n\n return;\n }\n\n if (muiFormControl && muiFormControl.onEmpty) {\n muiFormControl.onEmpty();\n }\n\n if (this.props.onEmpty) {\n this.props.onEmpty();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames, _classNames2;\n\n var _this$props2 = this.props,\n autoComplete = _this$props2.autoComplete,\n autoFocus = _this$props2.autoFocus,\n classes = _this$props2.classes,\n classNameProp = _this$props2.className,\n defaultValue = _this$props2.defaultValue,\n disabled = _this$props2.disabled,\n endAdornment = _this$props2.endAdornment,\n error = _this$props2.error,\n fullWidth = _this$props2.fullWidth,\n id = _this$props2.id,\n inputComponent = _this$props2.inputComponent,\n _this$props2$inputPro = _this$props2.inputProps;\n _this$props2$inputPro = _this$props2$inputPro === void 0 ? {} : _this$props2$inputPro;\n var inputPropsClassName = _this$props2$inputPro.className,\n inputPropsProp = (0, _objectWithoutProperties2.default)(_this$props2$inputPro, [\"className\"]),\n inputRef = _this$props2.inputRef,\n margin = _this$props2.margin,\n muiFormControl = _this$props2.muiFormControl,\n multiline = _this$props2.multiline,\n name = _this$props2.name,\n onBlur = _this$props2.onBlur,\n onChange = _this$props2.onChange,\n onClick = _this$props2.onClick,\n onEmpty = _this$props2.onEmpty,\n onFilled = _this$props2.onFilled,\n onFocus = _this$props2.onFocus,\n onKeyDown = _this$props2.onKeyDown,\n onKeyUp = _this$props2.onKeyUp,\n placeholder = _this$props2.placeholder,\n readOnly = _this$props2.readOnly,\n renderPrefix = _this$props2.renderPrefix,\n rows = _this$props2.rows,\n rowsMax = _this$props2.rowsMax,\n startAdornment = _this$props2.startAdornment,\n type = _this$props2.type,\n value = _this$props2.value,\n other = (0, _objectWithoutProperties2.default)(_this$props2, [\"autoComplete\", \"autoFocus\", \"classes\", \"className\", \"defaultValue\", \"disabled\", \"endAdornment\", \"error\", \"fullWidth\", \"id\", \"inputComponent\", \"inputProps\", \"inputRef\", \"margin\", \"muiFormControl\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onClick\", \"onEmpty\", \"onFilled\", \"onFocus\", \"onKeyDown\", \"onKeyUp\", \"placeholder\", \"readOnly\", \"renderPrefix\", \"rows\", \"rowsMax\", \"startAdornment\", \"type\", \"value\"]);\n var ariaDescribedby = other['aria-describedby'];\n delete other['aria-describedby'];\n var fcs = (0, _formControlState.default)({\n props: this.props,\n muiFormControl: muiFormControl,\n states: ['disabled', 'error', 'margin', 'required', 'filled']\n });\n var focused = muiFormControl ? muiFormControl.focused : this.state.focused;\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, fcs.disabled), (0, _defineProperty2.default)(_classNames, classes.error, fcs.error), (0, _defineProperty2.default)(_classNames, classes.fullWidth, fullWidth), (0, _defineProperty2.default)(_classNames, classes.focused, focused), (0, _defineProperty2.default)(_classNames, classes.formControl, muiFormControl), (0, _defineProperty2.default)(_classNames, classes.marginDense, fcs.margin === 'dense'), (0, _defineProperty2.default)(_classNames, classes.multiline, multiline), (0, _defineProperty2.default)(_classNames, classes.adornedStart, startAdornment), (0, _defineProperty2.default)(_classNames, classes.adornedEnd, endAdornment), _classNames), classNameProp);\n var inputClassName = (0, _classnames.default)(classes.input, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.disabled, fcs.disabled), (0, _defineProperty2.default)(_classNames2, classes.inputType, type !== 'text'), (0, _defineProperty2.default)(_classNames2, classes.inputTypeSearch, type === 'search'), (0, _defineProperty2.default)(_classNames2, classes.inputMultiline, multiline), (0, _defineProperty2.default)(_classNames2, classes.inputMarginDense, fcs.margin === 'dense'), (0, _defineProperty2.default)(_classNames2, classes.inputAdornedStart, startAdornment), (0, _defineProperty2.default)(_classNames2, classes.inputAdornedEnd, endAdornment), _classNames2), inputPropsClassName);\n var InputComponent = inputComponent;\n var inputProps = (0, _extends2.default)({}, inputPropsProp, {\n ref: this.handleRefInput\n });\n\n if (typeof InputComponent !== 'string') {\n inputProps = (0, _extends2.default)({\n // Rename ref to inputRef as we don't know the\n // provided `inputComponent` structure.\n inputRef: this.handleRefInput,\n type: type\n }, inputProps, {\n ref: null\n });\n } else if (multiline) {\n if (rows && !rowsMax) {\n InputComponent = 'textarea';\n } else {\n inputProps = (0, _extends2.default)({\n rowsMax: rowsMax,\n textareaRef: this.handleRefInput\n }, inputProps, {\n ref: null\n });\n InputComponent = _Textarea.default;\n }\n } else {\n inputProps = (0, _extends2.default)({\n type: type\n }, inputProps);\n }\n\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: className,\n onClick: this.handleClick\n }, other), renderPrefix ? renderPrefix((0, _extends2.default)({}, fcs, {\n startAdornment: startAdornment,\n focused: focused\n })) : null, startAdornment, _react.default.createElement(_FormControlContext.default.Provider, {\n value: null\n }, _react.default.createElement(InputComponent, (0, _extends2.default)({\n \"aria-invalid\": fcs.error,\n \"aria-describedby\": ariaDescribedby,\n autoComplete: autoComplete,\n autoFocus: autoFocus,\n className: inputClassName,\n defaultValue: defaultValue,\n disabled: fcs.disabled,\n id: id,\n name: name,\n onBlur: this.handleBlur,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: onKeyDown,\n onKeyUp: onKeyUp,\n placeholder: placeholder,\n readOnly: readOnly,\n required: fcs.required,\n rows: rows,\n value: value\n }, inputProps))), endAdornment);\n }\n }]);\n return InputBase;\n}(_react.default.Component);\n\n true ? InputBase.propTypes = {\n /**\n * This property helps users to fill forms faster, especially on mobile devices.\n * The name can be confusing, as it's more like an autofill.\n * You can learn more about it here:\n * https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill\n */\n autoComplete: _propTypes.default.string,\n\n /**\n * If `true`, the input will be focused during the first mount.\n */\n autoFocus: _propTypes.default.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * The CSS class name of the wrapper element.\n */\n className: _propTypes.default.string,\n\n /**\n * The default input value, useful when not controlling the component.\n */\n defaultValue: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))]),\n\n /**\n * If `true`, the input will be disabled.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * End `InputAdornment` for this component.\n */\n endAdornment: _propTypes.default.node,\n\n /**\n * If `true`, the input will indicate an error. This is normally obtained via context from\n * FormControl.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the input will take up the full width of its container.\n */\n fullWidth: _propTypes.default.bool,\n\n /**\n * The id of the `input` element.\n */\n id: _propTypes.default.string,\n\n /**\n * The component used for the native input.\n * Either a string to use a DOM element or a component.\n */\n inputComponent: _utils.componentPropType,\n\n /**\n * Attributes applied to the `input` element.\n */\n inputProps: _propTypes.default.object,\n\n /**\n * Use that property to pass a ref callback to the native input component.\n */\n inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: _propTypes.default.oneOf(['dense', 'none']),\n\n /**\n * @ignore\n */\n muiFormControl: _propTypes.default.object,\n\n /**\n * If `true`, a textarea element will be rendered.\n */\n multiline: _propTypes.default.bool,\n\n /**\n * Name attribute of the `input` element.\n */\n name: _propTypes.default.string,\n\n /**\n * @ignore\n */\n onBlur: _propTypes.default.func,\n\n /**\n * Callback fired when the value is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value`.\n */\n onChange: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onClick: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onEmpty: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onFilled: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onFocus: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onKeyDown: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onKeyUp: _propTypes.default.func,\n\n /**\n * The short hint displayed in the input before the user enters a value.\n */\n placeholder: _propTypes.default.string,\n\n /**\n * It prevents the user from changing the value of the field\n * (not from interacting with the field).\n */\n readOnly: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n renderPrefix: _propTypes.default.func,\n\n /**\n * If `true`, the input will be required.\n */\n required: _propTypes.default.bool,\n\n /**\n * Number of rows to display when multiline option is set to true.\n */\n rows: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Maximum number of rows to display when multiline option is set to true.\n */\n rowsMax: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Start `InputAdornment` for this component.\n */\n startAdornment: _propTypes.default.node,\n\n /**\n * Type of the input element. It should be a valid HTML5 input type.\n */\n type: _propTypes.default.string,\n\n /**\n * The input value, required for a controlled component.\n */\n value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool, _propTypes.default.object]))])\n} : undefined;\nInputBase.defaultProps = {\n fullWidth: false,\n inputComponent: 'input',\n multiline: false,\n type: 'text'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiInputBase'\n})((0, _withFormControlContext.default)(InputBase));\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputBase/InputBase.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputBase/Textarea.js": - /*!**************************************************************!*\ - !*** ./node_modules/@material-ui/core/InputBase/Textarea.js ***! - \**************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _debounce = _interopRequireDefault(__webpack_require__(/*! debounce */ \"./node_modules/debounce/index.js\"));\n\nvar _reactEventListener = _interopRequireDefault(__webpack_require__(/*! react-event-listener */ \"./node_modules/react-event-listener/dist/react-event-listener.cjs.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _reactHelpers = __webpack_require__(/*! ../utils/reactHelpers */ \"./node_modules/@material-ui/core/utils/reactHelpers.js\");\n\n// < 1kb payload overhead when lodash/debounce is > 3kb.\nvar ROWS_HEIGHT = 19;\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n // because the shadow has position: 'absolute',\n width: '100%'\n },\n textarea: {\n width: '100%',\n height: '100%',\n resize: 'none',\n font: 'inherit',\n padding: 0,\n cursor: 'inherit',\n boxSizing: 'border-box',\n lineHeight: 'inherit',\n border: 'none',\n outline: 'none',\n background: 'transparent'\n },\n shadow: {\n // Overflow also needed to here to remove the extra row\n // added to textareas in Firefox.\n overflow: 'hidden',\n // Visibility needed to hide the extra text area on iPads\n visibility: 'hidden',\n position: 'absolute',\n height: 'auto',\n whiteSpace: 'pre-wrap'\n }\n};\n/**\n * @ignore - internal component.\n */\n\nexports.styles = styles;\n\nvar Textarea =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Textarea, _React$Component);\n\n function Textarea(props) {\n var _this;\n\n (0, _classCallCheck2.default)(this, Textarea);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Textarea).call(this));\n\n _this.handleRefInput = function (ref) {\n _this.inputRef = ref;\n (0, _reactHelpers.setRef)(_this.props.textareaRef, ref);\n };\n\n _this.handleRefSinglelineShadow = function (ref) {\n _this.singlelineShadowRef = ref;\n };\n\n _this.handleRefShadow = function (ref) {\n _this.shadowRef = ref;\n };\n\n _this.handleChange = function (event) {\n _this.value = event.target.value;\n\n if (!_this.isControlled) {\n // The component is not controlled, we need to update the shallow value.\n _this.shadowRef.value = _this.value;\n\n _this.syncHeightWithShadow();\n }\n\n if (_this.props.onChange) {\n _this.props.onChange(event);\n }\n };\n\n _this.isControlled = props.value != null; // expects the components it renders to respond to 'value'\n // so that it can check whether they are filled.\n\n _this.value = props.value || props.defaultValue || '';\n _this.state = {\n height: Number(props.rows) * ROWS_HEIGHT\n };\n\n if (typeof window !== 'undefined') {\n _this.handleResize = (0, _debounce.default)(function () {\n _this.syncHeightWithShadow();\n }, 166); // Corresponds to 10 frames at 60 Hz.\n }\n\n return _this;\n }\n\n (0, _createClass2.default)(Textarea, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.syncHeightWithShadow();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.syncHeightWithShadow();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.handleResize.clear();\n }\n }, {\n key: \"syncHeightWithShadow\",\n value: function syncHeightWithShadow() {\n var props = this.props; // Guarding for **broken** shallow rendering method that call componentDidMount\n // but doesn't handle refs correctly.\n // To remove once the shallow rendering has been fixed.\n\n if (!this.shadowRef) {\n return;\n }\n\n if (this.isControlled) {\n // The component is controlled, we need to update the shallow value.\n this.shadowRef.value = props.value == null ? '' : String(props.value);\n }\n\n var lineHeight = this.singlelineShadowRef.scrollHeight; // The Textarea might not be visible (p.ex: display: none).\n // In this case, the layout values read from the DOM will be 0.\n\n lineHeight = lineHeight === 0 ? ROWS_HEIGHT : lineHeight;\n var newHeight = this.shadowRef.scrollHeight; // Guarding for jsdom, where scrollHeight isn't present.\n // See https://github.com/tmpvar/jsdom/issues/1013\n\n if (newHeight === undefined) {\n return;\n }\n\n if (Number(props.rowsMax) >= Number(props.rows)) {\n newHeight = Math.min(Number(props.rowsMax) * lineHeight, newHeight);\n }\n\n newHeight = Math.max(newHeight, lineHeight); // Need a large enough different to update the height.\n // This prevents infinite rendering loop.\n\n if (Math.abs(this.state.height - newHeight) > 1) {\n this.setState({\n height: newHeight\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n classes = _this$props.classes,\n className = _this$props.className,\n defaultValue = _this$props.defaultValue,\n onChange = _this$props.onChange,\n rows = _this$props.rows,\n rowsMax = _this$props.rowsMax,\n style = _this$props.style,\n textareaRef = _this$props.textareaRef,\n value = _this$props.value,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"defaultValue\", \"onChange\", \"rows\", \"rowsMax\", \"style\", \"textareaRef\", \"value\"]);\n return _react.default.createElement(\"div\", {\n className: classes.root\n }, _react.default.createElement(_reactEventListener.default, {\n target: \"window\",\n onResize: this.handleResize\n }), _react.default.createElement(\"textarea\", {\n \"aria-hidden\": \"true\",\n className: (0, _classnames.default)(classes.textarea, classes.shadow),\n readOnly: true,\n ref: this.handleRefSinglelineShadow,\n rows: \"1\",\n tabIndex: -1,\n value: \"\"\n }), _react.default.createElement(\"textarea\", {\n \"aria-hidden\": \"true\",\n className: (0, _classnames.default)(classes.textarea, classes.shadow),\n defaultValue: defaultValue,\n readOnly: true,\n ref: this.handleRefShadow,\n rows: rows,\n tabIndex: -1,\n value: value\n }), _react.default.createElement(\"textarea\", (0, _extends2.default)({\n rows: rows,\n className: (0, _classnames.default)(classes.textarea, className),\n defaultValue: defaultValue,\n value: value,\n onChange: this.handleChange,\n ref: this.handleRefInput,\n style: (0, _extends2.default)({\n height: this.state.height\n }, style)\n }, other)));\n }\n }]);\n return Textarea;\n}(_react.default.Component);\n\n true ? Textarea.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * @ignore\n */\n defaultValue: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * @ignore\n */\n disabled: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n onChange: _propTypes.default.func,\n\n /**\n * Number of rows to display when multiline option is set to true.\n */\n rows: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * Maximum number of rows to display when multiline option is set to true.\n */\n rowsMax: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n\n /**\n * @ignore\n */\n style: _propTypes.default.object,\n\n /**\n * Use that property to pass a ref callback to the native textarea element.\n */\n textareaRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\n * @ignore\n */\n value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])\n} : undefined;\nTextarea.defaultProps = {\n rows: 1\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiPrivateTextarea'\n})(Textarea);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputBase/Textarea.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputBase/index.js": - /*!***********************************************************!*\ - !*** ./node_modules/@material-ui/core/InputBase/index.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _InputBase.default;\n }\n});\n\nvar _InputBase = _interopRequireDefault(__webpack_require__(/*! ./InputBase */ \"./node_modules/@material-ui/core/InputBase/InputBase.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputBase/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputBase/utils.js": - /*!***********************************************************!*\ - !*** ./node_modules/@material-ui/core/InputBase/utils.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hasValue = hasValue;\nexports.isFilled = isFilled;\nexports.isAdornedStart = isAdornedStart;\n\n// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nfunction hasValue(value) {\n return value != null && !(Array.isArray(value) && value.length === 0);\n} // Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n// True when any number or string with length.\n\n\nfunction isFilled(obj) {\n var SSR = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n} // Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n// True when adorned at the start.\n\n\nfunction isAdornedStart(obj) {\n return obj.startAdornment;\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputBase/utils.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputLabel/InputLabel.js": - /*!*****************************************************************!*\ - !*** ./node_modules/@material-ui/core/InputLabel/InputLabel.js ***! - \*****************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _formControlState = _interopRequireDefault(__webpack_require__(/*! ../FormControl/formControlState */ \"./node_modules/@material-ui/core/FormControl/formControlState.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _FormLabel = _interopRequireDefault(__webpack_require__(/*! ../FormLabel */ \"./node_modules/@material-ui/core/FormLabel/index.js\"));\n\n// @inheritedComponent FormLabel\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n transformOrigin: 'top left'\n },\n\n /* Styles applied to the root element if `focused={true}`. */\n focused: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the root element if `error={true}`. */\n error: {},\n\n /* Styles applied to the root element if `required={true}`. */\n required: {},\n\n /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n formControl: {\n position: 'absolute',\n left: 0,\n top: 0,\n // slight alteration to spec spacing to match visual spec result\n transform: 'translate(0, 24px) scale(1)'\n },\n\n /* Styles applied to the root element if `margin=\"dense\"`. */\n marginDense: {\n // Compensation for the `Input.inputDense` style.\n transform: 'translate(0, 21px) scale(1)'\n },\n\n /* Styles applied to the `input` element if `shrink={true}`. */\n shrink: {\n transform: 'translate(0, 1.5px) scale(0.75)',\n transformOrigin: 'top left'\n },\n\n /* Styles applied to the `input` element if `disableAnimation={false}`. */\n animated: {\n transition: theme.transitions.create(['color', 'transform'], {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut\n })\n },\n\n /* Styles applied to the root element if `variant=\"filled\"`. */\n filled: {\n // Chrome's autofill feature gives the input field a yellow background.\n // Since the input field is behind the label in the HTML tree,\n // the input field is drawn last and hides the label with an opaque background color.\n // zIndex: 1 will raise the label above opaque background-colors of input.\n zIndex: 1,\n pointerEvents: 'none',\n transform: 'translate(12px, 20px) scale(1)',\n '&$marginDense': {\n transform: 'translate(12px, 17px) scale(1)'\n },\n '&$shrink': {\n transform: 'translate(12px, 10px) scale(0.75)',\n '&$marginDense': {\n transform: 'translate(12px, 7px) scale(0.75)'\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"`. */\n outlined: {\n // see comment above on filled.zIndex\n zIndex: 1,\n pointerEvents: 'none',\n transform: 'translate(14px, 20px) scale(1)',\n '&$marginDense': {\n transform: 'translate(14px, 17px) scale(1)'\n },\n '&$shrink': {\n transform: 'translate(14px, -6px) scale(0.75)'\n }\n }\n };\n};\n\nexports.styles = styles;\n\nfunction InputLabel(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n disableAnimation = props.disableAnimation,\n FormLabelClasses = props.FormLabelClasses,\n margin = props.margin,\n muiFormControl = props.muiFormControl,\n shrinkProp = props.shrink,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableAnimation\", \"FormLabelClasses\", \"margin\", \"muiFormControl\", \"shrink\", \"variant\"]);\n var shrink = shrinkProp;\n\n if (typeof shrink === 'undefined' && muiFormControl) {\n shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n }\n\n var fcs = (0, _formControlState.default)({\n props: props,\n muiFormControl: muiFormControl,\n states: ['margin', 'variant']\n });\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.formControl, muiFormControl), (0, _defineProperty2.default)(_classNames, classes.animated, !disableAnimation), (0, _defineProperty2.default)(_classNames, classes.shrink, shrink), (0, _defineProperty2.default)(_classNames, classes.marginDense, fcs.margin === 'dense'), (0, _defineProperty2.default)(_classNames, classes.filled, fcs.variant === 'filled'), (0, _defineProperty2.default)(_classNames, classes.outlined, fcs.variant === 'outlined'), _classNames), classNameProp);\n return _react.default.createElement(_FormLabel.default, (0, _extends2.default)({\n \"data-shrink\": shrink,\n className: className,\n classes: (0, _extends2.default)({\n focused: classes.focused,\n disabled: classes.disabled,\n error: classes.error,\n required: classes.required\n }, FormLabelClasses)\n }, other), children);\n}\n\n true ? InputLabel.propTypes = {\n /**\n * The contents of the `InputLabel`.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the transition animation is disabled.\n */\n disableAnimation: _propTypes.default.bool,\n\n /**\n * If `true`, apply disabled class.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, the label will be displayed in an error state.\n */\n error: _propTypes.default.bool,\n\n /**\n * If `true`, the input of this label is focused.\n */\n focused: _propTypes.default.bool,\n\n /**\n * `classes` property applied to the [`FormLabel`](/api/form-label/) element.\n */\n FormLabelClasses: _propTypes.default.object,\n\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: _propTypes.default.oneOf(['dense']),\n\n /**\n * @ignore\n */\n muiFormControl: _propTypes.default.object,\n\n /**\n * if `true`, the label will indicate that the input is required.\n */\n required: _propTypes.default.bool,\n\n /**\n * If `true`, the label is shrunk.\n */\n shrink: _propTypes.default.bool,\n\n /**\n * The variant to use.\n */\n variant: _propTypes.default.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\nInputLabel.defaultProps = {\n disableAnimation: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiInputLabel'\n})((0, _withFormControlContext.default)(InputLabel));\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputLabel/InputLabel.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/InputLabel/index.js": - /*!************************************************************!*\ - !*** ./node_modules/@material-ui/core/InputLabel/index.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _InputLabel.default;\n }\n});\n\nvar _InputLabel = _interopRequireDefault(__webpack_require__(/*! ./InputLabel */ \"./node_modules/@material-ui/core/InputLabel/InputLabel.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/InputLabel/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/List/List.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/List/List.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _ListContext = _interopRequireDefault(__webpack_require__(/*! ./ListContext */ \"./node_modules/@material-ui/core/List/ListContext.js\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative'\n },\n\n /* Styles applied to the root element if `disablePadding={false}`. */\n padding: {\n paddingTop: 8,\n paddingBottom: 8\n },\n\n /* Styles applied to the root element if `dense={true}` & `disablePadding={false}`. */\n dense: {\n paddingTop: 4,\n paddingBottom: 4\n },\n\n /* Styles applied to the root element if a `subheader` is provided. */\n subheader: {\n paddingTop: 0\n }\n};\nexports.styles = styles;\n\nfunction List(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n Component = props.component,\n dense = props.dense,\n disablePadding = props.disablePadding,\n subheader = props.subheader,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.dense, dense && !disablePadding), (0, _defineProperty2.default)(_classNames, classes.padding, !disablePadding), (0, _defineProperty2.default)(_classNames, classes.subheader, subheader), _classNames), className)\n }, other), _react.default.createElement(_ListContext.default.Provider, {\n value: {\n dense: dense\n }\n }, subheader, children));\n}\n\n true ? List.propTypes = {\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a DOM element or a component.\n */\n component: _utils.componentPropType,\n\n /**\n * If `true`, compact vertical padding designed for keyboard and mouse input will be used for\n * the list and list items. The property is available to descendant components as the\n * `dense` context.\n */\n dense: _propTypes.default.bool,\n\n /**\n * If `true`, vertical padding will be removed from the list.\n */\n disablePadding: _propTypes.default.bool,\n\n /**\n * The content of the subheader, normally `ListSubheader`.\n */\n subheader: _propTypes.default.node\n} : undefined;\nList.defaultProps = {\n component: 'ul',\n dense: false,\n disablePadding: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiList'\n})(List);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/List/List.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/List/ListContext.js": - /*!************************************************************!*\ - !*** ./node_modules/@material-ui/core/List/ListContext.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\n/**\n * @ignore - internal component.\n */\nvar ListContext = _react.default.createContext({});\n\nvar _default = ListContext;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/List/ListContext.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/List/index.js": - /*!******************************************************!*\ - !*** ./node_modules/@material-ui/core/List/index.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _List.default;\n }\n});\n\nvar _List = _interopRequireDefault(__webpack_require__(/*! ./List */ \"./node_modules/@material-ui/core/List/List.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/List/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Menu/Menu.js": - /*!*****************************************************!*\ - !*** ./node_modules/@material-ui/core/Menu/Menu.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\n\nvar _scrollbarSize = _interopRequireDefault(__webpack_require__(/*! dom-helpers/util/scrollbarSize */ \"./node_modules/dom-helpers/util/scrollbarSize.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _Popover = _interopRequireDefault(__webpack_require__(/*! ../Popover */ \"./node_modules/@material-ui/core/Popover/index.js\"));\n\nvar _MenuList = _interopRequireDefault(__webpack_require__(/*! ../MenuList */ \"./node_modules/@material-ui/core/MenuList/index.js\"));\n\n// @inheritedComponent Popover\nvar RTL_ORIGIN = {\n vertical: 'top',\n horizontal: 'right'\n};\nvar LTR_ORIGIN = {\n vertical: 'top',\n horizontal: 'left'\n};\nvar styles = {\n /* Styles applied to the `Paper` component. */\n paper: {\n // specZ: The maximum height of a simple menu should be one or more rows less than the view\n // height. This ensures a tapable area outside of the simple menu with which to dismiss\n // the menu.\n maxHeight: 'calc(100% - 96px)',\n // Add iOS momentum scrolling.\n WebkitOverflowScrolling: 'touch'\n }\n};\nexports.styles = styles;\n\nvar Menu =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Menu, _React$Component);\n\n function Menu() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Menu);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Menu)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _this.getContentAnchorEl = function () {\n if (_this.menuListRef.selectedItemRef) {\n return _reactDom.default.findDOMNode(_this.menuListRef.selectedItemRef);\n }\n\n return _reactDom.default.findDOMNode(_this.menuListRef).firstChild;\n };\n\n _this.focus = function () {\n if (_this.menuListRef && _this.menuListRef.selectedItemRef) {\n _reactDom.default.findDOMNode(_this.menuListRef.selectedItemRef).focus();\n\n return;\n }\n\n var menuList = _reactDom.default.findDOMNode(_this.menuListRef);\n\n if (menuList && menuList.firstChild) {\n menuList.firstChild.focus();\n }\n };\n\n _this.handleMenuListRef = function (ref) {\n _this.menuListRef = ref;\n };\n\n _this.handleEntering = function (element) {\n var _this$props = _this.props,\n disableAutoFocusItem = _this$props.disableAutoFocusItem,\n theme = _this$props.theme;\n\n var menuList = _reactDom.default.findDOMNode(_this.menuListRef); // Focus so the scroll computation of the Popover works as expected.\n\n\n if (disableAutoFocusItem !== true) {\n _this.focus();\n } // Let's ignore that piece of logic if users are already overriding the width\n // of the menu.\n\n\n if (menuList && element.clientHeight < menuList.clientHeight && !menuList.style.width) {\n var size = \"\".concat((0, _scrollbarSize.default)(), \"px\");\n menuList.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = size;\n menuList.style.width = \"calc(100% + \".concat(size, \")\");\n }\n\n if (_this.props.onEntering) {\n _this.props.onEntering(element);\n }\n };\n\n _this.handleListKeyDown = function (event) {\n if (event.key === 'Tab') {\n event.preventDefault();\n\n if (_this.props.onClose) {\n _this.props.onClose(event, 'tabKeyDown');\n }\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Menu, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.open && this.props.disableAutoFocusItem !== true) {\n this.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n classes = _this$props2.classes,\n disableAutoFocusItem = _this$props2.disableAutoFocusItem,\n MenuListProps = _this$props2.MenuListProps,\n onEntering = _this$props2.onEntering,\n _this$props2$PaperPro = _this$props2.PaperProps,\n PaperProps = _this$props2$PaperPro === void 0 ? {} : _this$props2$PaperPro,\n PopoverClasses = _this$props2.PopoverClasses,\n theme = _this$props2.theme,\n other = (0, _objectWithoutProperties2.default)(_this$props2, [\"children\", \"classes\", \"disableAutoFocusItem\", \"MenuListProps\", \"onEntering\", \"PaperProps\", \"PopoverClasses\", \"theme\"]);\n return _react.default.createElement(_Popover.default, (0, _extends2.default)({\n getContentAnchorEl: this.getContentAnchorEl,\n classes: PopoverClasses,\n onEntering: this.handleEntering,\n anchorOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n transformOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n PaperProps: (0, _extends2.default)({}, PaperProps, {\n classes: (0, _extends2.default)({}, PaperProps.classes, {\n root: classes.paper\n })\n })\n }, other), _react.default.createElement(_MenuList.default, (0, _extends2.default)({\n onKeyDown: this.handleListKeyDown\n }, MenuListProps, {\n ref: this.handleMenuListRef\n }), children));\n }\n }]);\n return Menu;\n}(_react.default.Component);\n\n true ? Menu.propTypes = {\n /**\n * The DOM element used to set the position of the menu.\n */\n anchorEl: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]),\n\n /**\n * Menu contents, normally `MenuItem`s.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * If `true`, the selected / first menu item will not be auto focused.\n */\n disableAutoFocusItem: _propTypes.default.bool,\n\n /**\n * Properties applied to the [`MenuList`](/api/menu-list/) element.\n */\n MenuListProps: _propTypes.default.object,\n\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {object} event The event source of the callback\n * @param {string} reason Can be:`\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`\n */\n onClose: _propTypes.default.func,\n\n /**\n * Callback fired before the Menu enters.\n */\n onEnter: _propTypes.default.func,\n\n /**\n * Callback fired when the Menu has entered.\n */\n onEntered: _propTypes.default.func,\n\n /**\n * Callback fired when the Menu is entering.\n */\n onEntering: _propTypes.default.func,\n\n /**\n * Callback fired before the Menu exits.\n */\n onExit: _propTypes.default.func,\n\n /**\n * Callback fired when the Menu has exited.\n */\n onExited: _propTypes.default.func,\n\n /**\n * Callback fired when the Menu is exiting.\n */\n onExiting: _propTypes.default.func,\n\n /**\n * If `true`, the menu is visible.\n */\n open: _propTypes.default.bool.isRequired,\n\n /**\n * @ignore\n */\n PaperProps: _propTypes.default.object,\n\n /**\n * `classes` property applied to the [`Popover`](/api/popover/) element.\n */\n PopoverClasses: _propTypes.default.object,\n\n /**\n * @ignore\n */\n theme: _propTypes.default.object.isRequired,\n\n /**\n * The length of the transition in `ms`, or 'auto'\n */\n transitionDuration: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n }), _propTypes.default.oneOf(['auto'])])\n} : undefined;\nMenu.defaultProps = {\n disableAutoFocusItem: false,\n transitionDuration: 'auto'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiMenu',\n withTheme: true\n})(Menu);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Menu/Menu.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/MenuList/MenuList.js": - /*!*************************************************************!*\ - !*** ./node_modules/@material-ui/core/MenuList/MenuList.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\n\nvar _warning = _interopRequireDefault(__webpack_require__(/*! warning */ \"./node_modules/warning/warning.js\"));\n\nvar _ownerDocument = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@material-ui/core/utils/ownerDocument.js\"));\n\nvar _List = _interopRequireDefault(__webpack_require__(/*! ../List */ \"./node_modules/@material-ui/core/List/index.js\"));\n\n// @inheritedComponent List\nvar MenuList =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(MenuList, _React$Component);\n\n function MenuList() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, MenuList);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(MenuList)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n currentTabIndex: null\n };\n\n _this.handleBlur = function (event) {\n _this.blurTimer = setTimeout(function () {\n if (_this.listRef) {\n var list = _this.listRef;\n var currentFocus = (0, _ownerDocument.default)(list).activeElement;\n\n if (!list.contains(currentFocus)) {\n _this.resetTabIndex();\n }\n }\n }, 30);\n\n if (_this.props.onBlur) {\n _this.props.onBlur(event);\n }\n };\n\n _this.handleKeyDown = function (event) {\n var list = _this.listRef;\n var key = event.key;\n var currentFocus = (0, _ownerDocument.default)(list).activeElement;\n\n if ((key === 'ArrowUp' || key === 'ArrowDown') && (!currentFocus || currentFocus && !list.contains(currentFocus))) {\n if (_this.selectedItemRef) {\n _this.selectedItemRef.focus();\n } else {\n list.firstChild.focus();\n }\n } else if (key === 'ArrowDown') {\n event.preventDefault();\n\n if (currentFocus.nextElementSibling) {\n currentFocus.nextElementSibling.focus();\n } else if (!_this.props.disableListWrap) {\n list.firstChild.focus();\n }\n } else if (key === 'ArrowUp') {\n event.preventDefault();\n\n if (currentFocus.previousElementSibling) {\n currentFocus.previousElementSibling.focus();\n } else if (!_this.props.disableListWrap) {\n list.lastChild.focus();\n }\n } else if (key === 'Home') {\n event.preventDefault();\n list.firstChild.focus();\n } else if (key === 'End') {\n event.preventDefault();\n list.lastChild.focus();\n }\n\n if (_this.props.onKeyDown) {\n _this.props.onKeyDown(event);\n }\n };\n\n _this.handleItemFocus = function (event) {\n var list = _this.listRef;\n\n if (list) {\n for (var i = 0; i < list.children.length; i += 1) {\n if (list.children[i] === event.currentTarget) {\n _this.setTabIndex(i);\n\n break;\n }\n }\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(MenuList, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.resetTabIndex();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.blurTimer);\n }\n }, {\n key: \"setTabIndex\",\n value: function setTabIndex(index) {\n this.setState({\n currentTabIndex: index\n });\n }\n }, {\n key: \"focus\",\n value: function focus() {\n var currentTabIndex = this.state.currentTabIndex;\n var list = this.listRef;\n\n if (!list || !list.children || !list.firstChild) {\n return;\n }\n\n if (currentTabIndex && currentTabIndex >= 0) {\n list.children[currentTabIndex].focus();\n } else {\n list.firstChild.focus();\n }\n }\n }, {\n key: \"resetTabIndex\",\n value: function resetTabIndex() {\n var list = this.listRef;\n var currentFocus = (0, _ownerDocument.default)(list).activeElement;\n var items = [];\n\n for (var i = 0; i < list.children.length; i += 1) {\n items.push(list.children[i]);\n }\n\n var currentFocusIndex = items.indexOf(currentFocus);\n\n if (currentFocusIndex !== -1) {\n return this.setTabIndex(currentFocusIndex);\n }\n\n if (this.selectedItemRef) {\n return this.setTabIndex(items.indexOf(this.selectedItemRef));\n }\n\n return this.setTabIndex(0);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n children = _this$props.children,\n className = _this$props.className,\n onBlur = _this$props.onBlur,\n onKeyDown = _this$props.onKeyDown,\n disableListWrap = _this$props.disableListWrap,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"children\", \"className\", \"onBlur\", \"onKeyDown\", \"disableListWrap\"]);\n return _react.default.createElement(_List.default, (0, _extends2.default)({\n role: \"menu\",\n ref: function ref(_ref) {\n _this2.listRef = _reactDom.default.findDOMNode(_ref);\n },\n className: className,\n onKeyDown: this.handleKeyDown,\n onBlur: this.handleBlur\n }, other), _react.default.Children.map(children, function (child, index) {\n if (!_react.default.isValidElement(child)) {\n return null;\n }\n\n true ? (0, _warning.default)(child.type !== _react.default.Fragment, [\"Material-UI: the MenuList component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n')) : undefined;\n return _react.default.cloneElement(child, {\n tabIndex: index === _this2.state.currentTabIndex ? 0 : -1,\n ref: child.props.selected ? function (ref) {\n _this2.selectedItemRef = _reactDom.default.findDOMNode(ref);\n } : undefined,\n onFocus: _this2.handleItemFocus\n });\n }));\n }\n }]);\n return MenuList;\n}(_react.default.Component);\n\n true ? MenuList.propTypes = {\n /**\n * MenuList contents, normally `MenuItem`s.\n */\n children: _propTypes.default.node,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the menu items will not wrap focus.\n */\n disableListWrap: _propTypes.default.bool,\n\n /**\n * @ignore\n */\n onBlur: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onKeyDown: _propTypes.default.func\n} : undefined;\nMenuList.defaultProps = {\n disableListWrap: false\n};\nvar _default = MenuList;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/MenuList/MenuList.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/MenuList/index.js": - /*!**********************************************************!*\ - !*** ./node_modules/@material-ui/core/MenuList/index.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _MenuList.default;\n }\n});\n\nvar _MenuList = _interopRequireDefault(__webpack_require__(/*! ./MenuList */ \"./node_modules/@material-ui/core/MenuList/MenuList.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/MenuList/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Modal/Modal.js": - /*!*******************************************************!*\ - !*** ./node_modules/@material-ui/core/Modal/Modal.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\"));\n\nvar _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\"));\n\nvar _warning = _interopRequireDefault(__webpack_require__(/*! warning */ \"./node_modules/warning/warning.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _ownerDocument = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@material-ui/core/utils/ownerDocument.js\"));\n\nvar _RootRef = _interopRequireDefault(__webpack_require__(/*! ../RootRef */ \"./node_modules/@material-ui/core/RootRef/index.js\"));\n\nvar _Portal = _interopRequireDefault(__webpack_require__(/*! ../Portal */ \"./node_modules/@material-ui/core/Portal/index.js\"));\n\nvar _helpers = __webpack_require__(/*! ../utils/helpers */ \"./node_modules/@material-ui/core/utils/helpers.js\");\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _ModalManager = _interopRequireDefault(__webpack_require__(/*! ./ModalManager */ \"./node_modules/@material-ui/core/Modal/ModalManager.js\"));\n\nvar _Backdrop = _interopRequireDefault(__webpack_require__(/*! ../Backdrop */ \"./node_modules/@material-ui/core/Backdrop/index.js\"));\n\nvar _manageAriaHidden = __webpack_require__(/*! ./manageAriaHidden */ \"./node_modules/@material-ui/core/Modal/manageAriaHidden.js\");\n\nfunction getContainer(container, defaultContainer) {\n container = typeof container === 'function' ? container() : container;\n return _reactDom.default.findDOMNode(container) || defaultContainer;\n}\n\nfunction getHasTransition(props) {\n return props.children ? props.children.props.hasOwnProperty('in') : false;\n}\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'fixed',\n zIndex: theme.zIndex.modal,\n right: 0,\n bottom: 0,\n top: 0,\n left: 0\n },\n\n /* Styles applied to the root element if the `Modal` has exited. */\n hidden: {\n visibility: 'hidden'\n }\n };\n};\n/* istanbul ignore if */\n\n\nexports.styles = styles;\n\nif ( true && !_react.default.createContext) {\n throw new Error('Material-UI: react@16.3.0 or greater is required.');\n}\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\n\nvar Modal =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Modal, _React$Component);\n\n function Modal(props) {\n var _this;\n\n (0, _classCallCheck2.default)(this, Modal);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Modal).call(this));\n _this.mounted = false;\n\n _this.handleOpen = function () {\n var doc = (0, _ownerDocument.default)(_this.mountNode);\n var container = getContainer(_this.props.container, doc.body);\n\n _this.props.manager.add((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), container);\n\n doc.addEventListener('focus', _this.enforceFocus, true);\n\n if (_this.dialogRef) {\n _this.handleOpened();\n }\n };\n\n _this.handleRendered = function () {\n if (_this.props.onRendered) {\n _this.props.onRendered();\n }\n\n if (_this.props.open) {\n _this.handleOpened();\n } else {\n (0, _manageAriaHidden.ariaHidden)(_this.modalRef, true);\n }\n };\n\n _this.handleOpened = function () {\n _this.autoFocus();\n\n _this.props.manager.mount((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n\n _this.modalRef.scrollTop = 0;\n };\n\n _this.handleClose = function (reason) {\n var hasTransition = getHasTransition(_this.props);\n /* If the component does not have a transition or is unmounting remove the Modal\n otherwise let the transition handle removing the style, this prevents elements\n moving around when the Modal is closed. */\n\n if (!(hasTransition && _this.props.closeAfterTransition) || reason === 'unmount') {\n _this.props.manager.remove((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));\n }\n\n var doc = (0, _ownerDocument.default)(_this.mountNode);\n doc.removeEventListener('focus', _this.enforceFocus, true);\n\n _this.restoreLastFocus();\n };\n\n _this.handleExited = function () {\n if (_this.props.closeAfterTransition) {\n _this.props.manager.remove((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));\n }\n\n _this.setState({\n exited: true\n });\n };\n\n _this.handleBackdropClick = function (event) {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this.props.onBackdropClick) {\n _this.props.onBackdropClick(event);\n }\n\n if (!_this.props.disableBackdropClick && _this.props.onClose) {\n _this.props.onClose(event, 'backdropClick');\n }\n };\n\n _this.handleKeyDown = function (event) {\n // event.defaultPrevented:\n //\n // Ignore events that have been `event.preventDefault()` marked.\n // preventDefault() is meant to stop default behaviours like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default bahaviours.\n //\n // To remove in v4.\n if (event.key !== 'Escape' || !_this.isTopModal() || event.defaultPrevented) {\n return;\n } // Swallow the event, in case someone is listening for the escape key on the body.\n\n\n event.stopPropagation();\n\n if (_this.props.onEscapeKeyDown) {\n _this.props.onEscapeKeyDown(event);\n }\n\n if (!_this.props.disableEscapeKeyDown && _this.props.onClose) {\n _this.props.onClose(event, 'escapeKeyDown');\n }\n };\n\n _this.enforceFocus = function () {\n // The Modal might not already be mounted.\n if (!_this.isTopModal() || _this.props.disableEnforceFocus || !_this.mounted || !_this.dialogRef) {\n return;\n }\n\n var currentActiveElement = (0, _ownerDocument.default)(_this.mountNode).activeElement;\n\n if (!_this.dialogRef.contains(currentActiveElement)) {\n _this.dialogRef.focus();\n }\n };\n\n _this.handlePortalRef = function (ref) {\n _this.mountNode = ref ? ref.getMountNode() : ref;\n };\n\n _this.handleModalRef = function (ref) {\n _this.modalRef = ref;\n };\n\n _this.onRootRef = function (ref) {\n _this.dialogRef = ref;\n };\n\n _this.state = {\n exited: !props.open\n };\n return _this;\n }\n\n (0, _createClass2.default)(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.mounted = true;\n\n if (this.props.open) {\n this.handleOpen();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (prevProps.open && !this.props.open) {\n this.handleClose();\n } else if (!prevProps.open && this.props.open) {\n this.lastFocus = (0, _ownerDocument.default)(this.mountNode).activeElement;\n this.handleOpen();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n\n if (this.props.open || getHasTransition(this.props) && !this.state.exited) {\n this.handleClose('unmount');\n }\n }\n }, {\n key: \"autoFocus\",\n value: function autoFocus() {\n // We might render an empty child.\n if (this.props.disableAutoFocus || !this.dialogRef) {\n return;\n }\n\n var currentActiveElement = (0, _ownerDocument.default)(this.mountNode).activeElement;\n\n if (!this.dialogRef.contains(currentActiveElement)) {\n if (!this.dialogRef.hasAttribute('tabIndex')) {\n true ? (0, _warning.default)(false, ['Material-UI: the modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n')) : undefined;\n this.dialogRef.setAttribute('tabIndex', -1);\n }\n\n this.lastFocus = currentActiveElement;\n this.dialogRef.focus();\n }\n }\n }, {\n key: \"restoreLastFocus\",\n value: function restoreLastFocus() {\n if (this.props.disableRestoreFocus || !this.lastFocus) {\n return;\n } // Not all elements in IE 11 have a focus method.\n // Because IE 11 market share is low, we accept the restore focus being broken\n // and we silent the issue.\n\n\n if (this.lastFocus.focus) {\n this.lastFocus.focus();\n }\n\n this.lastFocus = null;\n }\n }, {\n key: \"isTopModal\",\n value: function isTopModal() {\n return this.props.manager.isTopModal(this);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n BackdropComponent = _this$props.BackdropComponent,\n BackdropProps = _this$props.BackdropProps,\n children = _this$props.children,\n classes = _this$props.classes,\n className = _this$props.className,\n closeAfterTransition = _this$props.closeAfterTransition,\n container = _this$props.container,\n disableAutoFocus = _this$props.disableAutoFocus,\n disableBackdropClick = _this$props.disableBackdropClick,\n disableEnforceFocus = _this$props.disableEnforceFocus,\n disableEscapeKeyDown = _this$props.disableEscapeKeyDown,\n disablePortal = _this$props.disablePortal,\n disableRestoreFocus = _this$props.disableRestoreFocus,\n hideBackdrop = _this$props.hideBackdrop,\n keepMounted = _this$props.keepMounted,\n manager = _this$props.manager,\n onBackdropClick = _this$props.onBackdropClick,\n onClose = _this$props.onClose,\n onEscapeKeyDown = _this$props.onEscapeKeyDown,\n onRendered = _this$props.onRendered,\n open = _this$props.open,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"BackdropComponent\", \"BackdropProps\", \"children\", \"classes\", \"className\", \"closeAfterTransition\", \"container\", \"disableAutoFocus\", \"disableBackdropClick\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onEscapeKeyDown\", \"onRendered\", \"open\"]);\n var exited = this.state.exited;\n var hasTransition = getHasTransition(this.props);\n\n if (!keepMounted && !open && (!hasTransition || exited)) {\n return null;\n }\n\n var childProps = {}; // It's a Transition like component\n\n if (hasTransition) {\n childProps.onExited = (0, _helpers.createChainedFunction)(this.handleExited, children.props.onExited);\n }\n\n if (children.props.role === undefined) {\n childProps.role = children.props.role || 'document';\n }\n\n if (children.props.tabIndex === undefined) {\n childProps.tabIndex = children.props.tabIndex || '-1';\n }\n\n return _react.default.createElement(_Portal.default, {\n ref: this.handlePortalRef,\n container: container,\n disablePortal: disablePortal,\n onRendered: this.handleRendered\n }, _react.default.createElement(\"div\", (0, _extends2.default)({\n ref: this.handleModalRef,\n onKeyDown: this.handleKeyDown,\n role: \"presentation\",\n className: (0, _classnames.default)(classes.root, className, (0, _defineProperty2.default)({}, classes.hidden, exited))\n }, other), hideBackdrop ? null : _react.default.createElement(BackdropComponent, (0, _extends2.default)({\n open: open,\n onClick: this.handleBackdropClick\n }, BackdropProps)), _react.default.createElement(_RootRef.default, {\n rootRef: this.onRootRef\n }, _react.default.cloneElement(children, childProps))));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps) {\n if (nextProps.open) {\n return {\n exited: false\n };\n }\n\n if (!getHasTransition(nextProps)) {\n // Otherwise let handleExited take care of marking exited.\n return {\n exited: true\n };\n }\n\n return null;\n }\n }]);\n return Modal;\n}(_react.default.Component);\n\n true ? Modal.propTypes = {\n /**\n * A backdrop component. This property enables custom backdrop rendering.\n */\n BackdropComponent: _utils.componentPropType,\n\n /**\n * Properties applied to the [`Backdrop`](/api/backdrop/) element.\n */\n BackdropProps: _propTypes.default.object,\n\n /**\n * A single child content element.\n */\n children: _propTypes.default.element,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css-api) below for more details.\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * When set to true the Modal waits until a nested Transition is completed before closing.\n */\n closeAfterTransition: _propTypes.default.bool,\n\n /**\n * A node, component instance, or function that returns either.\n * The `container` will have the portal children appended to it.\n */\n container: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]),\n\n /**\n * If `true`, the modal will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n */\n disableAutoFocus: _propTypes.default.bool,\n\n /**\n * If `true`, clicking the backdrop will not fire any callback.\n */\n disableBackdropClick: _propTypes.default.bool,\n\n /**\n * If `true`, the modal will not prevent focus from leaving the modal while open.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n */\n disableEnforceFocus: _propTypes.default.bool,\n\n /**\n * If `true`, hitting escape will not fire any callback.\n */\n disableEscapeKeyDown: _propTypes.default.bool,\n\n /**\n * Disable the portal behavior.\n * The children stay within it's parent DOM hierarchy.\n */\n disablePortal: _propTypes.default.bool,\n\n /**\n * If `true`, the modal will not restore focus to previously focused element once\n * modal is hidden.\n */\n disableRestoreFocus: _propTypes.default.bool,\n\n /**\n * If `true`, the backdrop is not rendered.\n */\n hideBackdrop: _propTypes.default.bool,\n\n /**\n * Always keep the children in the DOM.\n * This property can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Modal.\n */\n keepMounted: _propTypes.default.bool,\n\n /**\n * @ignore\n *\n * A modal manager used to track and manage the state of open\n * Modals. This enables customizing how modals interact within a container.\n */\n manager: _propTypes.default.object,\n\n /**\n * Callback fired when the backdrop is clicked.\n */\n onBackdropClick: _propTypes.default.func,\n\n /**\n * Callback fired when the component requests to be closed.\n * The `reason` parameter can optionally be used to control the response to `onClose`.\n *\n * @param {object} event The event source of the callback\n * @param {string} reason Can be:`\"escapeKeyDown\"`, `\"backdropClick\"`\n */\n onClose: _propTypes.default.func,\n\n /**\n * Callback fired when the escape key is pressed,\n * `disableEscapeKeyDown` is false and the modal is in focus.\n */\n onEscapeKeyDown: _propTypes.default.func,\n\n /**\n * Callback fired once the children has been mounted into the `container`.\n * It signals that the `open={true}` property took effect.\n */\n onRendered: _propTypes.default.func,\n\n /**\n * If `true`, the modal is open.\n */\n open: _propTypes.default.bool.isRequired\n} : undefined;\nModal.defaultProps = {\n BackdropComponent: _Backdrop.default,\n closeAfterTransition: false,\n disableAutoFocus: false,\n disableBackdropClick: false,\n disableEnforceFocus: false,\n disableEscapeKeyDown: false,\n disablePortal: false,\n disableRestoreFocus: false,\n hideBackdrop: false,\n keepMounted: false,\n // Modals don't open on the server so this won't conflict with concurrent requests.\n manager: new _ModalManager.default()\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n flip: false,\n name: 'MuiModal'\n})(Modal);\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Modal/Modal.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Modal/ModalManager.js": - /*!**************************************************************!*\ - !*** ./node_modules/@material-ui/core/Modal/ModalManager.js ***! - \**************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _style = _interopRequireDefault(__webpack_require__(/*! dom-helpers/style */ \"./node_modules/dom-helpers/style/index.js\"));\n\nvar _scrollbarSize = _interopRequireDefault(__webpack_require__(/*! dom-helpers/util/scrollbarSize */ \"./node_modules/dom-helpers/util/scrollbarSize.js\"));\n\nvar _ownerDocument = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@material-ui/core/utils/ownerDocument.js\"));\n\nvar _isOverflowing = _interopRequireDefault(__webpack_require__(/*! ./isOverflowing */ \"./node_modules/@material-ui/core/Modal/isOverflowing.js\"));\n\nvar _manageAriaHidden = __webpack_require__(/*! ./manageAriaHidden */ \"./node_modules/@material-ui/core/Modal/manageAriaHidden.js\");\n\nfunction findIndexOf(data, callback) {\n var idx = -1;\n data.some(function (item, index) {\n if (callback(item)) {\n idx = index;\n return true;\n }\n\n return false;\n });\n return idx;\n}\n\nfunction getPaddingRight(node) {\n return parseInt((0, _style.default)(node, 'paddingRight') || 0, 10);\n}\n\nfunction setContainerStyle(data) {\n // We are only interested in the actual `style` here because we will override it.\n data.style = {\n overflow: data.container.style.overflow,\n paddingRight: data.container.style.paddingRight\n };\n var style = {\n overflow: 'hidden'\n };\n\n if (data.overflowing) {\n var scrollbarSize = (0, _scrollbarSize.default)(); // Use computed style, here to get the real padding to add our scrollbar width.\n\n style.paddingRight = \"\".concat(getPaddingRight(data.container) + scrollbarSize, \"px\"); // .mui-fixed is a global helper.\n\n var fixedNodes = (0, _ownerDocument.default)(data.container).querySelectorAll('.mui-fixed');\n\n for (var i = 0; i < fixedNodes.length; i += 1) {\n var paddingRight = getPaddingRight(fixedNodes[i]);\n data.prevPaddings.push(paddingRight);\n fixedNodes[i].style.paddingRight = \"\".concat(paddingRight + scrollbarSize, \"px\");\n }\n }\n\n Object.keys(style).forEach(function (key) {\n data.container.style[key] = style[key];\n });\n}\n\nfunction removeContainerStyle(data) {\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (data.style) {\n Object.keys(data.style).forEach(function (key) {\n data.container.style[key] = data.style[key];\n });\n }\n\n var fixedNodes = (0, _ownerDocument.default)(data.container).querySelectorAll('.mui-fixed');\n\n for (var i = 0; i < fixedNodes.length; i += 1) {\n fixedNodes[i].style.paddingRight = \"\".concat(data.prevPaddings[i], \"px\");\n }\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\n\n\nvar ModalManager =\n/*#__PURE__*/\nfunction () {\n function ModalManager() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0, _classCallCheck2.default)(this, ModalManager);\n var _options$hideSiblingN = options.hideSiblingNodes,\n hideSiblingNodes = _options$hideSiblingN === void 0 ? true : _options$hideSiblingN,\n _options$handleContai = options.handleContainerOverflow,\n handleContainerOverflow = _options$handleContai === void 0 ? true : _options$handleContai;\n this.hideSiblingNodes = hideSiblingNodes;\n this.handleContainerOverflow = handleContainerOverflow; // this.modals[modalIdx] = modal\n\n this.modals = []; // this.data[containerIdx] = {\n // modals: [],\n // container,\n // overflowing,\n // prevPaddings,\n // }\n\n this.data = [];\n }\n\n (0, _createClass2.default)(ModalManager, [{\n key: \"add\",\n value: function add(modal, container) {\n var modalIdx = this.modals.indexOf(modal);\n\n if (modalIdx !== -1) {\n return modalIdx;\n }\n\n modalIdx = this.modals.length;\n this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n if (modal.modalRef) {\n (0, _manageAriaHidden.ariaHidden)(modal.modalRef, false);\n }\n\n if (this.hideSiblingNodes) {\n (0, _manageAriaHidden.ariaHiddenSiblings)(container, modal.mountNode, modal.modalRef, true);\n }\n\n var containerIdx = findIndexOf(this.data, function (item) {\n return item.container === container;\n });\n\n if (containerIdx !== -1) {\n this.data[containerIdx].modals.push(modal);\n return modalIdx;\n }\n\n var data = {\n modals: [modal],\n container: container,\n overflowing: (0, _isOverflowing.default)(container),\n prevPaddings: []\n };\n this.data.push(data);\n return modalIdx;\n }\n }, {\n key: \"mount\",\n value: function mount(modal) {\n var containerIdx = findIndexOf(this.data, function (item) {\n return item.modals.indexOf(modal) !== -1;\n });\n var data = this.data[containerIdx];\n\n if (!data.style && this.handleContainerOverflow) {\n setContainerStyle(data);\n }\n }\n }, {\n key: \"remove\",\n value: function remove(modal) {\n var modalIdx = this.modals.indexOf(modal);\n\n if (modalIdx === -1) {\n return modalIdx;\n }\n\n var containerIdx = findIndexOf(this.data, function (item) {\n return item.modals.indexOf(modal) !== -1;\n });\n var data = this.data[containerIdx];\n data.modals.splice(data.modals.indexOf(modal), 1);\n this.modals.splice(modalIdx, 1); // If that was the last modal in a container, clean up the container.\n\n if (data.modals.length === 0) {\n if (this.handleContainerOverflow) {\n removeContainerStyle(data);\n } // In case the modal wasn't in the DOM yet.\n\n\n if (modal.modalRef) {\n (0, _manageAriaHidden.ariaHidden)(modal.modalRef, true);\n }\n\n if (this.hideSiblingNodes) {\n (0, _manageAriaHidden.ariaHiddenSiblings)(data.container, modal.mountNode, modal.modalRef, false);\n }\n\n this.data.splice(containerIdx, 1);\n } else if (this.hideSiblingNodes) {\n // Otherwise make sure the next top modal is visible to a screen reader.\n var nextTop = data.modals[data.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n\n if (nextTop.modalRef) {\n (0, _manageAriaHidden.ariaHidden)(nextTop.modalRef, false);\n }\n }\n\n return modalIdx;\n }\n }, {\n key: \"isTopModal\",\n value: function isTopModal(modal) {\n return !!this.modals.length && this.modals[this.modals.length - 1] === modal;\n }\n }]);\n return ModalManager;\n}();\n\nvar _default = ModalManager;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Modal/ModalManager.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Modal/index.js": - /*!*******************************************************!*\ - !*** ./node_modules/@material-ui/core/Modal/index.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Modal.default;\n }\n});\nObject.defineProperty(exports, \"ModalManager\", {\n enumerable: true,\n get: function get() {\n return _ModalManager.default;\n }\n});\n\nvar _Modal = _interopRequireDefault(__webpack_require__(/*! ./Modal */ \"./node_modules/@material-ui/core/Modal/Modal.js\"));\n\nvar _ModalManager = _interopRequireDefault(__webpack_require__(/*! ./ModalManager */ \"./node_modules/@material-ui/core/Modal/ModalManager.js\"));\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Modal/index.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Modal/isOverflowing.js": - /*!***************************************************************!*\ - !*** ./node_modules/@material-ui/core/Modal/isOverflowing.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isBody = isBody;\nexports.default = isOverflowing;\n\nvar _isWindow = _interopRequireDefault(__webpack_require__(/*! dom-helpers/query/isWindow */ \"./node_modules/dom-helpers/query/isWindow.js\"));\n\nvar _ownerDocument = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@material-ui/core/utils/ownerDocument.js\"));\n\nvar _ownerWindow = _interopRequireDefault(__webpack_require__(/*! ../utils/ownerWindow */ \"./node_modules/@material-ui/core/utils/ownerWindow.js\"));\n\nfunction isBody(node) {\n return node && node.tagName.toLowerCase() === 'body';\n} // Do we have a vertical scroll bar?\n\n\nfunction isOverflowing(container) {\n var doc = (0, _ownerDocument.default)(container);\n var win = (0, _ownerWindow.default)(doc);\n /* istanbul ignore next */\n\n if (!(0, _isWindow.default)(doc) && !isBody(container)) {\n return container.scrollHeight > container.clientHeight;\n } // Takes in account potential non zero margin on the body.\n\n\n var style = win.getComputedStyle(doc.body);\n var marginLeft = parseInt(style.getPropertyValue('margin-left'), 10);\n var marginRight = parseInt(style.getPropertyValue('margin-right'), 10);\n return marginLeft + doc.body.clientWidth + marginRight < win.innerWidth;\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Modal/isOverflowing.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/Modal/manageAriaHidden.js": - /*!******************************************************************!*\ - !*** ./node_modules/@material-ui/core/Modal/manageAriaHidden.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ariaHidden = ariaHidden;\nexports.ariaHiddenSiblings = ariaHiddenSiblings;\nvar BLACKLIST = ['template', 'script', 'style'];\n\nfunction isHideable(node) {\n return node.nodeType === 1 && BLACKLIST.indexOf(node.tagName.toLowerCase()) === -1;\n}\n\nfunction siblings(container, mount, currentNode, callback) {\n var blacklist = [mount, currentNode];\n [].forEach.call(container.children, function (node) {\n if (blacklist.indexOf(node) === -1 && isHideable(node)) {\n callback(node);\n }\n });\n}\n\nfunction ariaHidden(node, show) {\n if (show) {\n node.setAttribute('aria-hidden', 'true');\n } else {\n node.removeAttribute('aria-hidden');\n }\n}\n\nfunction ariaHiddenSiblings(container, mountNode, currentNode, show) {\n siblings(container, mountNode, currentNode, function (node) {\n return ariaHidden(node, show);\n });\n}\n\n//# sourceURL=webpack:///./node_modules/@material-ui/core/Modal/manageAriaHidden.js?"); - - /***/ }), - - /***/ "./node_modules/@material-ui/core/NativeSelect/NativeSelect.js": - /*!*********************************************************************!*\ - !*** ./node_modules/@material-ui/core/NativeSelect/NativeSelect.js ***! - \*********************************************************************/ - /*! no static exports found */ - /***/ (function(module, exports, __webpack_require__) { - - "use strict"; - eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"));\n\nvar _utils = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/index.es.js\");\n\nvar _NativeSelectInput = _interopRequireDefault(__webpack_require__(/*! ./NativeSelectInput */ \"./node_modules/@material-ui/core/NativeSelect/NativeSelectInput.js\"));\n\nvar _withStyles = _interopRequireDefault(__webpack_require__(/*! ../styles/withStyles */ \"./node_modules/@material-ui/core/styles/withStyles.js\"));\n\nvar _formControlState = _interopRequireDefault(__webpack_require__(/*! ../FormControl/formControlState */ \"./node_modules/@material-ui/core/FormControl/formControlState.js\"));\n\nvar _withFormControlContext = _interopRequireDefault(__webpack_require__(/*! ../FormControl/withFormControlContext */ \"./node_modules/@material-ui/core/FormControl/withFormControlContext.js\"));\n\nvar _ArrowDropDown = _interopRequireDefault(__webpack_require__(/*! ../internal/svg-icons/ArrowDropDown */ \"./node_modules/@material-ui/core/internal/svg-icons/ArrowDropDown.js\"));\n\nvar _Input = _interopRequireDefault(__webpack_require__(/*! ../Input */ \"./node_modules/@material-ui/core/Input/index.js\"));\n\n// @inheritedComponent Input\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the `Input` component `root` class. */\n root: {\n position: 'relative',\n width: '100%'\n },\n\n /* Styles applied to the `Input` component `select` class. */\n select: {\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n // When interacting quickly, the text can end up selected.\n // Native select can't be selected either.\n userSelect: 'none',\n paddingRight: 32,\n borderRadius: 0,\n // Reset\n height: '1.1875em',\n // Reset (19px), match the native input line-height\n width: 'calc(100% - 32px)',\n minWidth: 16,\n // So it doesn't collapse.\n cursor: 'pointer',\n '&:focus': {\n // Show that it's not an text input\n backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)',\n borderRadius: 0 // Reset Chrome style\n\n },\n // Remove IE 11 arrow\n '&::-ms-expand': {\n display: 'none'\n },\n '&$disabled': {\n cursor: 'default'\n },\n '&[multiple]': {\n height: 'auto'\n },\n '&:not([multiple]) option, &:not([multiple]) optgroup': {\n backgroundColor: theme.palette.background.paper\n }\n },\n\n /* Styles applied to the `Input` component if `variant=\"filled\"`. */\n filled: {\n width: 'calc(100% - 44px)'\n },\n\n /* Styles applied to the `Input` component if `variant=\"outlined\"`. */\n outlined: {\n width: 'calc(100% - 46px)',\n borderRadius: theme.shape.borderRadius\n },\n\n /* Styles applied to the `Input` component `selectMenu` class. */\n selectMenu: {\n width: 'auto',\n // Fix Safari textOverflow\n height: 'auto',\n // Reset\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n minHeight: '1.1875em' // Reset (19px), match the native input line-height\n\n },\n\n /* Styles applied to the `Input` component `disabled` class. */\n disabled: {},\n\n /* Styles applied to the `Input` component `icon` class. */\n icon: {\n // We use a position absolute over a flexbox in order to forward the pointer events\n // to the input.\n position: 'absolute',\n right: 0,\n top: 'calc(50% - 12px)',\n // Center vertically\n color: theme.palette.action.active,\n 'pointer-events': 'none' // Don't block pointer events on the select under the icon.\n\n }\n };\n};\n/**\n * An alternative to ` host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for ).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an