},
-"phone_number": "007"}} | Update the Subscriber Metadata
-validateCoupon| selectedPlan(object), couponCode (string) | Validate coupon with plan
-cancelSubscription| subscriptionId(number) | Cancel a subscription
-getSubscription | -NA- | Gets the subscription groups provided by the publisher
-getSubscriptionForUser | -NA- | Gets the subscriptions of the current logged in user
-accessUpdated| accessObject(object) | Sets the current story access to redux store
-accessIsLoading| loading(boolean) | A boolean which holds true between the request for access of a story and its response
-
Notes :
-
-
This component uses AccessType Js internally
-
It uses the Access API from subtype for metering, the API works on firebase which uses thinmint cookie (set by qlitics) of the user to verify and keep track of visits
-
This component supports Razorpay, Stripe, PayPal and Omise payment options for now
-
It communicates to sketches where routes are in pattern /api/access/v1/*
-
Metered story has a pingback which is achieved by the use of navigator.sendBeacon if available or falls back to fetch, this is needed to update the count of the visited stories for a user
-
Access to story/asset is saved on the redux store under the keyword access which holds keys as story asset id and the access returned from the API as its value
-
subscriptions is the key in the store under which all the subscription groups created for the specified account are maintained
-
paymentOptions is the key under the store which has all the payment options created for the current AT account
This component can be used to render a collection.
-
This component will render each item in the collection recursively
-
-
If the item is a story, then the story is generated using the template returned by props.storyTemplates(index)
-
If the item is a collection, then the collection is rendered using the template returned by props.collectionTemplates(layout, index), where layout comes from item["associated-metadata"]["layout"]
-
-
Typically, this component will be passed a collection representing an entire page (either the home or section page), and will render the entire page for you.
-
Also see LazyCollection for a component which behaves similarly, but loads lazily after a point.
-Example
This component can be used to implement InfiniteScroll on the story page. You will need to specify the function which renders the story (which will recieve props.index and props.story), and functions for triggering analytics.
-
Example
-
import React from 'react';
-
-import { BlankStory } from './story-templates';
-import { InfiniteStoryBase } from '@quintype/components';
-
-function StoryPageBase({index, story, otherProp}) {
- // Can switch to a different template based story-template, or only show a spoiler if index > 0
- return <BlankStory story={story} />
-}
-
-const FIELDS = "id,headline,slug,url,hero-image-s3-key,hero-image-metadata,first-published-at,last-published-at,alternative,published-at,author-name,author-id,sections,story-template,tags,cards";
-function storyPageLoadItems(pageNumber) {
- return global.superagent
- .get("/api/v1/stories", {fields: FIELDS, limit:5, offset:5*pageNumber})
- .then(response => response.body.stories.map(story => ({story: story, otherProp: "value"})));
-}
-
-export function StoryPage(props) {
- return <InfiniteStoryBase {...props}
- render={StoryPageBase}
- loadItems={storyPageLoadItems}
- onItemFocus={(item) => console.log(`Story In View: ${item.story.headline}`)}
- onInitialItemFocus={(item) => console.log(`Do Analytics ${item.story.headline}`)} />
-}
-
-
-
Not changing the URL on every page
-
When the next story is focussed, the url and title of the page will be set to the next story. If this is not required, it can be disabled by setting the prop doNotChangeUrl={true}.
-This is typically used when showing the original story, followed by previews of subsequent stories.
When a story is focussed, the url is changed to the original slug of the story by default. To configure this, pass a prop called changeUrlTo as a function which returns the desired url.
-This is typically used when you want to change the url but not to the original slug.
This component can be used to render a collection, but with the components being lazy. This takes all the same options as Collection, but with a lazyAfter prop.
-This Component also accepts extra props, which will be passed down to collection templates.
-
This Component is similar to Collection. Please see that for a more detailed example.
-
Note: This does not accept interstitial items (yet). And home page items are not hidden after being rendered
This component will ensure all ResponsiveImages that are in its descendent path will be loaded async. By default, the image is loaded with an empty gif, and the image becomes visible when the image scrolls 250 from the edge of the screen.
-
You can use EagerLoadImages or eager={true} to force the image to be eager. If EagerLoadImages is passed a predicate, then images that pass a matching value to eager will be rendered eagerly.
This component generates an anchor tag. Instead of doing a browser page load, it will go to the next page via AJAX. Analytics scripts will be fired correctly (and if not, it's a bug)
-
import { Link } from '@quintype/components';
-<Link href="/section/story-slug" otherLinkAttribute="value">Text here</Link>
-
This component generates an anchor tag. Instead of doing a browser page load, it will go to the next page via AJAX. Analytics scripts will be fired correctly (and if not, it's a bug)
-LinkBase is not connected to the store or plugged to context, this is used as an alternative for usecases such as partial hydration where context is lost.
This component is very similar to the LoadMoreBase component but fetches the stories from a collection. The api call /api/v1/collections/{collectionSlug} is made with the passed collection slug value. The component accepts the params prop and a requires a Collection Slug from which to fetch the stories and returns a set of stories only.
This component starts with a set of stories, and then provides a load more button. This calls out to /api/v1/stories with the properties passed via the params prop. The stories are concatenated with the stories in props.data.stories, and the contents of props.data are passed to the rendered template.
-
It can accept an alternate api as a prop as well as apiResponseTransformer which can be used to tranformer the api response before being passed to the template.
This component renders it's children when the app is moving between pages. It can be used to show a spinner. It always has the class "loading-indicator", and also "loading-indicator-loading" when loading.
This component can be used to render a menu from the menuItems in the editor. An extra class called active is applied if the menu item is the current url. By default, links will resolve via AJAX.
-
Items will automatically be pulled from config, please remember to expose the layout key.
-
Children are prepended to the list of items. Slice can be passed to extract a set of menu items.
This component is a wrapper over ResponsiveImages. It accepts story as a prop and renders story's hero image.
-If hero-image-s3-key is present, it takes that as slug and the story headline as image alt text.
-Else it takes the slug from the alternate hero-image, alt text as alternate headline.
-If both are absent, it doesn't render
The component supports additional props which allows more customization, you can pass in props like size, color, count of stars or even change the render from star to a custom svg component. Refer to component src to know exact details of what is supported.
-
-
-
-
-
-
-
-
-
-
-
PropTypes:
-
-
-
-
-
-
Name
-
Type
-
Required
-
Description
-
Default
-
-
-
-
-
-
-
value
-
- number
-
-
Yes
-
Rating value to be displayed
-
-
-
-
-
-
canShowEmptyRating
-
- bool
-
-
No
-
Can show Empty rating
-
false
-
-
-
-
-
size
-
- number
-
-
No
-
Size of the icon (star)
-
20
-
-
-
-
-
activeColor
-
- string
-
-
No
-
Active color
-
"gold"
-
-
-
-
-
inActiveColor
-
- string
-
-
No
-
Inactive/ disabled stars color
-
"gray"
-
-
-
-
-
count
-
- number
-
-
No
-
Number of stars to render
-
5
-
-
-
-
-
showHalfStar
-
- bool
-
-
No
-
Show half stars
-
true
-
-
-
-
-
className
-
- string
-
-
No
-
Classname for the containing div
-
"review-rating"
-
-
-
-
-
activeSymbol
-
- element
-
-
No
-
Optional React component to render instead of active star
-
null
-
-
-
-
-
inActiveSymbol
-
- element
-
-
No
-
Optional React component to render instead of inactive star
-
null
-
-
-
-
-
halfActiveSymbol
-
- element
-
-
No
-
Optional React component to render instead of half active star
This component is to handle search functionality and also handles load more.
-
A template must be passed in to render search results. Fields can be passed to get specific fields in the results. The contents of props.data are passed to the rendered template.
This component renders different types of story elements
-Qlitics event is fired on story-elements become visible (this can be disabled by passing a prop called disableAnalytics={true})
This component calls the render prop with clientSideRendered = true if the client side is completely loaded, and false during SSR and initial bootup.
-
Example
-
import { WithClientSideOnly } from '@quintype/components';
-<WithClientSideOnly>
- {({clientSideRendered}) => (
- {clientSideRendered && <span>This will be shown only on the client side</span>}
- )}
-</WithClientSideOnly>
-
This component can be used to load some DOM just before it scrolls into the screen. Currently, it does not support unloading. The margin prop is passed to IntersectionObserver.
This is a render props component which will call your callback with the current logged in member. It will automatically call /api/v1/members/me to figure out if you are logged in, and replace the contents in the store and callback. In future, this may use LocalStorage to cache the member for some time.
-
The render will also be passed a function to call for logging out, and another to force the library to check if the member is now logged in.
-
On initial load, the isLoading prop will be set, which will become false when the user is loaded. Use this field to avoid showing a Login Button while fetch is happening.
-
In order to update the current member, call checkForMemberUpdated.
-
In order to make bridgekeeper api calls for the current member and logout, isBridgekeeperEnabled prop needs to set to true. The default value is false.
This is an abstract render props component for logging in with social accounts. The component adds two items to scope: serverSideLoginPath for redirecting to server side, and login for doing a client side login. Calling login() returns a promise which can be used to handle success and failure cases.
-
This component should not be used directly, but should be used via one of the scomponents mentioned in the example.
-
Please contact the support in order to update the social app credentials in the Bridgekeeper database after making the relevant code changes.
-
NOTE:
-
-
Twitter and LinkedIn do not support ClientSideLogin, and thus login() will just redirect to the server. It also ignores the apiKey
-
Twitter and LinkedIn do not verify presence of email on the client side. Please ask for these permissions in the app
-
The login() need not be called when serverSideLoginPath is called
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build/brightcove-react-player-loader.es.bc5a870b.js b/build/brightcove-react-player-loader.es.bc5a870b.js
deleted file mode 100644
index 0014e3c4..00000000
--- a/build/brightcove-react-player-loader.es.bc5a870b.js
+++ /dev/null
@@ -1,12 +0,0 @@
-parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c-1&&(o.startingIndex=i)}r.player.catalog.load(o)}}},n.updatePlayer=function(e){if(this.player&&this.player.el&&this.player.el()){var t;if(this.player.usingPlugin("catalog")){if(e.catalogSequence&&this.props.catalogSequence){var r=this.createPlaybackAPICallback_("sequence",e);return void this.player.catalog.getLazySequence(this.props.catalogSequence,r,this.props.adConfigId)}e.videoId&&this.props.videoId?t={type:"video",id:this.props.videoId}:e.playlistId&&this.props.playlistId?t={type:"playlist",id:this.props.playlistId}:e.catalogSearch&&this.props.catalogSearch&&(t={type:"search",q:this.props.catalogSearch})}if(t){this.props.adConfigId&&(t.adConfigId=this.props.adConfigId),this.props.deliveryConfigId&&(t.deliveryConfigId=this.props.deliveryConfigId);var n=this.createPlaybackAPICallback_(t.type,e);this.player.catalog.get(t,n)}else if(e.playlistVideoId&&this.props.playlistVideoId&&this.player.usingPlugin("playlist")){var o=this.findPlaylistVideoIdIndex_(this.player.playlist());o>-1&&this.player.playlist.currentItem(o)}}},n.componentDidMount=function(){this.isMounted_=!0,this.loadPlayer()},n.componentDidUpdate=function(e){var t=this,r=Object.keys(e).reduce(function(r,n){var o=e[n],i=t.props[n];return"function"==typeof i?r:"object"==typeof i&&null!==i?(JSON.stringify(i)!==JSON.stringify(o)&&(r[n]=!0),r):(i!==o&&(r[n]=!0),r)},{});this.props.manualReloadFromPropChanges||!Object.keys(r).some(function(e){return-1===ve.indexOf(e)})?this.updatePlayer(r):this.loadPlayer()},n.componentWillUnmount=function(){this.isMounted_=!1,this.disposePlayer()},n.render=function(){var t=o({className:"brightcove-react-player-loader"},this.props.attrs,{ref:this.setRefNode});return e.default.createElement("div",t)},r}(e.default.Component),ge=be;exports.default=ge;
-},{"react":"n8MK","global/document":"qqXr","global/window":"tALL"}]},{},[], null)
-//# sourceMappingURL=/brightcove-react-player-loader.es.bc5a870b.js.map
\ No newline at end of file
diff --git a/build/brightcove-react-player-loader.es.bc5a870b.js.map b/build/brightcove-react-player-loader.es.bc5a870b.js.map
deleted file mode 100644
index e0ba9eee..00000000
--- a/build/brightcove-react-player-loader.es.bc5a870b.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../node_modules/global/document.js","../node_modules/global/window.js","../node_modules/@brightcove/react-player-loader/dist/brightcove-react-player-loader.es.js"],"names":["ReactPlayerLoader","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","_inheritsLoose","subClass","superClass","create","constructor","__proto__","_assertThisInitialized","self","ReferenceError","_extends$1","version","version$1","_typeof","Symbol","iterator","obj","JSON_ALLOWED_PARAMS","IFRAME_ALLOWED_QUERY_PARAMS","getQueryParamValue","params","undefined","indexOf","encodeURIComponent","JSON","stringify","x","String","trim","getQueryString","keys","filter","k","reduce","qs","value","brightcovePlayerUrl","_ref","accountId","_ref$base","base","_ref$playerId","playerId","_ref$embedId","embedId","_ref$iframe","iframe","_ref$minified","minified","_ref$queryParams","queryParams","ext","charAt","substring","VERSION","DEFAULTS","embedType","Promise","window","refNodeInsert","DEFAULT_ASPECT_RATIO","DEFAULT_IFRAME_HORIZONTAL_PLAYLIST","DEFAULT_MAX_WIDTH","EMBED_TAG_NAME_VIDEO","EMBED_TAG_NAME_VIDEOJS","EMBED_TYPE_IN_PAGE","EMBED_TYPE_IFRAME","REF_NODE_INSERT_APPEND","REF_NODE_INSERT_PREPEND","REF_NODE_INSERT_BEFORE","REF_NODE_INSERT_AFTER","REF_NODE_INSERT_REPLACE","JSON_ALLOWED_ATTRS","BASE_URL","getUrl","playerUrl","embedOptions","unminified","getBaseUrl","setBaseUrl","baseUrl","urls","isEl","el","Boolean","nodeType","isElInDom","parentNode","createIframeEmbed","document","createElement","setAttribute","src","createInPageEmbed","paramsToAttrs","adConfigId","applicationId","catalogSearch","catalogSequence","deliveryConfigId","playlistId","playlistVideoId","poster","videoId","tagName","forEach","classList","add","wrapResponsive","responsive","style","position","top","right","bottom","left","width","height","aspectRatio","iframeHorizontalPlaylist","maxWidth","split","map","Number","inner","paddingTop","appendChild","outer","display","wrapPip","pip","wrapEmbed","embed","insertEmbed","refNode","refNodeParent","wrapped","insertBefore","nextElementSibling","replaceChild","firstChild","playlist","playlistTagName","legacy","onEmbedCreated","result","createEmbed","actualCache","Map","store","props","set","has","get","clear","fn","playerScriptCache","REGEX_PLAYER_EMBED","getBcGlobalKeys","bc","test","getGlobalKeys","disposeAll","videojs","players","p","dispose","reset","Array","slice","querySelectorAll","removeChild","detectPlayers","matches","match","env","isFn","isValidEmbedType","isValidTagName","isValidRootInsert","checkParams","options","Error","resolveRefNode","querySelector","initPlayer","resolve","reject","player","bcinfo","PLAYER_LOADER","message","type","ref","loadPlayer","script","onload","onerror","async","charset","brightcovePlayerLoader","parameters","onSuccess","onFailure","err","expose","defineProperty","configurable","enumerable","writable","arr","UPDATEABLE_PROPS","logError","console","error","_React$Component","_this","setRefNode","bind","_proto","_this2","disposePlayer","userSuccess","userFailure","isMounted_","one","REACT_PLAYER_LOADER","attrs","manualReloadFromPropChanges","originalBaseUrl","findPlaylistVideoIdIndex_","isArray","_playlist$i","id","referenceId","createPlaybackAPICallback_","requestType","changes","_this3","data","startingIndex","catalog","load","updatePlayer","catalogParams","usingPlugin","callback","getLazySequence","q","_callback","currentItem","componentDidMount","componentDidUpdate","prevProps","_this4","acc","previous","current","some","componentWillUnmount","render","className","React","Component"],"mappings":"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","file":"brightcove-react-player-loader.es.bc5a870b.js","sourceRoot":"..","sourcesContent":["var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","/*! @name @brightcove/react-player-loader @version 1.4.2 @license Apache-2.0 */\nimport React from 'react';\nimport document from 'global/document';\nimport window from 'global/window';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/*! @name @brightcove/player-loader @version 1.8.0 @license Apache-2.0 */\n\nfunction _extends$1() {\n _extends$1 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends$1.apply(this, arguments);\n}\n\nvar version = \"1.8.0\";\n\n/*! @name @brightcove/player-url @version 1.2.0 @license Apache-2.0 */\nvar version$1 = \"1.2.0\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n// The parameters that may include JSON.\nvar JSON_ALLOWED_PARAMS = ['catalogSearch', 'catalogSequence'];\n\n// The parameters that may be set as query string parameters for iframes.\nvar IFRAME_ALLOWED_QUERY_PARAMS = ['adConfigId', 'applicationId', 'catalogSearch', 'catalogSequence', 'playlistId', 'playlistVideoId', 'videoId'];\n\n/**\n * Gets the value of a parameter and encodes it as a string.\n *\n * For certain keys, JSON is allowed and will be encoded.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @param {string} key\n * The key in the params object.\n *\n * @return {string|undefined}\n * The encoded value - or `undefined` if none.\n */\nvar getQueryParamValue = function getQueryParamValue(params, key) {\n\n if (!params || params[key] === undefined) {\n return;\n }\n\n // If it's not a string, such as with a catalog search or sequence, we\n // try to encode it as JSON.\n if (typeof params[key] !== 'string' && JSON_ALLOWED_PARAMS.indexOf(key) !== -1) {\n try {\n return encodeURIComponent(JSON.stringify(params[key]));\n } catch (x) {\n\n // If it's not a string and we can't encode as JSON, it's ignored entirely.\n return;\n }\n }\n\n return encodeURIComponent(String(params[key]).trim()) || undefined;\n};\n\n/**\n * In some cases, we need to add query string parameters to an iframe URL.\n *\n * @private\n * @param {Object} params\n * An object of query parameters.\n *\n * @return {string}\n * A query string starting with `?`. If no valid parameters are given,\n * returns an empty string.\n */\nvar getQueryString = function getQueryString(params) {\n return Object.keys(params).filter(function (k) {\n return IFRAME_ALLOWED_QUERY_PARAMS.indexOf(k) !== -1;\n }).reduce(function (qs, k) {\n var value = getQueryParamValue(params, k);\n\n if (value !== undefined) {\n qs += qs ? '&' : '?';\n qs += encodeURIComponent(k) + '=' + value;\n }\n\n return qs;\n }, '');\n};\n\n/**\n * Generate a URL to a Brightcove Player.\n *\n * @param {Object} params\n * A set of parameters describing the player URL to create.\n *\n * @param {string} params.accountId\n * A Brightcove account ID.\n *\n * @param {string} [params.playerId=\"default\"]\n * A Brightcove player ID.\n *\n * @param {string} [params.embedId=\"default\"]\n * A Brightcove player embed ID.\n *\n * @param {boolean} [params.iframe=false]\n * Whether to return a URL for an HTML document to be embedded in\n * an iframe.\n *\n * @param {boolean} [params.minified=true]\n * When the `iframe` argument is `false`, this can be used to control\n * whether the minified or unminified JavaScript URL is returned.\n *\n * @param {string} [params.base=\"https://players.brightcove.net\"]\n * A base CDN protocol and hostname. Mainly used for testing.\n *\n * @return {string}\n * A URL to a Brightcove Player.\n */\nvar brightcovePlayerUrl = function brightcovePlayerUrl(_ref) {\n var accountId = _ref.accountId,\n _ref$base = _ref.base,\n base = _ref$base === undefined ? 'https://players.brightcove.net' : _ref$base,\n _ref$playerId = _ref.playerId,\n playerId = _ref$playerId === undefined ? 'default' : _ref$playerId,\n _ref$embedId = _ref.embedId,\n embedId = _ref$embedId === undefined ? 'default' : _ref$embedId,\n _ref$iframe = _ref.iframe,\n iframe = _ref$iframe === undefined ? false : _ref$iframe,\n _ref$minified = _ref.minified,\n minified = _ref$minified === undefined ? true : _ref$minified,\n _ref$queryParams = _ref.queryParams,\n queryParams = _ref$queryParams === undefined ? null : _ref$queryParams;\n\n var ext = '';\n\n if (iframe) {\n ext += 'html';\n } else {\n if (minified) {\n ext += 'min.';\n }\n ext += 'js';\n }\n\n if (base.charAt(base.length - 1) === '/') {\n base = base.substring(0, base.length - 1);\n }\n\n var qs = '';\n\n if (iframe && queryParams && (typeof queryParams === 'undefined' ? 'undefined' : _typeof(queryParams)) === 'object') {\n qs = getQueryString(queryParams);\n }\n\n accountId = encodeURIComponent(accountId);\n playerId = encodeURIComponent(playerId);\n embedId = encodeURIComponent(embedId);\n\n return base + '/' + accountId + '/' + playerId + '_' + embedId + '/index.' + ext + qs;\n};\n\n/**\n * The version of this module.\n *\n * @type {string}\n */\nbrightcovePlayerUrl.VERSION = version$1;\n\nvar DEFAULTS = {\n embedId: 'default',\n embedType: 'in-page',\n playerId: 'default',\n Promise: window.Promise,\n refNodeInsert: 'append'\n};\nvar DEFAULT_ASPECT_RATIO = '16:9';\nvar DEFAULT_IFRAME_HORIZONTAL_PLAYLIST = false;\nvar DEFAULT_MAX_WIDTH = '100%';\nvar EMBED_TAG_NAME_VIDEO = 'video';\nvar EMBED_TAG_NAME_VIDEOJS = 'video-js';\nvar EMBED_TYPE_IN_PAGE = 'in-page';\nvar EMBED_TYPE_IFRAME = 'iframe';\nvar REF_NODE_INSERT_APPEND = 'append';\nvar REF_NODE_INSERT_PREPEND = 'prepend';\nvar REF_NODE_INSERT_BEFORE = 'before';\nvar REF_NODE_INSERT_AFTER = 'after';\nvar REF_NODE_INSERT_REPLACE = 'replace';\nvar JSON_ALLOWED_ATTRS = ['catalogSearch', 'catalogSequence'];\n\nvar BASE_URL = 'https://players.brightcove.net/';\n/**\n * Gets the URL to a player on CDN.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @return {string}\n * A URL.\n */\n\nvar getUrl = function getUrl(params) {\n if (params.playerUrl) {\n return params.playerUrl;\n }\n\n var accountId = params.accountId,\n playerId = params.playerId,\n embedId = params.embedId,\n embedOptions = params.embedOptions;\n var iframe = params.embedType === EMBED_TYPE_IFRAME;\n return brightcovePlayerUrl({\n accountId: accountId,\n playerId: playerId,\n embedId: embedId,\n iframe: iframe,\n base: BASE_URL,\n // The unminified embed option is the exact reverse of the minified option\n // here.\n minified: embedOptions ? !embedOptions.unminified : true,\n // Pass the entire params object as query params. This is safe because\n // @brightcove/player-url only accepts a whitelist of parameters. Anything\n // else will be ignored.\n queryParams: params\n });\n};\n/**\n * Function used to get the base URL - primarily for testing.\n *\n * @private\n * @return {string}\n * The current base URL.\n */\n\n\nvar getBaseUrl = function getBaseUrl() {\n return BASE_URL;\n};\n/**\n * Function used to set the base URL - primarily for testing.\n *\n * @private\n * @param {string} baseUrl\n * A new base URL (instead of Brightcove CDN).\n */\n\n\nvar setBaseUrl = function setBaseUrl(baseUrl) {\n BASE_URL = baseUrl;\n};\n\nvar urls = {\n getUrl: getUrl,\n getBaseUrl: getBaseUrl,\n setBaseUrl: setBaseUrl\n};\n\n/**\n * Is this value an element?\n *\n * @param {Element} el\n * A maybe element.\n *\n * @return {boolean}\n * Whether or not the value is a element.\n */\n\nvar isEl = function isEl(el) {\n return Boolean(el && el.nodeType === 1);\n};\n/**\n * Is this value an element with a parent node?\n *\n * @param {Element} el\n * A maybe element.\n *\n * @return {boolean}\n * Whether or not the value is a element with a parent node.\n */\n\n\nvar isElInDom = function isElInDom(el) {\n return Boolean(isEl(el) && el.parentNode);\n};\n/**\n * Creates an iframe embed code.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @return {Element}\n * The DOM element that will ultimately be passed to the `bc()` function.\n */\n\n\nvar createIframeEmbed = function createIframeEmbed(params) {\n var el = document.createElement('iframe');\n el.setAttribute('allow', 'autoplay;encrypted-media;fullscreen');\n el.setAttribute('allowfullscreen', 'allowfullscreen');\n el.src = urls.getUrl(params);\n return el;\n};\n/**\n * Creates an in-page embed code.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @return {Element}\n * The DOM element that will ultimately be passed to the `bc()` function.\n */\n\n\nvar createInPageEmbed = function createInPageEmbed(params) {\n var embedOptions = params.embedOptions; // We DO NOT include the data-account, data-player, or data-embed attributes\n // here because we will be manually initializing the player.\n\n var paramsToAttrs = {\n adConfigId: 'data-ad-config-id',\n applicationId: 'data-application-id',\n catalogSearch: 'data-catalog-search',\n catalogSequence: 'data-catalog-sequence',\n deliveryConfigId: 'data-delivery-config-id',\n playlistId: 'data-playlist-id',\n playlistVideoId: 'data-playlist-video-id',\n poster: 'poster',\n videoId: 'data-video-id'\n };\n var tagName = embedOptions && embedOptions.tagName || EMBED_TAG_NAME_VIDEOJS;\n var el = document.createElement(tagName);\n Object.keys(paramsToAttrs).filter(function (key) {\n return params[key];\n }).forEach(function (key) {\n var value; // If it's not a string, such as with a catalog search or sequence, we\n // try to encode it as JSON.\n\n if (typeof params[key] !== 'string' && JSON_ALLOWED_ATTRS.indexOf(key) !== -1) {\n try {\n value = JSON.stringify(params[key]); // If it fails, don't set anything.\n } catch (x) {\n return;\n }\n } else {\n value = String(params[key]).trim();\n }\n\n el.setAttribute(paramsToAttrs[key], value);\n });\n el.setAttribute('controls', 'controls');\n el.classList.add('video-js');\n return el;\n};\n/**\n * Wraps an element in responsive intrinsic ratio elements.\n *\n * @private\n * @param {string} embedType\n * The type of the embed.\n *\n * @param {Object} embedOptions\n * Embed options from the params.\n *\n * @param {Element} el\n * The DOM element.\n *\n * @return {Element}\n * A new element (if needed).\n */\n\n\nvar wrapResponsive = function wrapResponsive(embedType, embedOptions, el) {\n if (!embedOptions.responsive) {\n return el;\n }\n\n el.style.position = 'absolute';\n el.style.top = '0px';\n el.style.right = '0px';\n el.style.bottom = '0px';\n el.style.left = '0px';\n el.style.width = '100%';\n el.style.height = '100%';\n\n var responsive = _extends$1({\n aspectRatio: DEFAULT_ASPECT_RATIO,\n iframeHorizontalPlaylist: DEFAULT_IFRAME_HORIZONTAL_PLAYLIST,\n maxWidth: DEFAULT_MAX_WIDTH\n }, embedOptions.responsive); // This value is validate at a higher level, so we can trust that it's in the\n // correct format.\n\n\n var aspectRatio = responsive.aspectRatio.split(':').map(Number);\n var inner = document.createElement('div');\n var paddingTop = aspectRatio[1] / aspectRatio[0] * 100; // For iframes with a horizontal playlist, the playlist takes up 20% of the\n // vertical space (if shown); so, adjust the vertical size of the embed to\n // avoid black bars.\n\n if (embedType === EMBED_TYPE_IFRAME && responsive.iframeHorizontalPlaylist) {\n paddingTop *= 1.25;\n }\n\n inner.style.paddingTop = paddingTop + '%';\n inner.appendChild(el);\n var outer = document.createElement('div');\n outer.style.position = 'relative';\n outer.style.display = 'block';\n outer.style.maxWidth = responsive.maxWidth;\n outer.appendChild(inner);\n return outer;\n};\n/**\n * Wraps an element in a Picture-in-Picture plugin container.\n *\n * @private\n * @param {Object} embedOptions\n * Embed options from the params.\n *\n * @param {Element} el\n * The DOM element.\n *\n * @return {Element}\n * A new element (if needed).\n */\n\n\nvar wrapPip = function wrapPip(embedOptions, el) {\n if (!embedOptions.pip) {\n return el;\n }\n\n var pip = document.createElement('div');\n pip.classList.add('vjs-pip-container');\n pip.appendChild(el);\n return pip;\n};\n/**\n * Wraps a bare embed element with necessary parent elements, depending on\n * embed options given in params.\n *\n * @private\n * @param {string} embedType\n * The type of the embed.\n *\n * @param {Object} embedOptions\n * Embed options from the params.\n *\n * @param {Element} embed\n * The embed DOM element.\n *\n * @return {Element}\n * A new element (if needed) or the embed itself.\n */\n\n\nvar wrapEmbed = function wrapEmbed(embedType, embedOptions, embed) {\n if (!embedOptions) {\n return embed;\n }\n\n return wrapPip(embedOptions, wrapResponsive(embedType, embedOptions, embed));\n};\n/**\n * Inserts a previously-created embed element into the page based on params.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @param {Element} embed\n * The embed DOM element.\n *\n * @return {Element}\n * The embed DOM element.\n */\n\n\nvar insertEmbed = function insertEmbed(params, embed) {\n var refNode = params.refNode,\n refNodeInsert = params.refNodeInsert;\n var refNodeParent = refNode.parentNode; // Wrap the embed, if needed, in container elements to support various\n // plugins.\n\n var wrapped = wrapEmbed(params.embedType, params.embedOptions, embed); // Decide where to insert the wrapped embed.\n\n if (refNodeInsert === REF_NODE_INSERT_BEFORE) {\n refNodeParent.insertBefore(wrapped, refNode);\n } else if (refNodeInsert === REF_NODE_INSERT_AFTER) {\n refNodeParent.insertBefore(wrapped, refNode.nextElementSibling || null);\n } else if (refNodeInsert === REF_NODE_INSERT_REPLACE) {\n refNodeParent.replaceChild(wrapped, refNode);\n } else if (refNodeInsert === REF_NODE_INSERT_PREPEND) {\n refNode.insertBefore(wrapped, refNode.firstChild || null); // Append is the default.\n } else {\n refNode.appendChild(wrapped);\n } // If the playlist embed option is provided, we need to add a playlist element\n // immediately after the embed. This has to happen after the embed is inserted\n // into the DOM (above).\n\n\n if (params.embedOptions && params.embedOptions.playlist) {\n var playlistTagName = params.embedOptions.playlist.legacy ? 'ul' : 'div';\n var playlist = document.createElement(playlistTagName);\n playlist.classList.add('vjs-playlist');\n embed.parentNode.insertBefore(playlist, embed.nextElementSibling || null);\n } // Clean up internal reference to the refNode to avoid potential memory\n // leaks in case the params get persisted somewhere. We won't need it beyond\n // this point.\n\n\n params.refNode = null; // Return the original embed element that can be passed to `bc()`.\n\n return embed;\n};\n/**\n * Handles `onEmbedCreated` callback invocation.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @param {Element} embed\n * The embed DOM element.\n *\n * @return {Element}\n * A possibly-new DOM element.\n */\n\n\nvar onEmbedCreated = function onEmbedCreated(params, embed) {\n if (typeof params.onEmbedCreated !== 'function') {\n return embed;\n }\n\n var result = params.onEmbedCreated(embed);\n\n if (isEl(result)) {\n return result;\n }\n\n return embed;\n};\n/**\n * Creates an embed code of the appropriate type, runs any customizations\n * necessary, and inserts it into the DOM.\n *\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @return {Element}\n * The DOM element that will ultimately be passed to the `bc()`\n * function. Even when customized or wrapped, the return value will be\n * the target element.\n */\n\n\nvar createEmbed = function createEmbed(params) {\n var embed = params.embedType === EMBED_TYPE_IFRAME ? createIframeEmbed(params) : createInPageEmbed(params);\n return insertEmbed(params, onEmbedCreated(params, embed));\n};\n\n//\n// The keys follow the format \"accountId_playerId_embedId\" where accountId is\n// optional and defaults to \"*\". This happens when we detect pre-existing\n// player globals.\n\nvar actualCache = new window.Map();\n/**\n * Get the cache key given some properties.\n *\n * @private\n * @param {Object} props\n * Properties describing the player record to cache.\n *\n * @param {string} props.playerId\n * A player ID.\n *\n * @param {string} props.embedId\n * An embed ID.\n *\n * @param {string} [props.accountId=\"*\"]\n * An optional account ID. This is optional because when we search for\n * pre-existing players to avoid downloads, we will not necessarily\n * know the account ID.\n *\n * @return {string}\n * A key to be used in the script cache.\n */\n\nvar key = function key(_ref) {\n var accountId = _ref.accountId,\n playerId = _ref.playerId,\n embedId = _ref.embedId;\n return (accountId || '*') + \"_\" + playerId + \"_\" + embedId;\n};\n/**\n * Add an entry to the script cache.\n *\n * @private\n * @param {Object} props\n * Properties describing the player record to cache.\n *\n * @param {string} props.playerId\n * A player ID.\n *\n * @param {string} props.embedId\n * An embed ID.\n *\n * @param {string} [props.accountId=\"*\"]\n * An optional account ID. This is optional because when we search for\n * pre-existing players to avoid downloads, we will not necessarily\n * know the account ID. If not given, we assume that no script was\n * downloaded for this player.\n */\n\n\nvar store = function store(props) {\n actualCache.set(key(props), props.accountId ? urls.getUrl(props) : '');\n};\n/**\n * Checks if the script cache has an entry.\n *\n * @private\n * @param {Object} props\n * Properties describing the player record to cache.\n *\n * @param {string} props.playerId\n * A player ID.\n *\n * @param {string} props.embedId\n * An embed ID.\n *\n * @param {string} [props.accountId=\"*\"]\n * An optional account ID. This is optional because when we search for\n * pre-existing players to avoid downloads, we will not necessarily\n * know the account ID.\n *\n * @return {boolean}\n * Will be `true` if there is a matching cache entry.\n */\n\n\nvar has = function has(props) {\n return actualCache.has(key(props));\n};\n/**\n * Gets a cache entry.\n *\n * @private\n * @param {Object} props\n * Properties describing the player record to cache.\n *\n * @param {string} props.playerId\n * A player ID.\n *\n * @param {string} props.embedId\n * An embed ID.\n *\n * @param {string} [props.accountId=\"*\"]\n * An optional account ID. This is optional because when we search for\n * pre-existing players to avoid downloads, we will not necessarily\n * know the account ID.\n *\n * @return {string}\n * A cache entry - a URL or empty string.\n *\n */\n\n\nvar get = function get(props) {\n return actualCache.get(key(props));\n};\n/**\n * Clears the cache.\n */\n\n\nvar clear = function clear() {\n actualCache.clear();\n};\n/**\n * Iterates over the cache.\n *\n * @param {Function} fn\n * A callback function that will be called with a value and a key\n * for each item in the cache.\n */\n\n\nvar forEach = function forEach(fn) {\n actualCache.forEach(fn);\n};\n\nvar playerScriptCache = {\n clear: clear,\n forEach: forEach,\n get: get,\n has: has,\n key: key,\n store: store\n};\n\nvar REGEX_PLAYER_EMBED = /^([A-Za-z0-9]+)_([A-Za-z0-9]+)$/;\n/**\n * Gets an array of current per-player/per-embed `bc` globals that are\n * attached to the `bc` global (e.g. `bc.abc123xyz_default`).\n *\n * If `bc` is not defined, returns an empty array.\n *\n * @private\n * @return {string[]}\n * An array of keys.\n */\n\nvar getBcGlobalKeys = function getBcGlobalKeys() {\n return window.bc ? Object.keys(window.bc).filter(function (k) {\n return REGEX_PLAYER_EMBED.test(k);\n }) : [];\n};\n/**\n * Gets known global object keys that Brightcove Players may create.\n *\n * @private\n * @return {string[]}\n * An array of global variables that were added during testing.\n */\n\n\nvar getGlobalKeys = function getGlobalKeys() {\n return Object.keys(window).filter(function (k) {\n return /^videojs/i.test(k) || /^(bc)$/.test(k);\n });\n};\n/**\n * Dispose all players from a copy of Video.js.\n *\n * @param {Function} videojs\n * A copy of Video.js.\n */\n\n\nvar disposeAll = function disposeAll(videojs) {\n if (!videojs) {\n return;\n }\n\n Object.keys(videojs.players).forEach(function (k) {\n var p = videojs.players[k];\n\n if (p) {\n p.dispose();\n }\n });\n};\n/**\n * Resets environment state.\n *\n * This will dispose ALL Video.js players on the page and remove ALL `bc` and\n * `videojs` globals it finds.\n */\n\n\nvar reset = function reset() {\n // Remove all script elements from the DOM.\n playerScriptCache.forEach(function (value, key) {\n // If no script URL is associated, skip it.\n if (!value) {\n return;\n } // Find all script elements and remove them.\n\n\n Array.prototype.slice.call(document.querySelectorAll(\"script[src=\\\"\" + value + \"\\\"]\")).forEach(function (el) {\n return el.parentNode.removeChild(el);\n });\n }); // Clear the internal cache that have been downloaded.\n\n playerScriptCache.clear(); // Dispose any remaining players from the `videojs` global.\n\n disposeAll(window.videojs); // There may be other `videojs` instances lurking in the bowels of the\n // `bc` global. This should eliminate any of those.\n\n getBcGlobalKeys().forEach(function (k) {\n return disposeAll(window.bc[k].videojs);\n }); // Delete any global object keys that were created.\n\n getGlobalKeys().forEach(function (k) {\n delete window[k];\n });\n};\n/**\n * At runtime, populate the cache with pre-detected players. This allows\n * people who have bundled their player or included a script tag before this\n * runs to not have to re-download players.\n */\n\n\nvar detectPlayers = function detectPlayers() {\n getBcGlobalKeys().forEach(function (k) {\n var matches = k.match(REGEX_PLAYER_EMBED);\n var props = {\n playerId: matches[1],\n embedId: matches[2]\n };\n\n if (!playerScriptCache.has(props)) {\n playerScriptCache.store(props);\n }\n });\n};\n\nvar env = {\n detectPlayers: detectPlayers,\n reset: reset\n};\n\nenv.detectPlayers();\n/**\n * Is this value a function?\n *\n * @private\n * @param {Function} fn\n * A maybe function.\n *\n * @return {boolean}\n * Whether or not the value is a function.\n */\n\nvar isFn = function isFn(fn) {\n return typeof fn === 'function';\n};\n/**\n * Checks whether an embedType parameter is valid.\n *\n * @private\n * @param {string} embedType\n * The value to test.\n *\n * @return {boolean}\n * Whether the value is valid.\n */\n\n\nvar isValidEmbedType = function isValidEmbedType(embedType) {\n return embedType === EMBED_TYPE_IN_PAGE || embedType === EMBED_TYPE_IFRAME;\n};\n/**\n * Checks whether an embedOptions.tagName parameter is valid.\n *\n * @private\n * @param {string} tagName\n * The value to test.\n *\n * @return {boolean}\n * Whether the value is valid.\n */\n\n\nvar isValidTagName = function isValidTagName(tagName) {\n return tagName === EMBED_TAG_NAME_VIDEOJS || tagName === EMBED_TAG_NAME_VIDEO;\n};\n/**\n * Checks whether a refNodeInsert parameter is valid.\n *\n * @private\n * @param {string} refNodeInsert\n * The value to test.\n *\n * @return {boolean}\n * Whether the value is valid.\n */\n\n\nvar isValidRootInsert = function isValidRootInsert(refNodeInsert) {\n return refNodeInsert === REF_NODE_INSERT_APPEND || refNodeInsert === REF_NODE_INSERT_PREPEND || refNodeInsert === REF_NODE_INSERT_BEFORE || refNodeInsert === REF_NODE_INSERT_AFTER || refNodeInsert === REF_NODE_INSERT_REPLACE;\n};\n/**\n * Checks parameters and throws an error on validation problems.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @throws {Error} If accountId is missing.\n * @throws {Error} If refNode is missing or invalid.\n * @throws {Error} If embedType is missing or invalid.\n * @throws {Error} If attempting to use an iframe embed with options.\n * @throws {Error} If attempting to use embedOptions.responsiveIframe with a\n * non-iframe embed.\n * @throws {Error} If refNodeInsert is missing or invalid.\n */\n\n\nvar checkParams = function checkParams(params) {\n var accountId = params.accountId,\n embedOptions = params.embedOptions,\n embedType = params.embedType,\n options = params.options,\n refNode = params.refNode,\n refNodeInsert = params.refNodeInsert;\n\n if (!accountId) {\n throw new Error('accountId is required');\n } else if (!isElInDom(refNode)) {\n throw new Error('refNode must resolve to a node attached to the DOM');\n } else if (!isValidEmbedType(embedType)) {\n throw new Error('embedType is missing or invalid');\n } else if (embedType === EMBED_TYPE_IFRAME && options) {\n throw new Error('cannot use options with an iframe embed');\n } else if (embedOptions && embedOptions.tagName !== undefined && !isValidTagName(embedOptions.tagName)) {\n throw new Error(\"embedOptions.tagName is invalid (value: \\\"\" + embedOptions.tagName + \"\\\")\");\n } else if (embedOptions && embedOptions.responsive && embedOptions.responsive.aspectRatio && !/^\\d+\\:\\d+$/.test(embedOptions.responsive.aspectRatio)) {\n throw new Error(\"embedOptions.responsive.aspectRatio must be in the \\\"n:n\\\" format (value: \\\"\" + embedOptions.responsive.aspectRatio + \"\\\")\");\n } else if (!isValidRootInsert(refNodeInsert)) {\n throw new Error('refNodeInsert is missing or invalid');\n }\n};\n/**\n * Normalizes a `refNode` param to an element - or `null`.\n *\n * @private\n * @param {Element|string} refNode\n * The value of a `refNode` param.\n *\n * @return {Element|null}\n * A DOM element or `null` if the `refNode` was given as a string and\n * did not match an element.\n */\n\n\nvar resolveRefNode = function resolveRefNode(refNode) {\n if (isElInDom(refNode)) {\n return refNode;\n }\n\n if (typeof refNode === 'string') {\n return document.querySelector(refNode);\n }\n\n return null;\n};\n/**\n * Initializes a player and returns it.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @param {Element} embed\n * An element that will be passed to the `bc()` function.\n *\n * @param {Function} resolve\n * A function to call if a player is successfully initialized.\n *\n * @param {Function} reject\n * A function to call if a player fails to be initialized.\n *\n * @return {Object}\n * A success object whose `ref` is a player.\n */\n\n\nvar initPlayer = function initPlayer(params, embed, resolve, reject) {\n var embedId = params.embedId,\n playerId = params.playerId;\n var bc = window.bc[playerId + \"_\" + embedId] || window.bc;\n\n if (!bc) {\n return reject(new Error(\"missing bc function for \" + playerId));\n }\n\n playerScriptCache.store(params);\n var player;\n\n try {\n player = bc(embed, params.options); // Add a PLAYER_LOADER property to bcinfo to indicate this player was\n // loaded via that mechanism.\n\n if (player.bcinfo) {\n player.bcinfo.PLAYER_LOADER = true;\n }\n } catch (x) {\n var message = 'Could not initialize the Brightcove Player.'; // Update the rejection message based on known conditions that can cause it.\n\n if (params.embedOptions.tagName === EMBED_TAG_NAME_VIDEOJS) {\n message += ' You are attempting to embed using a \"video-js\" element.' + ' Please ensure that your Player is v6.11.0 or newer in order to' + ' support this embed type. Alternatively, pass `\"video\"` for' + ' `embedOptions.tagName`.';\n }\n\n return reject(new Error(message));\n }\n\n resolve({\n type: EMBED_TYPE_IN_PAGE,\n ref: player\n });\n};\n/**\n * Loads a player from CDN and embeds it.\n *\n * @private\n * @param {Object} params\n * A parameters object. See README for details.\n *\n * @param {Function} resolve\n * A function to call if a player is successfully initialized.\n *\n * @param {Function} reject\n * A function to call if a player fails to be initialized.\n */\n\n\nvar loadPlayer = function loadPlayer(params, resolve, reject) {\n params.refNode = resolveRefNode(params.refNode);\n checkParams(params);\n var refNode = params.refNode,\n refNodeInsert = params.refNodeInsert; // Store a reference to the refNode parent. When we use the replace method,\n // we'll need it as the location to store the script element.\n\n var refNodeParent = refNode.parentNode;\n var embed = createEmbed(params); // If this is an iframe, all we need to do is create the embed code and\n // inject it. Because there is no reliable way to hook into an iframe from\n // the parent page, we simply resolve immediately upon creating the embed.\n\n if (params.embedType === EMBED_TYPE_IFRAME) {\n resolve({\n type: EMBED_TYPE_IFRAME,\n ref: embed\n });\n return;\n } // If we've already downloaded this script or detected a matching global, we\n // should have the proper `bc` global and can bypass the script creation\n // process.\n\n\n if (playerScriptCache.has(params)) {\n return initPlayer(params, embed, resolve, reject);\n }\n\n var script = document.createElement('script');\n\n script.onload = function () {\n return initPlayer(params, embed, resolve, reject);\n };\n\n script.onerror = function () {\n reject(new Error('player script could not be downloaded'));\n };\n\n script.async = true;\n script.charset = 'utf-8';\n script.src = urls.getUrl(params);\n\n if (refNodeInsert === REF_NODE_INSERT_REPLACE) {\n refNodeParent.appendChild(script);\n } else {\n refNode.appendChild(script);\n }\n};\n/**\n * A function for asynchronously loading a Brightcove Player into a web page.\n *\n * @param {Object} parameters\n * A parameters object. See README for details.\n *\n * @return {Promise|undefined}\n * A Promise, if possible.\n */\n\n\nvar brightcovePlayerLoader = function brightcovePlayerLoader(parameters) {\n var params = _extends$1({}, DEFAULTS, parameters);\n\n var Promise = params.Promise,\n onSuccess = params.onSuccess,\n onFailure = params.onFailure; // When Promise is not available or any success/failure callback is given,\n // do not attempt to use Promises.\n\n if (!isFn(Promise) || isFn(onSuccess) || isFn(onFailure)) {\n return loadPlayer(params, isFn(onSuccess) ? onSuccess : function () {}, isFn(onFailure) ? onFailure : function (err) {\n throw err;\n });\n } // Promises are supported, use 'em.\n\n\n return new Promise(function (resolve, reject) {\n return loadPlayer(params, resolve, reject);\n });\n};\n/**\n * Expose a non-writable, non-configurable property on the\n * `brightcovePlayerLoader` function.\n *\n * @private\n * @param {string} key\n * The property key.\n *\n * @param {string|Function} value\n * The value.\n */\n\n\nvar expose = function expose(key, value) {\n Object.defineProperty(brightcovePlayerLoader, key, {\n configurable: false,\n enumerable: true,\n value: value,\n writable: false\n });\n};\n/**\n * Get the base URL for players. By default, this will be the Brightcove CDN.\n *\n * @return {string}\n * The current base URL.\n */\n\n\nexpose('getBaseUrl', function () {\n return urls.getBaseUrl();\n});\n/**\n * Set the base URL for players. By default, this will be the Brightcove CDN,\n * but can be overridden with this function.\n *\n * @param {string} baseUrl\n * A new base URL (instead of Brightcove CDN).\n */\n\nexpose('setBaseUrl', function (baseUrl) {\n urls.setBaseUrl(baseUrl);\n});\n/**\n * Get the URL for a player.\n */\n\nexpose('getUrl', function (options) {\n return urls.getUrl(options);\n});\n/**\n * Completely resets global state.\n *\n * This will dispose ALL Video.js players on the page and remove ALL `bc` and\n * `videojs` globals it finds.\n */\n\nexpose('reset', function () {\n return env.reset();\n}); // Define some read-only constants on the exported function.\n\n[['EMBED_TAG_NAME_VIDEO', EMBED_TAG_NAME_VIDEO], ['EMBED_TAG_NAME_VIDEOJS', EMBED_TAG_NAME_VIDEOJS], ['EMBED_TYPE_IN_PAGE', EMBED_TYPE_IN_PAGE], ['EMBED_TYPE_IFRAME', EMBED_TYPE_IFRAME], ['REF_NODE_INSERT_APPEND', REF_NODE_INSERT_APPEND], ['REF_NODE_INSERT_PREPEND', REF_NODE_INSERT_PREPEND], ['REF_NODE_INSERT_BEFORE', REF_NODE_INSERT_BEFORE], ['REF_NODE_INSERT_AFTER', REF_NODE_INSERT_AFTER], ['REF_NODE_INSERT_REPLACE', REF_NODE_INSERT_REPLACE], ['VERSION', version]].forEach(function (arr) {\n expose(arr[0], arr[1]);\n});\n\n/**\n * These prop changes can be handled by an internal player state change rather\n * than a full dispose/recreate.\n *\n * @private\n * @type {Object}\n */\n\nvar UPDATEABLE_PROPS = ['catalogSearch', 'catalogSequence', 'playlistId', 'playlistVideoId', 'videoId'];\n\nvar logError = function logError(err) {\n /* eslint-disable no-console */\n if (err && console && console.error) {\n console.error(err);\n }\n /* eslint-enable no-console */\n\n};\n/**\n * The official React component for the Brightcove Player!\n *\n * This uses `@brightcove/player-loader` to load a player into a React\n * component based on the given props.\n */\n\n\nvar ReactPlayerLoader =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReactPlayerLoader, _React$Component);\n\n /**\n * Create a new Brightcove player.\n *\n * @param {Object} props\n * Most options will be passed along to player-loader, except for\n * options that are listed. See README.md for more detail.\n *\n * @param {string} [props.baseUrl]\n * The base URL to use when requesting a player\n *\n * @param {Object} [props.attrs]\n * Used to set attributes on the component element that contains the\n * embedded Brightcove Player.\n *\n * @param {boolean} [props.manualReloadFromPropChanges]\n * Used to specify if reloading the player after prop changes will be handled manually.\n *\n */\n function ReactPlayerLoader(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.refNode = null;\n\n _this.setRefNode = function (ref) {\n _this.refNode = ref;\n };\n\n _this.loadPlayer = _this.loadPlayer.bind(_assertThisInitialized(_this));\n return _this;\n }\n /**\n * Loads a new player based on the current props.\n */\n\n\n var _proto = ReactPlayerLoader.prototype;\n\n _proto.loadPlayer = function loadPlayer() {\n var _this2 = this;\n\n // If there is any player currently loaded, dispose it before fetching a\n // new one.\n this.disposePlayer(); // We need to provide our own callbacks below, so we cache these\n // user-provided callbacks for use later.\n\n var userSuccess = this.props.onSuccess;\n var userFailure = this.props.onFailure;\n\n var options = _extends({}, this.props, {\n refNode: this.refNode,\n refNodeInsert: 'append',\n onSuccess: function onSuccess(_ref) {\n var ref = _ref.ref,\n type = _ref.type;\n\n // If the component is not mounted when the callback fires, dispose\n // the player and bail out.\n if (!_this2.isMounted_) {\n _this2.disposePlayer(ref);\n\n return;\n } // Store a player reference on the component.\n\n\n _this2.player = ref; // Null out the player reference when the player is disposed from\n // outside the component.\n\n if (type === 'in-page') {\n ref.one('dispose', function () {\n _this2.player = null;\n });\n } // Add a REACT_PLAYER_LOADER property to bcinfo to indicate this player\n // was loaded via that mechanism.\n\n\n if (ref.bcinfo) {\n ref.bcinfo.REACT_PLAYER_LOADER = true;\n } // Call a user-provided onSuccess callback.\n\n\n if (typeof userSuccess === 'function') {\n userSuccess({\n ref: ref,\n type: type\n });\n }\n },\n onFailure: function onFailure(error) {\n // Ignore errors when not mounted.\n if (!_this2.isMounted_) {\n return;\n } // Call a user-provided onFailure callback.\n\n\n if (typeof userFailure === 'function') {\n userFailure(error);\n return;\n } // Fall back to throwing an error;\n\n\n throw new Error(error);\n }\n }); // Delete props that are not meant to be passed to player-loader.\n\n\n delete options.attrs;\n delete options.baseUrl;\n delete options.manualReloadFromPropChanges; // If a base URL is provided, it should only apply to this player load.\n // This means we need to back up the original base URL and restore it\n // _after_ we call player loader.\n\n var originalBaseUrl = brightcovePlayerLoader.getBaseUrl();\n\n if (this.props.baseUrl) {\n brightcovePlayerLoader.setBaseUrl(this.props.baseUrl);\n }\n\n brightcovePlayerLoader(options);\n brightcovePlayerLoader.setBaseUrl(originalBaseUrl);\n }\n /**\n * Disposes the current player, if there is one.\n */\n ;\n\n _proto.disposePlayer = function disposePlayer() {\n // Nothing to dispose.\n if (!this.player) {\n return;\n } // Dispose an in-page player.\n\n\n if (this.player.dispose) {\n this.player.dispose(); // Dispose an iframe player.\n } else if (this.player.parentNode) {\n this.player.parentNode.removeChild(this.player);\n } // Null out the player reference.\n\n\n this.player = null;\n }\n /**\n * Find the index of the `playlistVideoId` prop within the player's playlist.\n *\n * @param {Object[]} playlist\n * An array of playlist item objects.\n *\n * @return {number}\n * The index of the `playlistVideoId` or `-1` if the player has been\n * disposed, is not using the playlist plugin, or if not found.\n */\n ;\n\n _proto.findPlaylistVideoIdIndex_ = function findPlaylistVideoIdIndex_(playlist) {\n var playlistVideoId = this.props.playlistVideoId;\n\n if (Array.isArray(playlist) && playlistVideoId) {\n for (var i = 0; i < playlist.length; i++) {\n var _playlist$i = playlist[i],\n id = _playlist$i.id,\n referenceId = _playlist$i.referenceId;\n\n if (id === playlistVideoId || \"ref:\" + referenceId === playlistVideoId) {\n return i;\n }\n }\n }\n\n return -1;\n }\n /**\n * Create a Playback API callback function for the component's player.\n *\n * @private\n * @param {string} requestType\n * The Playback API request type (e.g. \"video\" or \"playlist\").\n *\n * @param {Object} changes\n * An object. The keys of this object are the props that changed.\n *\n * @return {Function}\n * A callback for the Playback API request.\n */\n ;\n\n _proto.createPlaybackAPICallback_ = function createPlaybackAPICallback_(requestType, changes) {\n var _this3 = this;\n\n return function (err, data) {\n if (err) {\n logError(err);\n return;\n } // If the playlistVideoId changed and this is a playlist request, we\n // need to search through the playlist items to find the correct\n // starting index.\n\n\n if (requestType === 'playlist' && changes.playlistVideoId) {\n var i = _this3.findPlaylistVideoIdIndex_(data);\n\n if (i > -1) {\n data.startingIndex = i;\n }\n }\n\n _this3.player.catalog.load(data);\n };\n }\n /**\n * Update the player based on changes to certain props that do not require\n * a full player dispose/recreate.\n *\n * @param {Object} changes\n * An object. The keys of this object are the props that changed.\n */\n ;\n\n _proto.updatePlayer = function updatePlayer(changes) {\n // No player exists, player is disposed, or not using the catalog\n if (!this.player || !this.player.el || !this.player.el()) {\n return;\n } // If the player is using the catalog plugin, we _may_ populate this\n // variable with an object.\n\n\n var catalogParams;\n\n if (this.player.usingPlugin('catalog')) {\n // There is a new catalog sequence request. This takes precedence over\n // other catalog updates because it is a different call.\n if (changes.catalogSequence && this.props.catalogSequence) {\n var callback = this.createPlaybackAPICallback_('sequence', changes);\n this.player.catalog.getLazySequence(this.props.catalogSequence, callback, this.props.adConfigId);\n return;\n }\n\n if (changes.videoId && this.props.videoId) {\n catalogParams = {\n type: 'video',\n id: this.props.videoId\n };\n } else if (changes.playlistId && this.props.playlistId) {\n catalogParams = {\n type: 'playlist',\n id: this.props.playlistId\n };\n } else if (changes.catalogSearch && this.props.catalogSearch) {\n catalogParams = {\n type: 'search',\n q: this.props.catalogSearch\n };\n }\n } // If `catalogParams` is `undefined` here, that means the player either\n // does not have the catalog plugin or no valid catalog request can be made.\n\n\n if (catalogParams) {\n if (this.props.adConfigId) {\n catalogParams.adConfigId = this.props.adConfigId;\n }\n\n if (this.props.deliveryConfigId) {\n catalogParams.deliveryConfigId = this.props.deliveryConfigId;\n } // We use the callback style here to make tests simpler in IE11 (no need\n // for a Promise polyfill).\n\n\n var _callback = this.createPlaybackAPICallback_(catalogParams.type, changes);\n\n this.player.catalog.get(catalogParams, _callback); // If no catalog request is being made, we may still need to update the\n // playlist selected video.\n } else if (changes.playlistVideoId && this.props.playlistVideoId && this.player.usingPlugin('playlist')) {\n var i = this.findPlaylistVideoIdIndex_(this.player.playlist());\n\n if (i > -1) {\n this.player.playlist.currentItem(i);\n }\n }\n }\n /**\n * Called just after the component has mounted.\n */\n ;\n\n _proto.componentDidMount = function componentDidMount() {\n this.isMounted_ = true;\n this.loadPlayer();\n }\n /**\n * Called when the component props are updated.\n *\n * Some prop changes may trigger special behavior (see `propChangeHandlers`),\n * but if ANY prop is changed that is NOT handled, the player will be\n * disposed/recreated entirely.\n *\n * @param {Object} prevProps\n * The previous props state before change.\n */\n ;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this4 = this;\n\n // Calculate the prop changes.\n var changes = Object.keys(prevProps).reduce(function (acc, key) {\n var previous = prevProps[key];\n var current = _this4.props[key]; // Do not compare functions\n\n if (typeof current === 'function') {\n return acc;\n }\n\n if (typeof current === 'object' && current !== null) {\n if (JSON.stringify(current) !== JSON.stringify(previous)) {\n acc[key] = true;\n }\n\n return acc;\n }\n\n if (current !== previous) {\n acc[key] = true;\n }\n\n return acc;\n }, {});\n\n if (!this.props.manualReloadFromPropChanges) {\n // Dispose and recreate the player if any changed keys cannot be handled.\n if (Object.keys(changes).some(function (k) {\n return UPDATEABLE_PROPS.indexOf(k) === -1;\n })) {\n this.loadPlayer();\n return;\n }\n }\n\n this.updatePlayer(changes);\n }\n /**\n * Called just before a component unmounts. Disposes the player.\n */\n ;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.isMounted_ = false;\n this.disposePlayer();\n }\n /**\n * Renders the component.\n *\n * @return {ReactElement}\n * The react element to render.\n */\n ;\n\n _proto.render = function render() {\n var props = _extends({\n className: 'brightcove-react-player-loader'\n }, this.props.attrs, {\n ref: this.setRefNode\n });\n\n return React.createElement('div', props);\n };\n\n return ReactPlayerLoader;\n}(React.Component);\n\nexport default ReactPlayerLoader;\n"]}
\ No newline at end of file
diff --git a/build/entry.css b/build/entry.css
deleted file mode 100644
index e4ffbb1c..00000000
--- a/build/entry.css
+++ /dev/null
@@ -1,2 +0,0 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}.bd__button{padding:10px 0;text-align:right}.bd__button>a{font-weight:100;text-decoration:none;color:#bdc3cb;font-family:sans-serif}.bd__button>a:hover{color:#798897}
-/*# sourceMappingURL=/entry.css.map */
\ No newline at end of file
diff --git a/build/entry.css.map b/build/entry.css.map
deleted file mode 100644
index f8fd3663..00000000
--- a/build/entry.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["reset.css","iframe.css"],"names":[],"mappings":"AACA,2ZAaE,QAAS,CACT,SAAU,CACV,QAAS,CACT,cAAe,CACf,YAAa,CACb,uBACF,CAEA,8EAEE,aACF,CACA,KACE,aACF,CACA,MACE,eACF,CACA,aACE,WACF,CACA,oDAEE,UAAW,CACX,YACF,CACA,MACE,wBAAyB,CACzB,gBACF,CC3CA,YACE,cAAe,CACf,gBACF,CACA,cACE,eAAgB,CAChB,oBAAqB,CACrB,aAAc,CACd,sBACF,CACA,oBACE,aACF","file":"entry.css","sourceRoot":"..","sourcesContent":["/* reset css */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n display: block;\n}\nbody {\n line-height: 1;\n}\nol, ul {\n list-style: none;\n}\nblockquote, q {\n quotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n content: '';\n content: none;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n",".bd__button {\n padding: 10px 0;\n text-align: right;\n}\n.bd__button > a{\n font-weight: 100;\n text-decoration: none;\n color: #BDC3CB;\n font-family: sans-serif;\n}\n.bd__button > a:hover {\n color: #798897;\n}"]}
\ No newline at end of file
diff --git a/build/entry.js b/build/entry.js
deleted file mode 100644
index 2a6a0155..00000000
--- a/build/entry.js
+++ /dev/null
@@ -1,473 +0,0 @@
-parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c1?t-1:0),n=1;n1?t-1:0),n=1;n0&&"string"==typeof r[r.length-1]&&0===r[r.length-1].indexOf("\n in"))){var n=E.ReactDebugCurrentFrame.getStackAddendum();""!==n&&(t+="%s",r=r.concat([n]))}var o=r.map(function(e){return""+e});o.unshift("Warning: "+t),Function.prototype.apply.call(console[e],console,o);try{var a=0,u="Warning: "+t.replace(/%s/g,function(){return r[a++]});throw new Error(u)}catch(i){}}e(E,{ReactDebugCurrentFrame:j,ReactComponentTreeHook:{}});var I={};function F(e,t){var r=e.constructor,n=r&&(r.displayName||r.name)||"ReactClass",o=n+"."+t;I[o]||(T("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",t,n),I[o]=!0)}var N={isMounted:function(e){return!1},enqueueForceUpdate:function(e,t,r){F(e,"forceUpdate")},enqueueReplaceState:function(e,t,r,n){F(e,"replaceState")},enqueueSetState:function(e,t,r,n){F(e,"setState")}},U={};function z(e,t,r){this.props=e,this.context=t,this.refs=U,this.updater=r||N}Object.freeze(U),z.prototype.isReactComponent={},z.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},z.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};var q={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},V=function(e,t){Object.defineProperty(z.prototype,e,{get:function(){A("%s(...) is deprecated in plain JavaScript React classes. %s",t[0],t[1])}})};for(var M in q)q.hasOwnProperty(M)&&V(M,q[M]);function W(){}function L(e,t,r){this.props=e,this.context=t,this.refs=U,this.updater=r||N}W.prototype=z.prototype;var H=L.prototype=new W;H.constructor=L,e(H,z.prototype),H.isPureReactComponent=!0;var Y,B,J,X=Object.prototype.hasOwnProperty,G={key:!0,ref:!0,__self:!0,__source:!0};function K(e){if(X.call(e,"ref")){var t=Object.getOwnPropertyDescriptor(e,"ref").get;if(t&&t.isReactWarning)return!1}return void 0!==e.ref}function Q(e){if(X.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return void 0!==e.key}J={};var Z=function(e,t,r,o,a,u,i){var s={$$typeof:n,type:e,key:t,ref:r,props:i,_owner:u,_store:{}};return Object.defineProperty(s._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(s,"_self",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.defineProperty(s,"_source",{configurable:!1,enumerable:!1,writable:!1,value:a}),Object.freeze&&(Object.freeze(s.props),Object.freeze(s)),s};function ee(e,t,r){var n,o={},a=null,u=null,i=null,s=null;if(null!=t)for(n in K(t)&&(u=t.ref,function(e){if("string"==typeof e.ref&&k.current&&e.__self&&k.current.stateNode!==e.__self){var t=P(k.current.type);J[t]||(T('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref',P(k.current.type),e.ref),J[t]=!0)}}(t)),Q(t)&&(a=""+t.key),i=void 0===t.__self?null:t.__self,s=void 0===t.__source?null:t.__source,t)X.call(t,n)&&!G.hasOwnProperty(n)&&(o[n]=t[n]);var c=arguments.length-2;if(1===c)o.children=r;else if(c>1){for(var l=Array(c),f=0;f.")}return t}(t);if(!_e[r]){_e[r]=!0;var n="";e&&e._owner&&e._owner!==k.current&&(n=" It was passed a child from "+P(e._owner.type)+"."),O(e),T('Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',r,n),O(null)}}}function we(e,t){if("object"==typeof e)if(Array.isArray(e))for(var r=0;r",s=" Did you accidentally export a JSX literal instead of a component?"):c=typeof e,T("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",c,s)}var f=ee.apply(this,arguments);if(null==f)return f;if(i)for(var p=2;p1){for(var d=Array(p),y=0;y
is not supported and will be removed in a future major release. Did you mean to render instead?")),r.Provider},set:function(e){r.Provider=e}},_currentValue:{get:function(){return r._currentValue},set:function(e){r._currentValue=e}},_currentValue2:{get:function(){return r._currentValue2},set:function(e){r._currentValue2=e}},_threadCount:{get:function(){return r._threadCount},set:function(e){r._threadCount=e}},Consumer:{get:function(){return n||(n=!0,T("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),r.Consumer}}}),r.Consumer=a,r._currentRenderer=null,r._currentRenderer2=null,r},exports.createElement=$e,exports.createFactory=Ee,exports.createRef=function(){var e={current:null};return Object.seal(e),e},exports.forwardRef=function(e){return null!=e&&e.$$typeof===y?T("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):"function"!=typeof e?T("forwardRef requires a render function but was given %s.",null===e?"null":typeof e):0!==e.length&&2!==e.length&&T("forwardRef render functions accept exactly two parameters: props and ref. %s",1===e.length?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),null!=e&&(null==e.defaultProps&&null==e.propTypes||T("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?")),{$$typeof:f,render:e}},exports.isValidElement=te,exports.lazy=function(e){var t,r,n={$$typeof:m,_ctor:e,_status:-1,_result:null};return Object.defineProperties(n,{defaultProps:{configurable:!0,get:function(){return t},set:function(e){T("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),t=e,Object.defineProperty(n,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return r},set:function(e){T("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),r=e,Object.defineProperty(n,"propTypes",{enumerable:!0})}}}),n},exports.memo=function(e,t){return he(e)||T("memo: The first argument must be a component. Instead received: %s",null===e?"null":typeof e),{$$typeof:y,type:e,compare:void 0===t?null:t}},exports.useCallback=function(e,t){return be().useCallback(e,t)},exports.useContext=function(e,t){var r=be();if(void 0!==t&&T("useContext() second argument is reserved for future use in React. Passing it is not supported. You passed: %s.%s",t,"number"==typeof t&&Array.isArray(arguments[2])?"\n\nDid you call array.map(useContext)? Calling Hooks inside a loop is not supported. Learn more at https://fb.me/rules-of-hooks":""),void 0!==e._context){var n=e._context;n.Consumer===e?T("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):n.Provider===e&&T("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return r.useContext(e,t)},exports.useDebugValue=function(e,t){return be().useDebugValue(e,t)},exports.useEffect=function(e,t){return be().useEffect(e,t)},exports.useImperativeHandle=function(e,t,r){return be().useImperativeHandle(e,t,r)},exports.useLayoutEffect=function(e,t){return be().useLayoutEffect(e,t)},exports.useMemo=function(e,t){return be().useMemo(e,t)},exports.useReducer=function(e,t,r){return be().useReducer(e,t,r)},exports.useRef=function(e){return be().useRef(e)},exports.useState=function(e){return be().useState(e)},exports.version="16.14.0"})();
-},{"object-assign":"J4Nk","prop-types/checkPropTypes":"Qo3t"}],"n8MK":[function(require,module,exports) {
-"use strict";module.exports=require("./cjs/react.development.js");
-},{"./cjs/react.development.js":"dkFq"}],"x5YG":[function(require,module,exports) {
-"use strict";(function(){var e,n,t,r,o,u=!1,i=!0;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,a=null,s=function(){if(null!==l)try{var e=exports.unstable_now();l(!0,e),l=null}catch(n){throw setTimeout(s,0),n}},f=Date.now();exports.unstable_now=function(){return Date.now()-f},e=function(n){null!==l?setTimeout(e,0,n):(l=n,setTimeout(s,0))},n=function(e,n){a=setTimeout(e,n)},t=function(){clearTimeout(a)},r=function(){return!1},o=exports.unstable_forceFrameRate=function(){}}else{var c=window.performance,p=window.Date,d=window.setTimeout,v=window.clearTimeout;if("undefined"!=typeof console){var b=window.requestAnimationFrame,w=window.cancelAnimationFrame;"function"!=typeof b&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof w&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof c&&"function"==typeof c.now)exports.unstable_now=function(){return c.now()};else{var y=p.now();exports.unstable_now=function(){return p.now()-y}}var x=!1,m=null,_=-1,h=5,g=0;r=function(){return exports.unstable_now()>=g},o=function(){},exports.unstable_forceFrameRate=function(e){e<0||e>125?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):h=e>0?Math.floor(1e3/e):5};var T=new MessageChannel,k=T.port2;T.port1.onmessage=function(){if(null!==m){var e=exports.unstable_now();g=e+h;try{m(!0,e)?k.postMessage(null):(x=!1,m=null)}catch(n){throw k.postMessage(null),n}}else x=!1},e=function(e){m=e,x||(x=!0,k.postMessage(null))},n=function(e,n){_=d(function(){e(exports.unstable_now())},n)},t=function(){v(_),_=-1}}function E(e,n){var t=e.length;e.push(n),function(e,n,t){var r=t;for(;;){var o=r-1>>>1,u=e[o];if(!(void 0!==u&&I(u,n)>0))return;e[o]=n,e[r]=u,r=o}}(e,n,t)}function P(e){var n=e[0];return void 0===n?null:n}function A(e){var n=e[0];if(void 0!==n){var t=e.pop();return t!==n&&(e[0]=t,function(e,n,t){var r=t,o=e.length;for(;rG){if((G*=2)>W)return console.error("Scheduler Profiling: Event log exceeded maximum size. Don't forget to call `stopLoggingProfilingEvents()`."),void oe();var t=new Int32Array(4*G);t.set(J),H=t.buffer,J=t}J.set(e,n)}}function oe(){var e=H;return G=0,H=null,J=null,K=0,e}function ue(e,n){N[z]++,null!==J&&re([O,1e3*n,e.id,e.priorityLevel])}function ie(e,n){N[q]=L,N[Y]=0,N[z]--,null!==J&&re([V,1e3*n,e.id])}function le(e,n){N[q]=L,N[Y]=0,N[j]=0,null!==J&&re([ee,1e3*n,e.id,R])}var ae=-1,se=250,fe=5e3,ce=1e4,pe=1073741823,de=[],ve=[],be=1,we=null,ye=F,xe=!1,me=!1,_e=!1;function he(e){for(var n=P(ve);null!==n;){if(null===n.callback)A(ve);else{if(!(n.startTime<=e))return;A(ve),n.sortIndex=n.expirationTime,E(de,n),ue(n,e),n.isQueued=!0}n=P(ve)}}function ge(t){if(_e=!1,he(t),!me)if(null!==P(de))me=!0,e(Te);else{var r=P(ve);null!==r&&n(ge,r.startTime-t)}}function Te(e,n){var r;r=n,null!==J&&re([te,1e3*r,S]),me=!1,_e&&(_e=!1,t()),xe=!0;var o=ye;try{if(!i)return ke(e,n);try{return ke(e,n)}catch(l){if(null!==we){var u=exports.unstable_now();!function(e,n){N[q]=L,N[Y]=0,N[z]--,null!==J&&re([X,1e3*n,e.id])}(we,u),we.isQueued=!1}throw l}}finally{we=null,ye=o,xe=!1,function(e){S++,null!==J&&re([ne,1e3*e,S])}(exports.unstable_now())}}function ke(e,t){var o,i,l=t;for(he(l),we=P(de);null!==we&&!u&&(!(we.expirationTime>l)||e&&!r());){var a=we.callback;if(null!==a){we.callback=null,ye=we.priorityLevel;var s=we.expirationTime<=l;o=we,i=l,R++,N[q]=o.priorityLevel,N[Y]=o.id,N[j]=R,null!==J&&re([$,1e3*i,o.id,R]);var f=a(s);l=exports.unstable_now(),"function"==typeof f?(we.callback=f,le(we,l)):(ie(we,l),we.isQueued=!1,we===P(de)&&A(de)),he(l)}else A(de);we=P(de)}if(null!==we)return!0;var c=P(ve);return null!==c&&n(ge,c.startTime-l),!1}function Ee(e){switch(e){case M:return ae;case B:return se;case Q:return pe;case C:return ce;case F:default:return fe}}var Pe=o,Ae={startLoggingProfilingEvents:function(){G=U,H=new ArrayBuffer(4*G),J=new Int32Array(H),K=0},stopLoggingProfilingEvents:oe,sharedProfilingBuffer:D};exports.unstable_IdlePriority=Q,exports.unstable_ImmediatePriority=M,exports.unstable_LowPriority=C,exports.unstable_NormalPriority=F,exports.unstable_Profiling=Ae,exports.unstable_UserBlockingPriority=B,exports.unstable_cancelCallback=function(e){e.isQueued&&(function(e,n){N[z]--,null!==J&&re([Z,1e3*n,e.id])}(e,exports.unstable_now()),e.isQueued=!1),e.callback=null},exports.unstable_continueExecution=function(){me||xe||(me=!0,e(Te))},exports.unstable_getCurrentPriorityLevel=function(){return ye},exports.unstable_getFirstCallbackNode=function(){return P(de)},exports.unstable_next=function(e){var n;switch(ye){case M:case B:case F:n=F;break;default:n=ye}var t=ye;ye=n;try{return e()}finally{ye=t}},exports.unstable_pauseExecution=function(){},exports.unstable_requestPaint=Pe,exports.unstable_runWithPriority=function(e,n){switch(e){case M:case B:case F:case C:case Q:break;default:e=F}var t=ye;ye=e;try{return n()}finally{ye=t}},exports.unstable_scheduleCallback=function(r,o,u){var i,l,a=exports.unstable_now();if("object"==typeof u&&null!==u){var s=u.delay;i="number"==typeof s&&s>0?a+s:a,l="number"==typeof u.timeout?u.timeout:Ee(r)}else l=Ee(r),i=a;var f=i+l,c={id:be++,callback:o,priorityLevel:r,startTime:i,expirationTime:f,sortIndex:-1,isQueued:!1};return i>a?(c.sortIndex=i,E(ve,c),null===P(de)&&c===P(ve)&&(_e?t():_e=!0,n(ge,i-a))):(c.sortIndex=f,E(de,c),ue(c,a),c.isQueued=!0,me||xe||(me=!0,e(Te))),c},exports.unstable_shouldYield=function(){var e=exports.unstable_now();he(e);var n=P(de);return n!==we&&null!==we&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime3&&void 0!==arguments[3]?arguments[3]:n,u={__count:1,id:r++,name:t,timestamp:e},i=exports.__interactionsRef.current,a=new Set(i);a.add(u),exports.__interactionsRef.current=a;var l,s=exports.__subscriberRef.current;try{null!==s&&s.onInteractionTraced(u)}finally{try{null!==s&&s.onWorkStarted(a,c)}finally{try{l=o()}finally{exports.__interactionsRef.current=i;try{null!==s&&s.onWorkStopped(a,c)}finally{u.__count--,null!==s&&0===u.__count&&s.onInteractionScheduledWorkCompleted(u)}}}}return l},exports.unstable_unsubscribe=function(n){e.delete(n),0===e.size&&(exports.__subscriberRef.current=null)},exports.unstable_wrap=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n,e=exports.__interactionsRef.current,o=exports.__subscriberRef.current;null!==o&&o.onWorkScheduled(e,t),e.forEach(function(n){n.__count++});var c=!1;function u(){var n=exports.__interactionsRef.current;exports.__interactionsRef.current=e,o=exports.__subscriberRef.current;try{var u;try{null!==o&&o.onWorkStarted(e,t)}finally{try{u=r.apply(void 0,arguments)}finally{exports.__interactionsRef.current=n,null!==o&&o.onWorkStopped(e,t)}}return u}finally{c||(c=!0,e.forEach(function(n){n.__count--,null!==o&&0===n.__count&&o.onInteractionScheduledWorkCompleted(n)}))}}return u.cancel=function(){o=exports.__subscriberRef.current;try{null!==o&&o.onWorkCanceled(e,t)}finally{e.forEach(function(n){n.__count--,o&&0===n.__count&&o.onInteractionScheduledWorkCompleted(n)})}},u}})();
-},{}],"lEVr":[function(require,module,exports) {
-"use strict";module.exports=require("./cjs/scheduler-tracing.development.js");
-},{"./cjs/scheduler-tracing.development.js":"WeV9"}],"BUHy":[function(require,module,exports) {
-"use strict";(function(){var e=require("react"),t=require("object-assign"),n=require("scheduler"),r=require("prop-types/checkPropTypes"),o=require("scheduler/tracing"),a=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function i(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r0&&"string"==typeof n[n.length-1]&&0===n[n.length-1].indexOf("\n in"))){var r=a.ReactDebugCurrentFrame.getStackAddendum();""!==r&&(t+="%s",n=n.concat([r]))}var o=n.map(function(e){return""+e});o.unshift("Warning: "+t),Function.prototype.apply.call(console[e],console,o);try{var i=0,l="Warning: "+t.replace(/%s/g,function(){return n[i++]});throw new Error(l)}catch(u){}}if(a.hasOwnProperty("ReactCurrentDispatcher")||(a.ReactCurrentDispatcher={current:null}),a.hasOwnProperty("ReactCurrentBatchConfig")||(a.ReactCurrentBatchConfig={suspense:null}),!e)throw Error("ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.");var s=function(e,t,n,r,o,a,i,u,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(l){this.onError(l)}};if("undefined"!=typeof window&&"function"==typeof window.dispatchEvent&&"undefined"!=typeof document&&"function"==typeof document.createEvent){var c=document.createElement("react");s=function(e,t,n,r,o,a,i,l,u){if("undefined"==typeof document)throw Error("The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.");var s,d=document.createEvent("Event"),f=!0,p=window.event,m=Object.getOwnPropertyDescriptor(window,"event"),h=Array.prototype.slice.call(arguments,3);var v=!1,g=!1;function y(e){if(s=e.error,v=!0,null===s&&0===e.colno&&0===e.lineno&&(g=!0),e.defaultPrevented&&null!=s&&"object"==typeof s)try{s._suppressLogging=!0}catch(t){}}var b="react-"+(e||"invokeguardedcallback");window.addEventListener("error",y),c.addEventListener(b,function e(){c.removeEventListener(b,e,!1),void 0!==window.event&&window.hasOwnProperty("event")&&(window.event=p),t.apply(n,h),f=!1},!1),d.initEvent(b,!1,!1),c.dispatchEvent(d),m&&Object.defineProperty(window,"event",m),f&&(v?g&&(s=new Error("A cross-origin error was thrown. React doesn't have access to the actual error object in development. See https://fb.me/react-crossorigin-error for more information.")):s=new Error("An error was thrown inside one of your components, but React doesn't know what it was. This is likely due to browser flakiness. React does its best to preserve the \"Pause on exceptions\" behavior of the DevTools, which requires some DEV-mode only tricks. It's possible that these don't work in your browser. Try triggering the error in production mode, or switching to a modern browser. If you suspect that this is actually an issue with React, please file an issue."),this.onError(s)),window.removeEventListener("error",y)}}var d=s,f=!1,p=null,m=!1,h=null,v={onError:function(e){f=!0,p=e}};function g(e,t,n,r,o,a,i,l,u){f=!1,p=null,d.apply(v,arguments)}function y(){return f}function b(){if(f){var e=p;return f=!1,p=null,e}throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.")}var w,k=null,x=null,T=null;function S(e,t,n){var r=e.type||"unknown-event";e.currentTarget=T(n),function(e,t,n,r,o,a,i,l,u){if(g.apply(this,arguments),f){var s=b();m||(m=!0,h=s)}}(r,t,void 0,e),e.currentTarget=null}w=function(e){var t=e._dispatchListeners,n=e._dispatchInstances,r=Array.isArray(t),o=r?t.length:t?1:0,a=Array.isArray(n),i=a?n.length:n?1:0;a===r&&i===o||l("EventPluginUtils: Invalid `event`.")};var E=0,C=1,R=2,P=3,I=4,_=5,D=6,N=7,M=8,O=9,z=10,A=11,U=12,L=13,F=14,W=15,j=16,B=17,V=18,H=19,Q=20,q=21,Y=22,$=null,K={};function X(){if($)for(var e in K){var t=K[e],n=$.indexOf(e);if(!(n>-1))throw Error("EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `"+e+"`.");if(!J[n]){if(!t.extractEvents)throw Error("EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `"+e+"` does not.");J[n]=t;var r=t.eventTypes;for(var o in r)if(!G(r[o],t,o))throw Error("EventPluginRegistry: Failed to publish event `"+o+"` for plugin `"+e+"`.")}}}function G(e,t,n){if(ee.hasOwnProperty(n))throw Error("EventPluginRegistry: More than one plugin attempted to publish the same event name, `"+n+"`.");ee[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r){if(r.hasOwnProperty(o))Z(r[o],t,n)}return!0}return!!e.registrationName&&(Z(e.registrationName,t,n),!0)}function Z(e,t,n){if(te[e])throw Error("EventPluginRegistry: More than one plugin attempted to publish the same registration name, `"+e+"`.");te[e]=t,ne[e]=t.eventTypes[n].dependencies;var r=e.toLowerCase();re[r]=e,"onDoubleClick"===e&&(re.ondblclick=e)}var J=[],ee={},te={},ne={},re={};function oe(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(!K.hasOwnProperty(n)||K[n]!==r){if(K[n])throw Error("EventPluginRegistry: Cannot inject two different event plugins using the same name, `"+n+"`.");K[n]=r,t=!0}}t&&X()}var ae=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),ie=1,le=32,ue=64,se=null,ce=null,de=null;function fe(e){var t=x(e);if(t){if("function"!=typeof se)throw Error("setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.");var n=t.stateNode;if(n){var r=k(n);se(t.stateNode,t.type,r)}}}function pe(e){ce?de?de.push(e):de=[e]:ce=e}function me(){if(ce){var e=ce,t=de;if(ce=null,de=null,fe(e),t)for(var n=0;n2&&("o"===e[0]||"O"===e[0])&&("n"===e[1]||"N"===e[1]))}function He(e,t,n,r){if(null!==n&&n.type===Ie)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":if(r)return!1;if(null!==n)return!n.acceptsBooleans;var o=e.toLowerCase().slice(0,5);return"data-"!==o&&"aria-"!==o;default:return!1}}function Qe(e,t,n,r){if(null==t)return!0;if(He(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case De:return!t;case Ne:return!1===t;case Me:return isNaN(t);case Oe:return isNaN(t)||t<1}return!1}function qe(e){return $e.hasOwnProperty(e)?$e[e]:null}function Ye(e,t,n,r,o,a){this.acceptsBooleans=t===_e||t===De||t===Ne,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a}var $e={};["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"].forEach(function(e){$e[e]=new Ye(e,Ie,!1,e,null,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0],n=e[1];$e[t]=new Ye(t,1,!1,n,null,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){$e[e]=new Ye(e,_e,!1,e.toLowerCase(),null,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){$e[e]=new Ye(e,_e,!1,e,null,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(e){$e[e]=new Ye(e,De,!1,e.toLowerCase(),null,!1)}),["checked","multiple","muted","selected"].forEach(function(e){$e[e]=new Ye(e,De,!0,e,null,!1)}),["capture","download"].forEach(function(e){$e[e]=new Ye(e,Ne,!1,e,null,!1)}),["cols","rows","size","span"].forEach(function(e){$e[e]=new Ye(e,Oe,!1,e,null,!1)}),["rowSpan","start"].forEach(function(e){$e[e]=new Ye(e,Me,!1,e.toLowerCase(),null,!1)});var Ke=/[\-\:]([a-z])/g,Xe=function(e){return e[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(e){var t=e.replace(Ke,Xe);$e[t]=new Ye(t,1,!1,e,null,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(e){var t=e.replace(Ke,Xe);$e[t]=new Ye(t,1,!1,e,"http://www.w3.org/1999/xlink",!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ke,Xe);$e[t]=new Ye(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)}),["tabIndex","crossOrigin"].forEach(function(e){$e[e]=new Ye(e,1,!1,e.toLowerCase(),null,!1)});$e.xlinkHref=new Ye("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach(function(e){$e[e]=new Ye(e,1,!1,e.toLowerCase(),null,!0)});a.ReactDebugCurrentFrame;var Ge=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,Ze=!1;function Je(e){!Ze&&Ge.test(e)&&(Ze=!0,l("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(e)))}function et(e,t,n,r){if(r.mustUseProperty)return e[r.propertyName];r.sanitizeURL&&Je(""+n);var o=r.attributeName,a=null;if(r.type===Ne){if(e.hasAttribute(o)){var i=e.getAttribute(o);return""===i||(Qe(t,n,r,!1)?i:i===""+n?n:i)}}else if(e.hasAttribute(o)){if(Qe(t,n,r,!1))return e.getAttribute(o);if(r.type===De)return n;a=e.getAttribute(o)}return Qe(t,n,r,!1)?null===a?n:a:a===""+n?n:a}function tt(e,t,n){if(Be(t)){if(!e.hasAttribute(t))return void 0===n?void 0:null;var r=e.getAttribute(t);return r===""+n?n:r}}function nt(e,t,n,r){var o=qe(t);if(!Ve(t,o,r))if(Qe(t,n,o,r)&&(n=null),r||null===o){if(Be(t)){var a=t;null===n?e.removeAttribute(a):e.setAttribute(a,""+n)}}else if(o.mustUseProperty){var i=o.propertyName;if(null===n){var l=o.type;e[i]=l!==De&&""}else e[i]=n}else{var u=o.attributeName,s=o.attributeNamespace;if(null===n)e.removeAttribute(u);else{var c,d=o.type;d===De||d===Ne&&!0===n?c="":(c=""+n,o.sanitizeURL&&Je(c.toString())),s?e.setAttributeNS(s,u,c):e.setAttribute(u,c)}}}var rt=/^(.*)[\\\/]/;var ot="function"==typeof Symbol&&Symbol.for,at=ot?Symbol.for("react.element"):60103,it=ot?Symbol.for("react.portal"):60106,lt=ot?Symbol.for("react.fragment"):60107,ut=ot?Symbol.for("react.strict_mode"):60108,st=ot?Symbol.for("react.profiler"):60114,ct=ot?Symbol.for("react.provider"):60109,dt=ot?Symbol.for("react.context"):60110,ft=ot?Symbol.for("react.concurrent_mode"):60111,pt=ot?Symbol.for("react.forward_ref"):60112,mt=ot?Symbol.for("react.suspense"):60113,ht=ot?Symbol.for("react.suspense_list"):60120,vt=ot?Symbol.for("react.memo"):60115,gt=ot?Symbol.for("react.lazy"):60116,yt=ot?Symbol.for("react.block"):60121,bt="function"==typeof Symbol&&Symbol.iterator,wt="@@iterator";function kt(e){if(null===e||"object"!=typeof e)return null;var t=bt&&e[bt]||e[wt];return"function"==typeof t?t:null}var xt=-1,Tt=0,St=1,Et=2;function Ct(e){return e._status===St?e._result:null}function Rt(e){if(null==e)return null;if("number"==typeof e.tag&&l("Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),"function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case lt:return"Fragment";case it:return"Portal";case st:return"Profiler";case ut:return"StrictMode";case mt:return"Suspense";case ht:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case dt:return"Context.Consumer";case ct:return"Context.Provider";case pt:return n=e,r=e.render,o="ForwardRef",a=r.displayName||r.name||"",n.displayName||(""!==a?o+"("+a+")":o);case vt:return Rt(e.type);case yt:return Rt(e.render);case gt:var t=Ct(e);if(t)return Rt(t)}var n,r,o,a;return null}var Pt=a.ReactDebugCurrentFrame;function It(e){switch(e.tag){case P:case I:case D:case N:case z:case O:return"";default:var t=e._debugOwner,n=e._debugSource,r=Rt(e.type),o=null;return t&&(o=Rt(t.type)),function(e,t,n){var r="";if(t){var o=t.fileName,a=o.replace(rt,"");if(/^index\./.test(a)){var i=o.match(rt);if(i){var l=i[1];l&&(a=l.replace(rt,"")+"/"+a)}}r=" (at "+a+":"+t.lineNumber+")"}else n&&(r=" (created by "+n+")");return"\n in "+(e||"Unknown")+r}(r,n,o)}}function _t(e){var t="",n=e;do{t+=It(n),n=n.return}while(n);return t}var Dt=null,Nt=!1;function Mt(){if(null===Dt)return null;var e=Dt._debugOwner;return null!=e?Rt(e.type):null}function Ot(){return null===Dt?"":_t(Dt)}function zt(){Pt.getCurrentStack=null,Dt=null,Nt=!1}function At(e){Pt.getCurrentStack=Ot,Dt=e,Nt=!1}function Ut(e){Nt=e}function Lt(e){return""+e}function Ft(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}var Wt,jt={checkPropTypes:null};Wt=a.ReactDebugCurrentFrame;var Bt={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},Vt={value:function(e,t,n){return Bt[e.type]||e.onChange||e.readOnly||e.disabled||null==e[t]||ve?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return e.onChange||e.readOnly||e.disabled||null==e[t]||ve?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}};function Ht(e){var t=e.type,n=e.nodeName;return n&&"input"===n.toLowerCase()&&("checkbox"===t||"radio"===t)}function Qt(e){return e._valueTracker}function qt(e){Qt(e)||(e._valueTracker=function(e){var t=Ht(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){!function(e){e._valueTracker=null}(e),delete e[t]}}}}(e))}function Yt(e){if(!e)return!1;var t=Qt(e);if(!t)return!0;var n=t.getValue(),r=function(e){var t="";return e?t=Ht(e)?e.checked?"true":"false":e.value:t}(e);return r!==n&&(t.setValue(r),!0)}jt.checkPropTypes=function(e,t){r(Vt,t,"prop",e,Wt.getStackAddendum)};var $t=!1,Kt=!1,Xt=!1,Gt=!1;function Zt(e){return"checkbox"===e.type||"radio"===e.type?null!=e.checked:null!=e.value}function Jt(e,n){var r=e,o=n.checked;return t({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=o?o:r._wrapperState.initialChecked})}function en(e,t){jt.checkPropTypes("input",t),void 0===t.checked||void 0===t.defaultChecked||Kt||(l("%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",Mt()||"A component",t.type),Kt=!0),void 0===t.value||void 0===t.defaultValue||$t||(l("%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",Mt()||"A component",t.type),$t=!0);var n=e,r=null==t.defaultValue?"":t.defaultValue;n._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:Ft(null!=t.value?t.value:r),controlled:Zt(t)}}function tn(e,t){var n=e,r=t.checked;null!=r&&nt(n,"checked",r,!1)}function nn(e,t){var n=e,r=Zt(t);n._wrapperState.controlled||!r||Gt||(l("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",t.type),Gt=!0),!n._wrapperState.controlled||r||Xt||(l("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",t.type),Xt=!0),tn(e,t);var o=Ft(t.value),a=t.type;if(null!=o)"number"===a?(0===o&&""===n.value||n.value!=o)&&(n.value=Lt(o)):n.value!==Lt(o)&&(n.value=Lt(o));else if("submit"===a||"reset"===a)return void n.removeAttribute("value");t.hasOwnProperty("value")?an(n,t.type,o):t.hasOwnProperty("defaultValue")&&an(n,t.type,Ft(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(n.defaultChecked=!!t.defaultChecked)}function rn(e,t,n){var r=e;if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(("submit"===o||"reset"===o)&&(void 0===t.value||null===t.value))return;var a=Lt(r._wrapperState.initialValue);n||a!==r.value&&(r.value=a),r.defaultValue=a}var i=r.name;""!==i&&(r.name=""),r.defaultChecked=!r.defaultChecked,r.defaultChecked=!!r._wrapperState.initialChecked,""!==i&&(r.name=i)}function on(e,t){var n=e;nn(n,t),function(e,t){var n=t.name;if("radio"===t.type&&null!=n){for(var r=e;r.parentNode;)r=r.parentNode;for(var o=r.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),a=0;a children.")))}),null==n.selected||un||(l("Use the `defaultValue` or `value` props on