diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..2145671b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "share/coocook-react-components"] + path = share/coocook-react-components + url = git@github.com:moseschmiedel/coocook-react-components diff --git a/doc/entities.md b/doc/entities.md new file mode 100644 index 00000000..0c7efd25 --- /dev/null +++ b/doc/entities.md @@ -0,0 +1,106 @@ +# Entities +## Article +**table:** articles +### Attributes +#### id +**type:** integer +Primary key of `Article` for database. + +#### project_id +**type:** integer +Foreign key on `Project`. References the `Project` that this `Article` was created or imported in. + +#### shop_section_id +**type:** integer +Foreign key on `ShopSection`. References the `ShopSection` where this `Article` can be found. + +#### shelf_life_days +**type:** integer +Indicates how many days the `Article` could be stored, before it has to be processed. + +#### preorder_servings +**type:** integer + +#### preorder_workdays +**type:** integer + +#### name +**type:** integer +Human-readable name of the `Article`. + +#### comment +**type:** text +User specified comment of the `Article`. + + +## Unit +**table:** units +### Attributes +#### id +**type:** integer +Primary key of `Unit` for database. + +#### project_id +**type:** integer +Foreign key on `Project`. References the `Project` that this `Unit` was created or imported in. + +#### quantity_id +**type:** integer +Foreign key on `Quantity`. References the `Quantity` that this `Unit` is for. + +#### to_quantity_default +**type:** real +Factor to multiply by to get to the value in the `Quantity`'s default `Unit`. + +#### space' +**type:** boolean +Indicates if the `Unit`'s (short\_/long\_)name should be prepended with a space or not. + +#### short_name +**type:** text +Human-readable short variant of the name of the `Unit`. E.g.: `kg` for Kilogram. + +#### long_name +**type:** text +Human-readable long variant of the name of the `Unit`. E.g.: `Kilogram` for Kilogram. + + +## DishIngredient +**table:** dish_ingredients +### Attributes +#### id +**type:** integer +Primary key of `DishIngredient` for database. + +#### position +**type:** integer +Position of the `DishIngredient` in the `IngredientsEditor`. + +#### dish_id +**type:** integer +Foreign key on the `id` of a `Dish`. References the `Dish` that this `DishIngredient` belongs to. + +#### prepare +**type:** boolean +Indicates wether this `DishIngredient` has to be prepared before processing or not. + +#### article_id +**type:** integer +Foreign key on the `id` of an `Article`. References the `Article` that this `DishIngredient` is derived from. + +#### unit_id +**type:** integer +Foreign key on the `id` of an `Unit`. References the `Unit` this `DishIngredient` is in. + +#### value +**type:** real +Current value of the `DishIngredient`. + +#### comment +**type:** text +User specified comment of the `DishIngredient`. + +#### item_id +**type:** integer +Foreign key on `id` of `Item`. References the `Item` on a `PurchaseList` that belongs to this `DishIngredient`. + diff --git a/lib/Coocook/ActionRole/Ajax.pm b/lib/Coocook/ActionRole/Ajax.pm new file mode 100644 index 00000000..7351daf7 --- /dev/null +++ b/lib/Coocook/ActionRole/Ajax.pm @@ -0,0 +1,14 @@ +package Coocook::ActionRole::Ajax; + +# ABSTRACT: role for controller actions that respond with JSON and require a Session + +use Moose::Role; +use MooseX::MarkAsMethods autoclean => 1; + +before execute => sub { + my ( $self, $controller, $c ) = @_; + + $c->stash( current_view => 'JSON' ); +}; + +1; diff --git a/lib/Coocook/Controller/API.pm b/lib/Coocook/Controller/API.pm new file mode 100644 index 00000000..af31924e --- /dev/null +++ b/lib/Coocook/Controller/API.pm @@ -0,0 +1,25 @@ +package Coocook::Controller::API; + +use Moose; +use MooseX::MarkAsMethods autoclean => 1; + +# BEGIN-block necessary to make method attributes work +BEGIN { extends 'Coocook::Controller' } + +sub base : Chained('/') PathPart('api') CaptureArgs(0) { + my ( $self, $c ) = @_; + + $c->stash( current_view => 'JSON' ); +} + +sub statistics : GET HEAD Chained('base') Args(0) Public { + my ( $self, $c ) = @_; + + $c->stash( json_data => $c->model('DB')->statistics ); +} + +sub end : ActionClass('RenderView') { } # Overrides Controller::Root->end + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Coocook/Controller/Dish.pm b/lib/Coocook/Controller/Dish.pm index ff83711d..e0c78d8e 100644 --- a/lib/Coocook/Controller/Dish.pm +++ b/lib/Coocook/Controller/Dish.pm @@ -2,6 +2,7 @@ package Coocook::Controller::Dish; use Moose; use MooseX::MarkAsMethods autoclean => 1; +use JSON; BEGIN { extends 'Coocook::Controller' } @@ -49,6 +50,11 @@ sub edit : GET HEAD Chained('base') PathPart('') Args(0) RequiresCapability('vie $c->stash( dish => { + project => { + id => $c->project->id, + name => $c->project->name, + }, + id => $dish->id, name => $dish->name, comment => $dish->comment, servings => $dish->servings, @@ -228,6 +234,28 @@ sub reposition : POST Chained('/project/base') PathPart('dish_ingredient/reposit $c->detach( redirect => [ $ingredient->dish_id, '#ingredients' ] ); } +sub ingredients : GET HEAD Does('~Ajax') Chained('base') { + my ( $self, $c ) = @_; + + my $ingredients = $c->model('Ingredients')->new( + project => $c->project, + ingredients => $c->stash->{dish}->ingredients, + ); + + $c->stash->{json_data} = $ingredients->for_ingredients_editor; + + #$c->forward('View::JSON'); +} + +sub updateAJAX : POST PathPart('ingredient/update') Does('~Ajax') Chained('base') RequiresCapability('edit_project') { + my ( $self, $c ) = @_; + my $json = $c->req->body_data; + my $ingredient = $json->{ingredient} || die "wrong JSON body!"; + + + $c->stash->{json_data} = { id => $ingredient->{id} }; +} + sub redirect : Private { my ( $self, $c, $id, $fragment ) = @_; diff --git a/lib/Coocook/Controller/Root.pm b/lib/Coocook/Controller/Root.pm index 2e479a6b..d179d7f6 100644 --- a/lib/Coocook/Controller/Root.pm +++ b/lib/Coocook/Controller/Root.pm @@ -99,6 +99,7 @@ sub auto : Private { '/lib/jquery-3.5.1' . ( $c->debug ? '.js' : '.min.js' ), '/lib/bootstrap-4.4.1-dist/js/bootstrap' . ( $c->debug ? '.js' : '.min.js' ), '/lib/marked/marked' . ( $c->debug ? '.js' : '.min.js' ), + '/lib/ingredients_editor/dist/index' . ( $c->debug ? '.js' : '.min.js' ), '/js/script.js', ], ); diff --git a/lib/Coocook/Model/Ingredients.pm b/lib/Coocook/Model/Ingredients.pm index 3c261bd0..1e4e4c4d 100644 --- a/lib/Coocook/Model/Ingredients.pm +++ b/lib/Coocook/Model/Ingredients.pm @@ -72,12 +72,13 @@ sub as_arrayref { while ( my $ingredient = $ingredients->next ) { push @ingredients, { - id => $ingredient->id, - prepare => $ingredient->format_bool( $ingredient->prepare ), - value => $ingredient->value * $self->factor, - comment => $ingredient->comment, - unit => $units{ $ingredient->unit_id }, - article => $articles{ $ingredient->article_id }, + id => $ingredient->id, + prepare => $ingredient->format_bool( $ingredient->prepare ), + position => $ingredient->position, + value => $ingredient->value * $self->factor, + comment => $ingredient->comment, + unit => $units{ $ingredient->unit_id }, + article => $articles{ $ingredient->article_id }, }; } } @@ -88,4 +89,35 @@ sub as_arrayref { return \@ingredients; } +sub for_ingredients_editor { + my $self = shift; + + my $ingredients = $self->as_arrayref; + + my @ingredients = map { + my $unit = $_->{unit}; + my @convertible_units = $unit->convertible_into->all; + + # transform Result::Unit objects into plain hashes + for ( $unit, @convertible_units ) { + my $u = $_; + + $_ = { map { $_ => $u->get_column($_) } qw }; + } + + { + id => $_->{id}, + prepare => $_->{prepare}, + position => $_->{position}, + value => $_->{value}, + comment => $_->{comment}, + article => { name => $_->{article}->name, comment => $_->{article}->comment }, + current_unit => $unit, + units => \@convertible_units, + } + } @$ingredients; + + return \@ingredients; +} + 1; diff --git a/lib/Coocook/View/JSON.pm b/lib/Coocook/View/JSON.pm new file mode 100644 index 00000000..485d15e6 --- /dev/null +++ b/lib/Coocook/View/JSON.pm @@ -0,0 +1,16 @@ +package Coocook::View::JSON; + +# ABSTRACT: view for Coocook to create + +use Moose; + +use MooseX::MarkAsMethods autoclean => 1; +use MooseX::NonMoose; + +extends 'Catalyst::View::JSON'; + +__PACKAGE__->meta->make_immutable; + +__PACKAGE__->config( expose_stash => 'json_data', ); + +1; diff --git a/root/static/lib/ingredients_editor/_snowpack/env.js b/root/static/lib/ingredients_editor/_snowpack/env.js new file mode 100644 index 00000000..ba3e63c5 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/env.js @@ -0,0 +1,3 @@ +export const MODE = "development"; +export const NODE_ENV = "development"; +export const SSR = false; \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/@material-ui/icons.js b/root/static/lib/ingredients_editor/_snowpack/pkg/@material-ui/icons.js new file mode 100644 index 00000000..a1047686 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/@material-ui/icons.js @@ -0,0 +1,5465 @@ +import { r as react, c as createCommonjsModule } from '../common/index-ae389540.js'; +import { _ as _extends, a as _objectWithoutPropertiesLoose } from '../common/objectWithoutPropertiesLoose-5b811a2c.js'; + +function _typeof$1(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof$1 = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof$1 = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof$1(obj); +} + +function isPlainObject(item) { + return item && _typeof$1(item) === 'object' && item.constructor === Object; +} +function deepmerge(target, source) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { + clone: true + }; + var output = options.clone ? _extends({}, target) : target; + + if (isPlainObject(target) && isPlainObject(source)) { + Object.keys(source).forEach(function (key) { + // Avoid prototype pollution + if (key === '__proto__') { + return; + } + + if (isPlainObject(source[key]) && key in target) { + output[key] = deepmerge(target[key], source[key], options); + } else { + output[key] = source[key]; + } + }); + } + + return output; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +/** + * WARNING: Don't import this directly. + * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead. + * @param {number} code + */ +function formatMuiErrorMessage(code) { + // Apply babel-plugin-transform-template-literals in loose mode + // loose mode is safe iff we're concatenating primitives + // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose + + /* eslint-disable prefer-template */ + var url = 'https://material-ui.com/production-error/?code=' + code; + + for (var i = 1; i < arguments.length; i += 1) { + // rest params over-transpile for this case + // eslint-disable-next-line prefer-rest-params + url += '&args[]=' + encodeURIComponent(arguments[i]); + } + + return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.'; + /* eslint-enable prefer-template */ +} + +// It should to be noted that this function isn't equivalent to `text-transform: capitalize`. +// +// A strict capitalization should uppercase the first letter of each word a the sentence. +// We only handle the first word. +function capitalize(string) { + if (typeof string !== 'string') { + throw new Error(formatMuiErrorMessage(7)); + } + + return string.charAt(0).toUpperCase() + string.slice(1); +} + +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose(source, excluded); + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; +} + +function toVal(mix) { + var k, y, str=''; + + if (typeof mix === 'string' || typeof mix === 'number') { + str += mix; + } else if (typeof mix === 'object') { + if (Array.isArray(mix)) { + for (k=0; k < mix.length; k++) { + if (mix[k]) { + if (y = toVal(mix[k])) { + str && (str += ' '); + str += y; + } + } + } + } else { + for (k in mix) { + if (mix[k]) { + str && (str += ' '); + str += k; + } + } + } + } + + return str; +} + +function clsx () { + var i=0, tmp, x, str=''; + while (i < arguments.length) { + if (tmp = arguments[i++]) { + if (x = toVal(tmp)) { + str && (str += ' '); + str += x; + } + } + } + return str; +} + +var hasSymbol = typeof Symbol === 'function' && Symbol.for; +var nested = hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__'; + +/** + * This is the list of the style rule name we use as drop in replacement for the built-in + * pseudo classes (:checked, :disabled, :focused, etc.). + * + * Why do they exist in the first place? + * These classes are used at a specificity of 2. + * It allows them to override previously definied styles as well as + * being untouched by simple user overrides. + */ + +var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected']; // Returns a function which generates unique class names based on counters. +// When new generator function is created, rule counter is reset. +// We need to reset the rule counter for SSR for each request. +// +// It's inspired by +// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js + +function createGenerateClassName() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _options$disableGloba = options.disableGlobal, + disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba, + _options$productionPr = options.productionPrefix, + productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr, + _options$seed = options.seed, + seed = _options$seed === void 0 ? '' : _options$seed; + var seedPrefix = seed === '' ? '' : "".concat(seed, "-"); + var ruleCounter = 0; + + var getNextCounterId = function getNextCounterId() { + ruleCounter += 1; + + return ruleCounter; + }; + + return function (rule, styleSheet) { + var name = styleSheet.options.name; // Is a global static MUI style? + + if (name && name.indexOf('Mui') === 0 && !styleSheet.options.link && !disableGlobal) { + // We can use a shorthand class name, we never use the keys to style the components. + if (pseudoClasses.indexOf(rule.key) !== -1) { + return "Mui-".concat(rule.key); + } + + var prefix = "".concat(seedPrefix).concat(name, "-").concat(rule.key); + + if (!styleSheet.options.theme[nested] || seed !== '') { + return prefix; + } + + return "".concat(prefix, "-").concat(getNextCounterId()); + } + + { + return "".concat(seedPrefix).concat(productionPrefix).concat(getNextCounterId()); + } + }; +} + +/* eslint-disable no-restricted-syntax */ +function getThemeProps(params) { + var theme = params.theme, + name = params.name, + props = params.props; + + if (!theme || !theme.props || !theme.props[name]) { + return props; + } // Resolve default props, code borrow from React source. + // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221 + + + var defaultProps = theme.props[name]; + var propName; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + + return props; +} + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var isBrowser = (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object" && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && document.nodeType === 9; + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); +} + +function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; +} + +var plainObjectConstrurctor = {}.constructor; +function cloneStyle(style) { + if (style == null || typeof style !== 'object') return style; + if (Array.isArray(style)) return style.map(cloneStyle); + if (style.constructor !== plainObjectConstrurctor) return style; + var newStyle = {}; + + for (var name in style) { + newStyle[name] = cloneStyle(style[name]); + } + + return newStyle; +} + +/** + * Create a rule instance. + */ + +function createRule(name, decl, options) { + if (name === void 0) { + name = 'unnamed'; + } + + var jss = options.jss; + var declCopy = cloneStyle(decl); + var rule = jss.plugins.onCreateRule(name, declCopy, options); + if (rule) return rule; // It is an at-rule and it has no instance. + + if (name[0] === '@') ; + + return null; +} + +var join = function join(value, by) { + var result = ''; + + for (var i = 0; i < value.length; i++) { + // Remove !important from the value, it will be readded later. + if (value[i] === '!important') break; + if (result) result += by; + result += value[i]; + } + + return result; +}; + +/** + * Converts array values to string. + * + * `margin: [['5px', '10px']]` > `margin: 5px 10px;` + * `border: ['1px', '2px']` > `border: 1px, 2px;` + * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;` + * `color: ['red', !important]` > `color: red !important;` + */ +var toCssValue = function toCssValue(value, ignoreImportant) { + if (ignoreImportant === void 0) { + ignoreImportant = false; + } + + if (!Array.isArray(value)) return value; + var cssValue = ''; // Support space separated values via `[['5px', '10px']]`. + + if (Array.isArray(value[0])) { + for (var i = 0; i < value.length; i++) { + if (value[i] === '!important') break; + if (cssValue) cssValue += ', '; + cssValue += join(value[i], ' '); + } + } else cssValue = join(value, ', '); // Add !important, because it was ignored. + + + if (!ignoreImportant && value[value.length - 1] === '!important') { + cssValue += ' !important'; + } + + return cssValue; +}; + +/** + * Indent a string. + * http://jsperf.com/array-join-vs-for + */ +function indentStr(str, indent) { + var result = ''; + + for (var index = 0; index < indent; index++) { + result += ' '; + } + + return result + str; +} +/** + * Converts a Rule to CSS string. + */ + + +function toCss(selector, style, options) { + if (options === void 0) { + options = {}; + } + + var result = ''; + if (!style) return result; + var _options = options, + _options$indent = _options.indent, + indent = _options$indent === void 0 ? 0 : _options$indent; + var fallbacks = style.fallbacks; + if (selector) indent++; // Apply fallbacks first. + + if (fallbacks) { + // Array syntax {fallbacks: [{prop: value}]} + if (Array.isArray(fallbacks)) { + for (var index = 0; index < fallbacks.length; index++) { + var fallback = fallbacks[index]; + + for (var prop in fallback) { + var value = fallback[prop]; + + if (value != null) { + if (result) result += '\n'; + result += "" + indentStr(prop + ": " + toCssValue(value) + ";", indent); + } + } + } + } else { + // Object syntax {fallbacks: {prop: value}} + for (var _prop in fallbacks) { + var _value = fallbacks[_prop]; + + if (_value != null) { + if (result) result += '\n'; + result += "" + indentStr(_prop + ": " + toCssValue(_value) + ";", indent); + } + } + } + } + + for (var _prop2 in style) { + var _value2 = style[_prop2]; + + if (_value2 != null && _prop2 !== 'fallbacks') { + if (result) result += '\n'; + result += "" + indentStr(_prop2 + ": " + toCssValue(_value2) + ";", indent); + } + } // Allow empty style in this case, because properties will be added dynamically. + + + if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined. + + if (!selector) return result; + indent--; + if (result) result = "\n" + result + "\n"; + return indentStr(selector + " {" + result, indent) + indentStr('}', indent); +} + +var escapeRegex = /([[\].#*$><+~=|^:(),"'`\s])/g; +var nativeEscape = typeof CSS !== 'undefined' && CSS.escape; +var escape = (function (str) { + return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\$1'); +}); + +var BaseStyleRule = +/*#__PURE__*/ +function () { + function BaseStyleRule(key, style, options) { + this.type = 'style'; + this.key = void 0; + this.isProcessed = false; + this.style = void 0; + this.renderer = void 0; + this.renderable = void 0; + this.options = void 0; + var sheet = options.sheet, + Renderer = options.Renderer; + this.key = key; + this.options = options; + this.style = style; + if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer(); + } + /** + * Get or set a style property. + */ + + + var _proto = BaseStyleRule.prototype; + + _proto.prop = function prop(name, value, options) { + // It's a getter. + if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed. + + var force = options ? options.force : false; + if (!force && this.style[name] === value) return this; + var newValue = value; + + if (!options || options.process !== false) { + newValue = this.options.jss.plugins.onChangeValue(value, name, this); + } + + var isEmpty = newValue == null || newValue === false; + var isDefined = name in this.style; // Value is empty and wasn't defined before. + + if (isEmpty && !isDefined && !force) return this; // We are going to remove this value. + + var remove = isEmpty && isDefined; + if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true. + + if (this.renderable && this.renderer) { + if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue); + return this; + } + + var sheet = this.options.sheet; + + if (sheet && sheet.attached) ; + + return this; + }; + + return BaseStyleRule; +}(); +var StyleRule = +/*#__PURE__*/ +function (_BaseStyleRule) { + _inheritsLoose(StyleRule, _BaseStyleRule); + + function StyleRule(key, style, options) { + var _this; + + _this = _BaseStyleRule.call(this, key, style, options) || this; + _this.selectorText = void 0; + _this.id = void 0; + _this.renderable = void 0; + var selector = options.selector, + scoped = options.scoped, + sheet = options.sheet, + generateId = options.generateId; + + if (selector) { + _this.selectorText = selector; + } else if (scoped !== false) { + _this.id = generateId(_assertThisInitialized(_assertThisInitialized(_this)), sheet); + _this.selectorText = "." + escape(_this.id); + } + + return _this; + } + /** + * Set selector string. + * Attention: use this with caution. Most browsers didn't implement + * selectorText setter, so this may result in rerendering of entire Style Sheet. + */ + + + var _proto2 = StyleRule.prototype; + + /** + * Apply rule to an element inline. + */ + _proto2.applyTo = function applyTo(renderable) { + var renderer = this.renderer; + + if (renderer) { + var json = this.toJSON(); + + for (var prop in json) { + renderer.setProperty(renderable, prop, json[prop]); + } + } + + return this; + } + /** + * Returns JSON representation of the rule. + * Fallbacks are not supported. + * Useful for inline styles. + */ + ; + + _proto2.toJSON = function toJSON() { + var json = {}; + + for (var prop in this.style) { + var value = this.style[prop]; + if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value); + } + + return json; + } + /** + * Generates a CSS string. + */ + ; + + _proto2.toString = function toString(options) { + var sheet = this.options.sheet; + var link = sheet ? sheet.options.link : false; + var opts = link ? _extends({}, options, { + allowEmpty: true + }) : options; + return toCss(this.selectorText, this.style, opts); + }; + + _createClass(StyleRule, [{ + key: "selector", + set: function set(selector) { + if (selector === this.selectorText) return; + this.selectorText = selector; + var renderer = this.renderer, + renderable = this.renderable; + if (!renderable || !renderer) return; + var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule. + + if (!hasChanged) { + renderer.replaceRule(renderable, this); + } + } + /** + * Get selector string. + */ + , + get: function get() { + return this.selectorText; + } + }]); + + return StyleRule; +}(BaseStyleRule); +var pluginStyleRule = { + onCreateRule: function onCreateRule(name, style, options) { + if (name[0] === '@' || options.parent && options.parent.type === 'keyframes') { + return null; + } + + return new StyleRule(name, style, options); + } +}; + +var defaultToStringOptions = { + indent: 1, + children: true +}; +var atRegExp = /@([\w-]+)/; +/** + * Conditional rule for @media, @supports + */ + +var ConditionalRule = +/*#__PURE__*/ +function () { + function ConditionalRule(key, styles, options) { + this.type = 'conditional'; + this.at = void 0; + this.key = void 0; + this.query = void 0; + this.rules = void 0; + this.options = void 0; + this.isProcessed = false; + this.renderable = void 0; + this.key = key; + var atMatch = key.match(atRegExp); + this.at = atMatch ? atMatch[1] : 'unknown'; // Key might contain a unique suffix in case the `name` passed by user was duplicate. + + this.query = options.name || "@" + this.at; + this.options = options; + this.rules = new RuleList(_extends({}, options, { + parent: this + })); + + for (var name in styles) { + this.rules.add(name, styles[name]); + } + + this.rules.process(); + } + /** + * Get a rule. + */ + + + var _proto = ConditionalRule.prototype; + + _proto.getRule = function getRule(name) { + return this.rules.get(name); + } + /** + * Get index of a rule. + */ + ; + + _proto.indexOf = function indexOf(rule) { + return this.rules.indexOf(rule); + } + /** + * Create and register rule, run plugins. + */ + ; + + _proto.addRule = function addRule(name, style, options) { + var rule = this.rules.add(name, style, options); + if (!rule) return null; + this.options.jss.plugins.onProcessRule(rule); + return rule; + } + /** + * Generates a CSS string. + */ + ; + + _proto.toString = function toString(options) { + if (options === void 0) { + options = defaultToStringOptions; + } + + if (options.indent == null) options.indent = defaultToStringOptions.indent; + if (options.children == null) options.children = defaultToStringOptions.children; + + if (options.children === false) { + return this.query + " {}"; + } + + var children = this.rules.toString(options); + return children ? this.query + " {\n" + children + "\n}" : ''; + }; + + return ConditionalRule; +}(); +var keyRegExp = /@media|@supports\s+/; +var pluginConditionalRule = { + onCreateRule: function onCreateRule(key, styles, options) { + return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null; + } +}; + +var defaultToStringOptions$1 = { + indent: 1, + children: true +}; +var nameRegExp = /@keyframes\s+([\w-]+)/; +/** + * Rule for @keyframes + */ + +var KeyframesRule = +/*#__PURE__*/ +function () { + function KeyframesRule(key, frames, options) { + this.type = 'keyframes'; + this.at = '@keyframes'; + this.key = void 0; + this.name = void 0; + this.id = void 0; + this.rules = void 0; + this.options = void 0; + this.isProcessed = false; + this.renderable = void 0; + var nameMatch = key.match(nameRegExp); + + if (nameMatch && nameMatch[1]) { + this.name = nameMatch[1]; + } else { + this.name = 'noname'; + } + + this.key = this.type + "-" + this.name; + this.options = options; + var scoped = options.scoped, + sheet = options.sheet, + generateId = options.generateId; + this.id = scoped === false ? this.name : escape(generateId(this, sheet)); + this.rules = new RuleList(_extends({}, options, { + parent: this + })); + + for (var name in frames) { + this.rules.add(name, frames[name], _extends({}, options, { + parent: this + })); + } + + this.rules.process(); + } + /** + * Generates a CSS string. + */ + + + var _proto = KeyframesRule.prototype; + + _proto.toString = function toString(options) { + if (options === void 0) { + options = defaultToStringOptions$1; + } + + if (options.indent == null) options.indent = defaultToStringOptions$1.indent; + if (options.children == null) options.children = defaultToStringOptions$1.children; + + if (options.children === false) { + return this.at + " " + this.id + " {}"; + } + + var children = this.rules.toString(options); + if (children) children = "\n" + children + "\n"; + return this.at + " " + this.id + " {" + children + "}"; + }; + + return KeyframesRule; +}(); +var keyRegExp$1 = /@keyframes\s+/; +var refRegExp$1 = /\$([\w-]+)/g; + +var findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) { + if (typeof val === 'string') { + return val.replace(refRegExp$1, function (match, name) { + if (name in keyframes) { + return keyframes[name]; + } + return match; + }); + } + + return val; +}; +/** + * Replace the reference for a animation name. + */ + + +var replaceRef = function replaceRef(style, prop, keyframes) { + var value = style[prop]; + var refKeyframe = findReferencedKeyframe(value, keyframes); + + if (refKeyframe !== value) { + style[prop] = refKeyframe; + } +}; + +var plugin = { + onCreateRule: function onCreateRule(key, frames, options) { + return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null; + }, + // Animation name ref replacer. + onProcessStyle: function onProcessStyle(style, rule, sheet) { + if (rule.type !== 'style' || !sheet) return style; + if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes); + if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes); + return style; + }, + onChangeValue: function onChangeValue(val, prop, rule) { + var sheet = rule.options.sheet; + + if (!sheet) { + return val; + } + + switch (prop) { + case 'animation': + return findReferencedKeyframe(val, sheet.keyframes); + + case 'animation-name': + return findReferencedKeyframe(val, sheet.keyframes); + + default: + return val; + } + } +}; + +var KeyframeRule = +/*#__PURE__*/ +function (_BaseStyleRule) { + _inheritsLoose(KeyframeRule, _BaseStyleRule); + + function KeyframeRule() { + var _this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this = _BaseStyleRule.call.apply(_BaseStyleRule, [this].concat(args)) || this; + _this.renderable = void 0; + return _this; + } + + var _proto = KeyframeRule.prototype; + + /** + * Generates a CSS string. + */ + _proto.toString = function toString(options) { + var sheet = this.options.sheet; + var link = sheet ? sheet.options.link : false; + var opts = link ? _extends({}, options, { + allowEmpty: true + }) : options; + return toCss(this.key, this.style, opts); + }; + + return KeyframeRule; +}(BaseStyleRule); +var pluginKeyframeRule = { + onCreateRule: function onCreateRule(key, style, options) { + if (options.parent && options.parent.type === 'keyframes') { + return new KeyframeRule(key, style, options); + } + + return null; + } +}; + +var FontFaceRule = +/*#__PURE__*/ +function () { + function FontFaceRule(key, style, options) { + this.type = 'font-face'; + this.at = '@font-face'; + this.key = void 0; + this.style = void 0; + this.options = void 0; + this.isProcessed = false; + this.renderable = void 0; + this.key = key; + this.style = style; + this.options = options; + } + /** + * Generates a CSS string. + */ + + + var _proto = FontFaceRule.prototype; + + _proto.toString = function toString(options) { + if (Array.isArray(this.style)) { + var str = ''; + + for (var index = 0; index < this.style.length; index++) { + str += toCss(this.at, this.style[index]); + if (this.style[index + 1]) str += '\n'; + } + + return str; + } + + return toCss(this.at, this.style, options); + }; + + return FontFaceRule; +}(); +var keyRegExp$2 = /@font-face/; +var pluginFontFaceRule = { + onCreateRule: function onCreateRule(key, style, options) { + return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null; + } +}; + +var ViewportRule = +/*#__PURE__*/ +function () { + function ViewportRule(key, style, options) { + this.type = 'viewport'; + this.at = '@viewport'; + this.key = void 0; + this.style = void 0; + this.options = void 0; + this.isProcessed = false; + this.renderable = void 0; + this.key = key; + this.style = style; + this.options = options; + } + /** + * Generates a CSS string. + */ + + + var _proto = ViewportRule.prototype; + + _proto.toString = function toString(options) { + return toCss(this.key, this.style, options); + }; + + return ViewportRule; +}(); +var pluginViewportRule = { + onCreateRule: function onCreateRule(key, style, options) { + return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null; + } +}; + +var SimpleRule = +/*#__PURE__*/ +function () { + function SimpleRule(key, value, options) { + this.type = 'simple'; + this.key = void 0; + this.value = void 0; + this.options = void 0; + this.isProcessed = false; + this.renderable = void 0; + this.key = key; + this.value = value; + this.options = options; + } + /** + * Generates a CSS string. + */ + // eslint-disable-next-line no-unused-vars + + + var _proto = SimpleRule.prototype; + + _proto.toString = function toString(options) { + if (Array.isArray(this.value)) { + var str = ''; + + for (var index = 0; index < this.value.length; index++) { + str += this.key + " " + this.value[index] + ";"; + if (this.value[index + 1]) str += '\n'; + } + + return str; + } + + return this.key + " " + this.value + ";"; + }; + + return SimpleRule; +}(); +var keysMap = { + '@charset': true, + '@import': true, + '@namespace': true +}; +var pluginSimpleRule = { + onCreateRule: function onCreateRule(key, value, options) { + return key in keysMap ? new SimpleRule(key, value, options) : null; + } +}; + +var plugins$1 = [pluginStyleRule, pluginConditionalRule, plugin, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule]; + +var defaultUpdateOptions = { + process: true +}; +var forceUpdateOptions = { + force: true, + process: true + /** + * Contains rules objects and allows adding/removing etc. + * Is used for e.g. by `StyleSheet` or `ConditionalRule`. + */ + +}; + +var RuleList = +/*#__PURE__*/ +function () { + // Rules registry for access by .get() method. + // It contains the same rule registered by name and by selector. + // Original styles object. + // Used to ensure correct rules order. + function RuleList(options) { + this.map = {}; + this.raw = {}; + this.index = []; + this.counter = 0; + this.options = void 0; + this.classes = void 0; + this.keyframes = void 0; + this.options = options; + this.classes = options.classes; + this.keyframes = options.keyframes; + } + /** + * Create and register rule. + * + * Will not render after Style Sheet was rendered the first time. + */ + + + var _proto = RuleList.prototype; + + _proto.add = function add(name, decl, ruleOptions) { + var _this$options = this.options, + parent = _this$options.parent, + sheet = _this$options.sheet, + jss = _this$options.jss, + Renderer = _this$options.Renderer, + generateId = _this$options.generateId, + scoped = _this$options.scoped; + + var options = _extends({ + classes: this.classes, + parent: parent, + sheet: sheet, + jss: jss, + Renderer: Renderer, + generateId: generateId, + scoped: scoped, + name: name, + keyframes: this.keyframes, + selector: undefined + }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but + // `sheet.addRule()` opens the door for any duplicate rule name. When this happens + // we need to make the key unique within this RuleList instance scope. + + + var key = name; + + if (name in this.raw) { + key = name + "-d" + this.counter++; + } // We need to save the original decl before creating the rule + // because cache plugin needs to use it as a key to return a cached rule. + + + this.raw[key] = decl; + + if (key in this.classes) { + // E.g. rules inside of @media container + options.selector = "." + escape(this.classes[key]); + } + + var rule = createRule(key, decl, options); + if (!rule) return null; + this.register(rule); + var index = options.index === undefined ? this.index.length : options.index; + this.index.splice(index, 0, rule); + return rule; + } + /** + * Get a rule. + */ + ; + + _proto.get = function get(name) { + return this.map[name]; + } + /** + * Delete a rule. + */ + ; + + _proto.remove = function remove(rule) { + this.unregister(rule); + delete this.raw[rule.key]; + this.index.splice(this.index.indexOf(rule), 1); + } + /** + * Get index of a rule. + */ + ; + + _proto.indexOf = function indexOf(rule) { + return this.index.indexOf(rule); + } + /** + * Run `onProcessRule()` plugins on every rule. + */ + ; + + _proto.process = function process() { + var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop + // we end up with very hard-to-track-down side effects. + + this.index.slice(0).forEach(plugins.onProcessRule, plugins); + } + /** + * Register a rule in `.map`, `.classes` and `.keyframes` maps. + */ + ; + + _proto.register = function register(rule) { + this.map[rule.key] = rule; + + if (rule instanceof StyleRule) { + this.map[rule.selector] = rule; + if (rule.id) this.classes[rule.key] = rule.id; + } else if (rule instanceof KeyframesRule && this.keyframes) { + this.keyframes[rule.name] = rule.id; + } + } + /** + * Unregister a rule. + */ + ; + + _proto.unregister = function unregister(rule) { + delete this.map[rule.key]; + + if (rule instanceof StyleRule) { + delete this.map[rule.selector]; + delete this.classes[rule.key]; + } else if (rule instanceof KeyframesRule) { + delete this.keyframes[rule.name]; + } + } + /** + * Update the function values with a new data. + */ + ; + + _proto.update = function update() { + var name; + var data; + var options; + + if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') { + name = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index] + + data = arguments.length <= 1 ? undefined : arguments[1]; // $FlowFixMe[invalid-tuple-index] + + options = arguments.length <= 2 ? undefined : arguments[2]; + } else { + data = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index] + + options = arguments.length <= 1 ? undefined : arguments[1]; + name = null; + } + + if (name) { + this.updateOne(this.map[name], data, options); + } else { + for (var index = 0; index < this.index.length; index++) { + this.updateOne(this.index[index], data, options); + } + } + } + /** + * Execute plugins, update rule props. + */ + ; + + _proto.updateOne = function updateOne(rule, data, options) { + if (options === void 0) { + options = defaultUpdateOptions; + } + + var _this$options2 = this.options, + plugins = _this$options2.jss.plugins, + sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule. + + if (rule.rules instanceof RuleList) { + rule.rules.update(data, options); + return; + } + + var styleRule = rule; + var style = styleRule.style; + plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook. + + if (options.process && style && style !== styleRule.style) { + // We need to run the plugins in case new `style` relies on syntax plugins. + plugins.onProcessStyle(styleRule.style, styleRule, sheet); // Update and add props. + + for (var prop in styleRule.style) { + var nextValue = styleRule.style[prop]; + var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule. + // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here. + + if (nextValue !== prevValue) { + styleRule.prop(prop, nextValue, forceUpdateOptions); + } + } // Remove props. + + + for (var _prop in style) { + var _nextValue = styleRule.style[_prop]; + var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule. + // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here. + + if (_nextValue == null && _nextValue !== _prevValue) { + styleRule.prop(_prop, null, forceUpdateOptions); + } + } + } + } + /** + * Convert rules to a CSS string. + */ + ; + + _proto.toString = function toString(options) { + var str = ''; + var sheet = this.options.sheet; + var link = sheet ? sheet.options.link : false; + + for (var index = 0; index < this.index.length; index++) { + var rule = this.index[index]; + var css = rule.toString(options); // No need to render an empty rule. + + if (!css && !link) continue; + if (str) str += '\n'; + str += css; + } + + return str; + }; + + return RuleList; +}(); + +var StyleSheet = +/*#__PURE__*/ +function () { + function StyleSheet(styles, options) { + this.options = void 0; + this.deployed = void 0; + this.attached = void 0; + this.rules = void 0; + this.renderer = void 0; + this.classes = void 0; + this.keyframes = void 0; + this.queue = void 0; + this.attached = false; + this.deployed = false; + this.classes = {}; + this.keyframes = {}; + this.options = _extends({}, options, { + sheet: this, + parent: this, + classes: this.classes, + keyframes: this.keyframes + }); + + if (options.Renderer) { + this.renderer = new options.Renderer(this); + } + + this.rules = new RuleList(this.options); + + for (var name in styles) { + this.rules.add(name, styles[name]); + } + + this.rules.process(); + } + /** + * Attach renderable to the render tree. + */ + + + var _proto = StyleSheet.prototype; + + _proto.attach = function attach() { + if (this.attached) return this; + if (this.renderer) this.renderer.attach(); + this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached. + + if (!this.deployed) this.deploy(); + return this; + } + /** + * Remove renderable from render tree. + */ + ; + + _proto.detach = function detach() { + if (!this.attached) return this; + if (this.renderer) this.renderer.detach(); + this.attached = false; + return this; + } + /** + * Add a rule to the current stylesheet. + * Will insert a rule also after the stylesheet has been rendered first time. + */ + ; + + _proto.addRule = function addRule(name, decl, options) { + var queue = this.queue; // Plugins can create rules. + // In order to preserve the right order, we need to queue all `.addRule` calls, + // which happen after the first `rules.add()` call. + + if (this.attached && !queue) this.queue = []; + var rule = this.rules.add(name, decl, options); + if (!rule) return null; + this.options.jss.plugins.onProcessRule(rule); + + if (this.attached) { + if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet. + // It will be inserted all together when .attach is called. + + if (queue) queue.push(rule);else { + this.insertRule(rule); + + if (this.queue) { + this.queue.forEach(this.insertRule, this); + this.queue = undefined; + } + } + return rule; + } // We can't add rules to a detached style node. + // We will redeploy the sheet once user will attach it. + + + this.deployed = false; + return rule; + } + /** + * Insert rule into the StyleSheet + */ + ; + + _proto.insertRule = function insertRule(rule) { + if (this.renderer) { + this.renderer.insertRule(rule); + } + } + /** + * Create and add rules. + * Will render also after Style Sheet was rendered the first time. + */ + ; + + _proto.addRules = function addRules(styles, options) { + var added = []; + + for (var name in styles) { + var rule = this.addRule(name, styles[name], options); + if (rule) added.push(rule); + } + + return added; + } + /** + * Get a rule by name. + */ + ; + + _proto.getRule = function getRule(name) { + return this.rules.get(name); + } + /** + * Delete a rule by name. + * Returns `true`: if rule has been deleted from the DOM. + */ + ; + + _proto.deleteRule = function deleteRule(name) { + var rule = typeof name === 'object' ? name : this.rules.get(name); + + if (!rule || // Style sheet was created without link: true and attached, in this case we + // won't be able to remove the CSS rule from the DOM. + this.attached && !rule.renderable) { + return false; + } + + this.rules.remove(rule); + + if (this.attached && rule.renderable && this.renderer) { + return this.renderer.deleteRule(rule.renderable); + } + + return true; + } + /** + * Get index of a rule. + */ + ; + + _proto.indexOf = function indexOf(rule) { + return this.rules.indexOf(rule); + } + /** + * Deploy pure CSS string to a renderable. + */ + ; + + _proto.deploy = function deploy() { + if (this.renderer) this.renderer.deploy(); + this.deployed = true; + return this; + } + /** + * Update the function values with a new data. + */ + ; + + _proto.update = function update() { + var _this$rules; + + (_this$rules = this.rules).update.apply(_this$rules, arguments); + + return this; + } + /** + * Updates a single rule. + */ + ; + + _proto.updateOne = function updateOne(rule, data, options) { + this.rules.updateOne(rule, data, options); + return this; + } + /** + * Convert rules to a CSS string. + */ + ; + + _proto.toString = function toString(options) { + return this.rules.toString(options); + }; + + return StyleSheet; +}(); + +var PluginsRegistry = +/*#__PURE__*/ +function () { + function PluginsRegistry() { + this.plugins = { + internal: [], + external: [] + }; + this.registry = void 0; + } + + var _proto = PluginsRegistry.prototype; + + /** + * Call `onCreateRule` hooks and return an object if returned by a hook. + */ + _proto.onCreateRule = function onCreateRule(name, decl, options) { + for (var i = 0; i < this.registry.onCreateRule.length; i++) { + var rule = this.registry.onCreateRule[i](name, decl, options); + if (rule) return rule; + } + + return null; + } + /** + * Call `onProcessRule` hooks. + */ + ; + + _proto.onProcessRule = function onProcessRule(rule) { + if (rule.isProcessed) return; + var sheet = rule.options.sheet; + + for (var i = 0; i < this.registry.onProcessRule.length; i++) { + this.registry.onProcessRule[i](rule, sheet); + } + + if (rule.style) this.onProcessStyle(rule.style, rule, sheet); + rule.isProcessed = true; + } + /** + * Call `onProcessStyle` hooks. + */ + ; + + _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) { + for (var i = 0; i < this.registry.onProcessStyle.length; i++) { + // $FlowFixMe[prop-missing] + rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet); + } + } + /** + * Call `onProcessSheet` hooks. + */ + ; + + _proto.onProcessSheet = function onProcessSheet(sheet) { + for (var i = 0; i < this.registry.onProcessSheet.length; i++) { + this.registry.onProcessSheet[i](sheet); + } + } + /** + * Call `onUpdate` hooks. + */ + ; + + _proto.onUpdate = function onUpdate(data, rule, sheet, options) { + for (var i = 0; i < this.registry.onUpdate.length; i++) { + this.registry.onUpdate[i](data, rule, sheet, options); + } + } + /** + * Call `onChangeValue` hooks. + */ + ; + + _proto.onChangeValue = function onChangeValue(value, prop, rule) { + var processedValue = value; + + for (var i = 0; i < this.registry.onChangeValue.length; i++) { + processedValue = this.registry.onChangeValue[i](processedValue, prop, rule); + } + + return processedValue; + } + /** + * Register a plugin. + */ + ; + + _proto.use = function use(newPlugin, options) { + if (options === void 0) { + options = { + queue: 'external' + }; + } + + var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref. + + if (plugins.indexOf(newPlugin) !== -1) { + return; + } + + plugins.push(newPlugin); + this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) { + for (var name in plugin) { + if (name in registry) { + registry[name].push(plugin[name]); + } + } + + return registry; + }, { + onCreateRule: [], + onProcessRule: [], + onProcessStyle: [], + onProcessSheet: [], + onChangeValue: [], + onUpdate: [] + }); + }; + + return PluginsRegistry; +}(); + +/** + * Sheets registry to access them all at one place. + */ +var SheetsRegistry = +/*#__PURE__*/ +function () { + function SheetsRegistry() { + this.registry = []; + } + + var _proto = SheetsRegistry.prototype; + + /** + * Register a Style Sheet. + */ + _proto.add = function add(sheet) { + var registry = this.registry; + var index = sheet.options.index; + if (registry.indexOf(sheet) !== -1) return; + + if (registry.length === 0 || index >= this.index) { + registry.push(sheet); + return; + } // Find a position. + + + for (var i = 0; i < registry.length; i++) { + if (registry[i].options.index > index) { + registry.splice(i, 0, sheet); + return; + } + } + } + /** + * Reset the registry. + */ + ; + + _proto.reset = function reset() { + this.registry = []; + } + /** + * Remove a Style Sheet. + */ + ; + + _proto.remove = function remove(sheet) { + var index = this.registry.indexOf(sheet); + this.registry.splice(index, 1); + } + /** + * Convert all attached sheets to a CSS string. + */ + ; + + _proto.toString = function toString(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + attached = _ref.attached, + options = _objectWithoutPropertiesLoose(_ref, ["attached"]); + + var css = ''; + + for (var i = 0; i < this.registry.length; i++) { + var sheet = this.registry[i]; + + if (attached != null && sheet.attached !== attached) { + continue; + } + + if (css) css += '\n'; + css += sheet.toString(options); + } + + return css; + }; + + _createClass(SheetsRegistry, [{ + key: "index", + + /** + * Current highest index number. + */ + get: function get() { + return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index; + } + }]); + + return SheetsRegistry; +}(); + +/** + * This is a global sheets registry. Only DomRenderer will add sheets to it. + * On the server one should use an own SheetsRegistry instance and add the + * sheets to it, because you need to make sure to create a new registry for + * each request in order to not leak sheets across requests. + */ + +var registry = new SheetsRegistry(); + +/* eslint-disable */ + +/** + * Now that `globalThis` is available on most platforms + * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis#browser_compatibility) + * we check for `globalThis` first. `globalThis` is necessary for jss + * to run in Agoric's secure version of JavaScript (SES). Under SES, + * `globalThis` exists, but `window`, `self`, and `Function('return + * this')()` are all undefined for security reasons. + * + * https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + */ +var globalThis$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' && window.Math === Math ? window : typeof self !== 'undefined' && self.Math === Math ? self : Function('return this')(); + +var ns = '2f1acc6c3a606b082e5eef5e54414ffb'; +if (globalThis$1[ns] == null) globalThis$1[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify +// the current version with just one short number and use it for classes generation +// we use a counter. Also it is more accurate, because user can manually reevaluate +// the module. + +var moduleId = globalThis$1[ns]++; + +/** + * Returns a function which generates unique class names based on counters. + * When new generator function is created, rule counter is reseted. + * We need to reset the rule counter for SSR for each request. + */ +var createGenerateId = function createGenerateId(options) { + if (options === void 0) { + options = {}; + } + + var ruleCounter = 0; + return function (rule, sheet) { + ruleCounter += 1; + + var jssId = ''; + var prefix = ''; + + if (sheet) { + if (sheet.options.classNamePrefix) { + prefix = sheet.options.classNamePrefix; + } + + if (sheet.options.jss.id != null) { + jssId = String(sheet.options.jss.id); + } + } + + if (options.minify) { + // Using "c" because a number can't be the first char in a class name. + return "" + (prefix || 'c') + moduleId + jssId + ruleCounter; + } + + return prefix + rule.key + "-" + moduleId + (jssId ? "-" + jssId : '') + "-" + ruleCounter; + }; +}; + +/** + * Cache the value from the first time a function is called. + */ +var memoize = function memoize(fn) { + var value; + return function () { + if (!value) value = fn(); + return value; + }; +}; + +/** + * Get a style property value. + */ +var getPropertyValue = function getPropertyValue(cssRule, prop) { + try { + // Support CSSTOM. + if (cssRule.attributeStyleMap) { + return cssRule.attributeStyleMap.get(prop); + } + + return cssRule.style.getPropertyValue(prop); + } catch (err) { + // IE may throw if property is unknown. + return ''; + } +}; + +/** + * Set a style property. + */ +var setProperty = function setProperty(cssRule, prop, value) { + try { + var cssValue = value; + + if (Array.isArray(value)) { + cssValue = toCssValue(value, true); + + if (value[value.length - 1] === '!important') { + cssRule.style.setProperty(prop, cssValue, 'important'); + return true; + } + } // Support CSSTOM. + + + if (cssRule.attributeStyleMap) { + cssRule.attributeStyleMap.set(prop, cssValue); + } else { + cssRule.style.setProperty(prop, cssValue); + } + } catch (err) { + // IE may throw if property is unknown. + return false; + } + + return true; +}; + +/** + * Remove a style property. + */ +var removeProperty = function removeProperty(cssRule, prop) { + try { + // Support CSSTOM. + if (cssRule.attributeStyleMap) { + cssRule.attributeStyleMap.delete(prop); + } else { + cssRule.style.removeProperty(prop); + } + } catch (err) { + } +}; + +/** + * Set the selector. + */ +var setSelector = function setSelector(cssRule, selectorText) { + cssRule.selectorText = selectorText; // Return false if setter was not successful. + // Currently works in chrome only. + + return cssRule.selectorText === selectorText; +}; +/** + * Gets the `head` element upon the first call and caches it. + * We assume it can't be null. + */ + + +var getHead = memoize(function () { + return document.querySelector('head'); +}); +/** + * Find attached sheet with an index higher than the passed one. + */ + +function findHigherSheet(registry, options) { + for (var i = 0; i < registry.length; i++) { + var sheet = registry[i]; + + if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) { + return sheet; + } + } + + return null; +} +/** + * Find attached sheet with the highest index. + */ + + +function findHighestSheet(registry, options) { + for (var i = registry.length - 1; i >= 0; i--) { + var sheet = registry[i]; + + if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) { + return sheet; + } + } + + return null; +} +/** + * Find a comment with "jss" inside. + */ + + +function findCommentNode(text) { + var head = getHead(); + + for (var i = 0; i < head.childNodes.length; i++) { + var node = head.childNodes[i]; + + if (node.nodeType === 8 && node.nodeValue.trim() === text) { + return node; + } + } + + return null; +} + +/** + * Find a node before which we can insert the sheet. + */ +function findPrevNode(options) { + var registry$1 = registry.registry; + + if (registry$1.length > 0) { + // Try to insert before the next higher sheet. + var sheet = findHigherSheet(registry$1, options); + + if (sheet && sheet.renderer) { + return { + parent: sheet.renderer.element.parentNode, + node: sheet.renderer.element + }; + } // Otherwise insert after the last attached. + + + sheet = findHighestSheet(registry$1, options); + + if (sheet && sheet.renderer) { + return { + parent: sheet.renderer.element.parentNode, + node: sheet.renderer.element.nextSibling + }; + } + } // Try to find a comment placeholder if registry is empty. + + + var insertionPoint = options.insertionPoint; + + if (insertionPoint && typeof insertionPoint === 'string') { + var comment = findCommentNode(insertionPoint); + + if (comment) { + return { + parent: comment.parentNode, + node: comment.nextSibling + }; + } // If user specifies an insertion point and it can't be found in the document - + } + + return false; +} +/** + * Insert style element into the DOM. + */ + + +function insertStyle(style, options) { + var insertionPoint = options.insertionPoint; + var nextNode = findPrevNode(options); + + if (nextNode !== false && nextNode.parent) { + nextNode.parent.insertBefore(style, nextNode.node); + return; + } // Works with iframes and any node types. + + + if (insertionPoint && typeof insertionPoint.nodeType === 'number') { + // https://stackoverflow.com/questions/41328728/force-casting-in-flow + var insertionPointElement = insertionPoint; + var parentNode = insertionPointElement.parentNode; + if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling); + return; + } + + getHead().appendChild(style); +} +/** + * Read jss nonce setting from the page if the user has set it. + */ + + +var getNonce = memoize(function () { + var node = document.querySelector('meta[property="csp-nonce"]'); + return node ? node.getAttribute('content') : null; +}); + +var _insertRule = function insertRule(container, rule, index) { + try { + if ('insertRule' in container) { + var c = container; + c.insertRule(rule, index); + } // Keyframes rule. + else if ('appendRule' in container) { + var _c = container; + + _c.appendRule(rule); + } + } catch (err) { + return false; + } + + return container.cssRules[index]; +}; + +var getValidRuleInsertionIndex = function getValidRuleInsertionIndex(container, index) { + var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong + + if (index === undefined || index > maxIndex) { + // eslint-disable-next-line no-param-reassign + return maxIndex; + } + + return index; +}; + +var createStyle = function createStyle() { + var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we + // insert rules after we insert the style tag. + // It seems to kick-off the source order specificity algorithm. + + el.textContent = '\n'; + return el; +}; + +var DomRenderer = +/*#__PURE__*/ +function () { + // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696 + // Will be empty if link: true option is not set, because + // it is only for use together with insertRule API. + function DomRenderer(sheet) { + this.getPropertyValue = getPropertyValue; + this.setProperty = setProperty; + this.removeProperty = removeProperty; + this.setSelector = setSelector; + this.element = void 0; + this.sheet = void 0; + this.hasInsertedRules = false; + this.cssRules = []; + // There is no sheet when the renderer is used from a standalone StyleRule. + if (sheet) registry.add(sheet); + this.sheet = sheet; + + var _ref = this.sheet ? this.sheet.options : {}, + media = _ref.media, + meta = _ref.meta, + element = _ref.element; + + this.element = element || createStyle(); + this.element.setAttribute('data-jss', ''); + if (media) this.element.setAttribute('media', media); + if (meta) this.element.setAttribute('data-meta', meta); + var nonce = getNonce(); + if (nonce) this.element.setAttribute('nonce', nonce); + } + /** + * Insert style element into render tree. + */ + + + var _proto = DomRenderer.prototype; + + _proto.attach = function attach() { + // In the case the element node is external and it is already in the DOM. + if (this.element.parentNode || !this.sheet) return; + insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()` + // most browsers create a new CSSStyleSheet, except of all IEs. + + var deployed = Boolean(this.sheet && this.sheet.deployed); + + if (this.hasInsertedRules && deployed) { + this.hasInsertedRules = false; + this.deploy(); + } + } + /** + * Remove style element from render tree. + */ + ; + + _proto.detach = function detach() { + if (!this.sheet) return; + var parentNode = this.element.parentNode; + if (parentNode) parentNode.removeChild(this.element); // In the most browsers, rules inserted using insertRule() API will be lost when style element is removed. + // Though IE will keep them and we need a consistent behavior. + + if (this.sheet.options.link) { + this.cssRules = []; + this.element.textContent = '\n'; + } + } + /** + * Inject CSS string into element. + */ + ; + + _proto.deploy = function deploy() { + var sheet = this.sheet; + if (!sheet) return; + + if (sheet.options.link) { + this.insertRules(sheet.rules); + return; + } + + this.element.textContent = "\n" + sheet.toString() + "\n"; + } + /** + * Insert RuleList into an element. + */ + ; + + _proto.insertRules = function insertRules(rules, nativeParent) { + for (var i = 0; i < rules.index.length; i++) { + this.insertRule(rules.index[i], i, nativeParent); + } + } + /** + * Insert a rule into element. + */ + ; + + _proto.insertRule = function insertRule(rule, index, nativeParent) { + if (nativeParent === void 0) { + nativeParent = this.element.sheet; + } + + if (rule.rules) { + var parent = rule; + var latestNativeParent = nativeParent; + + if (rule.type === 'conditional' || rule.type === 'keyframes') { + var _insertionIndex = getValidRuleInsertionIndex(nativeParent, index); // We need to render the container without children first. + + + latestNativeParent = _insertRule(nativeParent, parent.toString({ + children: false + }), _insertionIndex); + + if (latestNativeParent === false) { + return false; + } + + this.refCssRule(rule, _insertionIndex, latestNativeParent); + } + + this.insertRules(parent.rules, latestNativeParent); + return latestNativeParent; + } + + var ruleStr = rule.toString(); + if (!ruleStr) return false; + var insertionIndex = getValidRuleInsertionIndex(nativeParent, index); + + var nativeRule = _insertRule(nativeParent, ruleStr, insertionIndex); + + if (nativeRule === false) { + return false; + } + + this.hasInsertedRules = true; + this.refCssRule(rule, insertionIndex, nativeRule); + return nativeRule; + }; + + _proto.refCssRule = function refCssRule(rule, index, cssRule) { + rule.renderable = cssRule; // We only want to reference the top level rules, deleteRule API doesn't support removing nested rules + // like rules inside media queries or keyframes + + if (rule.options.parent instanceof StyleSheet) { + this.cssRules[index] = cssRule; + } + } + /** + * Delete a rule. + */ + ; + + _proto.deleteRule = function deleteRule(cssRule) { + var sheet = this.element.sheet; + var index = this.indexOf(cssRule); + if (index === -1) return false; + sheet.deleteRule(index); + this.cssRules.splice(index, 1); + return true; + } + /** + * Get index of a CSS Rule. + */ + ; + + _proto.indexOf = function indexOf(cssRule) { + return this.cssRules.indexOf(cssRule); + } + /** + * Generate a new CSS rule and replace the existing one. + * + * Only used for some old browsers because they can't set a selector. + */ + ; + + _proto.replaceRule = function replaceRule(cssRule, rule) { + var index = this.indexOf(cssRule); + if (index === -1) return false; + this.element.sheet.deleteRule(index); + this.cssRules.splice(index, 1); + return this.insertRule(rule, index); + } + /** + * Get all rules elements. + */ + ; + + _proto.getRules = function getRules() { + return this.element.sheet.cssRules; + }; + + return DomRenderer; +}(); + +var instanceCounter = 0; + +var Jss = +/*#__PURE__*/ +function () { + function Jss(options) { + this.id = instanceCounter++; + this.version = "10.6.0"; + this.plugins = new PluginsRegistry(); + this.options = { + id: { + minify: false + }, + createGenerateId: createGenerateId, + Renderer: isBrowser ? DomRenderer : null, + plugins: [] + }; + this.generateId = createGenerateId({ + minify: false + }); + + for (var i = 0; i < plugins$1.length; i++) { + this.plugins.use(plugins$1[i], { + queue: 'internal' + }); + } + + this.setup(options); + } + /** + * Prepares various options, applies plugins. + * Should not be used twice on the same instance, because there is no plugins + * deduplication logic. + */ + + + var _proto = Jss.prototype; + + _proto.setup = function setup(options) { + if (options === void 0) { + options = {}; + } + + if (options.createGenerateId) { + this.options.createGenerateId = options.createGenerateId; + } + + if (options.id) { + this.options.id = _extends({}, this.options.id, options.id); + } + + if (options.createGenerateId || options.id) { + this.generateId = this.options.createGenerateId(this.options.id); + } + + if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint; + + if ('Renderer' in options) { + this.options.Renderer = options.Renderer; + } // eslint-disable-next-line prefer-spread + + + if (options.plugins) this.use.apply(this, options.plugins); + return this; + } + /** + * Create a Style Sheet. + */ + ; + + _proto.createStyleSheet = function createStyleSheet(styles, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + index = _options.index; + + if (typeof index !== 'number') { + index = registry.index === 0 ? 0 : registry.index + 1; + } + + var sheet = new StyleSheet(styles, _extends({}, options, { + jss: this, + generateId: options.generateId || this.generateId, + insertionPoint: this.options.insertionPoint, + Renderer: this.options.Renderer, + index: index + })); + this.plugins.onProcessSheet(sheet); + return sheet; + } + /** + * Detach the Style Sheet and remove it from the registry. + */ + ; + + _proto.removeStyleSheet = function removeStyleSheet(sheet) { + sheet.detach(); + registry.remove(sheet); + return this; + } + /** + * Create a rule without a Style Sheet. + * [Deprecated] will be removed in the next major version. + */ + ; + + _proto.createRule = function createRule$1(name, style, options) { + if (style === void 0) { + style = {}; + } + + if (options === void 0) { + options = {}; + } + + // Enable rule without name for inline styles. + if (typeof name === 'object') { + // $FlowFixMe[incompatible-call] + return this.createRule(undefined, name, style); + } // $FlowFixMe[incompatible-type] + + + var ruleOptions = _extends({}, options, { + name: name, + jss: this, + Renderer: this.options.Renderer + }); + + if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId; + if (!ruleOptions.classes) ruleOptions.classes = {}; + if (!ruleOptions.keyframes) ruleOptions.keyframes = {}; + + var rule = createRule(name, style, ruleOptions); + + if (rule) this.plugins.onProcessRule(rule); + return rule; + } + /** + * Register plugin. Passed function will be invoked with a rule instance. + */ + ; + + _proto.use = function use() { + var _this = this; + + for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { + plugins[_key] = arguments[_key]; + } + + plugins.forEach(function (plugin) { + _this.plugins.use(plugin); + }); + return this; + }; + + return Jss; +}(); + +/** + * Extracts a styles object with only props that contain function values. + */ +function getDynamicStyles(styles) { + var to = null; + + for (var key in styles) { + var value = styles[key]; + var type = typeof value; + + if (type === 'function') { + if (!to) to = {}; + to[key] = value; + } else if (type === 'object' && value !== null && !Array.isArray(value)) { + var extracted = getDynamicStyles(value); + + if (extracted) { + if (!to) to = {}; + to[key] = extracted; + } + } + } + + return to; +} + +/** + * A better abstraction over CSS. + * + * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present + * @website https://github.com/cssinjs/jss + * @license MIT + */ + +/** + * Export a constant indicating if this browser has CSSTOM support. + * https://developers.google.com/web/updates/2018/03/cssom + */ +var hasCSSTOMSupport = typeof CSS === 'object' && CSS != null && 'number' in CSS; +/** + * Creates a new instance of Jss. + */ + +var create = function create(options) { + return new Jss(options); +}; +/** + * A global Jss instance. + */ + +create(); + +var now = Date.now(); +var fnValuesNs = "fnValues" + now; +var fnRuleNs = "fnStyle" + ++now; + +var functionPlugin = function functionPlugin() { + return { + onCreateRule: function onCreateRule(name, decl, options) { + if (typeof decl !== 'function') return null; + var rule = createRule(name, {}, options); + rule[fnRuleNs] = decl; + return rule; + }, + onProcessStyle: function onProcessStyle(style, rule) { + // We need to extract function values from the declaration, so that we can keep core unaware of them. + // We need to do that only once. + // We don't need to extract functions on each style update, since this can happen only once. + // We don't support function values inside of function rules. + if (fnValuesNs in rule || fnRuleNs in rule) return style; + var fnValues = {}; + + for (var prop in style) { + var value = style[prop]; + if (typeof value !== 'function') continue; + delete style[prop]; + fnValues[prop] = value; + } // $FlowFixMe[prop-missing] + + + rule[fnValuesNs] = fnValues; + return style; + }, + onUpdate: function onUpdate(data, rule, sheet, options) { + var styleRule = rule; // $FlowFixMe[prop-missing] + + var fnRule = styleRule[fnRuleNs]; // If we have a style function, the entire rule is dynamic and style object + // will be returned from that function. + + if (fnRule) { + // Empty object will remove all currently defined props + // in case function rule returns a falsy value. + styleRule.style = fnRule(data) || {}; + } // $FlowFixMe[prop-missing] + + + var fnValues = styleRule[fnValuesNs]; // If we have a fn values map, it is a rule with function values. + + if (fnValues) { + for (var _prop in fnValues) { + styleRule.prop(_prop, fnValues[_prop](data), options); + } + } + } + }; +}; + +var at = '@global'; +var atPrefix = '@global '; + +var GlobalContainerRule = +/*#__PURE__*/ +function () { + function GlobalContainerRule(key, styles, options) { + this.type = 'global'; + this.at = at; + this.rules = void 0; + this.options = void 0; + this.key = void 0; + this.isProcessed = false; + this.key = key; + this.options = options; + this.rules = new RuleList(_extends({}, options, { + parent: this + })); + + for (var selector in styles) { + this.rules.add(selector, styles[selector]); + } + + this.rules.process(); + } + /** + * Get a rule. + */ + + + var _proto = GlobalContainerRule.prototype; + + _proto.getRule = function getRule(name) { + return this.rules.get(name); + } + /** + * Create and register rule, run plugins. + */ + ; + + _proto.addRule = function addRule(name, style, options) { + var rule = this.rules.add(name, style, options); + if (rule) this.options.jss.plugins.onProcessRule(rule); + return rule; + } + /** + * Get index of a rule. + */ + ; + + _proto.indexOf = function indexOf(rule) { + return this.rules.indexOf(rule); + } + /** + * Generates a CSS string. + */ + ; + + _proto.toString = function toString() { + return this.rules.toString(); + }; + + return GlobalContainerRule; +}(); + +var GlobalPrefixedRule = +/*#__PURE__*/ +function () { + function GlobalPrefixedRule(key, style, options) { + this.type = 'global'; + this.at = at; + this.options = void 0; + this.rule = void 0; + this.isProcessed = false; + this.key = void 0; + this.key = key; + this.options = options; + var selector = key.substr(atPrefix.length); + this.rule = options.jss.createRule(selector, style, _extends({}, options, { + parent: this + })); + } + + var _proto2 = GlobalPrefixedRule.prototype; + + _proto2.toString = function toString(options) { + return this.rule ? this.rule.toString(options) : ''; + }; + + return GlobalPrefixedRule; +}(); + +var separatorRegExp$1 = /\s*,\s*/g; + +function addScope(selector, scope) { + var parts = selector.split(separatorRegExp$1); + var scoped = ''; + + for (var i = 0; i < parts.length; i++) { + scoped += scope + " " + parts[i].trim(); + if (parts[i + 1]) scoped += ', '; + } + + return scoped; +} + +function handleNestedGlobalContainerRule(rule, sheet) { + var options = rule.options, + style = rule.style; + var rules = style ? style[at] : null; + if (!rules) return; + + for (var name in rules) { + sheet.addRule(name, rules[name], _extends({}, options, { + selector: addScope(name, rule.selector) + })); + } + + delete style[at]; +} + +function handlePrefixedGlobalRule(rule, sheet) { + var options = rule.options, + style = rule.style; + + for (var prop in style) { + if (prop[0] !== '@' || prop.substr(0, at.length) !== at) continue; + var selector = addScope(prop.substr(at.length), rule.selector); + sheet.addRule(selector, style[prop], _extends({}, options, { + selector: selector + })); + delete style[prop]; + } +} +/** + * Convert nested rules to separate, remove them from original styles. + * + * @param {Rule} rule + * @api public + */ + + +function jssGlobal() { + function onCreateRule(name, styles, options) { + if (!name) return null; + + if (name === at) { + return new GlobalContainerRule(name, styles, options); + } + + if (name[0] === '@' && name.substr(0, atPrefix.length) === atPrefix) { + return new GlobalPrefixedRule(name, styles, options); + } + + var parent = options.parent; + + if (parent) { + if (parent.type === 'global' || parent.options.parent && parent.options.parent.type === 'global') { + options.scoped = false; + } + } + + if (options.scoped === false) { + options.selector = name; + } + + return null; + } + + function onProcessRule(rule, sheet) { + if (rule.type !== 'style' || !sheet) return; + handleNestedGlobalContainerRule(rule, sheet); + handlePrefixedGlobalRule(rule, sheet); + } + + return { + onCreateRule: onCreateRule, + onProcessRule: onProcessRule + }; +} + +var separatorRegExp = /\s*,\s*/g; +var parentRegExp = /&/g; +var refRegExp = /\$([\w-]+)/g; +/** + * Convert nested rules to separate, remove them from original styles. + * + * @param {Rule} rule + * @api public + */ + +function jssNested() { + // Get a function to be used for $ref replacement. + function getReplaceRef(container, sheet) { + return function (match, key) { + var rule = container.getRule(key) || sheet && sheet.getRule(key); + + if (rule) { + rule = rule; + return rule.selector; + } + return key; + }; + } + + function replaceParentRefs(nestedProp, parentProp) { + var parentSelectors = parentProp.split(separatorRegExp); + var nestedSelectors = nestedProp.split(separatorRegExp); + var result = ''; + + for (var i = 0; i < parentSelectors.length; i++) { + var parent = parentSelectors[i]; + + for (var j = 0; j < nestedSelectors.length; j++) { + var nested = nestedSelectors[j]; + if (result) result += ', '; // Replace all & by the parent or prefix & with the parent. + + result += nested.indexOf('&') !== -1 ? nested.replace(parentRegExp, parent) : parent + " " + nested; + } + } + + return result; + } + + function getOptions(rule, container, prevOptions) { + // Options has been already created, now we only increase index. + if (prevOptions) return _extends({}, prevOptions, { + index: prevOptions.index + 1 // $FlowFixMe[prop-missing] + + }); + var nestingLevel = rule.options.nestingLevel; + nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1; + + var options = _extends({}, rule.options, { + nestingLevel: nestingLevel, + index: container.indexOf(rule) + 1 // We don't need the parent name to be set options for chlid. + + }); + + delete options.name; + return options; + } + + function onProcessStyle(style, rule, sheet) { + if (rule.type !== 'style') return style; + var styleRule = rule; + var container = styleRule.options.parent; + var options; + var replaceRef; + + for (var prop in style) { + var isNested = prop.indexOf('&') !== -1; + var isNestedConditional = prop[0] === '@'; + if (!isNested && !isNestedConditional) continue; + options = getOptions(styleRule, container, options); + + if (isNested) { + var selector = replaceParentRefs(prop, styleRule.selector); // Lazily create the ref replacer function just once for + // all nested rules within the sheet. + + if (!replaceRef) replaceRef = getReplaceRef(container, sheet); // Replace all $refs. + + selector = selector.replace(refRegExp, replaceRef); + container.addRule(selector, style[prop], _extends({}, options, { + selector: selector + })); + } else if (isNestedConditional) { + // Place conditional right after the parent rule to ensure right ordering. + container.addRule(prop, {}, options) // Flow expects more options but they aren't required + // And flow doesn't know this will always be a StyleRule which has the addRule method + // $FlowFixMe[incompatible-use] + // $FlowFixMe[prop-missing] + .addRule(styleRule.key, style[prop], { + selector: styleRule.selector + }); + } + + delete style[prop]; + } + + return style; + } + + return { + onProcessStyle: onProcessStyle + }; +} + +/* eslint-disable no-var, prefer-template */ +var uppercasePattern = /[A-Z]/g; +var msPattern = /^ms-/; +var cache$2 = {}; + +function toHyphenLower(match) { + return '-' + match.toLowerCase() +} + +function hyphenateStyleName(name) { + if (cache$2.hasOwnProperty(name)) { + return cache$2[name] + } + + var hName = name.replace(uppercasePattern, toHyphenLower); + return (cache$2[name] = msPattern.test(hName) ? '-' + hName : hName) +} + +/** + * Convert camel cased property names to dash separated. + * + * @param {Object} style + * @return {Object} + */ + +function convertCase(style) { + var converted = {}; + + for (var prop in style) { + var key = prop.indexOf('--') === 0 ? prop : hyphenateStyleName(prop); + converted[key] = style[prop]; + } + + if (style.fallbacks) { + if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks); + } + + return converted; +} +/** + * Allow camel cased property names by converting them back to dasherized. + * + * @param {Rule} rule + */ + + +function camelCase() { + function onProcessStyle(style) { + if (Array.isArray(style)) { + // Handle rules like @font-face, which can have multiple styles in an array + for (var index = 0; index < style.length; index++) { + style[index] = convertCase(style[index]); + } + + return style; + } + + return convertCase(style); + } + + function onChangeValue(value, prop, rule) { + if (prop.indexOf('--') === 0) { + return value; + } + + var hyphenatedProp = hyphenateStyleName(prop); // There was no camel case in place + + if (prop === hyphenatedProp) return value; + rule.prop(hyphenatedProp, value); // Core will ignore that property value we set the proper one above. + + return null; + } + + return { + onProcessStyle: onProcessStyle, + onChangeValue: onChangeValue + }; +} + +var px = hasCSSTOMSupport && CSS ? CSS.px : 'px'; +var ms = hasCSSTOMSupport && CSS ? CSS.ms : 'ms'; +var percent = hasCSSTOMSupport && CSS ? CSS.percent : '%'; +/** + * Generated jss-plugin-default-unit CSS property units + * + * @type object + */ + +var defaultUnits = { + // Animation properties + 'animation-delay': ms, + 'animation-duration': ms, + // Background properties + 'background-position': px, + 'background-position-x': px, + 'background-position-y': px, + 'background-size': px, + // Border Properties + border: px, + 'border-bottom': px, + 'border-bottom-left-radius': px, + 'border-bottom-right-radius': px, + 'border-bottom-width': px, + 'border-left': px, + 'border-left-width': px, + 'border-radius': px, + 'border-right': px, + 'border-right-width': px, + 'border-top': px, + 'border-top-left-radius': px, + 'border-top-right-radius': px, + 'border-top-width': px, + 'border-width': px, + 'border-block': px, + 'border-block-end': px, + 'border-block-end-width': px, + 'border-block-start': px, + 'border-block-start-width': px, + 'border-block-width': px, + 'border-inline': px, + 'border-inline-end': px, + 'border-inline-end-width': px, + 'border-inline-start': px, + 'border-inline-start-width': px, + 'border-inline-width': px, + 'border-start-start-radius': px, + 'border-start-end-radius': px, + 'border-end-start-radius': px, + 'border-end-end-radius': px, + // Margin properties + margin: px, + 'margin-bottom': px, + 'margin-left': px, + 'margin-right': px, + 'margin-top': px, + 'margin-block': px, + 'margin-block-end': px, + 'margin-block-start': px, + 'margin-inline': px, + 'margin-inline-end': px, + 'margin-inline-start': px, + // Padding properties + padding: px, + 'padding-bottom': px, + 'padding-left': px, + 'padding-right': px, + 'padding-top': px, + 'padding-block': px, + 'padding-block-end': px, + 'padding-block-start': px, + 'padding-inline': px, + 'padding-inline-end': px, + 'padding-inline-start': px, + // Mask properties + 'mask-position-x': px, + 'mask-position-y': px, + 'mask-size': px, + // Width and height properties + height: px, + width: px, + 'min-height': px, + 'max-height': px, + 'min-width': px, + 'max-width': px, + // Position properties + bottom: px, + left: px, + top: px, + right: px, + inset: px, + 'inset-block': px, + 'inset-block-end': px, + 'inset-block-start': px, + 'inset-inline': px, + 'inset-inline-end': px, + 'inset-inline-start': px, + // Shadow properties + 'box-shadow': px, + 'text-shadow': px, + // Column properties + 'column-gap': px, + 'column-rule': px, + 'column-rule-width': px, + 'column-width': px, + // Font and text properties + 'font-size': px, + 'font-size-delta': px, + 'letter-spacing': px, + 'text-decoration-thickness': px, + 'text-indent': px, + 'text-stroke': px, + 'text-stroke-width': px, + 'word-spacing': px, + // Motion properties + motion: px, + 'motion-offset': px, + // Outline properties + outline: px, + 'outline-offset': px, + 'outline-width': px, + // Perspective properties + perspective: px, + 'perspective-origin-x': percent, + 'perspective-origin-y': percent, + // Transform properties + 'transform-origin': percent, + 'transform-origin-x': percent, + 'transform-origin-y': percent, + 'transform-origin-z': percent, + // Transition properties + 'transition-delay': ms, + 'transition-duration': ms, + // Alignment properties + 'vertical-align': px, + 'flex-basis': px, + // Some random properties + 'shape-margin': px, + size: px, + gap: px, + // Grid properties + grid: px, + 'grid-gap': px, + 'row-gap': px, + 'grid-row-gap': px, + 'grid-column-gap': px, + 'grid-template-rows': px, + 'grid-template-columns': px, + 'grid-auto-rows': px, + 'grid-auto-columns': px, + // Not existing properties. + // Used to avoid issues with jss-plugin-expand integration. + 'box-shadow-x': px, + 'box-shadow-y': px, + 'box-shadow-blur': px, + 'box-shadow-spread': px, + 'font-line-height': px, + 'text-shadow-x': px, + 'text-shadow-y': px, + 'text-shadow-blur': px +}; + +/** + * Clones the object and adds a camel cased property version. + */ +function addCamelCasedVersion(obj) { + var regExp = /(-[a-z])/g; + + var replace = function replace(str) { + return str[1].toUpperCase(); + }; + + var newObj = {}; + + for (var _key in obj) { + newObj[_key] = obj[_key]; + newObj[_key.replace(regExp, replace)] = obj[_key]; + } + + return newObj; +} + +var units = addCamelCasedVersion(defaultUnits); +/** + * Recursive deep style passing function + */ + +function iterate(prop, value, options) { + if (value == null) return value; + + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + value[i] = iterate(prop, value[i], options); + } + } else if (typeof value === 'object') { + if (prop === 'fallbacks') { + for (var innerProp in value) { + value[innerProp] = iterate(innerProp, value[innerProp], options); + } + } else { + for (var _innerProp in value) { + value[_innerProp] = iterate(prop + "-" + _innerProp, value[_innerProp], options); + } + } // eslint-disable-next-line no-restricted-globals + + } else if (typeof value === 'number' && isNaN(value) === false) { + var unit = options[prop] || units[prop]; // Add the unit if available, except for the special case of 0px. + + if (unit && !(value === 0 && unit === px)) { + return typeof unit === 'function' ? unit(value).toString() : "" + value + unit; + } + + return value.toString(); + } + + return value; +} +/** + * Add unit to numeric values. + */ + + +function defaultUnit(options) { + if (options === void 0) { + options = {}; + } + + var camelCasedOptions = addCamelCasedVersion(options); + + function onProcessStyle(style, rule) { + if (rule.type !== 'style') return style; + + for (var prop in style) { + style[prop] = iterate(prop, style[prop], camelCasedOptions); + } + + return style; + } + + function onChangeValue(value, prop) { + return iterate(prop, value, camelCasedOptions); + } + + return { + onProcessStyle: onProcessStyle, + onChangeValue: onChangeValue + }; +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +// Export javascript style and css style vendor prefixes. +var js = ''; +var css = ''; +var vendor = ''; +var browser = ''; +var isTouch = isBrowser && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside. + +if (isBrowser) { + // Order matters. We need to check Webkit the last one because + // other vendors use to add Webkit prefixes to some properties + var jsCssMap = { + Moz: '-moz-', + ms: '-ms-', + O: '-o-', + Webkit: '-webkit-' + }; + + var _document$createEleme = document.createElement('p'), + style = _document$createEleme.style; + + var testProp = 'Transform'; + + for (var key in jsCssMap) { + if (key + testProp in style) { + js = key; + css = jsCssMap[key]; + break; + } + } // Correctly detect the Edge browser. + + + if (js === 'Webkit' && 'msHyphens' in style) { + js = 'ms'; + css = jsCssMap.ms; + browser = 'edge'; + } // Correctly detect the Safari browser. + + + if (js === 'Webkit' && '-apple-trailing-word' in style) { + vendor = 'apple'; + } +} +/** + * Vendor prefix string for the current browser. + * + * @type {{js: String, css: String, vendor: String, browser: String}} + * @api public + */ + + +var prefix = { + js: js, + css: css, + vendor: vendor, + browser: browser, + isTouch: isTouch +}; + +/** + * Test if a keyframe at-rule should be prefixed or not + * + * @param {String} vendor prefix string for the current browser. + * @return {String} + * @api public + */ + +function supportedKeyframes(key) { + // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a' + if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules. + // https://caniuse.com/#search=keyframes + + if (prefix.js === 'ms') return key; + return "@" + prefix.css + "keyframes" + key.substr(10); +} + +// https://caniuse.com/#search=appearance + +var appearence = { + noPrefill: ['appearance'], + supportedProperty: function supportedProperty(prop) { + if (prop !== 'appearance') return false; + if (prefix.js === 'ms') return "-webkit-" + prop; + return prefix.css + prop; + } +}; + +// https://caniuse.com/#search=color-adjust + +var colorAdjust = { + noPrefill: ['color-adjust'], + supportedProperty: function supportedProperty(prop) { + if (prop !== 'color-adjust') return false; + if (prefix.js === 'Webkit') return prefix.css + "print-" + prop; + return prop; + } +}; + +var regExp = /[-\s]+(.)?/g; +/** + * Replaces the letter with the capital letter + * + * @param {String} match + * @param {String} c + * @return {String} + * @api private + */ + +function toUpper(match, c) { + return c ? c.toUpperCase() : ''; +} +/** + * Convert dash separated strings to camel-cased. + * + * @param {String} str + * @return {String} + * @api private + */ + + +function camelize(str) { + return str.replace(regExp, toUpper); +} + +/** + * Convert dash separated strings to pascal cased. + * + * @param {String} str + * @return {String} + * @api private + */ + +function pascalize(str) { + return camelize("-" + str); +} + +// but we can use a longhand property instead. +// https://caniuse.com/#search=mask + +var mask = { + noPrefill: ['mask'], + supportedProperty: function supportedProperty(prop, style) { + if (!/^mask/.test(prop)) return false; + + if (prefix.js === 'Webkit') { + var longhand = 'mask-image'; + + if (camelize(longhand) in style) { + return prop; + } + + if (prefix.js + pascalize(longhand) in style) { + return prefix.css + prop; + } + } + + return prop; + } +}; + +// https://caniuse.com/#search=text-orientation + +var textOrientation = { + noPrefill: ['text-orientation'], + supportedProperty: function supportedProperty(prop) { + if (prop !== 'text-orientation') return false; + + if (prefix.vendor === 'apple' && !prefix.isTouch) { + return prefix.css + prop; + } + + return prop; + } +}; + +// https://caniuse.com/#search=transform + +var transform = { + noPrefill: ['transform'], + supportedProperty: function supportedProperty(prop, style, options) { + if (prop !== 'transform') return false; + + if (options.transform) { + return prop; + } + + return prefix.css + prop; + } +}; + +// https://caniuse.com/#search=transition + +var transition = { + noPrefill: ['transition'], + supportedProperty: function supportedProperty(prop, style, options) { + if (prop !== 'transition') return false; + + if (options.transition) { + return prop; + } + + return prefix.css + prop; + } +}; + +// https://caniuse.com/#search=writing-mode + +var writingMode = { + noPrefill: ['writing-mode'], + supportedProperty: function supportedProperty(prop) { + if (prop !== 'writing-mode') return false; + + if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') { + return prefix.css + prop; + } + + return prop; + } +}; + +// https://caniuse.com/#search=user-select + +var userSelect = { + noPrefill: ['user-select'], + supportedProperty: function supportedProperty(prop) { + if (prop !== 'user-select') return false; + + if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') { + return prefix.css + prop; + } + + return prop; + } +}; + +// https://caniuse.com/#search=multicolumn +// https://github.com/postcss/autoprefixer/issues/491 +// https://github.com/postcss/autoprefixer/issues/177 + +var breakPropsOld = { + supportedProperty: function supportedProperty(prop, style) { + if (!/^break-/.test(prop)) return false; + + if (prefix.js === 'Webkit') { + var jsProp = "WebkitColumn" + pascalize(prop); + return jsProp in style ? prefix.css + "column-" + prop : false; + } + + if (prefix.js === 'Moz') { + var _jsProp = "page" + pascalize(prop); + + return _jsProp in style ? "page-" + prop : false; + } + + return false; + } +}; + +// See https://github.com/postcss/autoprefixer/issues/324. + +var inlineLogicalOld = { + supportedProperty: function supportedProperty(prop, style) { + if (!/^(border|margin|padding)-inline/.test(prop)) return false; + if (prefix.js === 'Moz') return prop; + var newProp = prop.replace('-inline', ''); + return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false; + } +}; + +// Camelization is required because we can't test using. +// CSS syntax for e.g. in FF. + +var unprefixed = { + supportedProperty: function supportedProperty(prop, style) { + return camelize(prop) in style ? prop : false; + } +}; + +var prefixed = { + supportedProperty: function supportedProperty(prop, style) { + var pascalized = pascalize(prop); // Return custom CSS variable without prefixing. + + if (prop[0] === '-') return prop; // Return already prefixed value without prefixing. + + if (prop[0] === '-' && prop[1] === '-') return prop; + if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback. + + if (prefix.js !== 'Webkit' && "Webkit" + pascalized in style) return "-webkit-" + prop; + return false; + } +}; + +// https://caniuse.com/#search=scroll-snap + +var scrollSnap = { + supportedProperty: function supportedProperty(prop) { + if (prop.substring(0, 11) !== 'scroll-snap') return false; + + if (prefix.js === 'ms') { + return "" + prefix.css + prop; + } + + return prop; + } +}; + +// https://caniuse.com/#search=overscroll-behavior + +var overscrollBehavior = { + supportedProperty: function supportedProperty(prop) { + if (prop !== 'overscroll-behavior') return false; + + if (prefix.js === 'ms') { + return prefix.css + "scroll-chaining"; + } + + return prop; + } +}; + +var propMap = { + 'flex-grow': 'flex-positive', + 'flex-shrink': 'flex-negative', + 'flex-basis': 'flex-preferred-size', + 'justify-content': 'flex-pack', + order: 'flex-order', + 'align-items': 'flex-align', + 'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin. + +}; // Support old flex spec from 2012. + +var flex2012 = { + supportedProperty: function supportedProperty(prop, style) { + var newProp = propMap[prop]; + if (!newProp) return false; + return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false; + } +}; + +var propMap$1 = { + flex: 'box-flex', + 'flex-grow': 'box-flex', + 'flex-direction': ['box-orient', 'box-direction'], + order: 'box-ordinal-group', + 'align-items': 'box-align', + 'flex-flow': ['box-orient', 'box-direction'], + 'justify-content': 'box-pack' +}; +var propKeys = Object.keys(propMap$1); + +var prefixCss = function prefixCss(p) { + return prefix.css + p; +}; // Support old flex spec from 2009. + + +var flex2009 = { + supportedProperty: function supportedProperty(prop, style, _ref) { + var multiple = _ref.multiple; + + if (propKeys.indexOf(prop) > -1) { + var newProp = propMap$1[prop]; + + if (!Array.isArray(newProp)) { + return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false; + } + + if (!multiple) return false; + + for (var i = 0; i < newProp.length; i++) { + if (!(prefix.js + pascalize(newProp[0]) in style)) { + return false; + } + } + + return newProp.map(prefixCss); + } + + return false; + } +}; + +// plugins = [ +// ...plugins, +// breakPropsOld, +// inlineLogicalOld, +// unprefixed, +// prefixed, +// scrollSnap, +// flex2012, +// flex2009 +// ] +// Plugins without 'noPrefill' value, going last. +// 'flex-*' plugins should be at the bottom. +// 'flex2009' going after 'flex2012'. +// 'prefixed' going after 'unprefixed' + +var plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009]; +var propertyDetectors = plugins.filter(function (p) { + return p.supportedProperty; +}).map(function (p) { + return p.supportedProperty; +}); +var noPrefill = plugins.filter(function (p) { + return p.noPrefill; +}).reduce(function (a, p) { + a.push.apply(a, _toConsumableArray(p.noPrefill)); + return a; +}, []); + +var el; +var cache = {}; + +if (isBrowser) { + el = document.createElement('p'); // We test every property on vendor prefix requirement. + // Once tested, result is cached. It gives us up to 70% perf boost. + // http://jsperf.com/element-style-object-access-vs-plain-object + // + // Prefill cache with known css properties to reduce amount of + // properties we need to feature test at runtime. + // http://davidwalsh.name/vendor-prefix + + var computed = window.getComputedStyle(document.documentElement, ''); + + for (var key$1 in computed) { + // eslint-disable-next-line no-restricted-globals + if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1]; + } // Properties that cannot be correctly detected using the + // cache prefill method. + + + noPrefill.forEach(function (x) { + return delete cache[x]; + }); +} +/** + * Test if a property is supported, returns supported property with vendor + * prefix if required. Returns `false` if not supported. + * + * @param {String} prop dash separated + * @param {Object} [options] + * @return {String|Boolean} + * @api public + */ + + +function supportedProperty(prop, options) { + if (options === void 0) { + options = {}; + } + + // For server-side rendering. + if (!el) return prop; // Remove cache for benchmark tests or return property from the cache. + + if (cache[prop] != null) { + return cache[prop]; + } // Check if 'transition' or 'transform' natively supported in browser. + + + if (prop === 'transition' || prop === 'transform') { + options[prop] = prop in el.style; + } // Find a plugin for current prefix property. + + + for (var i = 0; i < propertyDetectors.length; i++) { + cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found. + + if (cache[prop]) break; + } // Reset styles for current property. + // Firefox can even throw an error for invalid properties, e.g., "0". + + + try { + el.style[prop] = ''; + } catch (err) { + return false; + } + + return cache[prop]; +} + +var cache$1 = {}; +var transitionProperties = { + transition: 1, + 'transition-property': 1, + '-webkit-transition': 1, + '-webkit-transition-property': 1 +}; +var transPropsRegExp = /(^\s*[\w-]+)|, (\s*[\w-]+)(?![^()]*\))/g; +var el$1; +/** + * Returns prefixed value transition/transform if needed. + * + * @param {String} match + * @param {String} p1 + * @param {String} p2 + * @return {String} + * @api private + */ + +function prefixTransitionCallback(match, p1, p2) { + if (p1 === 'var') return 'var'; + if (p1 === 'all') return 'all'; + if (p2 === 'all') return ', all'; + var prefixedValue = p1 ? supportedProperty(p1) : ", " + supportedProperty(p2); + if (!prefixedValue) return p1 || p2; + return prefixedValue; +} + +if (isBrowser) el$1 = document.createElement('p'); +/** + * Returns prefixed value if needed. Returns `false` if value is not supported. + * + * @param {String} property + * @param {String} value + * @return {String|Boolean} + * @api public + */ + +function supportedValue(property, value) { + // For server-side rendering. + var prefixedValue = value; + if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'. + // We want only prefixable values here. + // eslint-disable-next-line no-restricted-globals + + if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) { + return prefixedValue; + } // Create cache key for current value. + + + var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache. + + if (cache$1[cacheKey] != null) { + return cache$1[cacheKey]; + } // IE can even throw an error in some cases, for e.g. style.content = 'bar'. + + + try { + // Test value as it is. + el$1.style[property] = prefixedValue; + } catch (err) { + // Return false if value not supported. + cache$1[cacheKey] = false; + return false; + } // If 'transition' or 'transition-property' property. + + + if (transitionProperties[property]) { + prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback); + } else if (el$1.style[property] === '') { + // Value with a vendor prefix. + prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert "flex" to "-ms-flexbox" for IE10. + + if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value. + + el$1.style[property] = prefixedValue; // Return false if value not supported. + + if (el$1.style[property] === '') { + cache$1[cacheKey] = false; + return false; + } + } // Reset styles for current property. + + + el$1.style[property] = ''; // Write current value to cache. + + cache$1[cacheKey] = prefixedValue; + return cache$1[cacheKey]; +} + +/** + * Add vendor prefix to a property name when needed. + * + * @api public + */ + +function jssVendorPrefixer() { + function onProcessRule(rule) { + if (rule.type === 'keyframes') { + var atRule = rule; + atRule.at = supportedKeyframes(atRule.at); + } + } + + function prefixStyle(style) { + for (var prop in style) { + var value = style[prop]; + + if (prop === 'fallbacks' && Array.isArray(value)) { + style[prop] = value.map(prefixStyle); + continue; + } + + var changeProp = false; + var supportedProp = supportedProperty(prop); + if (supportedProp && supportedProp !== prop) changeProp = true; + var changeValue = false; + var supportedValue$1 = supportedValue(supportedProp, toCssValue(value)); + if (supportedValue$1 && supportedValue$1 !== value) changeValue = true; + + if (changeProp || changeValue) { + if (changeProp) delete style[prop]; + style[supportedProp || prop] = supportedValue$1 || value; + } + } + + return style; + } + + function onProcessStyle(style, rule) { + if (rule.type !== 'style') return style; + return prefixStyle(style); + } + + function onChangeValue(value, prop) { + return supportedValue(prop, toCssValue(value)) || value; + } + + return { + onProcessRule: onProcessRule, + onProcessStyle: onProcessStyle, + onChangeValue: onChangeValue + }; +} + +/** + * Sort props by length. + */ +function jssPropsSort() { + var sort = function sort(prop0, prop1) { + if (prop0.length === prop1.length) { + return prop0 > prop1 ? 1 : -1; + } + + return prop0.length - prop1.length; + }; + + return { + onProcessStyle: function onProcessStyle(style, rule) { + if (rule.type !== 'style') return style; + var newStyle = {}; + var props = Object.keys(style).sort(sort); + + for (var i = 0; i < props.length; i++) { + newStyle[props[i]] = style[props[i]]; + } + + return newStyle; + } + }; +} + +function jssPreset() { + return { + plugins: [functionPlugin(), jssGlobal(), jssNested(), camelCase(), defaultUnit(), // Disable the vendor prefixer server-side, it does nothing. + // This way, we can get a performance boost. + // In the documentation, we are using `autoprefixer` to solve this problem. + typeof window === 'undefined' ? null : jssVendorPrefixer(), jssPropsSort()] + }; +} + +function mergeClasses() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var baseClasses = options.baseClasses, + newClasses = options.newClasses; + options.Component; + + if (!newClasses) { + return baseClasses; + } + + var nextClasses = _extends({}, baseClasses); + + Object.keys(newClasses).forEach(function (key) { + + if (newClasses[key]) { + nextClasses[key] = "".concat(baseClasses[key], " ").concat(newClasses[key]); + } + }); + return nextClasses; +} + +// Used https://github.com/thinkloop/multi-key-cache as inspiration +var multiKeyStore = { + set: function set(cache, key1, key2, value) { + var subCache = cache.get(key1); + + if (!subCache) { + subCache = new Map(); + cache.set(key1, subCache); + } + + subCache.set(key2, value); + }, + get: function get(cache, key1, key2) { + var subCache = cache.get(key1); + return subCache ? subCache.get(key2) : undefined; + }, + delete: function _delete(cache, key1, key2) { + var subCache = cache.get(key1); + subCache.delete(key2); + } +}; + +var ThemeContext = react.createContext(null); + +function useTheme() { + var theme = react.useContext(ThemeContext); + + return theme; +} + +var jss = create(jssPreset()); // Use a singleton or the provided one by the context. +// +// The counter-based approach doesn't tolerate any mistake. +// It's much safer to use the same counter everywhere. + +var generateClassName = createGenerateClassName(); // Exported for test purposes + +var sheetsManager = new Map(); +var defaultOptions = { + disableGeneration: false, + generateClassName: generateClassName, + jss: jss, + sheetsCache: null, + sheetsManager: sheetsManager, + sheetsRegistry: null +}; +var StylesContext = react.createContext(defaultOptions); + +/* eslint-disable import/prefer-default-export */ +// Global index counter to preserve source order. +// We create the style sheet during the creation of the component, +// children are handled after the parents, so the order of style elements would be parent->child. +// It is a problem though when a parent passes a className +// which needs to override any child's styles. +// StyleSheet of the child has a higher specificity, because of the source order. +// So our solution is to render sheets them in the reverse order child->sheet, so +// that parent has a higher specificity. +var indexCounter = -1e9; +function increment() { + indexCounter += 1; + + return indexCounter; +} + +// We use the same empty object to ref count the styles that don't need a theme object. +var noopTheme = {}; + +function getStylesCreator(stylesOrCreator) { + var themingEnabled = typeof stylesOrCreator === 'function'; + + return { + create: function create(theme, name) { + var styles; + + try { + styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator; + } catch (err) { + + throw err; + } + + if (!name || !theme.overrides || !theme.overrides[name]) { + return styles; + } + + var overrides = theme.overrides[name]; + + var stylesWithOverrides = _extends({}, styles); + + Object.keys(overrides).forEach(function (key) { + + stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]); + }); + return stylesWithOverrides; + }, + options: {} + }; +} + +function getClasses(_ref, classes, Component) { + var state = _ref.state, + stylesOptions = _ref.stylesOptions; + + if (stylesOptions.disableGeneration) { + return classes || {}; + } + + if (!state.cacheClasses) { + state.cacheClasses = { + // Cache for the finalized classes value. + value: null, + // Cache for the last used classes prop pointer. + lastProp: null, + // Cache for the last used rendered classes pointer. + lastJSS: {} + }; + } // Tracks if either the rendered classes or classes prop has changed, + // requiring the generation of a new finalized classes object. + + + var generate = false; + + if (state.classes !== state.cacheClasses.lastJSS) { + state.cacheClasses.lastJSS = state.classes; + generate = true; + } + + if (classes !== state.cacheClasses.lastProp) { + state.cacheClasses.lastProp = classes; + generate = true; + } + + if (generate) { + state.cacheClasses.value = mergeClasses({ + baseClasses: state.cacheClasses.lastJSS, + newClasses: classes, + Component: Component + }); + } + + return state.cacheClasses.value; +} + +function attach(_ref2, props) { + var state = _ref2.state, + theme = _ref2.theme, + stylesOptions = _ref2.stylesOptions, + stylesCreator = _ref2.stylesCreator, + name = _ref2.name; + + if (stylesOptions.disableGeneration) { + return; + } + + var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme); + + if (!sheetManager) { + sheetManager = { + refs: 0, + staticSheet: null, + dynamicStyles: null + }; + multiKeyStore.set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager); + } + + var options = _extends({}, stylesCreator.options, stylesOptions, { + theme: theme, + flip: typeof stylesOptions.flip === 'boolean' ? stylesOptions.flip : theme.direction === 'rtl' + }); + + options.generateId = options.serverGenerateClassName || options.generateClassName; + var sheetsRegistry = stylesOptions.sheetsRegistry; + + if (sheetManager.refs === 0) { + var staticSheet; + + if (stylesOptions.sheetsCache) { + staticSheet = multiKeyStore.get(stylesOptions.sheetsCache, stylesCreator, theme); + } + + var styles = stylesCreator.create(theme, name); + + if (!staticSheet) { + staticSheet = stylesOptions.jss.createStyleSheet(styles, _extends({ + link: false + }, options)); + staticSheet.attach(); + + if (stylesOptions.sheetsCache) { + multiKeyStore.set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet); + } + } + + if (sheetsRegistry) { + sheetsRegistry.add(staticSheet); + } + + sheetManager.staticSheet = staticSheet; + sheetManager.dynamicStyles = getDynamicStyles(styles); + } + + if (sheetManager.dynamicStyles) { + var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, _extends({ + link: true + }, options)); + dynamicSheet.update(props); + dynamicSheet.attach(); + state.dynamicSheet = dynamicSheet; + state.classes = mergeClasses({ + baseClasses: sheetManager.staticSheet.classes, + newClasses: dynamicSheet.classes + }); + + if (sheetsRegistry) { + sheetsRegistry.add(dynamicSheet); + } + } else { + state.classes = sheetManager.staticSheet.classes; + } + + sheetManager.refs += 1; +} + +function update(_ref3, props) { + var state = _ref3.state; + + if (state.dynamicSheet) { + state.dynamicSheet.update(props); + } +} + +function detach(_ref4) { + var state = _ref4.state, + theme = _ref4.theme, + stylesOptions = _ref4.stylesOptions, + stylesCreator = _ref4.stylesCreator; + + if (stylesOptions.disableGeneration) { + return; + } + + var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme); + sheetManager.refs -= 1; + var sheetsRegistry = stylesOptions.sheetsRegistry; + + if (sheetManager.refs === 0) { + multiKeyStore.delete(stylesOptions.sheetsManager, stylesCreator, theme); + stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet); + + if (sheetsRegistry) { + sheetsRegistry.remove(sheetManager.staticSheet); + } + } + + if (state.dynamicSheet) { + stylesOptions.jss.removeStyleSheet(state.dynamicSheet); + + if (sheetsRegistry) { + sheetsRegistry.remove(state.dynamicSheet); + } + } +} + +function useSynchronousEffect(func, values) { + var key = react.useRef([]); + var output; // Store "generation" key. Just returns a new object every time + + var currentKey = react.useMemo(function () { + return {}; + }, values); // eslint-disable-line react-hooks/exhaustive-deps + // "the first render", or "memo dropped the value" + + if (key.current !== currentKey) { + key.current = currentKey; + output = func(); + } + + react.useEffect(function () { + return function () { + if (output) { + output(); + } + }; + }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps + ); +} + +function makeStyles(stylesOrCreator) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var name = options.name, + classNamePrefixOption = options.classNamePrefix, + Component = options.Component, + _options$defaultTheme = options.defaultTheme, + defaultTheme = _options$defaultTheme === void 0 ? noopTheme : _options$defaultTheme, + stylesOptions2 = _objectWithoutProperties(options, ["name", "classNamePrefix", "Component", "defaultTheme"]); + + var stylesCreator = getStylesCreator(stylesOrCreator); + var classNamePrefix = name || classNamePrefixOption || 'makeStyles'; + stylesCreator.options = { + index: increment(), + name: name, + meta: classNamePrefix, + classNamePrefix: classNamePrefix + }; + + var useStyles = function useStyles() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var theme = useTheme() || defaultTheme; + + var stylesOptions = _extends({}, react.useContext(StylesContext), stylesOptions2); + + var instance = react.useRef(); + var shouldUpdate = react.useRef(); + useSynchronousEffect(function () { + var current = { + name: name, + state: {}, + stylesCreator: stylesCreator, + stylesOptions: stylesOptions, + theme: theme + }; + attach(current, props); + shouldUpdate.current = false; + instance.current = current; + return function () { + detach(current); + }; + }, [theme, stylesCreator]); + react.useEffect(function () { + if (shouldUpdate.current) { + update(instance.current, props); + } + + shouldUpdate.current = true; + }); + var classes = getClasses(instance.current, props.classes, Component); + + return classes; + }; + + return useStyles; +} + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b? +Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119; +function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}var AsyncMode=l;var ConcurrentMode=m;var ContextConsumer=k;var ContextProvider=h;var Element=c;var ForwardRef=n;var Fragment=e;var Lazy=t;var Memo=r;var Portal=d; +var Profiler=g;var StrictMode=f;var Suspense=p;var isAsyncMode=function(a){return A(a)||z(a)===l};var isConcurrentMode=A;var isContextConsumer=function(a){return z(a)===k};var isContextProvider=function(a){return z(a)===h};var isElement=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===c};var isForwardRef=function(a){return z(a)===n};var isFragment=function(a){return z(a)===e};var isLazy=function(a){return z(a)===t}; +var isMemo=function(a){return z(a)===r};var isPortal=function(a){return z(a)===d};var isProfiler=function(a){return z(a)===g};var isStrictMode=function(a){return z(a)===f};var isSuspense=function(a){return z(a)===p}; +var isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};var typeOf=z; + +var reactIs_production_min = { + AsyncMode: AsyncMode, + ConcurrentMode: ConcurrentMode, + ContextConsumer: ContextConsumer, + ContextProvider: ContextProvider, + Element: Element, + ForwardRef: ForwardRef, + Fragment: Fragment, + Lazy: Lazy, + Memo: Memo, + Portal: Portal, + Profiler: Profiler, + StrictMode: StrictMode, + Suspense: Suspense, + isAsyncMode: isAsyncMode, + isConcurrentMode: isConcurrentMode, + isContextConsumer: isContextConsumer, + isContextProvider: isContextProvider, + isElement: isElement, + isForwardRef: isForwardRef, + isFragment: isFragment, + isLazy: isLazy, + isMemo: isMemo, + isPortal: isPortal, + isProfiler: isProfiler, + isStrictMode: isStrictMode, + isSuspense: isSuspense, + isValidElementType: isValidElementType, + typeOf: typeOf +}; + +var reactIs = createCommonjsModule(function (module) { + +{ + module.exports = reactIs_production_min; +} +}); + +/** + * Copyright 2015, Yahoo! Inc. + * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +var REACT_STATICS = { + childContextTypes: true, + contextType: true, + contextTypes: true, + defaultProps: true, + displayName: true, + getDefaultProps: true, + getDerivedStateFromError: true, + getDerivedStateFromProps: true, + mixins: true, + propTypes: true, + type: true +}; +var KNOWN_STATICS = { + name: true, + length: true, + prototype: true, + caller: true, + callee: true, + arguments: true, + arity: true +}; +var FORWARD_REF_STATICS = { + '$$typeof': true, + render: true, + defaultProps: true, + displayName: true, + propTypes: true +}; +var MEMO_STATICS = { + '$$typeof': true, + compare: true, + defaultProps: true, + displayName: true, + propTypes: true, + type: true +}; +var TYPE_STATICS = {}; +TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; +TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; + +function getStatics(component) { + // React v16.11 and below + if (reactIs.isMemo(component)) { + return MEMO_STATICS; + } // React v16.12 and above + + + return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; +} + +var defineProperty = Object.defineProperty; +var getOwnPropertyNames = Object.getOwnPropertyNames; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var getPrototypeOf = Object.getPrototypeOf; +var objectPrototype = Object.prototype; +function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { + if (typeof sourceComponent !== 'string') { + // don't hoist over string (html) components + if (objectPrototype) { + var inheritedComponent = getPrototypeOf(sourceComponent); + + if (inheritedComponent && inheritedComponent !== objectPrototype) { + hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); + } + } + + var keys = getOwnPropertyNames(sourceComponent); + + if (getOwnPropertySymbols) { + keys = keys.concat(getOwnPropertySymbols(sourceComponent)); + } + + var targetStatics = getStatics(targetComponent); + var sourceStatics = getStatics(sourceComponent); + + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + + if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { + var descriptor = getOwnPropertyDescriptor(sourceComponent, key); + + try { + // Avoid failures from read-only properties + defineProperty(targetComponent, key, descriptor); + } catch (e) {} + } + } + } + + return targetComponent; +} + +var hoistNonReactStatics_cjs = hoistNonReactStatics; + +// It does not modify the component passed to it; +// instead, it returns a new component, with a `classes` property. + +var withStyles$1 = function withStyles(stylesOrCreator) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return function (Component) { + var defaultTheme = options.defaultTheme, + _options$withTheme = options.withTheme, + withTheme = _options$withTheme === void 0 ? false : _options$withTheme, + name = options.name, + stylesOptions = _objectWithoutProperties(options, ["defaultTheme", "withTheme", "name"]); + + var classNamePrefix = name; + + var useStyles = makeStyles(stylesOrCreator, _extends({ + defaultTheme: defaultTheme, + Component: Component, + name: name || Component.displayName, + classNamePrefix: classNamePrefix + }, stylesOptions)); + var WithStyles = /*#__PURE__*/react.forwardRef(function WithStyles(props, ref) { + props.classes; + var innerRef = props.innerRef, + other = _objectWithoutProperties(props, ["classes", "innerRef"]); // The wrapper receives only user supplied props, which could be a subset of + // the actual props Component might receive due to merging with defaultProps. + // So copying it here would give us the same result in the wrapper as well. + + + var classes = useStyles(_extends({}, Component.defaultProps, props)); + var theme; + var more = other; + + if (typeof name === 'string' || withTheme) { + // name and withTheme are invariant in the outer scope + // eslint-disable-next-line react-hooks/rules-of-hooks + theme = useTheme() || defaultTheme; + + if (name) { + more = getThemeProps({ + theme: theme, + name: name, + props: other + }); + } // Provide the theme to the wrapped component. + // So we don't have to use the `withTheme()` Higher-order Component. + + + if (withTheme && !more.theme) { + more.theme = theme; + } + } + + return /*#__PURE__*/react.createElement(Component, _extends({ + ref: innerRef || ref, + classes: classes + }, more)); + }); + + hoistNonReactStatics_cjs(WithStyles, Component); + + return WithStyles; + }; +}; + +// Sorted ASC by size. That's important. +// It can't be configured as it's used statically for propTypes. +var keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification. + +function createBreakpoints(breakpoints) { + var _breakpoints$values = breakpoints.values, + values = _breakpoints$values === void 0 ? { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920 + } : _breakpoints$values, + _breakpoints$unit = breakpoints.unit, + unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit, + _breakpoints$step = breakpoints.step, + step = _breakpoints$step === void 0 ? 5 : _breakpoints$step, + other = _objectWithoutProperties(breakpoints, ["values", "unit", "step"]); + + function up(key) { + var value = typeof values[key] === 'number' ? values[key] : key; + return "@media (min-width:".concat(value).concat(unit, ")"); + } + + function down(key) { + var endIndex = keys.indexOf(key) + 1; + var upperbound = values[keys[endIndex]]; + + if (endIndex === keys.length) { + // xl down applies to all sizes + return up('xs'); + } + + var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key; + return "@media (max-width:".concat(value - step / 100).concat(unit, ")"); + } + + function between(start, end) { + var endIndex = keys.indexOf(end); + + if (endIndex === keys.length - 1) { + return up(start); + } + + return "@media (min-width:".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, ") and ") + "(max-width:".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, ")"); + } + + function only(key) { + return between(key, key); + } + + function width(key) { + return values[key]; + } + + return _extends({ + keys: keys, + values: values, + up: up, + down: down, + between: between, + only: only, + width: width + }, other); +} + +function createMixins(breakpoints, spacing, mixins) { + var _toolbar; + + return _extends({ + gutters: function gutters() { + var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + // To deprecate in v4.1 + // warning( + // false, + // [ + // 'Material-UI: Theme.mixins.gutters() is deprecated.', + // 'You can use the source of the mixin directly:', + // ` + // paddingLeft: theme.spacing(2), + // paddingRight: theme.spacing(2), + // [theme.breakpoints.up('sm')]: { + // paddingLeft: theme.spacing(3), + // paddingRight: theme.spacing(3), + // }, + // `, + // ].join('\n'), + // ); + return _extends({ + paddingLeft: spacing(2), + paddingRight: spacing(2) + }, styles, _defineProperty({}, breakpoints.up('sm'), _extends({ + paddingLeft: spacing(3), + paddingRight: spacing(3) + }, styles[breakpoints.up('sm')]))); + }, + toolbar: (_toolbar = { + minHeight: 56 + }, _defineProperty(_toolbar, "".concat(breakpoints.up('xs'), " and (orientation: landscape)"), { + minHeight: 48 + }), _defineProperty(_toolbar, breakpoints.up('sm'), { + minHeight: 64 + }), _toolbar) + }, mixins); +} + +var common = { + black: '#000', + white: '#fff' +}; + +var grey = { + 50: '#fafafa', + 100: '#f5f5f5', + 200: '#eeeeee', + 300: '#e0e0e0', + 400: '#bdbdbd', + 500: '#9e9e9e', + 600: '#757575', + 700: '#616161', + 800: '#424242', + 900: '#212121', + A100: '#d5d5d5', + A200: '#aaaaaa', + A400: '#303030', + A700: '#616161' +}; + +var indigo = { + 50: '#e8eaf6', + 100: '#c5cae9', + 200: '#9fa8da', + 300: '#7986cb', + 400: '#5c6bc0', + 500: '#3f51b5', + 600: '#3949ab', + 700: '#303f9f', + 800: '#283593', + 900: '#1a237e', + A100: '#8c9eff', + A200: '#536dfe', + A400: '#3d5afe', + A700: '#304ffe' +}; + +var pink = { + 50: '#fce4ec', + 100: '#f8bbd0', + 200: '#f48fb1', + 300: '#f06292', + 400: '#ec407a', + 500: '#e91e63', + 600: '#d81b60', + 700: '#c2185b', + 800: '#ad1457', + 900: '#880e4f', + A100: '#ff80ab', + A200: '#ff4081', + A400: '#f50057', + A700: '#c51162' +}; + +var red = { + 50: '#ffebee', + 100: '#ffcdd2', + 200: '#ef9a9a', + 300: '#e57373', + 400: '#ef5350', + 500: '#f44336', + 600: '#e53935', + 700: '#d32f2f', + 800: '#c62828', + 900: '#b71c1c', + A100: '#ff8a80', + A200: '#ff5252', + A400: '#ff1744', + A700: '#d50000' +}; + +var orange = { + 50: '#fff3e0', + 100: '#ffe0b2', + 200: '#ffcc80', + 300: '#ffb74d', + 400: '#ffa726', + 500: '#ff9800', + 600: '#fb8c00', + 700: '#f57c00', + 800: '#ef6c00', + 900: '#e65100', + A100: '#ffd180', + A200: '#ffab40', + A400: '#ff9100', + A700: '#ff6d00' +}; + +var blue = { + 50: '#e3f2fd', + 100: '#bbdefb', + 200: '#90caf9', + 300: '#64b5f6', + 400: '#42a5f5', + 500: '#2196f3', + 600: '#1e88e5', + 700: '#1976d2', + 800: '#1565c0', + 900: '#0d47a1', + A100: '#82b1ff', + A200: '#448aff', + A400: '#2979ff', + A700: '#2962ff' +}; + +var green = { + 50: '#e8f5e9', + 100: '#c8e6c9', + 200: '#a5d6a7', + 300: '#81c784', + 400: '#66bb6a', + 500: '#4caf50', + 600: '#43a047', + 700: '#388e3c', + 800: '#2e7d32', + 900: '#1b5e20', + A100: '#b9f6ca', + A200: '#69f0ae', + A400: '#00e676', + A700: '#00c853' +}; + +/* eslint-disable no-use-before-define */ + +/** + * Returns a number whose value is limited to the given range. + * + * @param {number} value The value to be clamped + * @param {number} min The lower boundary of the output range + * @param {number} max The upper boundary of the output range + * @returns {number} A number in the range [min, max] + */ +function clamp(value) { + var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + return Math.min(Math.max(min, value), max); +} +/** + * Converts a color from CSS hex format to CSS rgb format. + * + * @param {string} color - Hex color, i.e. #nnn or #nnnnnn + * @returns {string} A CSS rgb color string + */ + + +function hexToRgb(color) { + color = color.substr(1); + var re = new RegExp(".{1,".concat(color.length >= 6 ? 2 : 1, "}"), 'g'); + var colors = color.match(re); + + if (colors && colors[0].length === 1) { + colors = colors.map(function (n) { + return n + n; + }); + } + + return colors ? "rgb".concat(colors.length === 4 ? 'a' : '', "(").concat(colors.map(function (n, index) { + return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000; + }).join(', '), ")") : ''; +} +/** + * Converts a color from hsl format to rgb format. + * + * @param {string} color - HSL color values + * @returns {string} rgb color values + */ + +function hslToRgb(color) { + color = decomposeColor(color); + var _color = color, + values = _color.values; + var h = values[0]; + var s = values[1] / 100; + var l = values[2] / 100; + var a = s * Math.min(l, 1 - l); + + var f = function f(n) { + var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12; + return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + }; + + var type = 'rgb'; + var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)]; + + if (color.type === 'hsla') { + type += 'a'; + rgb.push(values[3]); + } + + return recomposeColor({ + type: type, + values: rgb + }); +} +/** + * Returns an object with the type and values of a color. + * + * Note: Does not support rgb % values. + * + * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @returns {object} - A MUI color object: {type: string, values: number[]} + */ + +function decomposeColor(color) { + // Idempotent + if (color.type) { + return color; + } + + if (color.charAt(0) === '#') { + return decomposeColor(hexToRgb(color)); + } + + var marker = color.indexOf('('); + var type = color.substring(0, marker); + + if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) { + throw new Error(formatMuiErrorMessage(3, color)); + } + + var values = color.substring(marker + 1, color.length - 1).split(','); + values = values.map(function (value) { + return parseFloat(value); + }); + return { + type: type, + values: values + }; +} +/** + * Converts a color object with type and values to a string. + * + * @param {object} color - Decomposed color + * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla' + * @param {array} color.values - [n,n,n] or [n,n,n,n] + * @returns {string} A CSS color string + */ + +function recomposeColor(color) { + var type = color.type; + var values = color.values; + + if (type.indexOf('rgb') !== -1) { + // Only convert the first 3 values to int (i.e. not alpha) + values = values.map(function (n, i) { + return i < 3 ? parseInt(n, 10) : n; + }); + } else if (type.indexOf('hsl') !== -1) { + values[1] = "".concat(values[1], "%"); + values[2] = "".concat(values[2], "%"); + } + + return "".concat(type, "(").concat(values.join(', '), ")"); +} +/** + * Calculates the contrast ratio between two colors. + * + * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests + * + * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @returns {number} A contrast ratio value in the range 0 - 21. + */ + +function getContrastRatio(foreground, background) { + var lumA = getLuminance(foreground); + var lumB = getLuminance(background); + return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05); +} +/** + * The relative brightness of any point in a color space, + * normalized to 0 for darkest black and 1 for lightest white. + * + * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests + * + * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @returns {number} The relative brightness of the color in the range 0 - 1 + */ + +function getLuminance(color) { + color = decomposeColor(color); + var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values; + rgb = rgb.map(function (val) { + val /= 255; // normalized + + return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4); + }); // Truncate at 3 digits + + return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3)); +} +/** + * Darkens a color. + * + * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @param {number} coefficient - multiplier in the range 0 - 1 + * @returns {string} A CSS color string. Hex input values are returned as rgb + */ + +function darken(color, coefficient) { + color = decomposeColor(color); + coefficient = clamp(coefficient); + + if (color.type.indexOf('hsl') !== -1) { + color.values[2] *= 1 - coefficient; + } else if (color.type.indexOf('rgb') !== -1) { + for (var i = 0; i < 3; i += 1) { + color.values[i] *= 1 - coefficient; + } + } + + return recomposeColor(color); +} +/** + * Lightens a color. + * + * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla() + * @param {number} coefficient - multiplier in the range 0 - 1 + * @returns {string} A CSS color string. Hex input values are returned as rgb + */ + +function lighten(color, coefficient) { + color = decomposeColor(color); + coefficient = clamp(coefficient); + + if (color.type.indexOf('hsl') !== -1) { + color.values[2] += (100 - color.values[2]) * coefficient; + } else if (color.type.indexOf('rgb') !== -1) { + for (var i = 0; i < 3; i += 1) { + color.values[i] += (255 - color.values[i]) * coefficient; + } + } + + return recomposeColor(color); +} + +var light = { + // The colors used to style the text. + text: { + // The most important text. + primary: 'rgba(0, 0, 0, 0.87)', + // Secondary text. + secondary: 'rgba(0, 0, 0, 0.54)', + // Disabled text have even lower visual prominence. + disabled: 'rgba(0, 0, 0, 0.38)', + // Text hints. + hint: 'rgba(0, 0, 0, 0.38)' + }, + // The color used to divide different elements. + divider: 'rgba(0, 0, 0, 0.12)', + // The background colors used to style the surfaces. + // Consistency between these values is important. + background: { + paper: common.white, + default: grey[50] + }, + // The colors used to style the action elements. + action: { + // The color of an active action like an icon button. + active: 'rgba(0, 0, 0, 0.54)', + // The color of an hovered action. + hover: 'rgba(0, 0, 0, 0.04)', + hoverOpacity: 0.04, + // The color of a selected action. + selected: 'rgba(0, 0, 0, 0.08)', + selectedOpacity: 0.08, + // The color of a disabled action. + disabled: 'rgba(0, 0, 0, 0.26)', + // The background color of a disabled action. + disabledBackground: 'rgba(0, 0, 0, 0.12)', + disabledOpacity: 0.38, + focus: 'rgba(0, 0, 0, 0.12)', + focusOpacity: 0.12, + activatedOpacity: 0.12 + } +}; +var dark = { + text: { + primary: common.white, + secondary: 'rgba(255, 255, 255, 0.7)', + disabled: 'rgba(255, 255, 255, 0.5)', + hint: 'rgba(255, 255, 255, 0.5)', + icon: 'rgba(255, 255, 255, 0.5)' + }, + divider: 'rgba(255, 255, 255, 0.12)', + background: { + paper: grey[800], + default: '#303030' + }, + action: { + active: common.white, + hover: 'rgba(255, 255, 255, 0.08)', + hoverOpacity: 0.08, + selected: 'rgba(255, 255, 255, 0.16)', + selectedOpacity: 0.16, + disabled: 'rgba(255, 255, 255, 0.3)', + disabledBackground: 'rgba(255, 255, 255, 0.12)', + disabledOpacity: 0.38, + focus: 'rgba(255, 255, 255, 0.12)', + focusOpacity: 0.12, + activatedOpacity: 0.24 + } +}; + +function addLightOrDark(intent, direction, shade, tonalOffset) { + var tonalOffsetLight = tonalOffset.light || tonalOffset; + var tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5; + + if (!intent[direction]) { + if (intent.hasOwnProperty(shade)) { + intent[direction] = intent[shade]; + } else if (direction === 'light') { + intent.light = lighten(intent.main, tonalOffsetLight); + } else if (direction === 'dark') { + intent.dark = darken(intent.main, tonalOffsetDark); + } + } +} + +function createPalette(palette) { + var _palette$primary = palette.primary, + primary = _palette$primary === void 0 ? { + light: indigo[300], + main: indigo[500], + dark: indigo[700] + } : _palette$primary, + _palette$secondary = palette.secondary, + secondary = _palette$secondary === void 0 ? { + light: pink.A200, + main: pink.A400, + dark: pink.A700 + } : _palette$secondary, + _palette$error = palette.error, + error = _palette$error === void 0 ? { + light: red[300], + main: red[500], + dark: red[700] + } : _palette$error, + _palette$warning = palette.warning, + warning = _palette$warning === void 0 ? { + light: orange[300], + main: orange[500], + dark: orange[700] + } : _palette$warning, + _palette$info = palette.info, + info = _palette$info === void 0 ? { + light: blue[300], + main: blue[500], + dark: blue[700] + } : _palette$info, + _palette$success = palette.success, + success = _palette$success === void 0 ? { + light: green[300], + main: green[500], + dark: green[700] + } : _palette$success, + _palette$type = palette.type, + type = _palette$type === void 0 ? 'light' : _palette$type, + _palette$contrastThre = palette.contrastThreshold, + contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre, + _palette$tonalOffset = palette.tonalOffset, + tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset, + other = _objectWithoutProperties(palette, ["primary", "secondary", "error", "warning", "info", "success", "type", "contrastThreshold", "tonalOffset"]); // Use the same logic as + // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59 + // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54 + + + function getContrastText(background) { + var contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary; + + return contrastText; + } + + var augmentColor = function augmentColor(color) { + var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500; + var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300; + var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700; + color = _extends({}, color); + + if (!color.main && color[mainShade]) { + color.main = color[mainShade]; + } + + if (!color.main) { + throw new Error(formatMuiErrorMessage(4, mainShade)); + } + + if (typeof color.main !== 'string') { + throw new Error(formatMuiErrorMessage(5, JSON.stringify(color.main))); + } + + addLightOrDark(color, 'light', lightShade, tonalOffset); + addLightOrDark(color, 'dark', darkShade, tonalOffset); + + if (!color.contrastText) { + color.contrastText = getContrastText(color.main); + } + + return color; + }; + + var types = { + dark: dark, + light: light + }; + + var paletteOutput = deepmerge(_extends({ + // A collection of common colors. + common: common, + // The palette type, can be light or dark. + type: type, + // The colors used to represent primary interface elements for a user. + primary: augmentColor(primary), + // The colors used to represent secondary interface elements for a user. + secondary: augmentColor(secondary, 'A400', 'A200', 'A700'), + // The colors used to represent interface elements that the user should be made aware of. + error: augmentColor(error), + // The colors used to represent potentially dangerous actions or important messages. + warning: augmentColor(warning), + // The colors used to present information to the user that is neutral and not necessarily important. + info: augmentColor(info), + // The colors used to indicate the successful completion of an action that user triggered. + success: augmentColor(success), + // The grey colors. + grey: grey, + // Used by `getContrastText()` to maximize the contrast between + // the background and the text. + contrastThreshold: contrastThreshold, + // Takes a background color and returns the text color that maximizes the contrast. + getContrastText: getContrastText, + // Generate a rich color object. + augmentColor: augmentColor, + // Used by the functions below to shift a color's luminance by approximately + // two indexes within its tonal palette. + // E.g., shift from Red 500 to Red 300 or Red 700. + tonalOffset: tonalOffset + }, types[type]), other); + return paletteOutput; +} + +function round(value) { + return Math.round(value * 1e5) / 1e5; +} + +var caseAllCaps = { + textTransform: 'uppercase' +}; +var defaultFontFamily = '"Roboto", "Helvetica", "Arial", sans-serif'; +/** + * @see @link{https://material.io/design/typography/the-type-system.html} + * @see @link{https://material.io/design/typography/understanding-typography.html} + */ + +function createTypography(palette, typography) { + var _ref = typeof typography === 'function' ? typography(palette) : typography, + _ref$fontFamily = _ref.fontFamily, + fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily, + _ref$fontSize = _ref.fontSize, + fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize, + _ref$fontWeightLight = _ref.fontWeightLight, + fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight, + _ref$fontWeightRegula = _ref.fontWeightRegular, + fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula, + _ref$fontWeightMedium = _ref.fontWeightMedium, + fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium, + _ref$fontWeightBold = _ref.fontWeightBold, + fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold, + _ref$htmlFontSize = _ref.htmlFontSize, + htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize, + allVariants = _ref.allVariants, + pxToRem2 = _ref.pxToRem, + other = _objectWithoutProperties(_ref, ["fontFamily", "fontSize", "fontWeightLight", "fontWeightRegular", "fontWeightMedium", "fontWeightBold", "htmlFontSize", "allVariants", "pxToRem"]); + + var coef = fontSize / 14; + + var pxToRem = pxToRem2 || function (size) { + return "".concat(size / htmlFontSize * coef, "rem"); + }; + + var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) { + return _extends({ + fontFamily: fontFamily, + fontWeight: fontWeight, + fontSize: pxToRem(size), + // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/ + lineHeight: lineHeight + }, fontFamily === defaultFontFamily ? { + letterSpacing: "".concat(round(letterSpacing / size), "em") + } : {}, casing, allVariants); + }; + + var variants = { + h1: buildVariant(fontWeightLight, 96, 1.167, -1.5), + h2: buildVariant(fontWeightLight, 60, 1.2, -0.5), + h3: buildVariant(fontWeightRegular, 48, 1.167, 0), + h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25), + h5: buildVariant(fontWeightRegular, 24, 1.334, 0), + h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15), + subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15), + subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1), + body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15), + body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15), + button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps), + caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4), + overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps) + }; + return deepmerge(_extends({ + htmlFontSize: htmlFontSize, + pxToRem: pxToRem, + round: round, + // TODO v5: remove + fontFamily: fontFamily, + fontSize: fontSize, + fontWeightLight: fontWeightLight, + fontWeightRegular: fontWeightRegular, + fontWeightMedium: fontWeightMedium, + fontWeightBold: fontWeightBold + }, variants), other, { + clone: false // No need to clone deep + + }); +} + +var shadowKeyUmbraOpacity = 0.2; +var shadowKeyPenumbraOpacity = 0.14; +var shadowAmbientShadowOpacity = 0.12; + +function createShadow() { + return ["".concat(arguments.length <= 0 ? undefined : arguments[0], "px ").concat(arguments.length <= 1 ? undefined : arguments[1], "px ").concat(arguments.length <= 2 ? undefined : arguments[2], "px ").concat(arguments.length <= 3 ? undefined : arguments[3], "px rgba(0,0,0,").concat(shadowKeyUmbraOpacity, ")"), "".concat(arguments.length <= 4 ? undefined : arguments[4], "px ").concat(arguments.length <= 5 ? undefined : arguments[5], "px ").concat(arguments.length <= 6 ? undefined : arguments[6], "px ").concat(arguments.length <= 7 ? undefined : arguments[7], "px rgba(0,0,0,").concat(shadowKeyPenumbraOpacity, ")"), "".concat(arguments.length <= 8 ? undefined : arguments[8], "px ").concat(arguments.length <= 9 ? undefined : arguments[9], "px ").concat(arguments.length <= 10 ? undefined : arguments[10], "px ").concat(arguments.length <= 11 ? undefined : arguments[11], "px rgba(0,0,0,").concat(shadowAmbientShadowOpacity, ")")].join(','); +} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss + + +var shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)]; + +var shape = { + borderRadius: 4 +}; + +function createUnarySpacing(theme) { + var themeSpacing = theme.spacing || 8; + + if (typeof themeSpacing === 'number') { + return function (abs) { + + return themeSpacing * abs; + }; + } + + if (Array.isArray(themeSpacing)) { + return function (abs) { + + return themeSpacing[abs]; + }; + } + + if (typeof themeSpacing === 'function') { + return themeSpacing; + } + + return function () { + return undefined; + }; +} + +function createSpacing() { + var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8; + + // Already transformed. + if (spacingInput.mui) { + return spacingInput; + } // Material Design layouts are visually balanced. Most measurements align to an 8dp grid applied, which aligns both spacing and the overall layout. + // Smaller components, such as icons and type, can align to a 4dp grid. + // https://material.io/design/layout/understanding-layout.html#usage + + + var transform = createUnarySpacing({ + spacing: spacingInput + }); + + var spacing = function spacing() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (args.length === 0) { + return transform(1); + } + + if (args.length === 1) { + return transform(args[0]); + } + + return args.map(function (argument) { + if (typeof argument === 'string') { + return argument; + } + + var output = transform(argument); + return typeof output === 'number' ? "".concat(output, "px") : output; + }).join(' '); + }; // Backward compatibility, to remove in v5. + + + Object.defineProperty(spacing, 'unit', { + get: function get() { + + return spacingInput; + } + }); + spacing.mui = true; + return spacing; +} + +// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves +// to learn the context in which each easing should be used. +var easing = { + // This is the most common easing curve. + easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)', + // Objects enter the screen at full velocity from off-screen and + // slowly decelerate to a resting point. + easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)', + // Objects leave the screen at full velocity. They do not decelerate when off-screen. + easeIn: 'cubic-bezier(0.4, 0, 1, 1)', + // The sharp curve is used by objects that may return to the screen at any time. + sharp: 'cubic-bezier(0.4, 0, 0.6, 1)' +}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations +// to learn when use what timing + +var duration = { + shortest: 150, + shorter: 200, + short: 250, + // most basic recommended timing + standard: 300, + // this is to be used in complex animations + complex: 375, + // recommended when something is entering screen + enteringScreen: 225, + // recommended when something is leaving screen + leavingScreen: 195 +}; + +function formatMs(milliseconds) { + return "".concat(Math.round(milliseconds), "ms"); +} +/** + * @param {string|Array} props + * @param {object} param + * @param {string} param.prop + * @param {number} param.duration + * @param {string} param.easing + * @param {number} param.delay + */ + + +var transitions = { + easing: easing, + duration: duration, + create: function create() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all']; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var _options$duration = options.duration, + durationOption = _options$duration === void 0 ? duration.standard : _options$duration, + _options$easing = options.easing, + easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing, + _options$delay = options.delay, + delay = _options$delay === void 0 ? 0 : _options$delay; + _objectWithoutProperties(options, ["duration", "easing", "delay"]); + + return (Array.isArray(props) ? props : [props]).map(function (animatedProp) { + return "".concat(animatedProp, " ").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), " ").concat(easingOption, " ").concat(typeof delay === 'string' ? delay : formatMs(delay)); + }).join(','); + }, + getAutoHeightDuration: function getAutoHeightDuration(height) { + if (!height) { + return 0; + } + + var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10 + + return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10); + } +}; + +// We need to centralize the zIndex definitions as they work +// like global values in the browser. +var zIndex = { + mobileStepper: 1000, + speedDial: 1050, + appBar: 1100, + drawer: 1200, + modal: 1300, + snackbar: 1400, + tooltip: 1500 +}; + +function createMuiTheme() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var _options$breakpoints = options.breakpoints, + breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints, + _options$mixins = options.mixins, + mixinsInput = _options$mixins === void 0 ? {} : _options$mixins, + _options$palette = options.palette, + paletteInput = _options$palette === void 0 ? {} : _options$palette, + spacingInput = options.spacing, + _options$typography = options.typography, + typographyInput = _options$typography === void 0 ? {} : _options$typography, + other = _objectWithoutProperties(options, ["breakpoints", "mixins", "palette", "spacing", "typography"]); + + var palette = createPalette(paletteInput); + var breakpoints = createBreakpoints(breakpointsInput); + var spacing = createSpacing(spacingInput); + var muiTheme = deepmerge({ + breakpoints: breakpoints, + direction: 'ltr', + mixins: createMixins(breakpoints, spacing, mixinsInput), + overrides: {}, + // Inject custom styles + palette: palette, + props: {}, + // Provide default props + shadows: shadows, + typography: createTypography(palette, typographyInput), + spacing: spacing, + shape: shape, + transitions: transitions, + zIndex: zIndex + }, other); + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + muiTheme = args.reduce(function (acc, argument) { + return deepmerge(acc, argument); + }, muiTheme); + + return muiTheme; +} + +var defaultTheme = createMuiTheme(); + +function withStyles(stylesOrCreator, options) { + return withStyles$1(stylesOrCreator, _extends({ + defaultTheme: defaultTheme + }, options)); +} + +var styles = function styles(theme) { + return { + /* Styles applied to the root element. */ + root: { + userSelect: 'none', + width: '1em', + height: '1em', + display: 'inline-block', + fill: 'currentColor', + flexShrink: 0, + fontSize: theme.typography.pxToRem(24), + transition: theme.transitions.create('fill', { + duration: theme.transitions.duration.shorter + }) + }, + + /* Styles applied to the root element if `color="primary"`. */ + colorPrimary: { + color: theme.palette.primary.main + }, + + /* Styles applied to the root element if `color="secondary"`. */ + colorSecondary: { + color: theme.palette.secondary.main + }, + + /* Styles applied to the root element if `color="action"`. */ + colorAction: { + color: theme.palette.action.active + }, + + /* Styles applied to the root element if `color="error"`. */ + colorError: { + color: theme.palette.error.main + }, + + /* Styles applied to the root element if `color="disabled"`. */ + colorDisabled: { + color: theme.palette.action.disabled + }, + + /* Styles applied to the root element if `fontSize="inherit"`. */ + fontSizeInherit: { + fontSize: 'inherit' + }, + + /* Styles applied to the root element if `fontSize="small"`. */ + fontSizeSmall: { + fontSize: theme.typography.pxToRem(20) + }, + + /* Styles applied to the root element if `fontSize="large"`. */ + fontSizeLarge: { + fontSize: theme.typography.pxToRem(35) + } + }; +}; +var SvgIcon = /*#__PURE__*/react.forwardRef(function SvgIcon(props, ref) { + var children = props.children, + classes = props.classes, + className = props.className, + _props$color = props.color, + color = _props$color === void 0 ? 'inherit' : _props$color, + _props$component = props.component, + Component = _props$component === void 0 ? 'svg' : _props$component, + _props$fontSize = props.fontSize, + fontSize = _props$fontSize === void 0 ? 'default' : _props$fontSize, + htmlColor = props.htmlColor, + titleAccess = props.titleAccess, + _props$viewBox = props.viewBox, + viewBox = _props$viewBox === void 0 ? '0 0 24 24' : _props$viewBox, + other = _objectWithoutProperties(props, ["children", "classes", "className", "color", "component", "fontSize", "htmlColor", "titleAccess", "viewBox"]); + + return /*#__PURE__*/react.createElement(Component, _extends({ + className: clsx(classes.root, className, color !== 'inherit' && classes["color".concat(capitalize(color))], fontSize !== 'default' && classes["fontSize".concat(capitalize(fontSize))]), + focusable: "false", + viewBox: viewBox, + color: htmlColor, + "aria-hidden": titleAccess ? undefined : true, + role: titleAccess ? 'img' : undefined, + ref: ref + }, other), children, titleAccess ? /*#__PURE__*/react.createElement("title", null, titleAccess) : null); +}); +SvgIcon.muiName = 'SvgIcon'; +var SvgIcon$1 = withStyles(styles, { + name: 'MuiSvgIcon' +})(SvgIcon); + +/** + * Private module reserved for @material-ui/x packages. + */ + +function createSvgIcon(path, displayName) { + var Component = function Component(props, ref) { + return /*#__PURE__*/react.createElement(SvgIcon$1, _extends({ + ref: ref + }, props), path); + }; + + Component.muiName = SvgIcon$1.muiName; + return /*#__PURE__*/react.memo( /*#__PURE__*/react.forwardRef(Component)); +} + +var CheckBoxOutlineBlankRounded = createSvgIcon( /*#__PURE__*/react.createElement("path", { + d: "M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm1-16H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" +})); + +var CheckBoxRounded = createSvgIcon( /*#__PURE__*/react.createElement("path", { + d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8.29 13.29c-.39.39-1.02.39-1.41 0L5.71 12.7a.9959.9959 0 010-1.41c.39-.39 1.02-.39 1.41 0L10 14.17l6.88-6.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-7.58 7.59z" +})); + +var DeleteRounded = createSvgIcon( /*#__PURE__*/react.createElement("path", { + d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v10zM18 4h-2.5l-.71-.71c-.18-.18-.44-.29-.7-.29H9.91c-.26 0-.52.11-.7.29L8.5 4H6c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z" +})); + +var DragIndicator = createSvgIcon( /*#__PURE__*/react.createElement("path", { + d: "M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" +})); + +export { CheckBoxOutlineBlankRounded, CheckBoxRounded, DeleteRounded, DragIndicator }; diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css b/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css new file mode 100644 index 00000000..ef399d21 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css.proxy.js b/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css.proxy.js new file mode 100644 index 00000000..33ba040b --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css.proxy.js @@ -0,0 +1,10 @@ +// [snowpack] add styles to the page (skip if no document exists) +if (typeof document !== 'undefined') { + const code = "/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}\n"; + + const styleEl = document.createElement("style"); + const codeEl = document.createTextNode(code); + styleEl.type = 'text/css'; + styleEl.appendChild(codeEl); + document.head.appendChild(styleEl); +} \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/common/index-ae389540.js b/root/static/lib/ingredients_editor/_snowpack/pkg/common/index-ae389540.js new file mode 100644 index 00000000..e3a73a35 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/common/index-ae389540.js @@ -0,0 +1,129 @@ +function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; +} + +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); +} + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +var react_production_min = createCommonjsModule(function (module, exports) { +var n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116; +if("function"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w("react.element");p=w("react.portal");exports.Fragment=w("react.fragment");exports.StrictMode=w("react.strict_mode");exports.Profiler=w("react.profiler");q=w("react.provider");r=w("react.context");t=w("react.forward_ref");exports.Suspense=w("react.suspense");u=w("react.memo");v=w("react.lazy");}var x="function"===typeof Symbol&&Symbol.iterator; +function y(a){if(null===a||"object"!==typeof a)return null;a=x&&a[x]||a["@@iterator"];return "function"===typeof a?a:null}function z(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c= 0) continue; + target[key] = source[key]; + } + + return target; +} + +export { _extends as _, _objectWithoutPropertiesLoose as a, propTypes as p }; diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/import-map.json b/root/static/lib/ingredients_editor/_snowpack/pkg/import-map.json new file mode 100644 index 00000000..55311ae3 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/import-map.json @@ -0,0 +1,11 @@ +{ + "imports": { + "@material-ui/icons": "./@material-ui/icons.js", + "bootstrap/dist/css/bootstrap.min.css": "./bootstrap/dist/css/bootstrap.min.css", + "react": "./react.js", + "react-bootstrap": "./react-bootstrap.js", + "react-dnd": "./react-dnd.js", + "react-dnd-html5-backend": "./react-dnd-html5-backend.js", + "react-dom": "./react-dom.js" + } +} \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/react-bootstrap.js b/root/static/lib/ingredients_editor/_snowpack/pkg/react-bootstrap.js new file mode 100644 index 00000000..6e03e722 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/react-bootstrap.js @@ -0,0 +1,1038 @@ +import { _ as _extends, a as _objectWithoutPropertiesLoose, p as propTypes$1 } from './common/objectWithoutPropertiesLoose-5b811a2c.js'; +import { c as createCommonjsModule, r as react } from './common/index-ae389540.js'; + +var classnames = createCommonjsModule(function (module) { +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/* global define */ + +(function () { + + var hasOwn = {}.hasOwnProperty; + + function classNames () { + var classes = []; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes.push(arg); + } else if (Array.isArray(arg) && arg.length) { + var inner = classNames.apply(null, arg); + if (inner) { + classes.push(inner); + } + } else if (argType === 'object') { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes.push(key); + } + } + } + } + + return classes.join(' '); + } + + if (module.exports) { + classNames.default = classNames; + module.exports = classNames; + } else { + window.classNames = classNames; + } +}()); +}); + +var ThemeContext = /*#__PURE__*/react.createContext({}); +ThemeContext.Consumer; + ThemeContext.Provider; + +function useBootstrapPrefix(prefix, defaultPrefix) { + var prefixes = react.useContext(ThemeContext); + return prefix || prefixes[defaultPrefix] || defaultPrefix; +} + +/** + * Safe chained function + * + * Will only create a new function if needed, + * otherwise will pass back existing functions or null. + * + * @param {function} functions to chain + * @returns {function|null} + */ +function createChainedFunction() { + for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { + funcs[_key] = arguments[_key]; + } + + return funcs.filter(function (f) { + return f != null; + }).reduce(function (acc, f) { + if (typeof f !== 'function') { + throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.'); + } + + if (acc === null) return f; + return function chainedFunction() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + // @ts-ignore + acc.apply(this, args); // @ts-ignore + + f.apply(this, args); + }; + }, null); +} + +var divWithClassName = (function (className) { + return /*#__PURE__*/react.forwardRef(function (p, ref) { + return /*#__PURE__*/react.createElement("div", _extends({}, p, { + ref: ref, + className: classnames(p.className, className) + })); + }); +}); + +var rHyphen = /-(.)/g; +function camelize(string) { + return string.replace(rHyphen, function (_, chr) { + return chr.toUpperCase(); + }); +} + +var pascalCase = function pascalCase(str) { + return str[0].toUpperCase() + camelize(str).slice(1); +}; + +// TODO: emstricten & fix the typing here! `createWithBsPrefix...` +function createWithBsPrefix(prefix, _temp) { + var _ref = _temp === void 0 ? {} : _temp, + _ref$displayName = _ref.displayName, + displayName = _ref$displayName === void 0 ? pascalCase(prefix) : _ref$displayName, + Component = _ref.Component, + defaultProps = _ref.defaultProps; + + var BsComponent = /*#__PURE__*/react.forwardRef(function (_ref2, ref) { + var className = _ref2.className, + bsPrefix = _ref2.bsPrefix, + _ref2$as = _ref2.as, + Tag = _ref2$as === void 0 ? Component || 'div' : _ref2$as, + props = _objectWithoutPropertiesLoose(_ref2, ["className", "bsPrefix", "as"]); + + var resolvedPrefix = useBootstrapPrefix(bsPrefix, prefix); + return /*#__PURE__*/react.createElement(Tag, _extends({ + ref: ref, + className: classnames(className, resolvedPrefix) + }, props)); + }); + BsComponent.defaultProps = defaultProps; + BsComponent.displayName = displayName; + return BsComponent; +} + +function isTrivialHref(href) { + return !href || href.trim() === '#'; +} +/** + * There are situations due to browser quirks or Bootstrap CSS where + * an anchor tag is needed, when semantically a button tag is the + * better choice. SafeAnchor ensures that when an anchor is used like a + * button its accessible. It also emulates input `disabled` behavior for + * links, which is usually desirable for Buttons, NavItems, DropdownItems, etc. + */ + + +var SafeAnchor = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'a' : _ref$as, + disabled = _ref.disabled, + onKeyDown = _ref.onKeyDown, + props = _objectWithoutPropertiesLoose(_ref, ["as", "disabled", "onKeyDown"]); + + var handleClick = function handleClick(event) { + var href = props.href, + onClick = props.onClick; + + if (disabled || isTrivialHref(href)) { + event.preventDefault(); + } + + if (disabled) { + event.stopPropagation(); + return; + } + + if (onClick) { + onClick(event); + } + }; + + var handleKeyDown = function handleKeyDown(event) { + if (event.key === ' ') { + event.preventDefault(); + handleClick(event); + } + }; + + if (isTrivialHref(props.href)) { + props.role = props.role || 'button'; // we want to make sure there is a href attribute on the node + // otherwise, the cursor incorrectly styled (except with role='button') + + props.href = props.href || '#'; + } + + if (disabled) { + props.tabIndex = -1; + props['aria-disabled'] = true; + } + + return /*#__PURE__*/react.createElement(Component, _extends({ + ref: ref + }, props, { + onClick: handleClick, + onKeyDown: createChainedFunction(handleKeyDown, onKeyDown) + })); +}); +SafeAnchor.displayName = 'SafeAnchor'; + +var defaultProps$5 = { + variant: 'primary', + active: false, + disabled: false +}; +var Button = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + variant = _ref.variant, + size = _ref.size, + active = _ref.active, + className = _ref.className, + block = _ref.block, + type = _ref.type, + as = _ref.as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "variant", "size", "active", "className", "block", "type", "as"]); + + var prefix = useBootstrapPrefix(bsPrefix, 'btn'); + var classes = classnames(className, prefix, active && 'active', variant && prefix + "-" + variant, block && prefix + "-block", size && prefix + "-" + size); + + if (props.href) { + return /*#__PURE__*/react.createElement(SafeAnchor, _extends({}, props, { + as: as, + ref: ref, + className: classnames(classes, props.disabled && 'disabled') + })); + } + + if (ref) { + props.ref = ref; + } + + if (type) { + props.type = type; + } else if (!as) { + props.type = 'button'; + } + + var Component = as || 'button'; + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + className: classes + })); +}); +Button.displayName = 'Button'; +Button.defaultProps = defaultProps$5; + +var context = /*#__PURE__*/react.createContext(null); +context.displayName = 'CardContext'; + +var defaultProps$4 = { + variant: null +}; +var CardImg = /*#__PURE__*/react.forwardRef( // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595 +function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + className = _ref.className, + variant = _ref.variant, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'img' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "variant", "as"]); + + var prefix = useBootstrapPrefix(bsPrefix, 'card-img'); + return /*#__PURE__*/react.createElement(Component, _extends({ + ref: ref, + className: classnames(variant ? prefix + "-" + variant : prefix, className) + }, props)); +}); +CardImg.displayName = 'CardImg'; +CardImg.defaultProps = defaultProps$4; + +var DivStyledAsH5 = divWithClassName('h5'); +var DivStyledAsH6 = divWithClassName('h6'); +var CardBody = createWithBsPrefix('card-body'); +var CardTitle = createWithBsPrefix('card-title', { + Component: DivStyledAsH5 +}); +var CardSubtitle = createWithBsPrefix('card-subtitle', { + Component: DivStyledAsH6 +}); +var CardLink = createWithBsPrefix('card-link', { + Component: 'a' +}); +var CardText = createWithBsPrefix('card-text', { + Component: 'p' +}); +var CardHeader = createWithBsPrefix('card-header'); +var CardFooter = createWithBsPrefix('card-footer'); +var CardImgOverlay = createWithBsPrefix('card-img-overlay'); +var defaultProps$3 = { + body: false +}; +var Card = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + className = _ref.className, + bg = _ref.bg, + text = _ref.text, + border = _ref.border, + body = _ref.body, + children = _ref.children, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "bg", "text", "border", "body", "children", "as"]); + + var prefix = useBootstrapPrefix(bsPrefix, 'card'); + var cardContext = react.useMemo(function () { + return { + cardHeaderBsPrefix: prefix + "-header" + }; + }, [prefix]); + return /*#__PURE__*/react.createElement(context.Provider, { + value: cardContext + }, /*#__PURE__*/react.createElement(Component, _extends({ + ref: ref + }, props, { + className: classnames(className, prefix, bg && "bg-" + bg, text && "text-" + text, border && "border-" + border) + }), body ? + /*#__PURE__*/ + // @ts-ignore + react.createElement(CardBody, null, children) : children)); +}); +Card.displayName = 'Card'; +Card.defaultProps = defaultProps$3; +Card.Img = CardImg; +Card.Title = CardTitle; +Card.Subtitle = CardSubtitle; +Card.Body = CardBody; +Card.Link = CardLink; +Card.Text = CardText; +Card.Header = CardHeader; +Card.Footer = CardFooter; +Card.ImgOverlay = CardImgOverlay; + +var DEVICE_SIZES = ['xl', 'lg', 'md', 'sm', 'xs']; +var Col = /*#__PURE__*/react.forwardRef( // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595 +function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + className = _ref.className, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "as"]); + + var prefix = useBootstrapPrefix(bsPrefix, 'col'); + var spans = []; + var classes = []; + DEVICE_SIZES.forEach(function (brkPoint) { + var propValue = props[brkPoint]; + delete props[brkPoint]; + var span; + var offset; + var order; + + if (typeof propValue === 'object' && propValue != null) { + var _propValue$span = propValue.span; + span = _propValue$span === void 0 ? true : _propValue$span; + offset = propValue.offset; + order = propValue.order; + } else { + span = propValue; + } + + var infix = brkPoint !== 'xs' ? "-" + brkPoint : ''; + if (span) spans.push(span === true ? "" + prefix + infix : "" + prefix + infix + "-" + span); + if (order != null) classes.push("order" + infix + "-" + order); + if (offset != null) classes.push("offset" + infix + "-" + offset); + }); + + if (!spans.length) { + spans.push(prefix); // plain 'col' + } + + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + className: classnames.apply(void 0, [className].concat(spans, classes)) + })); +}); +Col.displayName = 'Col'; + +createCommonjsModule(function (module, exports) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isRequiredForA11y; +function isRequiredForA11y(validator) { + return function validate(props, propName, componentName, location, propFullName) { + var componentNameSafe = componentName || '<>'; + var propFullNameSafe = propFullName || propName; + + if (props[propName] == null) { + return new Error('The ' + location + ' `' + propFullNameSafe + '` is required to make ' + ('`' + componentNameSafe + '` accessible for users of assistive ') + 'technologies such as screen readers.'); + } + + for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) { + args[_key - 5] = arguments[_key]; + } + + return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args)); + }; +} +module.exports = exports['default']; +}); + +var createChainableTypeChecker_1 = createCommonjsModule(function (module, exports) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createChainableTypeChecker; +/** + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +// Mostly taken from ReactPropTypes. + +function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName, location, propFullName) { + var componentNameSafe = componentName || '<>'; + var propFullNameSafe = propFullName || propName; + + if (props[propName] == null) { + if (isRequired) { + return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.')); + } + + return null; + } + + for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) { + args[_key - 6] = arguments[_key]; + } + + return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args)); + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; +} +module.exports = exports['default']; +}); + +createCommonjsModule(function (module, exports) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = all; + + + +var _createChainableTypeChecker2 = _interopRequireDefault(createChainableTypeChecker_1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function all() { + for (var _len = arguments.length, validators = Array(_len), _key = 0; _key < _len; _key++) { + validators[_key] = arguments[_key]; + } + + function allPropTypes() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var error = null; + + validators.forEach(function (validator) { + if (error != null) { + return; + } + + var result = validator.apply(undefined, args); + if (result != null) { + error = result; + } + }); + + return error; + } + + return (0, _createChainableTypeChecker2.default)(allPropTypes); +} +module.exports = exports['default']; +}); + +var propTypes = { + /** + * Specify whether the feedback is for valid or invalid fields + * + * @type {('valid'|'invalid')} + */ + type: propTypes$1.string, + + /** Display feedback as a tooltip. */ + tooltip: propTypes$1.bool, + as: propTypes$1.elementType +}; +var Feedback = /*#__PURE__*/react.forwardRef( // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595 +function (_ref, ref) { + var _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + className = _ref.className, + _ref$type = _ref.type, + type = _ref$type === void 0 ? 'valid' : _ref$type, + _ref$tooltip = _ref.tooltip, + tooltip = _ref$tooltip === void 0 ? false : _ref$tooltip, + props = _objectWithoutPropertiesLoose(_ref, ["as", "className", "type", "tooltip"]); + + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + className: classnames(className, type + "-" + (tooltip ? 'tooltip' : 'feedback')) + })); +}); +Feedback.displayName = 'Feedback'; +Feedback.propTypes = propTypes; + +var FormContext = /*#__PURE__*/react.createContext({ + controlId: undefined +}); + +var FormCheckInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var id = _ref.id, + bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + className = _ref.className, + _ref$type = _ref.type, + type = _ref$type === void 0 ? 'checkbox' : _ref$type, + _ref$isValid = _ref.isValid, + isValid = _ref$isValid === void 0 ? false : _ref$isValid, + _ref$isInvalid = _ref.isInvalid, + isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid, + isStatic = _ref.isStatic, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'input' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["id", "bsPrefix", "bsCustomPrefix", "className", "type", "isValid", "isInvalid", "isStatic", "as"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId, + custom = _useContext.custom; + + var _ref2 = custom ? [bsCustomPrefix, 'custom-control-input'] : [bsPrefix, 'form-check-input'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + type: type, + id: id || controlId, + className: classnames(className, bsPrefix, isValid && 'is-valid', isInvalid && 'is-invalid', isStatic && 'position-static') + })); +}); +FormCheckInput.displayName = 'FormCheckInput'; + +var FormCheckLabel = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + className = _ref.className, + htmlFor = _ref.htmlFor, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "bsCustomPrefix", "className", "htmlFor"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId, + custom = _useContext.custom; + + var _ref2 = custom ? [bsCustomPrefix, 'custom-control-label'] : [bsPrefix, 'form-check-label'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + return /*#__PURE__*/react.createElement("label", _extends({}, props, { + ref: ref, + htmlFor: htmlFor || controlId, + className: classnames(className, bsPrefix) + })); +}); +FormCheckLabel.displayName = 'FormCheckLabel'; + +var FormCheck = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var id = _ref.id, + bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + _ref$inline = _ref.inline, + inline = _ref$inline === void 0 ? false : _ref$inline, + _ref$disabled = _ref.disabled, + disabled = _ref$disabled === void 0 ? false : _ref$disabled, + _ref$isValid = _ref.isValid, + isValid = _ref$isValid === void 0 ? false : _ref$isValid, + _ref$isInvalid = _ref.isInvalid, + isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid, + _ref$feedbackTooltip = _ref.feedbackTooltip, + feedbackTooltip = _ref$feedbackTooltip === void 0 ? false : _ref$feedbackTooltip, + feedback = _ref.feedback, + className = _ref.className, + style = _ref.style, + _ref$title = _ref.title, + title = _ref$title === void 0 ? '' : _ref$title, + _ref$type = _ref.type, + type = _ref$type === void 0 ? 'checkbox' : _ref$type, + label = _ref.label, + children = _ref.children, + propCustom = _ref.custom, + _ref$as = _ref.as, + as = _ref$as === void 0 ? 'input' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["id", "bsPrefix", "bsCustomPrefix", "inline", "disabled", "isValid", "isInvalid", "feedbackTooltip", "feedback", "className", "style", "title", "type", "label", "children", "custom", "as"]); + + var custom = type === 'switch' ? true : propCustom; + + var _ref2 = custom ? [bsCustomPrefix, 'custom-control'] : [bsPrefix, 'form-check'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId; + + var innerFormContext = react.useMemo(function () { + return { + controlId: id || controlId, + custom: custom + }; + }, [controlId, custom, id]); + var hasLabel = custom || label != null && label !== false && !children; + var input = /*#__PURE__*/react.createElement(FormCheckInput, _extends({}, props, { + type: type === 'switch' ? 'checkbox' : type, + ref: ref, + isValid: isValid, + isInvalid: isInvalid, + isStatic: !hasLabel, + disabled: disabled, + as: as + })); + return /*#__PURE__*/react.createElement(FormContext.Provider, { + value: innerFormContext + }, /*#__PURE__*/react.createElement("div", { + style: style, + className: classnames(className, bsPrefix, custom && "custom-" + type, inline && bsPrefix + "-inline") + }, children || /*#__PURE__*/react.createElement(react.Fragment, null, input, hasLabel && /*#__PURE__*/react.createElement(FormCheckLabel, { + title: title + }, label), (isValid || isInvalid) && /*#__PURE__*/react.createElement(Feedback, { + type: isValid ? 'valid' : 'invalid', + tooltip: feedbackTooltip + }, feedback)))); +}); +FormCheck.displayName = 'FormCheck'; +FormCheck.Input = FormCheckInput; +FormCheck.Label = FormCheckLabel; + +var FormFileInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var id = _ref.id, + bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + className = _ref.className, + isValid = _ref.isValid, + isInvalid = _ref.isInvalid, + lang = _ref.lang, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'input' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["id", "bsPrefix", "bsCustomPrefix", "className", "isValid", "isInvalid", "lang", "as"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId, + custom = _useContext.custom; + + var type = 'file'; + + var _ref2 = custom ? [bsCustomPrefix, 'custom-file-input'] : [bsPrefix, 'form-control-file'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + id: id || controlId, + type: type, + lang: lang, + className: classnames(className, bsPrefix, isValid && 'is-valid', isInvalid && 'is-invalid') + })); +}); +FormFileInput.displayName = 'FormFileInput'; + +var FormFileLabel = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + className = _ref.className, + htmlFor = _ref.htmlFor, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "bsCustomPrefix", "className", "htmlFor"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId, + custom = _useContext.custom; + + var _ref2 = custom ? [bsCustomPrefix, 'custom-file-label'] : [bsPrefix, 'form-file-label'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + return /*#__PURE__*/react.createElement("label", _extends({}, props, { + ref: ref, + htmlFor: htmlFor || controlId, + className: classnames(className, bsPrefix), + "data-browse": props['data-browse'] + })); +}); +FormFileLabel.displayName = 'FormFileLabel'; + +var FormFile = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var id = _ref.id, + bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + _ref$disabled = _ref.disabled, + disabled = _ref$disabled === void 0 ? false : _ref$disabled, + _ref$isValid = _ref.isValid, + isValid = _ref$isValid === void 0 ? false : _ref$isValid, + _ref$isInvalid = _ref.isInvalid, + isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid, + _ref$feedbackTooltip = _ref.feedbackTooltip, + feedbackTooltip = _ref$feedbackTooltip === void 0 ? false : _ref$feedbackTooltip, + feedback = _ref.feedback, + className = _ref.className, + style = _ref.style, + label = _ref.label, + children = _ref.children, + custom = _ref.custom, + lang = _ref.lang, + dataBrowse = _ref['data-browse'], + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + _ref$inputAs = _ref.inputAs, + inputAs = _ref$inputAs === void 0 ? 'input' : _ref$inputAs, + props = _objectWithoutPropertiesLoose(_ref, ["id", "bsPrefix", "bsCustomPrefix", "disabled", "isValid", "isInvalid", "feedbackTooltip", "feedback", "className", "style", "label", "children", "custom", "lang", "data-browse", "as", "inputAs"]); + + var _ref2 = custom ? [bsCustomPrefix, 'custom'] : [bsPrefix, 'form-file'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + var type = 'file'; + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId; + + var innerFormContext = react.useMemo(function () { + return { + controlId: id || controlId, + custom: custom + }; + }, [controlId, custom, id]); + var hasLabel = label != null && label !== false && !children; + var input = /*#__PURE__*/react.createElement(FormFileInput, _extends({}, props, { + ref: ref, + isValid: isValid, + isInvalid: isInvalid, + disabled: disabled, + as: inputAs, + lang: lang + })); + return /*#__PURE__*/react.createElement(FormContext.Provider, { + value: innerFormContext + }, /*#__PURE__*/react.createElement(Component, { + style: style, + className: classnames(className, bsPrefix, custom && "custom-" + type) + }, children || /*#__PURE__*/react.createElement(react.Fragment, null, custom ? /*#__PURE__*/react.createElement(react.Fragment, null, input, hasLabel && /*#__PURE__*/react.createElement(FormFileLabel, { + "data-browse": dataBrowse + }, label)) : /*#__PURE__*/react.createElement(react.Fragment, null, hasLabel && /*#__PURE__*/react.createElement(FormFileLabel, null, label), input), (isValid || isInvalid) && /*#__PURE__*/react.createElement(Feedback, { + type: isValid ? 'valid' : 'invalid', + tooltip: feedbackTooltip + }, feedback)))); +}); +FormFile.displayName = 'FormFile'; +FormFile.Input = FormFileInput; +FormFile.Label = FormFileLabel; + +var FormControl = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + bsCustomPrefix = _ref.bsCustomPrefix, + type = _ref.type, + size = _ref.size, + htmlSize = _ref.htmlSize, + id = _ref.id, + className = _ref.className, + _ref$isValid = _ref.isValid, + isValid = _ref$isValid === void 0 ? false : _ref$isValid, + _ref$isInvalid = _ref.isInvalid, + isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid, + plaintext = _ref.plaintext, + readOnly = _ref.readOnly, + custom = _ref.custom, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'input' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "bsCustomPrefix", "type", "size", "htmlSize", "id", "className", "isValid", "isInvalid", "plaintext", "readOnly", "custom", "as"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId; + + var _ref2 = custom ? [bsCustomPrefix, 'custom'] : [bsPrefix, 'form-control'], + prefix = _ref2[0], + defaultPrefix = _ref2[1]; + + bsPrefix = useBootstrapPrefix(prefix, defaultPrefix); + var classes; + + if (plaintext) { + var _classes; + + classes = (_classes = {}, _classes[bsPrefix + "-plaintext"] = true, _classes); + } else if (type === 'file') { + var _classes2; + + classes = (_classes2 = {}, _classes2[bsPrefix + "-file"] = true, _classes2); + } else if (type === 'range') { + var _classes3; + + classes = (_classes3 = {}, _classes3[bsPrefix + "-range"] = true, _classes3); + } else if (Component === 'select' && custom) { + var _classes4; + + classes = (_classes4 = {}, _classes4[bsPrefix + "-select"] = true, _classes4[bsPrefix + "-select-" + size] = size, _classes4); + } else { + var _classes5; + + classes = (_classes5 = {}, _classes5[bsPrefix] = true, _classes5[bsPrefix + "-" + size] = size, _classes5); + } + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + type: type, + size: htmlSize, + ref: ref, + readOnly: readOnly, + id: id || controlId, + className: classnames(className, classes, isValid && "is-valid", isInvalid && "is-invalid") + })); +}); +FormControl.displayName = 'FormControl'; +var FormControl$1 = Object.assign(FormControl, { + Feedback: Feedback +}); + +var FormGroup = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + className = _ref.className, + children = _ref.children, + controlId = _ref.controlId, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "children", "controlId", "as"]); + + bsPrefix = useBootstrapPrefix(bsPrefix, 'form-group'); + var context = react.useMemo(function () { + return { + controlId: controlId + }; + }, [controlId]); + return /*#__PURE__*/react.createElement(FormContext.Provider, { + value: context + }, /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + className: classnames(className, bsPrefix) + }), children)); +}); +FormGroup.displayName = 'FormGroup'; + +var defaultProps$2 = { + column: false, + srOnly: false +}; +var FormLabel = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'label' : _ref$as, + bsPrefix = _ref.bsPrefix, + column = _ref.column, + srOnly = _ref.srOnly, + className = _ref.className, + htmlFor = _ref.htmlFor, + props = _objectWithoutPropertiesLoose(_ref, ["as", "bsPrefix", "column", "srOnly", "className", "htmlFor"]); + + var _useContext = react.useContext(FormContext), + controlId = _useContext.controlId; + + bsPrefix = useBootstrapPrefix(bsPrefix, 'form-label'); + var columnClass = 'col-form-label'; + if (typeof column === 'string') columnClass = columnClass + " " + columnClass + "-" + column; + var classes = classnames(className, bsPrefix, srOnly && 'sr-only', column && columnClass); + htmlFor = htmlFor || controlId; + if (column) return /*#__PURE__*/react.createElement(Col, _extends({ + as: "label", + className: classes, + htmlFor: htmlFor + }, props)); + return ( + /*#__PURE__*/ + // eslint-disable-next-line jsx-a11y/label-has-for, jsx-a11y/label-has-associated-control + react.createElement(Component, _extends({ + ref: ref, + className: classes, + htmlFor: htmlFor + }, props)) + ); +}); +FormLabel.displayName = 'FormLabel'; +FormLabel.defaultProps = defaultProps$2; + +var FormText = /*#__PURE__*/react.forwardRef( // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595 +function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + className = _ref.className, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'small' : _ref$as, + muted = _ref.muted, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "as", "muted"]); + + bsPrefix = useBootstrapPrefix(bsPrefix, 'form-text'); + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + className: classnames(className, bsPrefix, muted && 'text-muted') + })); +}); +FormText.displayName = 'FormText'; + +var Switch = /*#__PURE__*/react.forwardRef(function (props, ref) { + return /*#__PURE__*/react.createElement(FormCheck, _extends({}, props, { + ref: ref, + type: "switch" + })); +}); +Switch.displayName = 'Switch'; +Switch.Input = FormCheck.Input; +Switch.Label = FormCheck.Label; + +var FormRow = createWithBsPrefix('form-row'); +var defaultProps$1 = { + inline: false +}; +var FormImpl = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + inline = _ref.inline, + className = _ref.className, + validated = _ref.validated, + _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'form' : _ref$as, + props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "inline", "className", "validated", "as"]); + + bsPrefix = useBootstrapPrefix(bsPrefix, 'form'); + return /*#__PURE__*/react.createElement(Component, _extends({}, props, { + ref: ref, + className: classnames(className, validated && 'was-validated', inline && bsPrefix + "-inline") + })); +}); +FormImpl.displayName = 'Form'; +FormImpl.defaultProps = defaultProps$1; +FormImpl.Row = FormRow; +FormImpl.Group = FormGroup; +FormImpl.Control = FormControl$1; +FormImpl.Check = FormCheck; +FormImpl.File = FormFile; +FormImpl.Switch = Switch; +FormImpl.Label = FormLabel; +FormImpl.Text = FormText; + +var PopoverTitle = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + bsPrefix = _ref.bsPrefix, + className = _ref.className, + children = _ref.children, + props = _objectWithoutPropertiesLoose(_ref, ["as", "bsPrefix", "className", "children"]); + + bsPrefix = useBootstrapPrefix(bsPrefix, 'popover-header'); + return /*#__PURE__*/react.createElement(Component, _extends({ + ref: ref + }, props, { + className: classnames(bsPrefix, className) + }), children); +}); + +var PopoverContent = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var _ref$as = _ref.as, + Component = _ref$as === void 0 ? 'div' : _ref$as, + bsPrefix = _ref.bsPrefix, + className = _ref.className, + children = _ref.children, + props = _objectWithoutPropertiesLoose(_ref, ["as", "bsPrefix", "className", "children"]); + + bsPrefix = useBootstrapPrefix(bsPrefix, 'popover-body'); + return /*#__PURE__*/react.createElement(Component, _extends({ + ref: ref + }, props, { + className: classnames(className, bsPrefix) + }), children); +}); + +var defaultProps = { + placement: 'right' +}; +var Popover = /*#__PURE__*/react.forwardRef(function (_ref, ref) { + var bsPrefix = _ref.bsPrefix, + placement = _ref.placement, + className = _ref.className, + style = _ref.style, + children = _ref.children, + content = _ref.content, + arrowProps = _ref.arrowProps; + _ref.popper; + _ref.show; + var props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "placement", "className", "style", "children", "content", "arrowProps", "popper", "show"]); + + var decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'popover'); + + var _ref2 = (placement == null ? void 0 : placement.split('-')) || [], + primaryPlacement = _ref2[0]; + + return /*#__PURE__*/react.createElement("div", _extends({ + ref: ref, + role: "tooltip", + style: style, + "x-placement": primaryPlacement, + className: classnames(className, decoratedBsPrefix, primaryPlacement && "bs-popover-" + primaryPlacement) + }, props), /*#__PURE__*/react.createElement("div", _extends({ + className: "arrow" + }, arrowProps)), content ? /*#__PURE__*/react.createElement(PopoverContent, null, children) : children); +}); +Popover.defaultProps = defaultProps; +Popover.Title = PopoverTitle; +Popover.Content = PopoverContent; + +export { Button, Card, FormImpl as Form, Popover }; diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd-html5-backend.js b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd-html5-backend.js new file mode 100644 index 00000000..689d3a80 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd-html5-backend.js @@ -0,0 +1,1150 @@ +// cheap lodash replacements +function memoize(fn) { + var result = null; + + var memoized = function memoized() { + if (result == null) { + result = fn(); + } + + return result; + }; + + return memoized; +} +/** + * drop-in replacement for _.without + */ + +function without(items, item) { + return items.filter(function (i) { + return i !== item; + }); +} +function union(itemsA, itemsB) { + var set = new Set(); + + var insertItem = function insertItem(item) { + return set.add(item); + }; + + itemsA.forEach(insertItem); + itemsB.forEach(insertItem); + var result = []; + set.forEach(function (key) { + return result.push(key); + }); + return result; +} + +function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$4(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$4(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$4(Constructor.prototype, protoProps); if (staticProps) _defineProperties$4(Constructor, staticProps); return Constructor; } +var EnterLeaveCounter = /*#__PURE__*/function () { + function EnterLeaveCounter(isNodeInDocument) { + _classCallCheck$4(this, EnterLeaveCounter); + + this.entered = []; + this.isNodeInDocument = isNodeInDocument; + } + + _createClass$4(EnterLeaveCounter, [{ + key: "enter", + value: function enter(enteringNode) { + var _this = this; + + var previousLength = this.entered.length; + + var isNodeEntered = function isNodeEntered(node) { + return _this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode)); + }; + + this.entered = union(this.entered.filter(isNodeEntered), [enteringNode]); + return previousLength === 0 && this.entered.length > 0; + } + }, { + key: "leave", + value: function leave(leavingNode) { + var previousLength = this.entered.length; + this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode); + return previousLength > 0 && this.entered.length === 0; + } + }, { + key: "reset", + value: function reset() { + this.entered = []; + } + }]); + + return EnterLeaveCounter; +}(); + +var isFirefox = memoize(function () { + return /firefox/i.test(navigator.userAgent); +}); +var isSafari = memoize(function () { + return Boolean(window.safari); +}); + +function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$3(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$3(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$3(Constructor.prototype, protoProps); if (staticProps) _defineProperties$3(Constructor, staticProps); return Constructor; } + +var MonotonicInterpolant = /*#__PURE__*/function () { + function MonotonicInterpolant(xs, ys) { + _classCallCheck$3(this, MonotonicInterpolant); + + var length = xs.length; // Rearrange xs and ys so that xs is sorted + + var indexes = []; + + for (var i = 0; i < length; i++) { + indexes.push(i); + } + + indexes.sort(function (a, b) { + return xs[a] < xs[b] ? -1 : 1; + }); // Get consecutive differences and slopes + var dxs = []; + var ms = []; + var dx; + var dy; + + for (var _i = 0; _i < length - 1; _i++) { + dx = xs[_i + 1] - xs[_i]; + dy = ys[_i + 1] - ys[_i]; + dxs.push(dx); + ms.push(dy / dx); + } // Get degree-1 coefficients + + + var c1s = [ms[0]]; + + for (var _i2 = 0; _i2 < dxs.length - 1; _i2++) { + var m2 = ms[_i2]; + var mNext = ms[_i2 + 1]; + + if (m2 * mNext <= 0) { + c1s.push(0); + } else { + dx = dxs[_i2]; + var dxNext = dxs[_i2 + 1]; + var common = dx + dxNext; + c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext)); + } + } + + c1s.push(ms[ms.length - 1]); // Get degree-2 and degree-3 coefficients + + var c2s = []; + var c3s = []; + var m; + + for (var _i3 = 0; _i3 < c1s.length - 1; _i3++) { + m = ms[_i3]; + var c1 = c1s[_i3]; + var invDx = 1 / dxs[_i3]; + + var _common = c1 + c1s[_i3 + 1] - m - m; + + c2s.push((m - c1 - _common) * invDx); + c3s.push(_common * invDx * invDx); + } + + this.xs = xs; + this.ys = ys; + this.c1s = c1s; + this.c2s = c2s; + this.c3s = c3s; + } + + _createClass$3(MonotonicInterpolant, [{ + key: "interpolate", + value: function interpolate(x) { + var xs = this.xs, + ys = this.ys, + c1s = this.c1s, + c2s = this.c2s, + c3s = this.c3s; // The rightmost point in the dataset should give an exact result + + var i = xs.length - 1; + + if (x === xs[i]) { + return ys[i]; + } // Search for the interval x is in, returning the corresponding y if x is one of the original xs + + + var low = 0; + var high = c3s.length - 1; + var mid; + + while (low <= high) { + mid = Math.floor(0.5 * (low + high)); + var xHere = xs[mid]; + + if (xHere < x) { + low = mid + 1; + } else if (xHere > x) { + high = mid - 1; + } else { + return ys[mid]; + } + } + + i = Math.max(0, high); // Interpolate + + var diff = x - xs[i]; + var diffSq = diff * diff; + return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq; + } + }]); + + return MonotonicInterpolant; +}(); + +var ELEMENT_NODE = 1; +function getNodeClientOffset(node) { + var el = node.nodeType === ELEMENT_NODE ? node : node.parentElement; + + if (!el) { + return null; + } + + var _el$getBoundingClient = el.getBoundingClientRect(), + top = _el$getBoundingClient.top, + left = _el$getBoundingClient.left; + + return { + x: left, + y: top + }; +} +function getEventClientOffset(e) { + return { + x: e.clientX, + y: e.clientY + }; +} + +function isImageNode(node) { + var _document$documentEle; + + return node.nodeName === 'IMG' && (isFirefox() || !((_document$documentEle = document.documentElement) === null || _document$documentEle === void 0 ? void 0 : _document$documentEle.contains(node))); +} + +function getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) { + var dragPreviewWidth = isImage ? dragPreview.width : sourceWidth; + var dragPreviewHeight = isImage ? dragPreview.height : sourceHeight; // Work around @2x coordinate discrepancies in browsers + + if (isSafari() && isImage) { + dragPreviewHeight /= window.devicePixelRatio; + dragPreviewWidth /= window.devicePixelRatio; + } + + return { + dragPreviewWidth: dragPreviewWidth, + dragPreviewHeight: dragPreviewHeight + }; +} + +function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) { + // The browsers will use the image intrinsic size under different conditions. + // Firefox only cares if it's an image, but WebKit also wants it to be detached. + var isImage = isImageNode(dragPreview); + var dragPreviewNode = isImage ? sourceNode : dragPreview; + var dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode); + var offsetFromDragPreview = { + x: clientOffset.x - dragPreviewNodeOffsetFromClient.x, + y: clientOffset.y - dragPreviewNodeOffsetFromClient.y + }; + var sourceWidth = sourceNode.offsetWidth, + sourceHeight = sourceNode.offsetHeight; + var anchorX = anchorPoint.anchorX, + anchorY = anchorPoint.anchorY; + + var _getDragPreviewSize = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight), + dragPreviewWidth = _getDragPreviewSize.dragPreviewWidth, + dragPreviewHeight = _getDragPreviewSize.dragPreviewHeight; + + var calculateYOffset = function calculateYOffset() { + var interpolantY = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the top + offsetFromDragPreview.y, // Align at the center + offsetFromDragPreview.y / sourceHeight * dragPreviewHeight, // Dock to the bottom + offsetFromDragPreview.y + dragPreviewHeight - sourceHeight]); + var y = interpolantY.interpolate(anchorY); // Work around Safari 8 positioning bug + + if (isSafari() && isImage) { + // We'll have to wait for @3x to see if this is entirely correct + y += (window.devicePixelRatio - 1) * dragPreviewHeight; + } + + return y; + }; + + var calculateXOffset = function calculateXOffset() { + // Interpolate coordinates depending on anchor point + // If you know a simpler way to do this, let me know + var interpolantX = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the left + offsetFromDragPreview.x, // Align at the center + offsetFromDragPreview.x / sourceWidth * dragPreviewWidth, // Dock to the right + offsetFromDragPreview.x + dragPreviewWidth - sourceWidth]); + return interpolantX.interpolate(anchorX); + }; // Force offsets if specified in the options. + + + var offsetX = offsetPoint.offsetX, + offsetY = offsetPoint.offsetY; + var isManualOffsetX = offsetX === 0 || offsetX; + var isManualOffsetY = offsetY === 0 || offsetY; + return { + x: isManualOffsetX ? offsetX : calculateXOffset(), + y: isManualOffsetY ? offsetY : calculateYOffset() + }; +} + +var FILE = '__NATIVE_FILE__'; +var URL = '__NATIVE_URL__'; +var TEXT = '__NATIVE_TEXT__'; + +var NativeTypes = /*#__PURE__*/Object.freeze({ + __proto__: null, + FILE: FILE, + URL: URL, + TEXT: TEXT +}); + +function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) { + var result = typesToTry.reduce(function (resultSoFar, typeToTry) { + return resultSoFar || dataTransfer.getData(typeToTry); + }, ''); + return result != null ? result : defaultValue; +} + +var _nativeTypesConfig; + +function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +var nativeTypesConfig = (_nativeTypesConfig = {}, _defineProperty$1(_nativeTypesConfig, FILE, { + exposeProperties: { + files: function files(dataTransfer) { + return Array.prototype.slice.call(dataTransfer.files); + }, + items: function items(dataTransfer) { + return dataTransfer.items; + } + }, + matchesTypes: ['Files'] +}), _defineProperty$1(_nativeTypesConfig, URL, { + exposeProperties: { + urls: function urls(dataTransfer, matchesTypes) { + return getDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\n'); + } + }, + matchesTypes: ['Url', 'text/uri-list'] +}), _defineProperty$1(_nativeTypesConfig, TEXT, { + exposeProperties: { + text: function text(dataTransfer, matchesTypes) { + return getDataFromDataTransfer(dataTransfer, matchesTypes, ''); + } + }, + matchesTypes: ['Text', 'text/plain'] +}), _nativeTypesConfig); + +function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$2(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$2(Constructor.prototype, protoProps); if (staticProps) _defineProperties$2(Constructor, staticProps); return Constructor; } + +var NativeDragSource = /*#__PURE__*/function () { + function NativeDragSource(config) { + _classCallCheck$2(this, NativeDragSource); + + this.config = config; + this.item = {}; + this.initializeExposedProperties(); + } + + _createClass$2(NativeDragSource, [{ + key: "initializeExposedProperties", + value: function initializeExposedProperties() { + var _this = this; + + Object.keys(this.config.exposeProperties).forEach(function (property) { + Object.defineProperty(_this.item, property, { + configurable: true, + enumerable: true, + get: function get() { + // eslint-disable-next-line no-console + console.warn("Browser doesn't allow reading \"".concat(property, "\" until the drop event.")); + return null; + } + }); + }); + } + }, { + key: "loadDataTransfer", + value: function loadDataTransfer(dataTransfer) { + var _this2 = this; + + if (dataTransfer) { + var newProperties = {}; + Object.keys(this.config.exposeProperties).forEach(function (property) { + newProperties[property] = { + value: _this2.config.exposeProperties[property](dataTransfer, _this2.config.matchesTypes), + configurable: true, + enumerable: true + }; + }); + Object.defineProperties(this.item, newProperties); + } + } + }, { + key: "canDrag", + value: function canDrag() { + return true; + } + }, { + key: "beginDrag", + value: function beginDrag() { + return this.item; + } + }, { + key: "isDragging", + value: function isDragging(monitor, handle) { + return handle === monitor.getSourceId(); + } + }, { + key: "endDrag", + value: function endDrag() {// empty + } + }]); + + return NativeDragSource; +}(); + +function createNativeDragSource(type, dataTransfer) { + var result = new NativeDragSource(nativeTypesConfig[type]); + result.loadDataTransfer(dataTransfer); + return result; +} +function matchNativeItemType(dataTransfer) { + if (!dataTransfer) { + return null; + } + + var dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []); + return Object.keys(nativeTypesConfig).filter(function (nativeItemType) { + var matchesTypes = nativeTypesConfig[nativeItemType].matchesTypes; + return matchesTypes.some(function (t) { + return dataTransferTypes.indexOf(t) > -1; + }); + })[0] || null; +} + +function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$1(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; } + +var OptionsReader = /*#__PURE__*/function () { + function OptionsReader(globalContext) { + _classCallCheck$1(this, OptionsReader); + + this.globalContext = globalContext; + } + + _createClass$1(OptionsReader, [{ + key: "window", + get: function get() { + if (this.globalContext) { + return this.globalContext; + } else if (typeof window !== 'undefined') { + return window; + } + + return undefined; + } + }, { + key: "document", + get: function get() { + if (this.window) { + return this.window.document; + } + + return undefined; + } + }]); + + return OptionsReader; +}(); + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +var HTML5BackendImpl = /*#__PURE__*/function () { + function HTML5BackendImpl(manager, globalContext) { + var _this = this; + + _classCallCheck(this, HTML5BackendImpl); + + this.sourcePreviewNodes = new Map(); + this.sourcePreviewNodeOptions = new Map(); + this.sourceNodes = new Map(); + this.sourceNodeOptions = new Map(); + this.dragStartSourceIds = null; + this.dropTargetIds = []; + this.dragEnterTargetIds = []; + this.currentNativeSource = null; + this.currentNativeHandle = null; + this.currentDragSourceNode = null; + this.altKeyPressed = false; + this.mouseMoveTimeoutTimer = null; + this.asyncEndDragFrameId = null; + this.dragOverTargetIds = null; + + this.getSourceClientOffset = function (sourceId) { + var source = _this.sourceNodes.get(sourceId); + + return source && getNodeClientOffset(source) || null; + }; + + this.endDragNativeItem = function () { + if (!_this.isDraggingNativeItem()) { + return; + } + + _this.actions.endDrag(); + + if (_this.currentNativeHandle) { + _this.registry.removeSource(_this.currentNativeHandle); + } + + _this.currentNativeHandle = null; + _this.currentNativeSource = null; + }; + + this.isNodeInDocument = function (node) { + // Check the node either in the main document or in the current context + return Boolean(node && _this.document && _this.document.body && document.body.contains(node)); + }; + + this.endDragIfSourceWasRemovedFromDOM = function () { + var node = _this.currentDragSourceNode; + + if (_this.isNodeInDocument(node)) { + return; + } + + if (_this.clearCurrentDragSourceNode()) { + _this.actions.endDrag(); + } + }; + + this.handleTopDragStartCapture = function () { + _this.clearCurrentDragSourceNode(); + + _this.dragStartSourceIds = []; + }; + + this.handleTopDragStart = function (e) { + if (e.defaultPrevented) { + return; + } + + var dragStartSourceIds = _this.dragStartSourceIds; + _this.dragStartSourceIds = null; + var clientOffset = getEventClientOffset(e); // Avoid crashing if we missed a drop event or our previous drag died + + if (_this.monitor.isDragging()) { + _this.actions.endDrag(); + } // Don't publish the source just yet (see why below) + + + _this.actions.beginDrag(dragStartSourceIds || [], { + publishSource: false, + getSourceClientOffset: _this.getSourceClientOffset, + clientOffset: clientOffset + }); + + var dataTransfer = e.dataTransfer; + var nativeType = matchNativeItemType(dataTransfer); + + if (_this.monitor.isDragging()) { + if (dataTransfer && typeof dataTransfer.setDragImage === 'function') { + // Use custom drag image if user specifies it. + // If child drag source refuses drag but parent agrees, + // use parent's node as drag image. Neither works in IE though. + var sourceId = _this.monitor.getSourceId(); + + var sourceNode = _this.sourceNodes.get(sourceId); + + var dragPreview = _this.sourcePreviewNodes.get(sourceId) || sourceNode; + + if (dragPreview) { + var _this$getCurrentSourc = _this.getCurrentSourcePreviewNodeOptions(), + anchorX = _this$getCurrentSourc.anchorX, + anchorY = _this$getCurrentSourc.anchorY, + offsetX = _this$getCurrentSourc.offsetX, + offsetY = _this$getCurrentSourc.offsetY; + + var anchorPoint = { + anchorX: anchorX, + anchorY: anchorY + }; + var offsetPoint = { + offsetX: offsetX, + offsetY: offsetY + }; + var dragPreviewOffset = getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint); + dataTransfer.setDragImage(dragPreview, dragPreviewOffset.x, dragPreviewOffset.y); + } + } + + try { + // Firefox won't drag without setting data + dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.setData('application/json', {}); + } catch (err) {} // IE doesn't support MIME types in setData + // Store drag source node so we can check whether + // it is removed from DOM and trigger endDrag manually. + + + _this.setCurrentDragSourceNode(e.target); // Now we are ready to publish the drag source.. or are we not? + + + var _this$getCurrentSourc2 = _this.getCurrentSourcePreviewNodeOptions(), + captureDraggingState = _this$getCurrentSourc2.captureDraggingState; + + if (!captureDraggingState) { + // Usually we want to publish it in the next tick so that browser + // is able to screenshot the current (not yet dragging) state. + // + // It also neatly avoids a situation where render() returns null + // in the same tick for the source element, and browser freaks out. + setTimeout(function () { + return _this.actions.publishDragSource(); + }, 0); + } else { + // In some cases the user may want to override this behavior, e.g. + // to work around IE not supporting custom drag previews. + // + // When using a custom drag layer, the only way to prevent + // the default drag preview from drawing in IE is to screenshot + // the dragging state in which the node itself has zero opacity + // and height. In this case, though, returning null from render() + // will abruptly end the dragging, which is not obvious. + // + // This is the reason such behavior is strictly opt-in. + _this.actions.publishDragSource(); + } + } else if (nativeType) { + // A native item (such as URL) dragged from inside the document + _this.beginDragNativeItem(nativeType); + } else if (dataTransfer && !dataTransfer.types && (e.target && !e.target.hasAttribute || !e.target.hasAttribute('draggable'))) { + // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable. + // Just let it drag. It's a native type (URL or text) and will be picked up in + // dragenter handler. + return; + } else { + // If by this time no drag source reacted, tell browser not to drag. + e.preventDefault(); + } + }; + + this.handleTopDragEndCapture = function () { + if (_this.clearCurrentDragSourceNode()) { + // Firefox can dispatch this event in an infinite loop + // if dragend handler does something like showing an alert. + // Only proceed if we have not handled it already. + _this.actions.endDrag(); + } + }; + + this.handleTopDragEnterCapture = function (e) { + _this.dragEnterTargetIds = []; + + var isFirstEnter = _this.enterLeaveCounter.enter(e.target); + + if (!isFirstEnter || _this.monitor.isDragging()) { + return; + } + + var dataTransfer = e.dataTransfer; + var nativeType = matchNativeItemType(dataTransfer); + + if (nativeType) { + // A native item (such as file or URL) dragged from outside the document + _this.beginDragNativeItem(nativeType, dataTransfer); + } + }; + + this.handleTopDragEnter = function (e) { + var dragEnterTargetIds = _this.dragEnterTargetIds; + _this.dragEnterTargetIds = []; + + if (!_this.monitor.isDragging()) { + // This is probably a native item type we don't understand. + return; + } + + _this.altKeyPressed = e.altKey; + + if (!isFirefox()) { + // Don't emit hover in `dragenter` on Firefox due to an edge case. + // If the target changes position as the result of `dragenter`, Firefox + // will still happily dispatch `dragover` despite target being no longer + // there. The easy solution is to only fire `hover` in `dragover` on FF. + _this.actions.hover(dragEnterTargetIds, { + clientOffset: getEventClientOffset(e) + }); + } + + var canDrop = dragEnterTargetIds.some(function (targetId) { + return _this.monitor.canDropOnTarget(targetId); + }); + + if (canDrop) { + // IE requires this to fire dragover events + e.preventDefault(); + + if (e.dataTransfer) { + e.dataTransfer.dropEffect = _this.getCurrentDropEffect(); + } + } + }; + + this.handleTopDragOverCapture = function () { + _this.dragOverTargetIds = []; + }; + + this.handleTopDragOver = function (e) { + var dragOverTargetIds = _this.dragOverTargetIds; + _this.dragOverTargetIds = []; + + if (!_this.monitor.isDragging()) { + // This is probably a native item type we don't understand. + // Prevent default "drop and blow away the whole document" action. + e.preventDefault(); + + if (e.dataTransfer) { + e.dataTransfer.dropEffect = 'none'; + } + + return; + } + + _this.altKeyPressed = e.altKey; + + _this.actions.hover(dragOverTargetIds || [], { + clientOffset: getEventClientOffset(e) + }); + + var canDrop = (dragOverTargetIds || []).some(function (targetId) { + return _this.monitor.canDropOnTarget(targetId); + }); + + if (canDrop) { + // Show user-specified drop effect. + e.preventDefault(); + + if (e.dataTransfer) { + e.dataTransfer.dropEffect = _this.getCurrentDropEffect(); + } + } else if (_this.isDraggingNativeItem()) { + // Don't show a nice cursor but still prevent default + // "drop and blow away the whole document" action. + e.preventDefault(); + } else { + e.preventDefault(); + + if (e.dataTransfer) { + e.dataTransfer.dropEffect = 'none'; + } + } + }; + + this.handleTopDragLeaveCapture = function (e) { + if (_this.isDraggingNativeItem()) { + e.preventDefault(); + } + + var isLastLeave = _this.enterLeaveCounter.leave(e.target); + + if (!isLastLeave) { + return; + } + + if (_this.isDraggingNativeItem()) { + _this.endDragNativeItem(); + } + }; + + this.handleTopDropCapture = function (e) { + _this.dropTargetIds = []; + e.preventDefault(); + + if (_this.isDraggingNativeItem()) { + var _this$currentNativeSo; + + (_this$currentNativeSo = _this.currentNativeSource) === null || _this$currentNativeSo === void 0 ? void 0 : _this$currentNativeSo.loadDataTransfer(e.dataTransfer); + } + + _this.enterLeaveCounter.reset(); + }; + + this.handleTopDrop = function (e) { + var dropTargetIds = _this.dropTargetIds; + _this.dropTargetIds = []; + + _this.actions.hover(dropTargetIds, { + clientOffset: getEventClientOffset(e) + }); + + _this.actions.drop({ + dropEffect: _this.getCurrentDropEffect() + }); + + if (_this.isDraggingNativeItem()) { + _this.endDragNativeItem(); + } else { + _this.endDragIfSourceWasRemovedFromDOM(); + } + }; + + this.handleSelectStart = function (e) { + var target = e.target; // Only IE requires us to explicitly say + // we want drag drop operation to start + + if (typeof target.dragDrop !== 'function') { + return; + } // Inputs and textareas should be selectable + + + if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.isContentEditable) { + return; + } // For other targets, ask IE + // to enable drag and drop + + + e.preventDefault(); + target.dragDrop(); + }; + + this.options = new OptionsReader(globalContext); + this.actions = manager.getActions(); + this.monitor = manager.getMonitor(); + this.registry = manager.getRegistry(); + this.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument); + } + /** + * Generate profiling statistics for the HTML5Backend. + */ + + + _createClass(HTML5BackendImpl, [{ + key: "profile", + value: function profile() { + var _this$dragStartSource, _this$dragOverTargetI; + + return { + sourcePreviewNodes: this.sourcePreviewNodes.size, + sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size, + sourceNodeOptions: this.sourceNodeOptions.size, + sourceNodes: this.sourceNodes.size, + dragStartSourceIds: ((_this$dragStartSource = this.dragStartSourceIds) === null || _this$dragStartSource === void 0 ? void 0 : _this$dragStartSource.length) || 0, + dropTargetIds: this.dropTargetIds.length, + dragEnterTargetIds: this.dragEnterTargetIds.length, + dragOverTargetIds: ((_this$dragOverTargetI = this.dragOverTargetIds) === null || _this$dragOverTargetI === void 0 ? void 0 : _this$dragOverTargetI.length) || 0 + }; + } // public for test + + }, { + key: "setup", + value: function setup() { + if (this.window === undefined) { + return; + } + + if (this.window.__isReactDndBackendSetUp) { + throw new Error('Cannot have two HTML5 backends at the same time.'); + } + + this.window.__isReactDndBackendSetUp = true; + this.addEventListeners(this.window); + } + }, { + key: "teardown", + value: function teardown() { + if (this.window === undefined) { + return; + } + + this.window.__isReactDndBackendSetUp = false; + this.removeEventListeners(this.window); + this.clearCurrentDragSourceNode(); + + if (this.asyncEndDragFrameId) { + this.window.cancelAnimationFrame(this.asyncEndDragFrameId); + } + } + }, { + key: "connectDragPreview", + value: function connectDragPreview(sourceId, node, options) { + var _this2 = this; + + this.sourcePreviewNodeOptions.set(sourceId, options); + this.sourcePreviewNodes.set(sourceId, node); + return function () { + _this2.sourcePreviewNodes.delete(sourceId); + + _this2.sourcePreviewNodeOptions.delete(sourceId); + }; + } + }, { + key: "connectDragSource", + value: function connectDragSource(sourceId, node, options) { + var _this3 = this; + + this.sourceNodes.set(sourceId, node); + this.sourceNodeOptions.set(sourceId, options); + + var handleDragStart = function handleDragStart(e) { + return _this3.handleDragStart(e, sourceId); + }; + + var handleSelectStart = function handleSelectStart(e) { + return _this3.handleSelectStart(e); + }; + + node.setAttribute('draggable', 'true'); + node.addEventListener('dragstart', handleDragStart); + node.addEventListener('selectstart', handleSelectStart); + return function () { + _this3.sourceNodes.delete(sourceId); + + _this3.sourceNodeOptions.delete(sourceId); + + node.removeEventListener('dragstart', handleDragStart); + node.removeEventListener('selectstart', handleSelectStart); + node.setAttribute('draggable', 'false'); + }; + } + }, { + key: "connectDropTarget", + value: function connectDropTarget(targetId, node) { + var _this4 = this; + + var handleDragEnter = function handleDragEnter(e) { + return _this4.handleDragEnter(e, targetId); + }; + + var handleDragOver = function handleDragOver(e) { + return _this4.handleDragOver(e, targetId); + }; + + var handleDrop = function handleDrop(e) { + return _this4.handleDrop(e, targetId); + }; + + node.addEventListener('dragenter', handleDragEnter); + node.addEventListener('dragover', handleDragOver); + node.addEventListener('drop', handleDrop); + return function () { + node.removeEventListener('dragenter', handleDragEnter); + node.removeEventListener('dragover', handleDragOver); + node.removeEventListener('drop', handleDrop); + }; + } + }, { + key: "addEventListeners", + value: function addEventListeners(target) { + // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813 + if (!target.addEventListener) { + return; + } + + target.addEventListener('dragstart', this.handleTopDragStart); + target.addEventListener('dragstart', this.handleTopDragStartCapture, true); + target.addEventListener('dragend', this.handleTopDragEndCapture, true); + target.addEventListener('dragenter', this.handleTopDragEnter); + target.addEventListener('dragenter', this.handleTopDragEnterCapture, true); + target.addEventListener('dragleave', this.handleTopDragLeaveCapture, true); + target.addEventListener('dragover', this.handleTopDragOver); + target.addEventListener('dragover', this.handleTopDragOverCapture, true); + target.addEventListener('drop', this.handleTopDrop); + target.addEventListener('drop', this.handleTopDropCapture, true); + } + }, { + key: "removeEventListeners", + value: function removeEventListeners(target) { + // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813 + if (!target.removeEventListener) { + return; + } + + target.removeEventListener('dragstart', this.handleTopDragStart); + target.removeEventListener('dragstart', this.handleTopDragStartCapture, true); + target.removeEventListener('dragend', this.handleTopDragEndCapture, true); + target.removeEventListener('dragenter', this.handleTopDragEnter); + target.removeEventListener('dragenter', this.handleTopDragEnterCapture, true); + target.removeEventListener('dragleave', this.handleTopDragLeaveCapture, true); + target.removeEventListener('dragover', this.handleTopDragOver); + target.removeEventListener('dragover', this.handleTopDragOverCapture, true); + target.removeEventListener('drop', this.handleTopDrop); + target.removeEventListener('drop', this.handleTopDropCapture, true); + } + }, { + key: "getCurrentSourceNodeOptions", + value: function getCurrentSourceNodeOptions() { + var sourceId = this.monitor.getSourceId(); + var sourceNodeOptions = this.sourceNodeOptions.get(sourceId); + return _objectSpread({ + dropEffect: this.altKeyPressed ? 'copy' : 'move' + }, sourceNodeOptions || {}); + } + }, { + key: "getCurrentDropEffect", + value: function getCurrentDropEffect() { + if (this.isDraggingNativeItem()) { + // It makes more sense to default to 'copy' for native resources + return 'copy'; + } + + return this.getCurrentSourceNodeOptions().dropEffect; + } + }, { + key: "getCurrentSourcePreviewNodeOptions", + value: function getCurrentSourcePreviewNodeOptions() { + var sourceId = this.monitor.getSourceId(); + var sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId); + return _objectSpread({ + anchorX: 0.5, + anchorY: 0.5, + captureDraggingState: false + }, sourcePreviewNodeOptions || {}); + } + }, { + key: "isDraggingNativeItem", + value: function isDraggingNativeItem() { + var itemType = this.monitor.getItemType(); + return Object.keys(NativeTypes).some(function (key) { + return NativeTypes[key] === itemType; + }); + } + }, { + key: "beginDragNativeItem", + value: function beginDragNativeItem(type, dataTransfer) { + this.clearCurrentDragSourceNode(); + this.currentNativeSource = createNativeDragSource(type, dataTransfer); + this.currentNativeHandle = this.registry.addSource(type, this.currentNativeSource); + this.actions.beginDrag([this.currentNativeHandle]); + } + }, { + key: "setCurrentDragSourceNode", + value: function setCurrentDragSourceNode(node) { + var _this5 = this; + + this.clearCurrentDragSourceNode(); + this.currentDragSourceNode = node; // A timeout of > 0 is necessary to resolve Firefox issue referenced + // See: + // * https://github.com/react-dnd/react-dnd/pull/928 + // * https://github.com/react-dnd/react-dnd/issues/869 + + var MOUSE_MOVE_TIMEOUT = 1000; // Receiving a mouse event in the middle of a dragging operation + // means it has ended and the drag source node disappeared from DOM, + // so the browser didn't dispatch the dragend event. + // + // We need to wait before we start listening for mousemove events. + // This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event + // immediately in some browsers. + // + // See: + // * https://github.com/react-dnd/react-dnd/pull/928 + // * https://github.com/react-dnd/react-dnd/issues/869 + // + + this.mouseMoveTimeoutTimer = setTimeout(function () { + return _this5.window && _this5.window.addEventListener('mousemove', _this5.endDragIfSourceWasRemovedFromDOM, true); + }, MOUSE_MOVE_TIMEOUT); + } + }, { + key: "clearCurrentDragSourceNode", + value: function clearCurrentDragSourceNode() { + if (this.currentDragSourceNode) { + this.currentDragSourceNode = null; + + if (this.window) { + this.window.clearTimeout(this.mouseMoveTimeoutTimer || undefined); + this.window.removeEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true); + } + + this.mouseMoveTimeoutTimer = null; + return true; + } + + return false; + } + }, { + key: "handleDragStart", + value: function handleDragStart(e, sourceId) { + if (e.defaultPrevented) { + return; + } + + if (!this.dragStartSourceIds) { + this.dragStartSourceIds = []; + } + + this.dragStartSourceIds.unshift(sourceId); + } + }, { + key: "handleDragEnter", + value: function handleDragEnter(e, targetId) { + this.dragEnterTargetIds.unshift(targetId); + } + }, { + key: "handleDragOver", + value: function handleDragOver(e, targetId) { + if (this.dragOverTargetIds === null) { + this.dragOverTargetIds = []; + } + + this.dragOverTargetIds.unshift(targetId); + } + }, { + key: "handleDrop", + value: function handleDrop(e, targetId) { + this.dropTargetIds.unshift(targetId); + } + }, { + key: "window", + get: function get() { + return this.options.window; + } + }, { + key: "document", + get: function get() { + return this.options.document; + } + }]); + + return HTML5BackendImpl; +}(); + +var HTML5Backend = function createBackend(manager, context) { + return new HTML5BackendImpl(manager, context); +}; + +export { HTML5Backend }; diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd.js b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd.js new file mode 100644 index 00000000..af5d8471 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dnd.js @@ -0,0 +1,3109 @@ +import { r as react } from './common/index-ae389540.js'; + +var HandlerRole; + +(function (HandlerRole) { + HandlerRole["SOURCE"] = "SOURCE"; + HandlerRole["TARGET"] = "TARGET"; +})(HandlerRole || (HandlerRole = {})); + +function symbolObservablePonyfill(root) { + var result; + var Symbol = root.Symbol; + + if (typeof Symbol === 'function') { + if (Symbol.observable) { + result = Symbol.observable; + } else { + result = Symbol('observable'); + Symbol.observable = result; + } + } else { + result = '@@observable'; + } + + return result; +} + +/* global window */ + +var root; + +if (typeof self !== 'undefined') { + root = self; +} else if (typeof window !== 'undefined') { + root = window; +} else if (typeof global !== 'undefined') { + root = global; +} else if (typeof module !== 'undefined') { + root = module; +} else { + root = Function('return this')(); +} + +var result = symbolObservablePonyfill(root); + +/** + * These are private action types reserved by Redux. + * For any unknown actions, you must return the current state. + * If the current state is undefined, you must return the initial state. + * Do not reference these action types directly in your code. + */ +var randomString = function randomString() { + return Math.random().toString(36).substring(7).split('').join('.'); +}; + +var ActionTypes = { + INIT: "@@redux/INIT" + randomString(), + REPLACE: "@@redux/REPLACE" + randomString(), + PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() { + return "@@redux/PROBE_UNKNOWN_ACTION" + randomString(); + } +}; + +/** + * @param {any} obj The object to inspect. + * @returns {boolean} True if the argument appears to be a plain object. + */ +function isPlainObject(obj) { + if (typeof obj !== 'object' || obj === null) return false; + var proto = obj; + + while (Object.getPrototypeOf(proto) !== null) { + proto = Object.getPrototypeOf(proto); + } + + return Object.getPrototypeOf(obj) === proto; +} + +/** + * Creates a Redux store that holds the state tree. + * The only way to change the data in the store is to call `dispatch()` on it. + * + * There should only be a single store in your app. To specify how different + * parts of the state tree respond to actions, you may combine several reducers + * into a single reducer function by using `combineReducers`. + * + * @param {Function} reducer A function that returns the next state tree, given + * the current state tree and the action to handle. + * + * @param {any} [preloadedState] The initial state. You may optionally specify it + * to hydrate the state from the server in universal apps, or to restore a + * previously serialized user session. + * If you use `combineReducers` to produce the root reducer function, this must be + * an object with the same shape as `combineReducers` keys. + * + * @param {Function} [enhancer] The store enhancer. You may optionally specify it + * to enhance the store with third-party capabilities such as middleware, + * time travel, persistence, etc. The only store enhancer that ships with Redux + * is `applyMiddleware()`. + * + * @returns {Store} A Redux store that lets you read the state, dispatch actions + * and subscribe to changes. + */ + +function createStore(reducer, preloadedState, enhancer) { + var _ref2; + + if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') { + throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.'); + } + + if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { + enhancer = preloadedState; + preloadedState = undefined; + } + + if (typeof enhancer !== 'undefined') { + if (typeof enhancer !== 'function') { + throw new Error('Expected the enhancer to be a function.'); + } + + return enhancer(createStore)(reducer, preloadedState); + } + + if (typeof reducer !== 'function') { + throw new Error('Expected the reducer to be a function.'); + } + + var currentReducer = reducer; + var currentState = preloadedState; + var currentListeners = []; + var nextListeners = currentListeners; + var isDispatching = false; + /** + * This makes a shallow copy of currentListeners so we can use + * nextListeners as a temporary list while dispatching. + * + * This prevents any bugs around consumers calling + * subscribe/unsubscribe in the middle of a dispatch. + */ + + function ensureCanMutateNextListeners() { + if (nextListeners === currentListeners) { + nextListeners = currentListeners.slice(); + } + } + /** + * Reads the state tree managed by the store. + * + * @returns {any} The current state tree of your application. + */ + + + function getState() { + if (isDispatching) { + throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.'); + } + + return currentState; + } + /** + * Adds a change listener. It will be called any time an action is dispatched, + * and some part of the state tree may potentially have changed. You may then + * call `getState()` to read the current state tree inside the callback. + * + * You may call `dispatch()` from a change listener, with the following + * caveats: + * + * 1. The subscriptions are snapshotted just before every `dispatch()` call. + * If you subscribe or unsubscribe while the listeners are being invoked, this + * will not have any effect on the `dispatch()` that is currently in progress. + * However, the next `dispatch()` call, whether nested or not, will use a more + * recent snapshot of the subscription list. + * + * 2. The listener should not expect to see all state changes, as the state + * might have been updated multiple times during a nested `dispatch()` before + * the listener is called. It is, however, guaranteed that all subscribers + * registered before the `dispatch()` started will be called with the latest + * state by the time it exits. + * + * @param {Function} listener A callback to be invoked on every dispatch. + * @returns {Function} A function to remove this change listener. + */ + + + function subscribe(listener) { + if (typeof listener !== 'function') { + throw new Error('Expected the listener to be a function.'); + } + + if (isDispatching) { + throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribelistener for more details.'); + } + + var isSubscribed = true; + ensureCanMutateNextListeners(); + nextListeners.push(listener); + return function unsubscribe() { + if (!isSubscribed) { + return; + } + + if (isDispatching) { + throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribelistener for more details.'); + } + + isSubscribed = false; + ensureCanMutateNextListeners(); + var index = nextListeners.indexOf(listener); + nextListeners.splice(index, 1); + currentListeners = null; + }; + } + /** + * Dispatches an action. It is the only way to trigger a state change. + * + * The `reducer` function, used to create the store, will be called with the + * current state tree and the given `action`. Its return value will + * be considered the **next** state of the tree, and the change listeners + * will be notified. + * + * The base implementation only supports plain object actions. If you want to + * dispatch a Promise, an Observable, a thunk, or something else, you need to + * wrap your store creating function into the corresponding middleware. For + * example, see the documentation for the `redux-thunk` package. Even the + * middleware will eventually dispatch plain object actions using this method. + * + * @param {Object} action A plain object representing “what changed”. It is + * a good idea to keep actions serializable so you can record and replay user + * sessions, or use the time travelling `redux-devtools`. An action must have + * a `type` property which may not be `undefined`. It is a good idea to use + * string constants for action types. + * + * @returns {Object} For convenience, the same action object you dispatched. + * + * Note that, if you use a custom middleware, it may wrap `dispatch()` to + * return something else (for example, a Promise you can await). + */ + + + function dispatch(action) { + if (!isPlainObject(action)) { + throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); + } + + if (typeof action.type === 'undefined') { + throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); + } + + if (isDispatching) { + throw new Error('Reducers may not dispatch actions.'); + } + + try { + isDispatching = true; + currentState = currentReducer(currentState, action); + } finally { + isDispatching = false; + } + + var listeners = currentListeners = nextListeners; + + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + listener(); + } + + return action; + } + /** + * Replaces the reducer currently used by the store to calculate the state. + * + * You might need this if your app implements code splitting and you want to + * load some of the reducers dynamically. You might also need this if you + * implement a hot reloading mechanism for Redux. + * + * @param {Function} nextReducer The reducer for the store to use instead. + * @returns {void} + */ + + + function replaceReducer(nextReducer) { + if (typeof nextReducer !== 'function') { + throw new Error('Expected the nextReducer to be a function.'); + } + + currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT. + // Any reducers that existed in both the new and old rootReducer + // will receive the previous state. This effectively populates + // the new state tree with any relevant data from the old one. + + dispatch({ + type: ActionTypes.REPLACE + }); + } + /** + * Interoperability point for observable/reactive libraries. + * @returns {observable} A minimal observable of state changes. + * For more information, see the observable proposal: + * https://github.com/tc39/proposal-observable + */ + + + function observable() { + var _ref; + + var outerSubscribe = subscribe; + return _ref = { + /** + * The minimal observable subscription method. + * @param {Object} observer Any object that can be used as an observer. + * The observer object should have a `next` method. + * @returns {subscription} An object with an `unsubscribe` method that can + * be used to unsubscribe the observable from the store, and prevent further + * emission of values from the observable. + */ + subscribe: function subscribe(observer) { + if (typeof observer !== 'object' || observer === null) { + throw new TypeError('Expected the observer to be an object.'); + } + + function observeState() { + if (observer.next) { + observer.next(getState()); + } + } + + observeState(); + var unsubscribe = outerSubscribe(observeState); + return { + unsubscribe: unsubscribe + }; + } + }, _ref[result] = function () { + return this; + }, _ref; + } // When a store is created, an "INIT" action is dispatched so that every + // reducer returns their initial state. This effectively populates + // the initial state tree. + + + dispatch({ + type: ActionTypes.INIT + }); + return _ref2 = { + dispatch: dispatch, + subscribe: subscribe, + getState: getState, + replaceReducer: replaceReducer + }, _ref2[result] = observable, _ref2; +} + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ +function invariant(condition, format) { + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + if (!condition) { + var error; + + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + + throw error; + } +} + +var INIT_COORDS = 'dnd-core/INIT_COORDS'; +var BEGIN_DRAG = 'dnd-core/BEGIN_DRAG'; +var PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE'; +var HOVER = 'dnd-core/HOVER'; +var DROP = 'dnd-core/DROP'; +var END_DRAG = 'dnd-core/END_DRAG'; + +function setClientOffset(clientOffset, sourceClientOffset) { + return { + type: INIT_COORDS, + payload: { + sourceClientOffset: sourceClientOffset || null, + clientOffset: clientOffset || null + } + }; +} + +function _typeof$3(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$3(obj); } + +// cheap lodash replacements + +/** + * drop-in replacement for _.get + * @param obj + * @param path + * @param defaultValue + */ +function get(obj, path, defaultValue) { + return path.split('.').reduce(function (a, c) { + return a && a[c] ? a[c] : defaultValue || null; + }, obj); +} +/** + * drop-in replacement for _.without + */ + +function without(items, item) { + return items.filter(function (i) { + return i !== item; + }); +} +/** + * drop-in replacement for _.isString + * @param input + */ + +function isObject(input) { + return _typeof$3(input) === 'object'; +} +/** + * repalcement for _.xor + * @param itemsA + * @param itemsB + */ + +function xor(itemsA, itemsB) { + var map = new Map(); + + var insertItem = function insertItem(item) { + map.set(item, map.has(item) ? map.get(item) + 1 : 1); + }; + + itemsA.forEach(insertItem); + itemsB.forEach(insertItem); + var result = []; + map.forEach(function (count, key) { + if (count === 1) { + result.push(key); + } + }); + return result; +} +/** + * replacement for _.intersection + * @param itemsA + * @param itemsB + */ + +function intersection(itemsA, itemsB) { + return itemsA.filter(function (t) { + return itemsB.indexOf(t) > -1; + }); +} + +var ResetCoordinatesAction = { + type: INIT_COORDS, + payload: { + clientOffset: null, + sourceClientOffset: null + } +}; +function createBeginDrag(manager) { + return function beginDrag() { + var sourceIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + publishSource: true + }; + var _options$publishSourc = options.publishSource, + publishSource = _options$publishSourc === void 0 ? true : _options$publishSourc, + clientOffset = options.clientOffset, + getSourceClientOffset = options.getSourceClientOffset; + var monitor = manager.getMonitor(); + var registry = manager.getRegistry(); // Initialize the coordinates using the client offset + + manager.dispatch(setClientOffset(clientOffset)); + verifyInvariants$1(sourceIds, monitor, registry); // Get the draggable source + + var sourceId = getDraggableSource(sourceIds, monitor); + + if (sourceId === null) { + manager.dispatch(ResetCoordinatesAction); + return; + } // Get the source client offset + + + var sourceClientOffset = null; + + if (clientOffset) { + if (!getSourceClientOffset) { + throw new Error('getSourceClientOffset must be defined'); + } + + verifyGetSourceClientOffsetIsFunction(getSourceClientOffset); + sourceClientOffset = getSourceClientOffset(sourceId); + } // Initialize the full coordinates + + + manager.dispatch(setClientOffset(clientOffset, sourceClientOffset)); + var source = registry.getSource(sourceId); + var item = source.beginDrag(monitor, sourceId); + verifyItemIsObject(item); + registry.pinSource(sourceId); + var itemType = registry.getSourceType(sourceId); + return { + type: BEGIN_DRAG, + payload: { + itemType: itemType, + item: item, + sourceId: sourceId, + clientOffset: clientOffset || null, + sourceClientOffset: sourceClientOffset || null, + isSourcePublic: !!publishSource + } + }; + }; +} + +function verifyInvariants$1(sourceIds, monitor, registry) { + invariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.'); + sourceIds.forEach(function (sourceId) { + invariant(registry.getSource(sourceId), 'Expected sourceIds to be registered.'); + }); +} + +function verifyGetSourceClientOffsetIsFunction(getSourceClientOffset) { + invariant(typeof getSourceClientOffset === 'function', 'When clientOffset is provided, getSourceClientOffset must be a function.'); +} + +function verifyItemIsObject(item) { + invariant(isObject(item), 'Item must be an object.'); +} + +function getDraggableSource(sourceIds, monitor) { + var sourceId = null; + + for (var i = sourceIds.length - 1; i >= 0; i--) { + if (monitor.canDragSource(sourceIds[i])) { + sourceId = sourceIds[i]; + break; + } + } + + return sourceId; +} + +function createPublishDragSource(manager) { + return function publishDragSource() { + var monitor = manager.getMonitor(); + + if (monitor.isDragging()) { + return { + type: PUBLISH_DRAG_SOURCE + }; + } + }; +} + +function matchesType(targetType, draggedItemType) { + if (draggedItemType === null) { + return targetType === null; + } + + return Array.isArray(targetType) ? targetType.some(function (t) { + return t === draggedItemType; + }) : targetType === draggedItemType; +} + +function createHover(manager) { + return function hover(targetIdsArg) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + clientOffset = _ref.clientOffset; + + verifyTargetIdsIsArray(targetIdsArg); + var targetIds = targetIdsArg.slice(0); + var monitor = manager.getMonitor(); + var registry = manager.getRegistry(); + checkInvariants(targetIds, monitor, registry); + var draggedItemType = monitor.getItemType(); + removeNonMatchingTargetIds(targetIds, registry, draggedItemType); + hoverAllTargets(targetIds, monitor, registry); + return { + type: HOVER, + payload: { + targetIds: targetIds, + clientOffset: clientOffset || null + } + }; + }; +} + +function verifyTargetIdsIsArray(targetIdsArg) { + invariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.'); +} + +function checkInvariants(targetIds, monitor, registry) { + invariant(monitor.isDragging(), 'Cannot call hover while not dragging.'); + invariant(!monitor.didDrop(), 'Cannot call hover after drop.'); + + for (var i = 0; i < targetIds.length; i++) { + var targetId = targetIds[i]; + invariant(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.'); + var target = registry.getTarget(targetId); + invariant(target, 'Expected targetIds to be registered.'); + } +} + +function removeNonMatchingTargetIds(targetIds, registry, draggedItemType) { + // Remove those targetIds that don't match the targetType. This + // fixes shallow isOver which would only be non-shallow because of + // non-matching targets. + for (var i = targetIds.length - 1; i >= 0; i--) { + var targetId = targetIds[i]; + var targetType = registry.getTargetType(targetId); + + if (!matchesType(targetType, draggedItemType)) { + targetIds.splice(i, 1); + } + } +} + +function hoverAllTargets(targetIds, monitor, registry) { + // Finally call hover on all matching targets. + targetIds.forEach(function (targetId) { + var target = registry.getTarget(targetId); + target.hover(monitor, targetId); + }); +} + +function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { _defineProperty$3(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty$3(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function createDrop(manager) { + return function drop() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var monitor = manager.getMonitor(); + var registry = manager.getRegistry(); + verifyInvariants(monitor); + var targetIds = getDroppableTargets(monitor); // Multiple actions are dispatched here, which is why this doesn't return an action + + targetIds.forEach(function (targetId, index) { + var dropResult = determineDropResult(targetId, index, registry, monitor); + var action = { + type: DROP, + payload: { + dropResult: _objectSpread$3(_objectSpread$3({}, options), dropResult) + } + }; + manager.dispatch(action); + }); + }; +} + +function verifyInvariants(monitor) { + invariant(monitor.isDragging(), 'Cannot call drop while not dragging.'); + invariant(!monitor.didDrop(), 'Cannot call drop twice during one drag operation.'); +} + +function determineDropResult(targetId, index, registry, monitor) { + var target = registry.getTarget(targetId); + var dropResult = target ? target.drop(monitor, targetId) : undefined; + verifyDropResultType(dropResult); + + if (typeof dropResult === 'undefined') { + dropResult = index === 0 ? {} : monitor.getDropResult(); + } + + return dropResult; +} + +function verifyDropResultType(dropResult) { + invariant(typeof dropResult === 'undefined' || isObject(dropResult), 'Drop result must either be an object or undefined.'); +} + +function getDroppableTargets(monitor) { + var targetIds = monitor.getTargetIds().filter(monitor.canDropOnTarget, monitor); + targetIds.reverse(); + return targetIds; +} + +function createEndDrag(manager) { + return function endDrag() { + var monitor = manager.getMonitor(); + var registry = manager.getRegistry(); + verifyIsDragging(monitor); + var sourceId = monitor.getSourceId(); + + if (sourceId != null) { + var source = registry.getSource(sourceId, true); + source.endDrag(monitor, sourceId); + registry.unpinSource(); + } + + return { + type: END_DRAG + }; + }; +} + +function verifyIsDragging(monitor) { + invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.'); +} + +function createDragDropActions(manager) { + return { + beginDrag: createBeginDrag(manager), + publishDragSource: createPublishDragSource(manager), + hover: createHover(manager), + drop: createDrop(manager), + endDrag: createEndDrag(manager) + }; +} + +var strictEquality = function strictEquality(a, b) { + return a === b; +}; +/** + * Determine if two cartesian coordinate offsets are equal + * @param offsetA + * @param offsetB + */ + +function areCoordsEqual(offsetA, offsetB) { + if (!offsetA && !offsetB) { + return true; + } else if (!offsetA || !offsetB) { + return false; + } else { + return offsetA.x === offsetB.x && offsetA.y === offsetB.y; + } +} +/** + * Determines if two arrays of items are equal + * @param a The first array of items + * @param b The second array of items + */ + +function areArraysEqual(a, b) { + var isEqual = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : strictEquality; + + if (a.length !== b.length) { + return false; + } + + for (var i = 0; i < a.length; ++i) { + if (!isEqual(a[i], b[i])) { + return false; + } + } + + return true; +} + +function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty$2(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +var initialState$1 = { + initialSourceClientOffset: null, + initialClientOffset: null, + clientOffset: null +}; +function reduce$5() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1; + var action = arguments.length > 1 ? arguments[1] : undefined; + var payload = action.payload; + + switch (action.type) { + case INIT_COORDS: + case BEGIN_DRAG: + return { + initialSourceClientOffset: payload.sourceClientOffset, + initialClientOffset: payload.clientOffset, + clientOffset: payload.clientOffset + }; + + case HOVER: + if (areCoordsEqual(state.clientOffset, payload.clientOffset)) { + return state; + } + + return _objectSpread$2(_objectSpread$2({}, state), {}, { + clientOffset: payload.clientOffset + }); + + case END_DRAG: + case DROP: + return initialState$1; + + default: + return state; + } +} + +var ADD_SOURCE = 'dnd-core/ADD_SOURCE'; +var ADD_TARGET = 'dnd-core/ADD_TARGET'; +var REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE'; +var REMOVE_TARGET = 'dnd-core/REMOVE_TARGET'; +function addSource(sourceId) { + return { + type: ADD_SOURCE, + payload: { + sourceId: sourceId + } + }; +} +function addTarget(targetId) { + return { + type: ADD_TARGET, + payload: { + targetId: targetId + } + }; +} +function removeSource(sourceId) { + return { + type: REMOVE_SOURCE, + payload: { + sourceId: sourceId + } + }; +} +function removeTarget(targetId) { + return { + type: REMOVE_TARGET, + payload: { + targetId: targetId + } + }; +} + +function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +var initialState = { + itemType: null, + item: null, + sourceId: null, + targetIds: [], + dropResult: null, + didDrop: false, + isSourcePublic: null +}; +function reduce$4() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments.length > 1 ? arguments[1] : undefined; + var payload = action.payload; + + switch (action.type) { + case BEGIN_DRAG: + return _objectSpread$1(_objectSpread$1({}, state), {}, { + itemType: payload.itemType, + item: payload.item, + sourceId: payload.sourceId, + isSourcePublic: payload.isSourcePublic, + dropResult: null, + didDrop: false + }); + + case PUBLISH_DRAG_SOURCE: + return _objectSpread$1(_objectSpread$1({}, state), {}, { + isSourcePublic: true + }); + + case HOVER: + return _objectSpread$1(_objectSpread$1({}, state), {}, { + targetIds: payload.targetIds + }); + + case REMOVE_TARGET: + if (state.targetIds.indexOf(payload.targetId) === -1) { + return state; + } + + return _objectSpread$1(_objectSpread$1({}, state), {}, { + targetIds: without(state.targetIds, payload.targetId) + }); + + case DROP: + return _objectSpread$1(_objectSpread$1({}, state), {}, { + dropResult: payload.dropResult, + didDrop: true, + targetIds: [] + }); + + case END_DRAG: + return _objectSpread$1(_objectSpread$1({}, state), {}, { + itemType: null, + item: null, + sourceId: null, + dropResult: null, + didDrop: false, + isSourcePublic: null, + targetIds: [] + }); + + default: + return state; + } +} + +function reduce$3() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var action = arguments.length > 1 ? arguments[1] : undefined; + + switch (action.type) { + case ADD_SOURCE: + case ADD_TARGET: + return state + 1; + + case REMOVE_SOURCE: + case REMOVE_TARGET: + return state - 1; + + default: + return state; + } +} + +var NONE = []; +var ALL = []; +NONE.__IS_NONE__ = true; +ALL.__IS_ALL__ = true; +/** + * Determines if the given handler IDs are dirty or not. + * + * @param dirtyIds The set of dirty handler ids + * @param handlerIds The set of handler ids to check + */ + +function areDirty(dirtyIds, handlerIds) { + if (dirtyIds === NONE) { + return false; + } + + if (dirtyIds === ALL || typeof handlerIds === 'undefined') { + return true; + } + + var commonIds = intersection(handlerIds, dirtyIds); + return commonIds.length > 0; +} + +function reduce$2() { + + var action = arguments.length > 1 ? arguments[1] : undefined; + + switch (action.type) { + case HOVER: + break; + + case ADD_SOURCE: + case ADD_TARGET: + case REMOVE_TARGET: + case REMOVE_SOURCE: + return NONE; + + case BEGIN_DRAG: + case PUBLISH_DRAG_SOURCE: + case END_DRAG: + case DROP: + default: + return ALL; + } + + var _action$payload = action.payload, + _action$payload$targe = _action$payload.targetIds, + targetIds = _action$payload$targe === void 0 ? [] : _action$payload$targe, + _action$payload$prevT = _action$payload.prevTargetIds, + prevTargetIds = _action$payload$prevT === void 0 ? [] : _action$payload$prevT; + var result = xor(targetIds, prevTargetIds); + var didChange = result.length > 0 || !areArraysEqual(targetIds, prevTargetIds); + + if (!didChange) { + return NONE; + } // Check the target ids at the innermost position. If they are valid, add them + // to the result + + + var prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1]; + var innermostTargetId = targetIds[targetIds.length - 1]; + + if (prevInnermostTargetId !== innermostTargetId) { + if (prevInnermostTargetId) { + result.push(prevInnermostTargetId); + } + + if (innermostTargetId) { + result.push(innermostTargetId); + } + } + + return result; +} + +function reduce$1() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return state + 1; +} + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function reduce() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var action = arguments.length > 1 ? arguments[1] : undefined; + return { + dirtyHandlerIds: reduce$2(state.dirtyHandlerIds, { + type: action.type, + payload: _objectSpread(_objectSpread({}, action.payload), {}, { + prevTargetIds: get(state, 'dragOperation.targetIds', []) + }) + }), + dragOffset: reduce$5(state.dragOffset, action), + refCount: reduce$3(state.refCount, action), + dragOperation: reduce$4(state.dragOperation, action), + stateId: reduce$1(state.stateId) + }; +} + +/** + * Coordinate addition + * @param a The first coordinate + * @param b The second coordinate + */ +function add(a, b) { + return { + x: a.x + b.x, + y: a.y + b.y + }; +} +/** + * Coordinate subtraction + * @param a The first coordinate + * @param b The second coordinate + */ + +function subtract(a, b) { + return { + x: a.x - b.x, + y: a.y - b.y + }; +} +/** + * Returns the cartesian distance of the drag source component's position, based on its position + * at the time when the current drag operation has started, and the movement difference. + * + * Returns null if no item is being dragged. + * + * @param state The offset state to compute from + */ + +function getSourceClientOffset(state) { + var clientOffset = state.clientOffset, + initialClientOffset = state.initialClientOffset, + initialSourceClientOffset = state.initialSourceClientOffset; + + if (!clientOffset || !initialClientOffset || !initialSourceClientOffset) { + return null; + } + + return subtract(add(clientOffset, initialSourceClientOffset), initialClientOffset); +} +/** + * Determines the x,y offset between the client offset and the initial client offset + * + * @param state The offset state to compute from + */ + +function getDifferenceFromInitialOffset(state) { + var clientOffset = state.clientOffset, + initialClientOffset = state.initialClientOffset; + + if (!clientOffset || !initialClientOffset) { + return null; + } + + return subtract(clientOffset, initialClientOffset); +} + +function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$6(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$6(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$6(Constructor.prototype, protoProps); if (staticProps) _defineProperties$6(Constructor, staticProps); return Constructor; } +var DragDropMonitorImpl = /*#__PURE__*/function () { + function DragDropMonitorImpl(store, registry) { + _classCallCheck$6(this, DragDropMonitorImpl); + + this.store = store; + this.registry = registry; + } + + _createClass$6(DragDropMonitorImpl, [{ + key: "subscribeToStateChange", + value: function subscribeToStateChange(listener) { + var _this = this; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + handlerIds: undefined + }; + var handlerIds = options.handlerIds; + invariant(typeof listener === 'function', 'listener must be a function.'); + invariant(typeof handlerIds === 'undefined' || Array.isArray(handlerIds), 'handlerIds, when specified, must be an array of strings.'); + var prevStateId = this.store.getState().stateId; + + var handleChange = function handleChange() { + var state = _this.store.getState(); + + var currentStateId = state.stateId; + + try { + var canSkipListener = currentStateId === prevStateId || currentStateId === prevStateId + 1 && !areDirty(state.dirtyHandlerIds, handlerIds); + + if (!canSkipListener) { + listener(); + } + } finally { + prevStateId = currentStateId; + } + }; + + return this.store.subscribe(handleChange); + } + }, { + key: "subscribeToOffsetChange", + value: function subscribeToOffsetChange(listener) { + var _this2 = this; + + invariant(typeof listener === 'function', 'listener must be a function.'); + var previousState = this.store.getState().dragOffset; + + var handleChange = function handleChange() { + var nextState = _this2.store.getState().dragOffset; + + if (nextState === previousState) { + return; + } + + previousState = nextState; + listener(); + }; + + return this.store.subscribe(handleChange); + } + }, { + key: "canDragSource", + value: function canDragSource(sourceId) { + if (!sourceId) { + return false; + } + + var source = this.registry.getSource(sourceId); + invariant(source, 'Expected to find a valid source.'); + + if (this.isDragging()) { + return false; + } + + return source.canDrag(this, sourceId); + } + }, { + key: "canDropOnTarget", + value: function canDropOnTarget(targetId) { + // undefined on initial render + if (!targetId) { + return false; + } + + var target = this.registry.getTarget(targetId); + invariant(target, 'Expected to find a valid target.'); + + if (!this.isDragging() || this.didDrop()) { + return false; + } + + var targetType = this.registry.getTargetType(targetId); + var draggedItemType = this.getItemType(); + return matchesType(targetType, draggedItemType) && target.canDrop(this, targetId); + } + }, { + key: "isDragging", + value: function isDragging() { + return Boolean(this.getItemType()); + } + }, { + key: "isDraggingSource", + value: function isDraggingSource(sourceId) { + // undefined on initial render + if (!sourceId) { + return false; + } + + var source = this.registry.getSource(sourceId, true); + invariant(source, 'Expected to find a valid source.'); + + if (!this.isDragging() || !this.isSourcePublic()) { + return false; + } + + var sourceType = this.registry.getSourceType(sourceId); + var draggedItemType = this.getItemType(); + + if (sourceType !== draggedItemType) { + return false; + } + + return source.isDragging(this, sourceId); + } + }, { + key: "isOverTarget", + value: function isOverTarget(targetId) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shallow: false + }; + + // undefined on initial render + if (!targetId) { + return false; + } + + var shallow = options.shallow; + + if (!this.isDragging()) { + return false; + } + + var targetType = this.registry.getTargetType(targetId); + var draggedItemType = this.getItemType(); + + if (draggedItemType && !matchesType(targetType, draggedItemType)) { + return false; + } + + var targetIds = this.getTargetIds(); + + if (!targetIds.length) { + return false; + } + + var index = targetIds.indexOf(targetId); + + if (shallow) { + return index === targetIds.length - 1; + } else { + return index > -1; + } + } + }, { + key: "getItemType", + value: function getItemType() { + return this.store.getState().dragOperation.itemType; + } + }, { + key: "getItem", + value: function getItem() { + return this.store.getState().dragOperation.item; + } + }, { + key: "getSourceId", + value: function getSourceId() { + return this.store.getState().dragOperation.sourceId; + } + }, { + key: "getTargetIds", + value: function getTargetIds() { + return this.store.getState().dragOperation.targetIds; + } + }, { + key: "getDropResult", + value: function getDropResult() { + return this.store.getState().dragOperation.dropResult; + } + }, { + key: "didDrop", + value: function didDrop() { + return this.store.getState().dragOperation.didDrop; + } + }, { + key: "isSourcePublic", + value: function isSourcePublic() { + return Boolean(this.store.getState().dragOperation.isSourcePublic); + } + }, { + key: "getInitialClientOffset", + value: function getInitialClientOffset() { + return this.store.getState().dragOffset.initialClientOffset; + } + }, { + key: "getInitialSourceClientOffset", + value: function getInitialSourceClientOffset() { + return this.store.getState().dragOffset.initialSourceClientOffset; + } + }, { + key: "getClientOffset", + value: function getClientOffset() { + return this.store.getState().dragOffset.clientOffset; + } + }, { + key: "getSourceClientOffset", + value: function getSourceClientOffset$1() { + return getSourceClientOffset(this.store.getState().dragOffset); + } + }, { + key: "getDifferenceFromInitialOffset", + value: function getDifferenceFromInitialOffset$1() { + return getDifferenceFromInitialOffset(this.store.getState().dragOffset); + } + }]); + + return DragDropMonitorImpl; +}(); + +var nextUniqueId = 0; +function getNextUniqueId() { + return nextUniqueId++; +} + +function _typeof$2(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$2(obj); } +function validateSourceContract(source) { + invariant(typeof source.canDrag === 'function', 'Expected canDrag to be a function.'); + invariant(typeof source.beginDrag === 'function', 'Expected beginDrag to be a function.'); + invariant(typeof source.endDrag === 'function', 'Expected endDrag to be a function.'); +} +function validateTargetContract(target) { + invariant(typeof target.canDrop === 'function', 'Expected canDrop to be a function.'); + invariant(typeof target.hover === 'function', 'Expected hover to be a function.'); + invariant(typeof target.drop === 'function', 'Expected beginDrag to be a function.'); +} +function validateType(type, allowArray) { + if (allowArray && Array.isArray(type)) { + type.forEach(function (t) { + return validateType(t, false); + }); + return; + } + + invariant(typeof type === 'string' || _typeof$2(type) === 'symbol', allowArray ? 'Type can only be a string, a symbol, or an array of either.' : 'Type can only be a string or a symbol.'); +} + +// Use the fastest means possible to execute a task in its own turn, with +// priority over other events including IO, animation, reflow, and redraw +// events in browsers. +// +// An exception thrown by a task will permanently interrupt the processing of +// subsequent tasks. The higher level `asap` function ensures that if an +// exception is thrown by a task, that the task queue will continue flushing as +// soon as possible, but if you use `rawAsap` directly, you are responsible to +// either ensure that no exceptions are thrown from your task, or to manually +// call `rawAsap.requestFlush` if an exception is thrown. +function rawAsap(task) { + if (!queue.length) { + requestFlush(); + } // Equivalent to push, but avoids a function call. + + + queue[queue.length] = task; +} +var queue = []; // Once a flush has been requested, no further calls to `requestFlush` are +// off a `flush` event as quickly as possible. `flush` will attempt to exhaust +// the event queue before yielding to the browser's own event loop. + +var requestFlush; // The position of the next task to execute in the task queue. This is +// preserved between calls to `flush` so that it can be resumed if +// a task throws an exception. + +var index = 0; // If a task schedules additional tasks recursively, the task queue can grow +// unbounded. To prevent memory exhaustion, the task queue will periodically +// truncate already-completed tasks. + +var capacity = 1024; // The flush function processes all tasks that have been scheduled with +// `rawAsap` unless and until one of those tasks throws an exception. +// If a task throws an exception, `flush` ensures that its state will remain +// consistent and will resume where it left off when called again. +// However, `flush` does not make any arrangements to be called again if an +// exception is thrown. + +function flush() { + while (index < queue.length) { + var currentIndex = index; // Advance the index before calling the task. This ensures that we will + // begin flushing on the next task the task throws an error. + + index = index + 1; + queue[currentIndex].call(); // Prevent leaking memory for long chains of recursive calls to `asap`. + // If we call `asap` within tasks scheduled by `asap`, the queue will + // grow, but to avoid an O(n) walk for every task we execute, we don't + // shift tasks off the queue after they have been executed. + // Instead, we periodically shift 1024 tasks off the queue. + + if (index > capacity) { + // Manually shift all values starting at the index back to the + // beginning of the queue. + for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { + queue[scan] = queue[scan + index]; + } + + queue.length -= index; + index = 0; + } + } + + queue.length = 0; + index = 0; +} // `requestFlush` is implemented using a strategy based on data collected from +// every available SauceLabs Selenium web driver worker at time of writing. +// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 +// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that +// have WebKitMutationObserver but not un-prefixed MutationObserver. +// Must use `global` or `self` instead of `window` to work in both frames and web +// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. + +/* globals self */ + + +var scope = typeof global !== 'undefined' ? global : self; +var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; // MutationObservers are desirable because they have high priority and work +// reliably everywhere they are implemented. +// They are implemented in all modern browsers. +// +// - Android 4-4.3 +// - Chrome 26-34 +// - Firefox 14-29 +// - Internet Explorer 11 +// - iPad Safari 6-7.1 +// - iPhone Safari 7-7.1 +// - Safari 6-7 + +if (typeof BrowserMutationObserver === 'function') { + requestFlush = makeRequestCallFromMutationObserver(flush); // MessageChannels are desirable because they give direct access to the HTML + // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera + // 11-12, and in web workers in many engines. + // Although message channels yield to any queued rendering and IO tasks, they + // would be better than imposing the 4ms delay of timers. + // However, they do not work reliably in Internet Explorer or Safari. + // Internet Explorer 10 is the only browser that has setImmediate but does + // not have MutationObservers. + // Although setImmediate yields to the browser's renderer, it would be + // preferrable to falling back to setTimeout since it does not have + // the minimum 4ms penalty. + // Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and + // Desktop to a lesser extent) that renders both setImmediate and + // MessageChannel useless for the purposes of ASAP. + // https://github.com/kriskowal/q/issues/396 + // Timers are implemented universally. + // We fall back to timers in workers in most engines, and in foreground + // contexts in the following browsers. + // However, note that even this simple case requires nuances to operate in a + // broad spectrum of browsers. + // + // - Firefox 3-13 + // - Internet Explorer 6-9 + // - iPad Safari 4.3 + // - Lynx 2.8.7 +} else { + requestFlush = makeRequestCallFromTimer(flush); +} // `requestFlush` requests that the high priority event queue be flushed as +// soon as possible. +// This is useful to prevent an error thrown in a task from stalling the event +// queue if the exception handled by Node.js’s +// `process.on("uncaughtException")` or by a domain. + + +rawAsap.requestFlush = requestFlush; // To request a high priority event, we induce a mutation observer by toggling +// the text of a text node between "1" and "-1". + +function makeRequestCallFromMutationObserver(callback) { + var toggle = 1; + var observer = new BrowserMutationObserver(callback); + var node = document.createTextNode(''); + observer.observe(node, { + characterData: true + }); + return function requestCall() { + toggle = -toggle; + node.data = toggle; + }; +} // The message channel technique was discovered by Malte Ubl and was the +// original foundation for this library. +// http://www.nonblocking.io/2011/06/windownexttick.html +// Safari 6.0.5 (at least) intermittently fails to create message ports on a +// page's first load. Thankfully, this version of Safari supports +// MutationObservers, so we don't need to fall back in that case. +// function makeRequestCallFromMessageChannel(callback) { +// var channel = new MessageChannel(); +// channel.port1.onmessage = callback; +// return function requestCall() { +// channel.port2.postMessage(0); +// }; +// } +// For reasons explained above, we are also unable to use `setImmediate` +// under any circumstances. +// Even if we were, there is another bug in Internet Explorer 10. +// It is not sufficient to assign `setImmediate` to `requestFlush` because +// `setImmediate` must be called *by name* and therefore must be wrapped in a +// closure. +// Never forget. +// function makeRequestCallFromSetImmediate(callback) { +// return function requestCall() { +// setImmediate(callback); +// }; +// } +// Safari 6.0 has a problem where timers will get lost while the user is +// scrolling. This problem does not impact ASAP because Safari 6.0 supports +// mutation observers, so that implementation is used instead. +// However, if we ever elect to use timers in Safari, the prevalent work-around +// is to add a scroll event listener that calls for a flush. +// `setTimeout` does not call the passed callback if the delay is less than +// approximately 7 in web workers in Firefox 8 through 18, and sometimes not +// even then. + + +function makeRequestCallFromTimer(callback) { + return function requestCall() { + // We dispatch a timeout with a specified delay of 0 for engines that + // can reliably accommodate that request. This will usually be snapped + // to a 4 milisecond delay, but once we're flushing, there's no delay + // between events. + var timeoutHandle = setTimeout(handleTimer, 0); // However, since this timer gets frequently dropped in Firefox + // workers, we enlist an interval handle that will try to fire + // an event 20 times per second until it succeeds. + + var intervalHandle = setInterval(handleTimer, 50); + + function handleTimer() { + // Whichever timer succeeds will cancel both timers and + // execute the callback. + clearTimeout(timeoutHandle); + clearInterval(intervalHandle); + callback(); + } + }; +} // This is for `asap.js` only. +// Its name will be periodically randomized to break any code that depends on +// its existence. + + +rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; // ASAP was originally a nextTick shim included in Q. This was factored out +// into this ASAP package. It was later adapted to RSVP which made further +// amendments. These decisions, particularly to marginalize MessageChannel and +// to capture the MutationObserver implementation in a closure, were integrated +// back into ASAP proper. +// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js + +// RawTasks are recycled to reduce GC churn. + +var freeTasks = []; // We queue errors to ensure they are thrown in right order (FIFO). +// Array-as-queue is good enough here, since we are just dealing with exceptions. + +var pendingErrors = []; +var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); + +function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } +} +/** + * Calls a task as soon as possible after returning, in its own event, with priority + * over other events like animation, reflow, and repaint. An error thrown from an + * event will not interrupt, nor even substantially slow down the processing of + * other events, but will be rather postponed to a lower priority event. + * @param {{call}} task A callable object, typically a function that takes no + * arguments. + */ + + +function asap(task) { + var rawTask; + + if (freeTasks.length) { + rawTask = freeTasks.pop(); + } else { + rawTask = new RawTask(); + } + + rawTask.task = task; + rawAsap(rawTask); +} // We wrap tasks with recyclable task objects. A task object implements +// `call`, just like a function. + +var RawTask = +/** @class */ +function () { + function RawTask() {} + + RawTask.prototype.call = function () { + try { + this.task.call(); + } catch (error) { + if (asap.onerror) { + // This hook exists purely for testing purposes. + // Its name will be periodically randomized to break any code that + // depends on its existence. + asap.onerror(error); + } else { + // In a web browser, exceptions are not fatal. However, to avoid + // slowing down the queue of pending tasks, we rethrow the error in a + // lower priority turn. + pendingErrors.push(error); + requestErrorThrow(); + } + } finally { + this.task = null; + freeTasks[freeTasks.length] = this; + } + }; + + return RawTask; +}(); + +function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$5(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$5(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$5(Constructor.prototype, protoProps); if (staticProps) _defineProperties$5(Constructor, staticProps); return Constructor; } + +function _slicedToArray$7(arr, i) { return _arrayWithHoles$7(arr) || _iterableToArrayLimit$7(arr, i) || _unsupportedIterableToArray$7(arr, i) || _nonIterableRest$7(); } + +function _nonIterableRest$7() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$7(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$7(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$7(o, minLen); } + +function _arrayLikeToArray$7(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$7(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$7(arr) { if (Array.isArray(arr)) return arr; } + +function getNextHandlerId(role) { + var id = getNextUniqueId().toString(); + + switch (role) { + case HandlerRole.SOURCE: + return "S".concat(id); + + case HandlerRole.TARGET: + return "T".concat(id); + + default: + throw new Error("Unknown Handler Role: ".concat(role)); + } +} + +function parseRoleFromHandlerId(handlerId) { + switch (handlerId[0]) { + case 'S': + return HandlerRole.SOURCE; + + case 'T': + return HandlerRole.TARGET; + + default: + invariant(false, "Cannot parse handler ID: ".concat(handlerId)); + } +} + +function mapContainsValue(map, searchValue) { + var entries = map.entries(); + var isDone = false; + + do { + var _entries$next = entries.next(), + done = _entries$next.done, + _entries$next$value = _slicedToArray$7(_entries$next.value, 2), + value = _entries$next$value[1]; + + if (value === searchValue) { + return true; + } + + isDone = !!done; + } while (!isDone); + + return false; +} + +var HandlerRegistryImpl = /*#__PURE__*/function () { + function HandlerRegistryImpl(store) { + _classCallCheck$5(this, HandlerRegistryImpl); + + this.types = new Map(); + this.dragSources = new Map(); + this.dropTargets = new Map(); + this.pinnedSourceId = null; + this.pinnedSource = null; + this.store = store; + } + + _createClass$5(HandlerRegistryImpl, [{ + key: "addSource", + value: function addSource$1(type, source) { + validateType(type); + validateSourceContract(source); + var sourceId = this.addHandler(HandlerRole.SOURCE, type, source); + this.store.dispatch(addSource(sourceId)); + return sourceId; + } + }, { + key: "addTarget", + value: function addTarget$1(type, target) { + validateType(type, true); + validateTargetContract(target); + var targetId = this.addHandler(HandlerRole.TARGET, type, target); + this.store.dispatch(addTarget(targetId)); + return targetId; + } + }, { + key: "containsHandler", + value: function containsHandler(handler) { + return mapContainsValue(this.dragSources, handler) || mapContainsValue(this.dropTargets, handler); + } + }, { + key: "getSource", + value: function getSource(sourceId) { + var includePinned = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + invariant(this.isSourceId(sourceId), 'Expected a valid source ID.'); + var isPinned = includePinned && sourceId === this.pinnedSourceId; + var source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId); + return source; + } + }, { + key: "getTarget", + value: function getTarget(targetId) { + invariant(this.isTargetId(targetId), 'Expected a valid target ID.'); + return this.dropTargets.get(targetId); + } + }, { + key: "getSourceType", + value: function getSourceType(sourceId) { + invariant(this.isSourceId(sourceId), 'Expected a valid source ID.'); + return this.types.get(sourceId); + } + }, { + key: "getTargetType", + value: function getTargetType(targetId) { + invariant(this.isTargetId(targetId), 'Expected a valid target ID.'); + return this.types.get(targetId); + } + }, { + key: "isSourceId", + value: function isSourceId(handlerId) { + var role = parseRoleFromHandlerId(handlerId); + return role === HandlerRole.SOURCE; + } + }, { + key: "isTargetId", + value: function isTargetId(handlerId) { + var role = parseRoleFromHandlerId(handlerId); + return role === HandlerRole.TARGET; + } + }, { + key: "removeSource", + value: function removeSource$1(sourceId) { + var _this = this; + + invariant(this.getSource(sourceId), 'Expected an existing source.'); + this.store.dispatch(removeSource(sourceId)); + asap(function () { + _this.dragSources.delete(sourceId); + + _this.types.delete(sourceId); + }); + } + }, { + key: "removeTarget", + value: function removeTarget$1(targetId) { + invariant(this.getTarget(targetId), 'Expected an existing target.'); + this.store.dispatch(removeTarget(targetId)); + this.dropTargets.delete(targetId); + this.types.delete(targetId); + } + }, { + key: "pinSource", + value: function pinSource(sourceId) { + var source = this.getSource(sourceId); + invariant(source, 'Expected an existing source.'); + this.pinnedSourceId = sourceId; + this.pinnedSource = source; + } + }, { + key: "unpinSource", + value: function unpinSource() { + invariant(this.pinnedSource, 'No source is pinned at the time.'); + this.pinnedSourceId = null; + this.pinnedSource = null; + } + }, { + key: "addHandler", + value: function addHandler(role, type, handler) { + var id = getNextHandlerId(role); + this.types.set(id, type); + + if (role === HandlerRole.SOURCE) { + this.dragSources.set(id, handler); + } else if (role === HandlerRole.TARGET) { + this.dropTargets.set(id, handler); + } + + return id; + } + }]); + + return HandlerRegistryImpl; +}(); + +function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$4(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$4(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$4(Constructor.prototype, protoProps); if (staticProps) _defineProperties$4(Constructor, staticProps); return Constructor; } + +function makeStoreInstance(debugMode) { + // TODO: if we ever make a react-native version of this, + // we'll need to consider how to pull off dev-tooling + var reduxDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__; + return createStore(reduce, debugMode && reduxDevTools && reduxDevTools({ + name: 'dnd-core', + instanceId: 'dnd-core' + })); +} + +var DragDropManagerImpl = /*#__PURE__*/function () { + function DragDropManagerImpl() { + var _this = this; + + var debugMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + _classCallCheck$4(this, DragDropManagerImpl); + + this.isSetUp = false; + + this.handleRefCountChange = function () { + var shouldSetUp = _this.store.getState().refCount > 0; + + if (_this.backend) { + if (shouldSetUp && !_this.isSetUp) { + _this.backend.setup(); + + _this.isSetUp = true; + } else if (!shouldSetUp && _this.isSetUp) { + _this.backend.teardown(); + + _this.isSetUp = false; + } + } + }; + + var store = makeStoreInstance(debugMode); + this.store = store; + this.monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store)); + store.subscribe(this.handleRefCountChange); + } + + _createClass$4(DragDropManagerImpl, [{ + key: "receiveBackend", + value: function receiveBackend(backend) { + this.backend = backend; + } + }, { + key: "getMonitor", + value: function getMonitor() { + return this.monitor; + } + }, { + key: "getBackend", + value: function getBackend() { + return this.backend; + } + }, { + key: "getRegistry", + value: function getRegistry() { + return this.monitor.registry; + } + }, { + key: "getActions", + value: function getActions() { + /* eslint-disable-next-line @typescript-eslint/no-this-alias */ + var manager = this; + var dispatch = this.store.dispatch; + + function bindActionCreator(actionCreator) { + return function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var action = actionCreator.apply(manager, args); + + if (typeof action !== 'undefined') { + dispatch(action); + } + }; + } + + var actions = createDragDropActions(this); + return Object.keys(actions).reduce(function (boundActions, key) { + var action = actions[key]; + boundActions[key] = bindActionCreator(action); + return boundActions; + }, {}); + } + }, { + key: "dispatch", + value: function dispatch(action) { + this.store.dispatch(action); + } + }]); + + return DragDropManagerImpl; +}(); + +function createDragDropManager(backendFactory, globalContext, backendOptions, debugMode) { + var manager = new DragDropManagerImpl(debugMode); + var backend = backendFactory(manager, globalContext, backendOptions); + manager.receiveBackend(backend); + return manager; +} + +/** + * Create the React Context + */ + +var DndContext = react.createContext({ + dragDropManager: undefined +}); +/** + * Creates the context object we're providing + * @param backend + * @param context + */ + +function createDndContext(backend, context, options, debugMode) { + return { + dragDropManager: createDragDropManager(backend, context, options, debugMode) + }; +} + +function _slicedToArray$6(arr, i) { return _arrayWithHoles$6(arr) || _iterableToArrayLimit$6(arr, i) || _unsupportedIterableToArray$6(arr, i) || _nonIterableRest$6(); } + +function _nonIterableRest$6() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$6(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$6(o, minLen); } + +function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$6(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$6(arr) { if (Array.isArray(arr)) return arr; } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } +var refCount = 0; +/** + * A React component that provides the React-DnD context + */ + +var DndProvider = react.memo(function (_ref) { + var children = _ref.children, + props = _objectWithoutProperties(_ref, ["children"]); + + var _getDndContextValue = getDndContextValue(props), + _getDndContextValue2 = _slicedToArray$6(_getDndContextValue, 2), + manager = _getDndContextValue2[0], + isGlobalInstance = _getDndContextValue2[1]; // memoized from props + + /** + * If the global context was used to store the DND context + * then where theres no more references to it we should + * clean it up to avoid memory leaks + */ + + + react.useEffect(function () { + if (isGlobalInstance) { + refCount++; + } + + return function () { + if (isGlobalInstance) { + refCount--; + + if (refCount === 0) { + var context = getGlobalContext(); + context[instanceSymbol] = null; + } + } + }; + }, []); + return react.createElement(DndContext.Provider, { + value: manager + }, children); +}); +DndProvider.displayName = 'DndProvider'; + +function getDndContextValue(props) { + if ('manager' in props) { + var _manager = { + dragDropManager: props.manager + }; + return [_manager, false]; + } + + var manager = createSingletonDndContext(props.backend, props.context, props.options, props.debugMode); + var isGlobalInstance = !props.context; + return [manager, isGlobalInstance]; +} + +var instanceSymbol = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__'); + +function createSingletonDndContext(backend) { + var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getGlobalContext(); + var options = arguments.length > 2 ? arguments[2] : undefined; + var debugMode = arguments.length > 3 ? arguments[3] : undefined; + var ctx = context; + + if (!ctx[instanceSymbol]) { + ctx[instanceSymbol] = createDndContext(backend, context, options, debugMode); + } + + return ctx[instanceSymbol]; +} + +function getGlobalContext() { + return typeof global !== 'undefined' ? global : window; +} + +var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? react.useLayoutEffect : react.useEffect; + +function shallowEqual(objA, objB, compare, compareContext) { + var compareResult = compare ? compare.call(compareContext, objA, objB) : void 0; + + if (compareResult !== void 0) { + return !!compareResult; + } + + if (objA === objB) { + return true; + } + + if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) { + return false; + } + + var keysA = Object.keys(objA); + var keysB = Object.keys(objB); + + if (keysA.length !== keysB.length) { + return false; + } + + var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B. + + for (var idx = 0; idx < keysA.length; idx++) { + var key = keysA[idx]; + + if (!bHasOwnProperty(key)) { + return false; + } + + var valueA = objA[key]; + var valueB = objB[key]; + compareResult = compare ? compare.call(compareContext, valueA, valueB, key) : void 0; + + if (compareResult === false || compareResult === void 0 && valueA !== valueB) { + return false; + } + } + + return true; +} + +function _slicedToArray$5(arr, i) { return _arrayWithHoles$5(arr) || _iterableToArrayLimit$5(arr, i) || _unsupportedIterableToArray$5(arr, i) || _nonIterableRest$5(); } + +function _nonIterableRest$5() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$5(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$5(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$5(o, minLen); } + +function _arrayLikeToArray$5(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$5(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$5(arr) { if (Array.isArray(arr)) return arr; } +/** + * + * @param monitor The monitor to collect state from + * @param collect The collecting function + * @param onUpdate A method to invoke when updates occur + */ + +function useCollector(monitor, collect, onUpdate) { + var _useState = react.useState(function () { + return collect(monitor); + }), + _useState2 = _slicedToArray$5(_useState, 2), + collected = _useState2[0], + setCollected = _useState2[1]; + + var updateCollected = react.useCallback(function () { + var nextValue = collect(monitor); + + if (!shallowEqual(collected, nextValue)) { + setCollected(nextValue); + + if (onUpdate) { + onUpdate(); + } + } + }, [collected, monitor, onUpdate]); // update the collected properties after the first render + // and the components are attached to dnd-core + + useIsomorphicLayoutEffect(updateCollected, []); + return [collected, updateCollected]; +} + +function _slicedToArray$4(arr, i) { return _arrayWithHoles$4(arr) || _iterableToArrayLimit$4(arr, i) || _unsupportedIterableToArray$4(arr, i) || _nonIterableRest$4(); } + +function _nonIterableRest$4() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$4(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$4(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$4(o, minLen); } + +function _arrayLikeToArray$4(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$4(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$4(arr) { if (Array.isArray(arr)) return arr; } +function useMonitorOutput(monitor, collect, onCollect) { + var _useCollector = useCollector(monitor, collect, onCollect), + _useCollector2 = _slicedToArray$4(_useCollector, 2), + collected = _useCollector2[0], + updateCollected = _useCollector2[1]; + + useIsomorphicLayoutEffect(function subscribeToMonitorStateChange() { + var handlerId = monitor.getHandlerId(); + + if (handlerId == null) { + return undefined; + } + + return monitor.subscribeToStateChange(updateCollected, { + handlerIds: [handlerId] + }); + }, [monitor, updateCollected]); + return collected; +} + +function registerTarget(type, target, manager) { + var registry = manager.getRegistry(); + var targetId = registry.addTarget(type, target); + return [targetId, function () { + return registry.removeTarget(targetId); + }]; +} +function registerSource(type, source, manager) { + var registry = manager.getRegistry(); + var sourceId = registry.addSource(type, source); + return [sourceId, function () { + return registry.removeSource(sourceId); + }]; +} + +/** + * A hook to retrieve the DragDropManager from Context + */ + +function useDragDropManager() { + var _useContext = react.useContext(DndContext), + dragDropManager = _useContext.dragDropManager; + + invariant(dragDropManager != null, 'Expected drag drop context'); + return dragDropManager; +} + +function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$3(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$3(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$3(Constructor.prototype, protoProps); if (staticProps) _defineProperties$3(Constructor, staticProps); return Constructor; } +var isCallingCanDrag = false; +var isCallingIsDragging = false; +var DragSourceMonitorImpl = /*#__PURE__*/function () { + function DragSourceMonitorImpl(manager) { + _classCallCheck$3(this, DragSourceMonitorImpl); + + this.sourceId = null; + this.internalMonitor = manager.getMonitor(); + } + + _createClass$3(DragSourceMonitorImpl, [{ + key: "receiveHandlerId", + value: function receiveHandlerId(sourceId) { + this.sourceId = sourceId; + } + }, { + key: "getHandlerId", + value: function getHandlerId() { + return this.sourceId; + } + }, { + key: "canDrag", + value: function canDrag() { + invariant(!isCallingCanDrag, 'You may not call monitor.canDrag() inside your canDrag() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor'); + + try { + isCallingCanDrag = true; + return this.internalMonitor.canDragSource(this.sourceId); + } finally { + isCallingCanDrag = false; + } + } + }, { + key: "isDragging", + value: function isDragging() { + if (!this.sourceId) { + return false; + } + + invariant(!isCallingIsDragging, 'You may not call monitor.isDragging() inside your isDragging() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor'); + + try { + isCallingIsDragging = true; + return this.internalMonitor.isDraggingSource(this.sourceId); + } finally { + isCallingIsDragging = false; + } + } + }, { + key: "subscribeToStateChange", + value: function subscribeToStateChange(listener, options) { + return this.internalMonitor.subscribeToStateChange(listener, options); + } + }, { + key: "isDraggingSource", + value: function isDraggingSource(sourceId) { + return this.internalMonitor.isDraggingSource(sourceId); + } + }, { + key: "isOverTarget", + value: function isOverTarget(targetId, options) { + return this.internalMonitor.isOverTarget(targetId, options); + } + }, { + key: "getTargetIds", + value: function getTargetIds() { + return this.internalMonitor.getTargetIds(); + } + }, { + key: "isSourcePublic", + value: function isSourcePublic() { + return this.internalMonitor.isSourcePublic(); + } + }, { + key: "getSourceId", + value: function getSourceId() { + return this.internalMonitor.getSourceId(); + } + }, { + key: "subscribeToOffsetChange", + value: function subscribeToOffsetChange(listener) { + return this.internalMonitor.subscribeToOffsetChange(listener); + } + }, { + key: "canDragSource", + value: function canDragSource(sourceId) { + return this.internalMonitor.canDragSource(sourceId); + } + }, { + key: "canDropOnTarget", + value: function canDropOnTarget(targetId) { + return this.internalMonitor.canDropOnTarget(targetId); + } + }, { + key: "getItemType", + value: function getItemType() { + return this.internalMonitor.getItemType(); + } + }, { + key: "getItem", + value: function getItem() { + return this.internalMonitor.getItem(); + } + }, { + key: "getDropResult", + value: function getDropResult() { + return this.internalMonitor.getDropResult(); + } + }, { + key: "didDrop", + value: function didDrop() { + return this.internalMonitor.didDrop(); + } + }, { + key: "getInitialClientOffset", + value: function getInitialClientOffset() { + return this.internalMonitor.getInitialClientOffset(); + } + }, { + key: "getInitialSourceClientOffset", + value: function getInitialSourceClientOffset() { + return this.internalMonitor.getInitialSourceClientOffset(); + } + }, { + key: "getSourceClientOffset", + value: function getSourceClientOffset() { + return this.internalMonitor.getSourceClientOffset(); + } + }, { + key: "getClientOffset", + value: function getClientOffset() { + return this.internalMonitor.getClientOffset(); + } + }, { + key: "getDifferenceFromInitialOffset", + value: function getDifferenceFromInitialOffset() { + return this.internalMonitor.getDifferenceFromInitialOffset(); + } + }]); + + return DragSourceMonitorImpl; +}(); + +function setRef(ref, node) { + if (typeof ref === 'function') { + ref(node); + } else { + ref.current = node; + } +} + +function cloneWithRef(element, newRef) { + var previousRef = element.ref; + invariant(typeof previousRef !== 'string', 'Cannot connect React DnD to an element with an existing string ref. ' + 'Please convert it to use a callback ref instead, or wrap it into a or
. ' + 'Read more: https://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute'); + + if (!previousRef) { + // When there is no ref on the element, use the new ref directly + return react.cloneElement(element, { + ref: newRef + }); + } else { + return react.cloneElement(element, { + ref: function ref(node) { + setRef(previousRef, node); + setRef(newRef, node); + } + }); + } +} + +function throwIfCompositeComponentElement(element) { + // Custom components can no longer be wrapped directly in React DnD 2.0 + // so that we don't need to depend on findDOMNode() from react-dom. + if (typeof element.type === 'string') { + return; + } + + var displayName = element.type.displayName || element.type.name || 'the component'; + throw new Error('Only native element nodes can now be passed to React DnD connectors.' + "You can either wrap ".concat(displayName, " into a
, or turn it into a ") + 'drag source or a drop target itself.'); +} + +function wrapHookToRecognizeElement(hook) { + return function () { + var elementOrNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + // When passed a node, call the hook straight away. + if (!react.isValidElement(elementOrNode)) { + var node = elementOrNode; + hook(node, options); // return the node so it can be chained (e.g. when within callback refs + //
connectDragSource(connectDropTarget(node))}/> + + return node; + } // If passed a ReactElement, clone it and attach this function as a ref. + // This helps us achieve a neat API where user doesn't even know that refs + // are being used under the hood. + + + var element = elementOrNode; + throwIfCompositeComponentElement(element); // When no options are passed, use the hook directly + + var ref = options ? function (node) { + return hook(node, options); + } : hook; + return cloneWithRef(element, ref); + }; +} + +function wrapConnectorHooks(hooks) { + var wrappedHooks = {}; + Object.keys(hooks).forEach(function (key) { + var hook = hooks[key]; // ref objects should be passed straight through without wrapping + + if (key.endsWith('Ref')) { + wrappedHooks[key] = hooks[key]; + } else { + var wrappedHook = wrapHookToRecognizeElement(hook); + + wrappedHooks[key] = function () { + return wrappedHook; + }; + } + }); + return wrappedHooks; +} + +function _typeof$1(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$1(obj); } + +function isRef(obj) { + return (// eslint-disable-next-line no-prototype-builtins + obj !== null && _typeof$1(obj) === 'object' && Object.prototype.hasOwnProperty.call(obj, 'current') + ); +} + +function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$2(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$2(Constructor.prototype, protoProps); if (staticProps) _defineProperties$2(Constructor, staticProps); return Constructor; } +var SourceConnector = /*#__PURE__*/function () { + function SourceConnector(backend) { + var _this = this; + + _classCallCheck$2(this, SourceConnector); + + this.hooks = wrapConnectorHooks({ + dragSource: function dragSource(node, options) { + _this.clearDragSource(); + + _this.dragSourceOptions = options || null; + + if (isRef(node)) { + _this.dragSourceRef = node; + } else { + _this.dragSourceNode = node; + } + + _this.reconnectDragSource(); + }, + dragPreview: function dragPreview(node, options) { + _this.clearDragPreview(); + + _this.dragPreviewOptions = options || null; + + if (isRef(node)) { + _this.dragPreviewRef = node; + } else { + _this.dragPreviewNode = node; + } + + _this.reconnectDragPreview(); + } + }); + this.handlerId = null; // The drop target may either be attached via ref or connect function + + this.dragSourceRef = null; + this.dragSourceOptionsInternal = null; // The drag preview may either be attached via ref or connect function + + this.dragPreviewRef = null; + this.dragPreviewOptionsInternal = null; + this.lastConnectedHandlerId = null; + this.lastConnectedDragSource = null; + this.lastConnectedDragSourceOptions = null; + this.lastConnectedDragPreview = null; + this.lastConnectedDragPreviewOptions = null; + this.backend = backend; + } + + _createClass$2(SourceConnector, [{ + key: "receiveHandlerId", + value: function receiveHandlerId(newHandlerId) { + if (this.handlerId === newHandlerId) { + return; + } + + this.handlerId = newHandlerId; + this.reconnect(); + } + }, { + key: "reconnect", + value: function reconnect() { + this.reconnectDragSource(); + this.reconnectDragPreview(); + } + }, { + key: "reconnectDragSource", + value: function reconnectDragSource() { + var dragSource = this.dragSource; // if nothing has changed then don't resubscribe + + var didChange = this.didHandlerIdChange() || this.didConnectedDragSourceChange() || this.didDragSourceOptionsChange(); + + if (didChange) { + this.disconnectDragSource(); + } + + if (!this.handlerId) { + return; + } + + if (!dragSource) { + this.lastConnectedDragSource = dragSource; + return; + } + + if (didChange) { + this.lastConnectedHandlerId = this.handlerId; + this.lastConnectedDragSource = dragSource; + this.lastConnectedDragSourceOptions = this.dragSourceOptions; + this.dragSourceUnsubscribe = this.backend.connectDragSource(this.handlerId, dragSource, this.dragSourceOptions); + } + } + }, { + key: "reconnectDragPreview", + value: function reconnectDragPreview() { + var dragPreview = this.dragPreview; // if nothing has changed then don't resubscribe + + var didChange = this.didHandlerIdChange() || this.didConnectedDragPreviewChange() || this.didDragPreviewOptionsChange(); + + if (didChange) { + this.disconnectDragPreview(); + } + + if (!this.handlerId) { + return; + } + + if (!dragPreview) { + this.lastConnectedDragPreview = dragPreview; + return; + } + + if (didChange) { + this.lastConnectedHandlerId = this.handlerId; + this.lastConnectedDragPreview = dragPreview; + this.lastConnectedDragPreviewOptions = this.dragPreviewOptions; + this.dragPreviewUnsubscribe = this.backend.connectDragPreview(this.handlerId, dragPreview, this.dragPreviewOptions); + } + } + }, { + key: "didHandlerIdChange", + value: function didHandlerIdChange() { + return this.lastConnectedHandlerId !== this.handlerId; + } + }, { + key: "didConnectedDragSourceChange", + value: function didConnectedDragSourceChange() { + return this.lastConnectedDragSource !== this.dragSource; + } + }, { + key: "didConnectedDragPreviewChange", + value: function didConnectedDragPreviewChange() { + return this.lastConnectedDragPreview !== this.dragPreview; + } + }, { + key: "didDragSourceOptionsChange", + value: function didDragSourceOptionsChange() { + return !shallowEqual(this.lastConnectedDragSourceOptions, this.dragSourceOptions); + } + }, { + key: "didDragPreviewOptionsChange", + value: function didDragPreviewOptionsChange() { + return !shallowEqual(this.lastConnectedDragPreviewOptions, this.dragPreviewOptions); + } + }, { + key: "disconnectDragSource", + value: function disconnectDragSource() { + if (this.dragSourceUnsubscribe) { + this.dragSourceUnsubscribe(); + this.dragSourceUnsubscribe = undefined; + } + } + }, { + key: "disconnectDragPreview", + value: function disconnectDragPreview() { + if (this.dragPreviewUnsubscribe) { + this.dragPreviewUnsubscribe(); + this.dragPreviewUnsubscribe = undefined; + this.dragPreviewNode = null; + this.dragPreviewRef = null; + } + } + }, { + key: "clearDragSource", + value: function clearDragSource() { + this.dragSourceNode = null; + this.dragSourceRef = null; + } + }, { + key: "clearDragPreview", + value: function clearDragPreview() { + this.dragPreviewNode = null; + this.dragPreviewRef = null; + } + }, { + key: "connectTarget", + get: function get() { + return this.dragSource; + } + }, { + key: "dragSourceOptions", + get: function get() { + return this.dragSourceOptionsInternal; + }, + set: function set(options) { + this.dragSourceOptionsInternal = options; + } + }, { + key: "dragPreviewOptions", + get: function get() { + return this.dragPreviewOptionsInternal; + }, + set: function set(options) { + this.dragPreviewOptionsInternal = options; + } + }, { + key: "dragSource", + get: function get() { + return this.dragSourceNode || this.dragSourceRef && this.dragSourceRef.current; + } + }, { + key: "dragPreview", + get: function get() { + return this.dragPreviewNode || this.dragPreviewRef && this.dragPreviewRef.current; + } + }]); + + return SourceConnector; +}(); + +function _slicedToArray$3(arr, i) { return _arrayWithHoles$3(arr) || _iterableToArrayLimit$3(arr, i) || _unsupportedIterableToArray$3(arr, i) || _nonIterableRest$3(); } + +function _nonIterableRest$3() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$3(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$3(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$3(o, minLen); } + +function _arrayLikeToArray$3(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$3(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$3(arr) { if (Array.isArray(arr)) return arr; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function useDragSourceMonitor() { + var manager = useDragDropManager(); + var monitor = react.useMemo(function () { + return new DragSourceMonitorImpl(manager); + }, [manager]); + var connector = react.useMemo(function () { + return new SourceConnector(manager.getBackend()); + }, [manager]); + return [monitor, connector]; +} +function useDragHandler(spec, monitor, connector) { + var manager = useDragDropManager(); + var handler = react.useMemo(function () { + return { + beginDrag: function beginDrag() { + var _spec$current = spec.current, + begin = _spec$current.begin, + item = _spec$current.item; + + if (begin) { + var beginResult = begin(monitor); + invariant(beginResult == null || _typeof(beginResult) === 'object', 'dragSpec.begin() must either return an object, undefined, or null'); + return beginResult || item || {}; + } + + return item || {}; + }, + canDrag: function canDrag() { + if (typeof spec.current.canDrag === 'boolean') { + return spec.current.canDrag; + } else if (typeof spec.current.canDrag === 'function') { + return spec.current.canDrag(monitor); + } else { + return true; + } + }, + isDragging: function isDragging(globalMonitor, target) { + var isDragging = spec.current.isDragging; + return isDragging ? isDragging(monitor) : target === globalMonitor.getSourceId(); + }, + endDrag: function endDrag() { + var end = spec.current.end; + + if (end) { + end(monitor.getItem(), monitor); + } + + connector.reconnect(); + } + }; + }, []); + useIsomorphicLayoutEffect(function registerHandler() { + var _registerSource = registerSource(spec.current.item.type, handler, manager), + _registerSource2 = _slicedToArray$3(_registerSource, 2), + handlerId = _registerSource2[0], + unregister = _registerSource2[1]; + + monitor.receiveHandlerId(handlerId); + connector.receiveHandlerId(handlerId); + return unregister; + }, []); +} + +function _slicedToArray$2(arr, i) { return _arrayWithHoles$2(arr) || _iterableToArrayLimit$2(arr, i) || _unsupportedIterableToArray$2(arr, i) || _nonIterableRest$2(); } + +function _nonIterableRest$2() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$2(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); } + +function _arrayLikeToArray$2(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$2(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$2(arr) { if (Array.isArray(arr)) return arr; } +/** + * useDragSource hook + * @param sourceSpec The drag source specification * + */ + +function useDrag(spec) { + var specRef = react.useRef(spec); + specRef.current = spec; // TODO: wire options into createSourceConnector + + invariant(spec.item != null, 'item must be defined'); + invariant(spec.item.type != null, 'item type must be defined'); + + var _useDragSourceMonitor = useDragSourceMonitor(), + _useDragSourceMonitor2 = _slicedToArray$2(_useDragSourceMonitor, 2), + monitor = _useDragSourceMonitor2[0], + connector = _useDragSourceMonitor2[1]; + + useDragHandler(specRef, monitor, connector); + var result = useMonitorOutput(monitor, specRef.current.collect || function () { + return {}; + }, function () { + return connector.reconnect(); + }); + var connectDragSource = react.useMemo(function () { + return connector.hooks.dragSource(); + }, [connector]); + var connectDragPreview = react.useMemo(function () { + return connector.hooks.dragPreview(); + }, [connector]); + useIsomorphicLayoutEffect(function () { + connector.dragSourceOptions = specRef.current.options || null; + connector.reconnect(); + }, [connector]); + useIsomorphicLayoutEffect(function () { + connector.dragPreviewOptions = specRef.current.previewOptions || null; + connector.reconnect(); + }, [connector]); + return [result, connectDragSource, connectDragPreview]; +} + +function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties$1(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; } +var TargetConnector = /*#__PURE__*/function () { + function TargetConnector(backend) { + var _this = this; + + _classCallCheck$1(this, TargetConnector); + + this.hooks = wrapConnectorHooks({ + dropTarget: function dropTarget(node, options) { + _this.clearDropTarget(); + + _this.dropTargetOptions = options; + + if (isRef(node)) { + _this.dropTargetRef = node; + } else { + _this.dropTargetNode = node; + } + + _this.reconnect(); + } + }); + this.handlerId = null; // The drop target may either be attached via ref or connect function + + this.dropTargetRef = null; + this.dropTargetOptionsInternal = null; + this.lastConnectedHandlerId = null; + this.lastConnectedDropTarget = null; + this.lastConnectedDropTargetOptions = null; + this.backend = backend; + } + + _createClass$1(TargetConnector, [{ + key: "reconnect", + value: function reconnect() { + // if nothing has changed then don't resubscribe + var didChange = this.didHandlerIdChange() || this.didDropTargetChange() || this.didOptionsChange(); + + if (didChange) { + this.disconnectDropTarget(); + } + + var dropTarget = this.dropTarget; + + if (!this.handlerId) { + return; + } + + if (!dropTarget) { + this.lastConnectedDropTarget = dropTarget; + return; + } + + if (didChange) { + this.lastConnectedHandlerId = this.handlerId; + this.lastConnectedDropTarget = dropTarget; + this.lastConnectedDropTargetOptions = this.dropTargetOptions; + this.unsubscribeDropTarget = this.backend.connectDropTarget(this.handlerId, dropTarget, this.dropTargetOptions); + } + } + }, { + key: "receiveHandlerId", + value: function receiveHandlerId(newHandlerId) { + if (newHandlerId === this.handlerId) { + return; + } + + this.handlerId = newHandlerId; + this.reconnect(); + } + }, { + key: "didHandlerIdChange", + value: function didHandlerIdChange() { + return this.lastConnectedHandlerId !== this.handlerId; + } + }, { + key: "didDropTargetChange", + value: function didDropTargetChange() { + return this.lastConnectedDropTarget !== this.dropTarget; + } + }, { + key: "didOptionsChange", + value: function didOptionsChange() { + return !shallowEqual(this.lastConnectedDropTargetOptions, this.dropTargetOptions); + } + }, { + key: "disconnectDropTarget", + value: function disconnectDropTarget() { + if (this.unsubscribeDropTarget) { + this.unsubscribeDropTarget(); + this.unsubscribeDropTarget = undefined; + } + } + }, { + key: "clearDropTarget", + value: function clearDropTarget() { + this.dropTargetRef = null; + this.dropTargetNode = null; + } + }, { + key: "connectTarget", + get: function get() { + return this.dropTarget; + } + }, { + key: "dropTargetOptions", + get: function get() { + return this.dropTargetOptionsInternal; + }, + set: function set(options) { + this.dropTargetOptionsInternal = options; + } + }, { + key: "dropTarget", + get: function get() { + return this.dropTargetNode || this.dropTargetRef && this.dropTargetRef.current; + } + }]); + + return TargetConnector; +}(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +var isCallingCanDrop = false; +var DropTargetMonitorImpl = /*#__PURE__*/function () { + function DropTargetMonitorImpl(manager) { + _classCallCheck(this, DropTargetMonitorImpl); + + this.targetId = null; + this.internalMonitor = manager.getMonitor(); + } + + _createClass(DropTargetMonitorImpl, [{ + key: "receiveHandlerId", + value: function receiveHandlerId(targetId) { + this.targetId = targetId; + } + }, { + key: "getHandlerId", + value: function getHandlerId() { + return this.targetId; + } + }, { + key: "subscribeToStateChange", + value: function subscribeToStateChange(listener, options) { + return this.internalMonitor.subscribeToStateChange(listener, options); + } + }, { + key: "canDrop", + value: function canDrop() { + // Cut out early if the target id has not been set. This should prevent errors + // where the user has an older version of dnd-core like in + // https://github.com/react-dnd/react-dnd/issues/1310 + if (!this.targetId) { + return false; + } + + invariant(!isCallingCanDrop, 'You may not call monitor.canDrop() inside your canDrop() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor'); + + try { + isCallingCanDrop = true; + return this.internalMonitor.canDropOnTarget(this.targetId); + } finally { + isCallingCanDrop = false; + } + } + }, { + key: "isOver", + value: function isOver(options) { + if (!this.targetId) { + return false; + } + + return this.internalMonitor.isOverTarget(this.targetId, options); + } + }, { + key: "getItemType", + value: function getItemType() { + return this.internalMonitor.getItemType(); + } + }, { + key: "getItem", + value: function getItem() { + return this.internalMonitor.getItem(); + } + }, { + key: "getDropResult", + value: function getDropResult() { + return this.internalMonitor.getDropResult(); + } + }, { + key: "didDrop", + value: function didDrop() { + return this.internalMonitor.didDrop(); + } + }, { + key: "getInitialClientOffset", + value: function getInitialClientOffset() { + return this.internalMonitor.getInitialClientOffset(); + } + }, { + key: "getInitialSourceClientOffset", + value: function getInitialSourceClientOffset() { + return this.internalMonitor.getInitialSourceClientOffset(); + } + }, { + key: "getSourceClientOffset", + value: function getSourceClientOffset() { + return this.internalMonitor.getSourceClientOffset(); + } + }, { + key: "getClientOffset", + value: function getClientOffset() { + return this.internalMonitor.getClientOffset(); + } + }, { + key: "getDifferenceFromInitialOffset", + value: function getDifferenceFromInitialOffset() { + return this.internalMonitor.getDifferenceFromInitialOffset(); + } + }]); + + return DropTargetMonitorImpl; +}(); + +function _slicedToArray$1(arr, i) { return _arrayWithHoles$1(arr) || _iterableToArrayLimit$1(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest$1(); } + +function _nonIterableRest$1() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray$1(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); } + +function _arrayLikeToArray$1(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit$1(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles$1(arr) { if (Array.isArray(arr)) return arr; } +function useDropTargetMonitor() { + var manager = useDragDropManager(); + var monitor = react.useMemo(function () { + return new DropTargetMonitorImpl(manager); + }, [manager]); + var connector = react.useMemo(function () { + return new TargetConnector(manager.getBackend()); + }, [manager]); + return [monitor, connector]; +} +function useDropHandler(spec, monitor, connector) { + var manager = useDragDropManager(); + var handler = react.useMemo(function () { + return { + canDrop: function canDrop() { + var canDrop = spec.current.canDrop; + return canDrop ? canDrop(monitor.getItem(), monitor) : true; + }, + hover: function hover() { + var hover = spec.current.hover; + + if (hover) { + hover(monitor.getItem(), monitor); + } + }, + drop: function drop() { + var drop = spec.current.drop; + + if (drop) { + return drop(monitor.getItem(), monitor); + } + } + }; + }, [monitor]); + useIsomorphicLayoutEffect(function registerHandler() { + var _registerTarget = registerTarget(spec.current.accept, handler, manager), + _registerTarget2 = _slicedToArray$1(_registerTarget, 2), + handlerId = _registerTarget2[0], + unregister = _registerTarget2[1]; + + monitor.receiveHandlerId(handlerId); + connector.receiveHandlerId(handlerId); + return unregister; + }, [monitor, connector]); +} + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +/** + * useDropTarget Hook + * @param spec The drop target specification + */ + +function useDrop(spec) { + var specRef = react.useRef(spec); + specRef.current = spec; + invariant(spec.accept != null, 'accept must be defined'); + + var _useDropTargetMonitor = useDropTargetMonitor(), + _useDropTargetMonitor2 = _slicedToArray(_useDropTargetMonitor, 2), + monitor = _useDropTargetMonitor2[0], + connector = _useDropTargetMonitor2[1]; + + useDropHandler(specRef, monitor, connector); + var result = useMonitorOutput(monitor, specRef.current.collect || function () { + return {}; + }, function () { + return connector.reconnect(); + }); + var connectDropTarget = react.useMemo(function () { + return connector.hooks.dropTarget(); + }, [connector]); + useIsomorphicLayoutEffect(function () { + connector.dropTargetOptions = spec.options || null; + connector.reconnect(); + }, [spec.options]); + return [result, connectDropTarget]; +} + +export { DndProvider, useDrag, useDrop }; diff --git a/root/static/lib/ingredients_editor/_snowpack/pkg/react-dom.js b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dom.js new file mode 100644 index 00000000..f2e611b9 --- /dev/null +++ b/root/static/lib/ingredients_editor/_snowpack/pkg/react-dom.js @@ -0,0 +1,354 @@ +import { c as createCommonjsModule, r as react, o as objectAssign } from './common/index-ae389540.js'; + +var scheduler_production_min = createCommonjsModule(function (module, exports) { +var f,g,h,k;if("object"===typeof performance&&"function"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()};}else {var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q};} +if("undefined"===typeof window||"function"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null;}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0));};g=function(a,b){u=setTimeout(a,b);};h=function(){clearTimeout(u);};exports.unstable_shouldYield=function(){return !1};k=exports.unstable_forceFrameRate=function(){};}else {var x=window.setTimeout,y=window.clearTimeout;if("undefined"!==typeof console){var z= +window.cancelAnimationFrame;"function"!==typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");"function"!==typeof z&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>= +E};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1; +function T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M);}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else {var b=J(M);null!==b&&g(U,b.startTime-a);}} +function V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if("function"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();"function"===typeof e?O.callback=e:O===J(L)&&K(L);T(b);}else K(L);O=J(L);}if(null!==O)var m=!0;else {var n=J(M);null!==n&&g(U,n.startTime-b);m=!1;}return m}finally{O=null,P=c,Q=!1;}}var W=k;exports.unstable_IdlePriority=5; +exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null;};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V));};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)}; +exports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P;}var c=P;P=b;try{return a()}finally{P=c;}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3;}var c=P;P=a;try{return b()}finally{P=c;}}; +exports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a}; +exports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c;}}}; +}); + +var scheduler = createCommonjsModule(function (module) { + +{ + module.exports = scheduler_production_min; +} +}); + +function y(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;cb}return !1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g;}var D={}; +"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1);});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1);});["contentEditable","draggable","spellCheck","value"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1);}); +["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1);});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1);}); +["checked","multiple","muted","selected"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1);});["capture","download"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1);});["cols","rows","size","span"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1);});["rowSpan","start"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1);});var oa=/[\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()} +"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(oa, +pa);D[b]=new B(b,1,!1,a,null,!1,!1);});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1);});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1);});["tabIndex","crossOrigin"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1);}); +D.xlinkHref=new B("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0);}); +function qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2h||e[g]!==f[h])return "\n"+e[g].replace(" at new "," at ");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c;}return (a=a?a.displayName||a.name:"")?Na(a):""} +function Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na("Lazy");case 13:return Na("Suspense");case 19:return Na("SuspenseList");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return ""}} +function Ra(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case ua:return "Fragment";case ta:return "Portal";case xa:return "Profiler";case wa:return "StrictMode";case Ba:return "Suspense";case Ca:return "SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case za:return (a.displayName||"Context")+".Consumer";case ya:return (a._context.displayName||"Context")+".Provider";case Aa:var b=a.render;b=b.displayName||b.name||""; +return a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case "boolean":case "number":case "object":case "string":case "undefined":return a;default:return ""}}function Ta(a){var b=a.type;return (a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"===b)} +function Ua(a){var b=Ta(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a);}});Object.defineProperty(a,b,{enumerable:c.enumerable});return {getValue:function(){return d},setValue:function(a){d=""+a;},stopTracking:function(){a._valueTracker= +null;delete a[b];}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a));}function Wa(a){if(!a)return !1;var b=a._valueTracker;if(!b)return !0;var c=b.getValue();var d="";a&&(d=Ta(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}} +function Ya(a,b){var c=b.checked;return objectAssign({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value};}function $a(a,b){b=b.checked;null!=b&&qa(a,"checked",b,!1);} +function ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!=c)a.value=""+c;}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?bb(a,b.type,c):b.hasOwnProperty("defaultValue")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked);} +function cb(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=b.type;if(!("submit"!==d&&"reset"!==d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b;}c=a.name;""!==c&&(a.name="");a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c);} +function bb(a,b,c){if("number"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c);}function db(a){var b="";react.Children.forEach(a,function(a){null!=a&&(b+=a);});return b}function eb(a,b){a=objectAssign({children:void 0},b);if(b=db(b.children))a.children=b;return a} +function fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=c.length))throw Error(y(93));c=c[0];}b=c;}null==b&&(b="");c=b;}a._wrapperState={initialValue:Sa(c)};} +function ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=""+d);}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&""!==b&&null!==b&&(a.value=b);}var kb={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"}; +function lb(a){switch(a){case "svg":return "http://www.w3.org/2000/svg";case "math":return "http://www.w3.org/1998/Math/MathML";default:return "http://www.w3.org/1999/xhtml"}}function mb(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?lb(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a} +var nb,ob=function(a){return "undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)});}:a}(function(a,b){if(a.namespaceURI!==kb.svg||"innerHTML"in a)a.innerHTML=b;else {nb=nb||document.createElement("div");nb.innerHTML=""+b.valueOf().toString()+"";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild);}}); +function pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b;} +var qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0, +floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=["Webkit","ms","Moz","O"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a];});});function sb(a,b,c){return null==b||"boolean"===typeof b||""===b?"":c||"number"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(""+b).trim():b+"px"} +function tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--"),e=sb(c,b[c],d);"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e;}}var ub=objectAssign({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}); +function vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!("object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&"object"!==typeof b.style)throw Error(y(62));}} +function wb(a,b){if(-1===a.indexOf("-"))return "string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return !1;default:return !0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null; +function Bb(a){if(a=Cb(a)){if("function"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b));}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a;}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;ad?0:1<c;c++)b.push(a);return b} +function $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c;}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=scheduler.unstable_UserBlockingPriority,ed=scheduler.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d);}finally{(Kb=f)||Mb();}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d));} +function hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0=be),ee=String.fromCharCode(32),fe=!1; +function ge(a,b){switch(a){case "keyup":return -1!==$d.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "focusout":return !0;default:return !1}}function he(a){a=a.detail;return "object"===typeof a&&"data"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case "compositionend":return he(b);case "keypress":if(32!==b.which)return null;fe=!0;return ee;case "textInput":return a=b.data,a===ee&&fe?null:a;default:return null}} +function ke(a,b){if(ie)return "compositionend"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return {node:c,offset:b-a};a=d;}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode;}c=void 0;}c=Ke(c);}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1} +function Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c="string"===typeof b.contentWindow.location.href;}catch(d){c=!1;}if(c)a=b.contentWindow;else break;b=Xa(a.document);}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)} +var Pe=fa&&"documentMode"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1; +function Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,"selectionStart"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,"onSelect"),0Af||(a.current=zf[Af],zf[Af]=null,Af--);}function I(a,b){Af++;zf[Af]=a.current;a.current=b;}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf; +function Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M);}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c);} +function If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||"Unknown",e));return objectAssign({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return !0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c);} +var Lf=null,Mf=null,Nf=scheduler.unstable_runWithPriority,Of=scheduler.unstable_scheduleCallback,Pf=scheduler.unstable_cancelCallback,Qf=scheduler.unstable_shouldYield,Rf=scheduler.unstable_requestPaint,Sf=scheduler.unstable_now,Tf=scheduler.unstable_getCurrentPriorityLevel,Uf=scheduler.unstable_ImmediatePriority,Vf=scheduler.unstable_UserBlockingPriority,Wf=scheduler.unstable_NormalPriority,Xf=scheduler.unstable_LowPriority,Yf=scheduler.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg}; +function eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a);}jg();} +function jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;az?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null=== +n.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q;}if(z===h.length)return c(e,u),l;if(null===u){for(;zz?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q;}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&& +u.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling); +d=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling;}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h);}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else {c(a,d);break}else b(a,d);d=d.sibling;}d= +Wg(f,a.mode,h);d.return=a;a=d;}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||"Component"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g); +function dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,"");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a);}H(ah);I(ah,b);}function fh(){H(ah);H(bh);H(ch);}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c));}function hh(a){bh.current===a&&(H(ah),H(bh));}var P=Bf(0); +function ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||"$?"===c.data||"$!"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return;}b.sibling.return=b.return;b=b.sibling;}return null}var jh=null,kh=null,lh=!1; +function mh(a,b){var c=nh(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c;}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return !1;default:return !1}} +function ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c);}jh=a;kh=rf(b.firstChild);}else a.flags=a.flags&-1025|2,lh=!1,jh=a;}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a;} +function rh(a){if(a!==jh)return !1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if("/$"===c){if(0===b){kh=rf(a.nextSibling);break a}b--;}else "$"!==c&&"$!"!==c&&"$?"!==c||b++;}a=a.nextSibling;}kh=null;}}else kh=jh?rf(a.stateNode.nextSibling):null;return !0} +function sh(){kh=jh=null;lh=!1;}var th=[];function uh(){for(var a=0;af))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e);}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T} +function Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null;}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else {if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a;}return T}function Jh(a,b){return "function"===typeof b?b(a):b} +function Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g;}d.baseQueue=e=f;c.pending=null;}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else {var n={lane:l,action:k.action,eagerReducer:k.eagerReducer, +eagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l;}k=k.next;}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d;}return [b.memoizedState,c.dispatch]} +function Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f;}return [f,d]} +function Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));} +function Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d= +e.entanglements,h=a;0c?98:c,function(){a(!0);});gg(97\x3c/script>",a=a.removeChild(a.firstChild)):"string"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),"select"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case "dialog":G("cancel",a);G("close",a); +e=d;break;case "iframe":case "object":case "embed":G("load",a);e=d;break;case "video":case "audio":for(e=0;eJi&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432);}else {if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&"hidden"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|= +64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g);}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&"unstable-defer-without-hiding"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));} +function Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}} +function Mi(a,b){try{var c="",d=b;do c+=Qa(d),d=d.return;while(d);var e=c;}catch(f){e="\nError generating stack: "+f.message+"\n"+f.stack;}return {value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value);}catch(c){setTimeout(function(){throw c;});}}var Oi="function"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b);};return c} +function Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)};}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""});});return c}var Ui="function"===typeof WeakSet?WeakSet:Set; +function Vi(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null);}catch(c){Wi(a,c);}else b.current=null;}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b;}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));} +function Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d();}a=a.next;}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d;}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d, +b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode;}Eg(c,b,a);}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c)))); +return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));} +function aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,"function"===typeof d.setProperty?d.setProperty("display","none","important"):d.display="none";else {d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty("display")?e.display:null;d.style.display=sb("display",e);}}else if(6===c.tag)c.stateNode.nodeValue=b?"":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c=== +a)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return;}c.sibling.return=c.return;c=c.sibling;}} +function bj(a,b){if(Mf&&"function"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b);}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else {d=b;try{e();}catch(f){Wi(d,f);}}c=c.next;}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if("function"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount();}catch(f){Wi(b, +f);}break;case 5:Vi(b);break;case 4:cj(a,b);}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null;}function ej(a){return 5===a.tag||3===a.tag||4===a.tag} +function fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return;}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,""),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return;}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null=== +c.child||4===c.tag)continue b;else c.child.return=c,c=c.child;}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b);} +function gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling;} +function hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling;} +function cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return;}d=!0;}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else {if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return;}k.sibling.return=k.return;k=k.sibling;}f?(g=e,h=c.stateNode, +8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode);}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1);}c.sibling.return=c.return;c=c.sibling;}} +function ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;"input"===a&&"radio"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;ee&&(e=g);c&=~f;}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320> +c?4320:1960*nj(c/1960))-c;if(10 component higher in the tree to provide a loading indicator or placeholder to display.");}5!==V&&(V=2);k=Mi(k,h);p= +g;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&("function"===typeof K.getDerivedStateFromError||null!==Q&&"function"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return;}while(null!==p)}Zj(c);}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)} +function Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e);}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y);}function Rj(){for(;null!==Y&&!Qf();)bk(Y);}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null;} +function Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d;}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});"function"===typeof t.focus&&t.focus();for(t= +0;tO()-jj?Qj(a,0):uj|=c);Mj(a,b);}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c));}var ck; +ck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else {ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!== +b?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64;}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if("object"=== +typeof e&&null!==e&&"function"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b);}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;"function"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c);}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2); +a=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,""));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282)); +d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else {e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e { + const timer = setTimeout(() => setCount(count + 1), 1e3); + return () => clearTimeout(timer); + }, [count, setCount]); + return /* @__PURE__ */ React.createElement("div", { + className: "App" + }, /* @__PURE__ */ React.createElement("header", { + className: "App-header" + }, /* @__PURE__ */ React.createElement("p", null, "Page has been open for ", /* @__PURE__ */ React.createElement("code", null, count), " seconds."), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement("a", { + className: "App-link", + href: "https://reactjs.org", + target: "_blank", + rel: "noopener noreferrer" + }, "Learn React")))); +} +export default App; diff --git a/root/static/lib/ingredients_editor/dist/components/AnimatedCheckBox.js b/root/static/lib/ingredients_editor/dist/components/AnimatedCheckBox.js new file mode 100644 index 00000000..513af037 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/AnimatedCheckBox.js @@ -0,0 +1,13 @@ +import React from "../../_snowpack/pkg/react.js"; +import { + CheckBoxRounded, + CheckBoxOutlineBlankRounded +} from "../../_snowpack/pkg/@material-ui/icons.js"; +const AnimatedCheckBox = (props) => { + return /* @__PURE__ */ React.createElement("div", { + onClick: props.onCheck + }, props.checked ? /* @__PURE__ */ React.createElement(CheckBoxRounded, { + color: "primary" + }) : /* @__PURE__ */ React.createElement(CheckBoxOutlineBlankRounded, null)); +}; +export default AnimatedCheckBox; diff --git a/root/static/lib/ingredients_editor/dist/components/Ingredient.js b/root/static/lib/ingredients_editor/dist/components/Ingredient.js new file mode 100644 index 00000000..ac33d6dd --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/Ingredient.js @@ -0,0 +1,125 @@ +import React, {useRef} from "../../_snowpack/pkg/react.js"; +import {Button, Form, Popover} from "../../_snowpack/pkg/react-bootstrap.js"; +import {DeleteRounded, DragIndicator} from "../../_snowpack/pkg/@material-ui/icons.js"; +import {useDrag, useDrop} from "../../_snowpack/pkg/react-dnd.js"; +import {DragTypes} from "../util/DragDefs.js"; +import "../util/layout.css.proxy.js"; +const ingredientStyle = { + border: "solid 2px grey", + padding: "4px", + borderRadius: "4px", + width: "100%", + height: "3rem" +}; +const Ingredient = ({ + ingredient: data, + onDelete, + onChange, + moveIngredient +}) => { + const ref = useRef(null); + const handle = useRef(null); + const [, drop] = useDrop({ + accept: DragTypes.Ingredient, + hover(item, monitor) { + if (!ref.current) { + return; + } + const dragPosition = item.ingredient.position; + const hoverPosition = data.position; + const sameList = item.ingredient.prepare === data.prepare; + if (sameList && dragPosition === hoverPosition) { + return; + } + const hoverBoundingRect = ref.current?.getBoundingClientRect(); + const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2; + const clientOffset = monitor.getClientOffset(); + const hoverClientY = clientOffset.y - hoverBoundingRect.top; + if (sameList && dragPosition < hoverPosition && hoverClientY < hoverMiddleY) { + return; + } + if (sameList && dragPosition > hoverPosition && hoverClientY > hoverMiddleY) { + return; + } + moveIngredient(item.ingredient, data); + item.ingredient.position = hoverPosition; + } + }); + const [{isDragging}, drag, preview] = useDrag({ + item: { + type: DragTypes.Ingredient, + id: data.id, + ingredient: {...data, ...{beingDragged: true}} + }, + collect: (monitor) => ({ + isDragging: monitor.isDragging() + }), + end: (item, monitor) => { + if (item !== void 0) { + onChange(item.id, {beingDragged: false}); + } + } + }); + const FullComment = (props) => { + return /* @__PURE__ */ React.createElement(Popover, { + id: "popover-basic", + content: true, + ...props + }); + }; + preview(drop(ref)); + drag(handle); + const dragStyle = { + border: "dashed 2px grey", + opacity: 0.5 + }; + return /* @__PURE__ */ React.createElement("div", { + ref, + className: "flex flex-row align-center justify-center", + style: isDragging || data.beingDragged ? {...ingredientStyle, ...dragStyle} : {...ingredientStyle} + }, /* @__PURE__ */ React.createElement("div", { + ref: handle, + style: {flex: "none", cursor: "move"} + }, /* @__PURE__ */ React.createElement(DragIndicator, { + fontSize: "large", + style: {color: "grey"} + })), /* @__PURE__ */ React.createElement("div", { + style: {minWidth: "8rem", flex: "none"} + }, data.article.name), /* @__PURE__ */ React.createElement("div", { + style: {width: "4.6rem", flex: "none"} + }, /* @__PURE__ */ React.createElement(Form, null, /* @__PURE__ */ React.createElement(Form.Control, { + as: "input", + type: "number", + step: "any", + defaultValue: data.value, + onChange: (e) => { + const target = e.target; + onChange(data.id, Object.assign(data, { + value: Number.parseFloat(target.value) + })); + } + }))), /* @__PURE__ */ React.createElement("div", { + style: {width: "6.5rem", flex: "none"} + }, /* @__PURE__ */ React.createElement(Form.Control, { + as: "select", + defaultValue: data.current_unit.id, + onChange: (e) => { + onChange(data.id, Object.assign(data, { + current_unit: data.units.find((u) => u.id === Number.parseInt(e.target.value)) + })); + } + }, data.units.map((unit) => /* @__PURE__ */ React.createElement("option", { + key: unit.id, + value: unit.id + }, unit.short_name, " (", unit.long_name, ")")))), /* @__PURE__ */ React.createElement(Form.Control, { + as: "input", + type: "text", + defaultValue: data.comment + }), /* @__PURE__ */ React.createElement("div", { + style: {flex: "none"} + }, /* @__PURE__ */ React.createElement(Button, { + variant: "danger", + onClick: () => onDelete(data.id) + }, /* @__PURE__ */ React.createElement(DeleteRounded, null)))); +}; +export default Ingredient; diff --git a/root/static/lib/ingredients_editor/dist/components/IngredientListLimit.js b/root/static/lib/ingredients_editor/dist/components/IngredientListLimit.js new file mode 100644 index 00000000..1564a0aa --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/IngredientListLimit.js @@ -0,0 +1,20 @@ +import React from "../../_snowpack/pkg/react.js"; +import {DragTypes} from "../util/DragDefs.js"; +import {useDrop} from "../../_snowpack/pkg/react-dnd.js"; +const IngredientListLimit = ({ + text, + size, + appendIngredient +}) => { + const [, drop] = useDrop({ + accept: DragTypes.Ingredient, + hover(item, monitor) { + appendIngredient(item.ingredient); + } + }); + return /* @__PURE__ */ React.createElement("div", { + ref: drop, + style: {height: size.height, width: size.width} + }, text); +}; +export default IngredientListLimit; diff --git a/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css new file mode 100644 index 00000000..24f86552 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css @@ -0,0 +1,4 @@ +.list-header { + font-size: 1.3rem; + font-weight: bold; +} \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css.proxy.js b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css.proxy.js new file mode 100644 index 00000000..978218d4 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.css.proxy.js @@ -0,0 +1,10 @@ +// [snowpack] add styles to the page (skip if no document exists) +if (typeof document !== 'undefined') { + const code = ".list-header {\n font-size: 1.3rem;\n font-weight: bold;\n}"; + + const styleEl = document.createElement("style"); + const codeEl = document.createTextNode(code); + styleEl.type = 'text/css'; + styleEl.appendChild(codeEl); + document.head.appendChild(styleEl); +} \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.js b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.js new file mode 100644 index 00000000..8b2de47c --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/components/IngredientsEditor.js @@ -0,0 +1,213 @@ +import React, {useCallback, useEffect, useState} from "../../_snowpack/pkg/react.js"; +import {List} from "../util/List.js"; +import Ingredient from "./Ingredient.js"; +import IngredientListLimit from "./IngredientListLimit.js"; +import {Card} from "../../_snowpack/pkg/react-bootstrap.js"; +import {DndProvider} from "../../_snowpack/pkg/react-dnd.js"; +import {HTML5Backend} from "../../_snowpack/pkg/react-dnd-html5-backend.js"; +import "./IngredientsEditor.css.proxy.js"; +import "../util/layout.css.proxy.js"; +import IO from "../util/io.js"; +const IngredientsEditor = ({ + project +}) => { + const [nPIngredients, setNPIngredients] = useState([]); + const [pIngredients, setPIngredients] = useState([]); + const fetchIngredients = async () => { + const normalIngrs = await IO.getAllNormalIngredients(project) || []; + console.log("normalIngrs"); + console.log(normalIngrs); + const preparedIngrs = await IO.getAllPreparedIngredients(project) || []; + setNPIngredients(normalIngrs); + setPIngredients(preparedIngrs); + }; + useEffect(() => { + fetchIngredients(); + }, []); + const sortByPosition = (a, b) => a.position - b.position; + const removeIngredient = useCallback((id) => { + setNPIngredients((prevState) => prevState.filter((elem) => elem.id !== id)); + setPIngredients((prevState) => prevState.filter((elem) => elem.id !== id)); + }, [nPIngredients, pIngredients]); + const updateIngredient = useCallback((id, newData) => { + setNPIngredients((prevState) => prevState.map((elem) => elem.id === id ? {...elem, ...newData} : elem)); + setPIngredients((prevState) => prevState.map((elem) => elem.id === id ? {...elem, ...newData} : elem)); + }, [nPIngredients, pIngredients]); + const equalsById = (ingr1) => (ingr2) => ingr1.id === ingr2.id; + const moveIngredient = useCallback((source, target) => { + if (List.contains(nPIngredients)(equalsById(source)) && List.contains(nPIngredients)(equalsById(target))) { + setNPIngredients((prevState) => prevState.map((elem) => { + if (elem.position === source.position) { + return { + ...elem, + ...{ + position: target.position, + prepare: false + } + }; + } else if (elem.position === target.position) { + return { + ...elem, + ...{ + position: source.position, + prepare: false + } + }; + } else { + return elem; + } + }).sort(sortByPosition)); + } else if (List.contains(pIngredients)(equalsById(source)) && List.contains(nPIngredients)(equalsById(target))) { + removeIngredient(source.id); + setNPIngredients((prevState) => prevState.map((elem) => { + if (elem.position >= target.position) { + return { + ...elem, + ...{position: elem.position + 1} + }; + } else { + return elem; + } + }).concat([ + { + ...source, + ...{ + position: target.position, + prepare: false + } + } + ]).sort(sortByPosition)); + } else if (List.contains(nPIngredients)(equalsById(source)) && List.contains(pIngredients)(equalsById(target))) { + removeIngredient(source.id); + setPIngredients((prevState) => prevState.map((elem) => { + if (elem.position >= target.position) { + return { + ...elem, + ...{position: elem.position + 1} + }; + } else { + return elem; + } + }).concat([ + { + ...source, + ...{ + position: target.position, + prepare: true + } + } + ]).sort(sortByPosition)); + } else if (List.contains(pIngredients)(equalsById(source)) && List.contains(pIngredients)(equalsById(target))) { + setPIngredients((prevState) => prevState.map((elem) => { + if (elem.position === source.position) { + return { + ...elem, + ...{ + position: target.position, + prepare: true + } + }; + } else if (elem.position === target.position) { + return { + ...elem, + ...{ + position: source.position, + prepare: true + } + }; + } else { + return elem; + } + }).sort(sortByPosition)); + } + }, [nPIngredients, pIngredients]); + const appendIngredientPrepared = (droppedIngredient) => { + removeIngredient(droppedIngredient.id); + setPIngredients((prevState) => prevState.concat([ + { + ...droppedIngredient, + ...{position: prevState.length + 1, prepare: true} + } + ])); + }; + const prependIngredientPrepared = (droppedIngredient) => { + removeIngredient(droppedIngredient.id); + setPIngredients((prevState) => { + let newState = prevState.map((elem) => ({...elem, ...{position: elem.position + 1}})); + return [ + { + ...droppedIngredient, + ...{position: prevState.length, prepare: true} + } + ].concat(newState); + }); + }; + const appendIngredientNotPrepared = (droppedIngredient) => { + removeIngredient(droppedIngredient.id); + setNPIngredients((prevState) => prevState.concat([ + { + ...droppedIngredient, + ...{position: prevState.length + 1, prepare: false} + } + ])); + }; + const prependIngredientNotPrepared = (droppedIngredient) => { + removeIngredient(droppedIngredient.id); + setNPIngredients((prevState) => { + let newState = prevState.map((elem) => ({...elem, ...{position: elem.position + 1}})); + return [ + { + ...droppedIngredient, + ...{position: prevState.length, prepare: true} + } + ].concat(newState); + }); + }; + return /* @__PURE__ */ React.createElement(Card, null, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement("h3", null, "Ingredients")), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(DndProvider, { + backend: HTML5Backend + }, /* @__PURE__ */ React.createElement("div", { + className: "flex flex-column align-start", + id: "ingredients-editor" + }, /* @__PURE__ */ React.createElement("div", { + className: "list-header" + }, "Normal Ingredients"), /* @__PURE__ */ React.createElement("div", { + style: {width: "100%"}, + className: "flex flex-column align-start", + id: "not-prepared-items" + }, /* @__PURE__ */ React.createElement(IngredientListLimit, { + appendIngredient: prependIngredientNotPrepared, + size: {height: "1.5rem", width: "100%"}, + text: "" + }), nPIngredients.map((ingr_def) => /* @__PURE__ */ React.createElement(Ingredient, { + key: ingr_def.id, + onDelete: removeIngredient, + onChange: updateIngredient, + moveIngredient, + ingredient: ingr_def + })), /* @__PURE__ */ React.createElement(IngredientListLimit, { + appendIngredient: appendIngredientNotPrepared, + size: {height: "3rem", width: "100%"}, + text: nPIngredients.length === 0 ? "There are no normal ingredients yet. Drag some ingredients here!" : "" + })), /* @__PURE__ */ React.createElement("div", { + className: "list-header" + }, "Prepared Ingredients"), /* @__PURE__ */ React.createElement("div", { + style: {width: "100%"}, + className: "flex flex-column align-start", + id: "prepared-items" + }, /* @__PURE__ */ React.createElement(IngredientListLimit, { + appendIngredient: prependIngredientPrepared, + size: {height: "1.5rem", width: "100%"}, + text: "" + }), pIngredients.map((ingr_def) => /* @__PURE__ */ React.createElement(Ingredient, { + key: ingr_def.id, + onDelete: removeIngredient, + onChange: updateIngredient, + moveIngredient, + ingredient: ingr_def + })), /* @__PURE__ */ React.createElement(IngredientListLimit, { + appendIngredient: appendIngredientPrepared, + size: {height: "3rem", width: "100%"}, + text: pIngredients.length === 0 ? "There are no prepared ingredients yet. Drag some ingredients here to make them prepared!" : "" + })))))); +}; +export default IngredientsEditor; diff --git a/root/static/lib/ingredients_editor/dist/constants.js b/root/static/lib/ingredients_editor/dist/constants.js new file mode 100644 index 00000000..7f54944a --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/constants.js @@ -0,0 +1,2 @@ +const backend = "http://localhost:3000"; +export {backend}; diff --git a/root/static/lib/ingredients_editor/dist/index.js b/root/static/lib/ingredients_editor/dist/index.js new file mode 100644 index 00000000..b9678691 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/index.js @@ -0,0 +1,19 @@ +import * as __SNOWPACK_ENV__ from '../_snowpack/env.js'; +import.meta.env = __SNOWPACK_ENV__; + +import React from "../_snowpack/pkg/react.js"; +import ReactDOM from "../_snowpack/pkg/react-dom.js"; +import IngredientsEditor from "./components/IngredientsEditor.js"; +import "../_snowpack/pkg/bootstrap/dist/css/bootstrap.min.css.proxy.js"; +const project = { + type: ingredientsEditorData.dish_id ? "dish" : "recipe", + id: ingredientsEditorData.project_id, + name: ingredientsEditorData.project_name, + specificId: ingredientsEditorData.dish_id || ingredientsEditorData.recipe_id +}; +ReactDOM.render(/* @__PURE__ */ React.createElement(React.StrictMode, null, /* @__PURE__ */ React.createElement(IngredientsEditor, { + project +})), document.getElementById("ingredients-editor")); +if (undefined /* [snowpack] import.meta.hot */ ) { + undefined /* [snowpack] import.meta.hot */ .accept(); +} diff --git a/root/static/lib/ingredients_editor/dist/util/Definitions.js b/root/static/lib/ingredients_editor/dist/util/Definitions.js new file mode 100644 index 00000000..e69de29b diff --git a/root/static/lib/ingredients_editor/dist/util/DragDefs.js b/root/static/lib/ingredients_editor/dist/util/DragDefs.js new file mode 100644 index 00000000..8a63d7c3 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/util/DragDefs.js @@ -0,0 +1,3 @@ +export const DragTypes = { + Ingredient: "INGREDIENT" +}; diff --git a/root/static/lib/ingredients_editor/dist/util/List.js b/root/static/lib/ingredients_editor/dist/util/List.js new file mode 100644 index 00000000..6fdcdf3c --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/util/List.js @@ -0,0 +1,4 @@ +const contains = (list) => (equals) => list.filter(equals).length > 0; +export var List = { + contains +}; diff --git a/root/static/lib/ingredients_editor/dist/util/io.js b/root/static/lib/ingredients_editor/dist/util/io.js new file mode 100644 index 00000000..e9141e7b --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/util/io.js @@ -0,0 +1,89 @@ +import {backend} from "../constants.js"; +const baseUrl = (project) => { + switch (project.type) { + case "dish": + return `${backend}/project/${project.id}/${project.name}/dish/${project.specificId}`; + case "recipe": + return `${backend}/project/${project.id}/${project.name}/recipe/${project.specificId}`; + } +}; +const initialIngredientTransformation = (ingredient) => ({ + ...ingredient, + ...{ + beingDragged: false, + units: [ingredient.current_unit, ...ingredient.units] + } +}); +const getAllNormalIngredients = async (project) => { + try { + const response = await (await fetch(`${baseUrl(project)}/ingredients`)).json(); + const final = response.map(initialIngredientTransformation); + console.log("final"); + console.log(final); + return final; + } catch (err) { + console.error(err); + return null; + } +}; +const getAllPreparedIngredients = async (project) => { + try { + const response = await (await fetch(`${baseUrl(project)}/ingredients`)).json(); + return response.data.map(initialIngredientTransformation); + } catch (err) { + return null; + } +}; +const createIngredient = async (project, ingredient) => { + try { + const response = await fetch(`${baseUrl(project)}/ingredients`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(ingredient) + }); + const id = (await response.json()).data; + if (!isNaN(id)) { + return id; + } else { + return null; + } + } catch (err) { + return null; + } +}; +const putIngredient = async (project, ingredient) => { + try { + const response = await fetch(`${baseUrl(project)}/ingredients/${ingredient.id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(ingredient) + }); + await response.json(); + return ingredient.id; + } catch (err) { + return null; + } +}; +const deleteIngredient = async (project, ingredient) => { + try { + const response = await fetch(`${baseUrl(project)}/ingredients/${ingredient.id}`, { + method: "DELETE" + }); + await response.json(); + return ingredient.id; + } catch (err) { + return null; + } +}; +const IO = { + getAllNormalIngredients, + getAllPreparedIngredients, + createIngredient, + putIngredient, + deleteIngredient +}; +export default IO; diff --git a/root/static/lib/ingredients_editor/dist/util/layout.css b/root/static/lib/ingredients_editor/dist/util/layout.css new file mode 100644 index 00000000..88139f74 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/util/layout.css @@ -0,0 +1,49 @@ +.flex { + display: flex; +} + +.flex-column { + flex-direction: column; +} + +.flex-row { + flex-direction: row; +} + +.align-center { + align-items: center; +} + +.justify-center { + justify-items: center; +} + +.align-start { + align-items: start; +} + +.justify-start { + justify-items: start; +} + +.grid { + display: grid; +} + +.scrollable-y { + overflow-y: scroll; + scrollbar-color: black; + scrollbar-width: thin; +} + +.truncate { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.ml-truncate { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; +} \ No newline at end of file diff --git a/root/static/lib/ingredients_editor/dist/util/layout.css.proxy.js b/root/static/lib/ingredients_editor/dist/util/layout.css.proxy.js new file mode 100644 index 00000000..522cc229 --- /dev/null +++ b/root/static/lib/ingredients_editor/dist/util/layout.css.proxy.js @@ -0,0 +1,10 @@ +// [snowpack] add styles to the page (skip if no document exists) +if (typeof document !== 'undefined') { + const code = ".flex {\n display: flex;\n}\n\n.flex-column {\n flex-direction: column;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.align-center {\n align-items: center;\n}\n\n.justify-center {\n justify-items: center;\n}\n\n.align-start {\n align-items: start;\n}\n\n.justify-start {\n justify-items: start;\n}\n\n.grid {\n display: grid;\n}\n\n.scrollable-y {\n overflow-y: scroll;\n scrollbar-color: black;\n scrollbar-width: thin;\n}\n\n.truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ml-truncate {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}"; + + const styleEl = document.createElement("style"); + const codeEl = document.createTextNode(code); + styleEl.type = 'text/css'; + styleEl.appendChild(codeEl); + document.head.appendChild(styleEl); +} \ No newline at end of file diff --git a/root/templates/dish/edit.tt b/root/templates/dish/edit.tt index ea8ed3de..db52a3ef 100644 --- a/root/templates/dish/edit.tt +++ b/root/templates/dish/edit.tt @@ -34,6 +34,16 @@

Ingredients

+ + +
+ [% INCLUDE 'includes/forms/ingredients_editor.tt' %] diff --git a/script/coocook_build_react.pl b/script/coocook_build_react.pl new file mode 100755 index 00000000..d7542127 --- /dev/null +++ b/script/coocook_build_react.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env perl + +# ABSTRACT: script for building the react components for the coocook frontend + +use v5.28; +use utf8; +use warnings; +use strict; + +use Term::ANSIColor; +use Cwd qw/abs_path getcwd/; +use File::Copy::Recursive qw(rcopy); +use File::Path 'rmtree'; + +say colored('START BUILD COOCOOK REACT COMPONENTS...', 'yellow'); + +say colored('CHECK IF AT TOP-LEVEL OF COOCOOK REPOSITORY...', 'yellow'); +my $dir = abs_path(getcwd()); +if (not ($dir =~ /^.*\/coocook$/)) { + error('This script can only be executed in the top-level coocook repository'); +} +say colored('CURRENT DIRECTORY IS TOP-LEVEL OF COOCOOK REPOSITORY', 'green'); + +chdir('share/coocook-react-components') or error("Directory 'share/coocook-react-components' does not exist"); + +say colored('RUN NPM BUILD...', 'yellow'); +system('npm', 'run', 'build') == 0 or error("Failed NPM build"); +chdir('../..'); +say colored('NPM BUILD DONE.', 'green'); + +say colored('DELETE OLD BUILD OF INGREDIENTS EDITOR...', 'yellow'); +rmtree('root/static/lib/ingredients_editor') or error("Failed removing 'root/static/lib/ingredients_editor'"); +say colored('DELETE DONE.', 'green'); + +say colored('COPY NEW BUILD OF INGREDIENTS EDITOR...', 'yellow'); +rcopy('share/coocook-react-components/build', 'root/static/lib/ingredients_editor') or error("Failed at copying the new build"); +say colored('COPY DONE.', 'green'); + +say colored('BUILD COOCOOK REACT COMPONENTS DONE.', 'green'); + +sub error { + my $msg = shift; + say ''; + say colored($msg, 'red'); + exit 1; +} diff --git a/share/coocook-react-components b/share/coocook-react-components new file mode 160000 index 00000000..93aee19e --- /dev/null +++ b/share/coocook-react-components @@ -0,0 +1 @@ +Subproject commit 93aee19e6a348dcbfb02d7f724bcf4dca25b265d