{"version":3,"sources":["../node_modules/pickadate/lib/picker.js","../node_modules/pickadate/lib/picker.date.js","../rollupPluginBabelHelpers","../assets/js/third-party/pickadate.js","../assets/js/src/expansion-panel.js","../assets/js/src/floating-label.js","../assets/js/src/nav-drawer.js","../assets/js/src/selection-control-focus.js","../assets/js/src/tab-switch.js","../assets/js/src/util.js"],"names":["picker","commonjsHelpers.createCommonjsModule","module","exports","factory","$","$window","window","$document","document","$html","documentElement","supportsTransitions","style","transition","PickerConstructor","ELEMENT","NAME","COMPONENT","OPTIONS","IS_DEFAULT_THEME","STATE","id","Math","abs","random","Date","SETTINGS","extend","defaults","CLASSES","klasses","klass","$ELEMENT","PickerInstance","this","start","P","prototype","constructor","$node","methods","open","type","autofocus","getActiveElement","readOnly","editable","component","$root","aria","$holder","createWrappedComponent","appendTo","prepareElementHolder","formatSubmit","name","hiddenName","hiddenPrefix","hiddenSuffix","_hidden","data","value","get","on","prepareElementHidden","addClass","input","val","format","event","preventDefault","handleKeydownEvent","haspopup","expanded","readonly","owns","prepareElement","containerHidden","append","after","container","onStart","render","onRender","stop","onStop","onOpen","close","onClose","set","onSet","element","theme","prop","currentStyle","getComputedStyle","isUsingDefaultTheme","trigger","entireComponent","html","find","box","nodes","parentNode","removeChild","remove","removeClass","removeData","setTimeout","off","dontGiveFocus","active","opened","css","getScrollbarWidth","frame","one","focus","target","which","keycode","keyCode","keycodeToMove","key","contains","click","_","go","highlighted","hasClass","disabled","item","highlight","closeOnSelect","giveFocus","handleFocusToOpenEvent","focused","clear","options","thing","thingItem","thingValue","thingIsObject","isPlainObject","thingObject","undefined","muted","formats","toString","method","internal","thingName","thingMethod","push","i","names","arguments","namesCount","length","_trigger","methodList","map","node","wrap","holder","keydown","focus.toOpen","blur","focusin","stopPropagation","mousedown click","is","$target","targetData","targetDisabled","navDisabled","activeElement","href","nav","pick","closeOnClear","isKeycodeDelete","test","height","$outer","widthWithoutScroll","offsetWidth","widthWithScroll","attribute","ariaSet","setAttribute","err","prefix","group","groupObject","loopObjectScope","nodesList","counter","min","max","wrapper","isArray","join","lead","number","callback","scope","args","apply","digits","string","isDate","call","indexOf","isInteger","getDate","ariaAttr","attr","attrVal","Component","fn","action","componentData","each","require$$0","Picker","DatePicker","settings","collectionDisabled","calendar","elementValue","elementDataValue","valueString","formatString","isRTL","direction","queue","now","select","view","disable","enable","slice","shift","defaultValue","40","38","39","37","timeChange","highlightedObject","targetDate","year","month","date","interval","selectMonth","selectYear","includeToday","buttonToday","calendarItem","split","pop","match","create","isInfiniteValue","Infinity","obj","normalize","getFullYear","getMonth","day","getDay","getTime","createRange","from","to","createDate","withinRange","range","dateUnit","overlapRanges","two","rel","setDate","navigate","targetDateObject","targetYear","targetMonth","isTargetArray","isTargetObject","viewsetObject","setHours","measure","parse","viewset","dateObject","validate","hasEnabledBeforeTarget","hasEnabledAfterTarget","reachedMin","reachedMax","originalDateObject","isFlippedBase","minLimitObject","maxLimitObject","hasEnabledWeekdays","filter","dateTime","dateToVerify","isDisabledMatch","dateToDisable","firstDay","inverted","parsingObject","toArray","label","formattingLabel","formatLength","replace","substr","yyyy","yy","mm","m","dd","d","getWordLengthFromCollection","collection","word","getFirstWordLength","ddd","weekdaysShort","dddd","weekdaysFull","mmm","monthsShort","mmmm","monthsFull","itemObject","isDateExact","isDateOverlap","flipEnable","deactivate","datesToDisable","disabledItems","unitToDisable","matchFound","index","activate","datesToEnable","disabledItemsCount","unitToEnable","disabledUnit","isExactRange","isOpen","fullCollection","nowObject","selectedObject","disabledCollection","tableHead","showWeekdaysFull","DAYS_IN_WEEK","weekdays","createMonthNav","next","role","controls","labelMonthNext","labelMonthPrev","createMonthLabel","monthsCollection","showMonthsShort","selectMonths","loopedMonth","labelMonthSelect","createYearLabel","focusedYear","numberYears","selectYears","minYear","maxYear","lowestYear","highestYear","availableYears","neededYears","loopedYear","labelYearSelect","header","WEEKS_IN_CALENDAR","rowCounter","shiftDateBy","isSelected","isHighlighted","isDisabled","formattedDate","infocus","outfocus","selected","activedescendant","table","today","buttonClear","buttonClose","footer","navPrev","navNext","require$$1","_defineProperties","props","descriptor","enumerable","configurable","writable","Object","defineProperty","_extends","assign","source","hasOwnProperty","Datepicker","_element","_options","DEFAULTS","display","datepickerApi","datepickerRoot","datepickerValue","prepend","show","that","pickadate","cancel","ok","closeOnCancel","old","pickdate","option","Constructor","noConflict","jQuery","EVENT_KEY","ClassName","Event","Selector","DATA_KEY","NO_CONFLICT","FloatingLabel","Breakpoints","Default","DefaultType","TransitionDurationEntering","TransitionDurationLeaving","NavDrawer","LastInteraction","TransitionDuration","TabSwitch","ExpansionPanel","closest","predecessor","prev","_parent","DATA_PARENT","change","focusout","_jQueryInterface","_event","Error","DATA_TOGGLE","Util","transitionEndEmulator","duration","called","TRANSITION_END","triggerTransitionEnd","_this","selector","getAttribute","getElementById","nodeType","offsetHeight","Boolean","end","componentName","config","configTypes","property","expectedTypes","valueType","isElement","toLowerCase","RegExp","toUpperCase","QUnit","emulateTransitionEnd","supportsTransitionEnd","special","handleObj","handler","_backdrop","_config","_getConfig","_content","CONTENT","_ignoreBackdropClick","_isShown","_typeBreakpoint","breakpoint","protoProps","staticProps","hide","_isTransitioning","hideEvent","HIDE","isDefaultPrevented","supportsTransition","_setEscapeEvent","FOCUSIN","CLICK_DISMISS","MOUSEDOWN_DISMISS","_hideNavdrawer","_getTransitionDuration","_showBackdrop","relatedTarget","showEvent","SHOW","body","DATA_DISMISS","_this2","MOUSEUP_DISMISS","_showElement","toggle","_enforceFocus","_this3","has","typeCheckConfig","innerWidth","DESKTOP","TABLET","MOBILE","HIDDEN","_removeBackdrop","keyboard","KEYDOWN_DISMISS","createElement","_this5","currentTarget","reflow","Node","ELEMENT_NODE","appendChild","removeAttribute","shownEvent","SHOWN","transitionComplete","_this6","TypeError","CLICK_DATA_API","getSelectorFromElement","tagName","SelectionControlFocus","IS_MOUSEDOWN","_nav","_navindicator","switch","navLeft","offset","left","navScrollLeft","scrollLeft","navWidth","outerWidth","_createIndicator","elLeft","elWidth","complete","transitionDuration","relatedLeft","relatedWidth"],"mappings":"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","sourcesContent":["/*!\n * pickadate.js v3.5.6, 2015/04/20\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * Licensed under MIT\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( 'picker', ['jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('jquery') )\n\n    // Browser globals.\n    else this.Picker = factory( jQuery )\n\n}(function( $ ) {\n\nvar $window = $( window )\nvar $document = $( document )\nvar $html = $( document.documentElement )\nvar supportsTransitions = document.documentElement.style.transition != null\n\n\n/**\n * The picker constructor that creates a blank picker.\n */\nfunction PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {\n\n    // If there’s no element, return the picker constructor.\n    if ( !ELEMENT ) return PickerConstructor\n\n\n    var\n        IS_DEFAULT_THEME = false,\n\n\n        // The state of the picker.\n        STATE = {\n            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) )\n        },\n\n\n        // Merge the defaults and options passed.\n        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},\n\n\n        // Merge the default classes with the settings classes.\n        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),\n\n\n        // The element node wrapper into a jQuery object.\n        $ELEMENT = $( ELEMENT ),\n\n\n        // Pseudo picker constructor.\n        PickerInstance = function() {\n            return this.start()\n        },\n\n\n        // The picker prototype.\n        P = PickerInstance.prototype = {\n\n            constructor: PickerInstance,\n\n            $node: $ELEMENT,\n\n\n            /**\n             * Initialize everything\n             */\n            start: function() {\n\n                // If it’s already started, do nothing.\n                if ( STATE && STATE.start ) return P\n\n\n                // Update the picker states.\n                STATE.methods = {}\n                STATE.start = true\n                STATE.open = false\n                STATE.type = ELEMENT.type\n\n\n                // Confirm focus state, convert into text input to remove UA stylings,\n                // and set as readonly to prevent keyboard popup.\n                ELEMENT.autofocus = ELEMENT == getActiveElement()\n                ELEMENT.readOnly = !SETTINGS.editable\n                ELEMENT.id = ELEMENT.id || STATE.id\n                if ( ELEMENT.type != 'text' ) {\n                    ELEMENT.type = 'text'\n                }\n\n\n                // Create a new picker component with the settings.\n                P.component = new COMPONENT(P, SETTINGS)\n\n\n                // Create the picker root and then prepare it.\n                P.$root = $( '<div class=\"' + CLASSES.picker + '\" id=\"' + ELEMENT.id + '_root\" />' )\n                prepareElementRoot()\n\n\n                // Create the picker holder and then prepare it.\n                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )\n                prepareElementHolder()\n\n\n                // If there’s a format for the hidden input element, create the element.\n                if ( SETTINGS.formatSubmit ) {\n                    prepareElementHidden()\n                }\n\n\n                // Prepare the input element.\n                prepareElement()\n\n\n                // Insert the hidden input as specified in the settings.\n                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )\n                else $ELEMENT.after( P._hidden )\n\n\n                // Insert the root as specified in the settings.\n                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )\n                else $ELEMENT.after( P.$root )\n\n\n                // Bind the default component and settings events.\n                P.on({\n                    start: P.component.onStart,\n                    render: P.component.onRender,\n                    stop: P.component.onStop,\n                    open: P.component.onOpen,\n                    close: P.component.onClose,\n                    set: P.component.onSet\n                }).on({\n                    start: SETTINGS.onStart,\n                    render: SETTINGS.onRender,\n                    stop: SETTINGS.onStop,\n                    open: SETTINGS.onOpen,\n                    close: SETTINGS.onClose,\n                    set: SETTINGS.onSet\n                })\n\n\n                // Once we’re all set, check the theme in use.\n                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )\n\n\n                // If the element has autofocus, open the picker.\n                if ( ELEMENT.autofocus ) {\n                    P.open()\n                }\n\n\n                // Trigger queued the “start” and “render” events.\n                return P.trigger( 'start' ).trigger( 'render' )\n            }, //start\n\n\n            /**\n             * Render a new picker\n             */\n            render: function( entireComponent ) {\n\n                // Insert a new component holder in the root or box.\n                if ( entireComponent ) {\n                    P.$holder = $( createWrappedComponent() )\n                    prepareElementHolder()\n                    P.$root.html( P.$holder )\n                }\n                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )\n\n                // Trigger the queued “render” events.\n                return P.trigger( 'render' )\n            }, //render\n\n\n            /**\n             * Destroy everything\n             */\n            stop: function() {\n\n                // If it’s already stopped, do nothing.\n                if ( !STATE.start ) return P\n\n                // Then close the picker.\n                P.close()\n\n                // Remove the hidden field.\n                if ( P._hidden ) {\n                    P._hidden.parentNode.removeChild( P._hidden )\n                }\n\n                // Remove the root.\n                P.$root.remove()\n\n                // Remove the input class, remove the stored data, and unbind\n                // the events (after a tick for IE - see `P.close`).\n                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )\n                setTimeout( function() {\n                    $ELEMENT.off( '.' + STATE.id )\n                }, 0)\n\n                // Restore the element state\n                ELEMENT.type = STATE.type\n                ELEMENT.readOnly = false\n\n                // Trigger the queued “stop” events.\n                P.trigger( 'stop' )\n\n                // Reset the picker states.\n                STATE.methods = {}\n                STATE.start = false\n\n                return P\n            }, //stop\n\n\n            /**\n             * Open up the picker\n             */\n            open: function( dontGiveFocus ) {\n\n                // If it’s already open, do nothing.\n                if ( STATE.open ) return P\n\n                // Add the “active” class.\n                $ELEMENT.addClass( CLASSES.active )\n                aria( ELEMENT, 'expanded', true )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So add the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Add the “opened” class to the picker root.\n                    P.$root.addClass( CLASSES.opened )\n                    aria( P.$root[0], 'hidden', false )\n\n                }, 0 )\n\n                // If we have to give focus, bind the element and doc events.\n                if ( dontGiveFocus !== false ) {\n\n                    // Set it as open.\n                    STATE.open = true\n\n                    // Prevent the page from scrolling.\n                    if ( IS_DEFAULT_THEME ) {\n                        $html.\n                            css( 'overflow', 'hidden' ).\n                            css( 'padding-right', '+=' + getScrollbarWidth() )\n                    }\n\n                    // Pass focus to the root element’s jQuery object.\n                    focusPickerOnceOpened()\n\n                    // Bind the document events.\n                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {\n\n                        var target = event.target\n\n                        // If the target of the event is not the element, close the picker picker.\n                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.\n                        //   Also, for Firefox, a click on an `option` element bubbles up directly\n                        //   to the doc. So make sure the target wasn't the doc.\n                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,\n                        //   which causes the picker to unexpectedly close when right-clicking it. So make\n                        //   sure the event wasn’t a right-click.\n                        if ( target != ELEMENT && target != document && event.which != 3 ) {\n\n                            // If the target was the holder that covers the screen,\n                            // keep the element focused to maintain tabindex.\n                            P.close( target === P.$holder[0] )\n                        }\n\n                    }).on( 'keydown.' + STATE.id, function( event ) {\n\n                        var\n                            // Get the keycode.\n                            keycode = event.keyCode,\n\n                            // Translate that to a selection change.\n                            keycodeToMove = P.component.key[ keycode ],\n\n                            // Grab the target.\n                            target = event.target\n\n\n                        // On escape, close the picker and give focus.\n                        if ( keycode == 27 ) {\n                            P.close( true )\n                        }\n\n\n                        // Check if there is a key movement or “enter” keypress on the element.\n                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {\n\n                            // Prevent the default action to stop page movement.\n                            event.preventDefault()\n\n                            // Trigger the key movement action.\n                            if ( keycodeToMove ) {\n                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )\n                            }\n\n                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.\n                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {\n                                P.set( 'select', P.component.item.highlight )\n                                if ( SETTINGS.closeOnSelect ) {\n                                    P.close( true )\n                                }\n                            }\n                        }\n\n\n                        // If the target is within the root and “enter” is pressed,\n                        // prevent the default action and trigger a click on the target instead.\n                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {\n                            event.preventDefault()\n                            target.click()\n                        }\n                    })\n                }\n\n                // Trigger the queued “open” events.\n                return P.trigger( 'open' )\n            }, //open\n\n\n            /**\n             * Close the picker\n             */\n            close: function( giveFocus ) {\n\n                // If we need to give focus, do it before changing states.\n                if ( giveFocus ) {\n                    if ( SETTINGS.editable ) {\n                        ELEMENT.focus()\n                    }\n                    else {\n                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|\n                        // The focus is triggered *after* the close has completed - causing it\n                        // to open again. So unbind and rebind the event at the next tick.\n                        P.$holder.off( 'focus.toOpen' ).focus()\n                        setTimeout( function() {\n                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )\n                        }, 0 )\n                    }\n                }\n\n                // Remove the “active” class.\n                $ELEMENT.removeClass( CLASSES.active )\n                aria( ELEMENT, 'expanded', false )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So remove the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Remove the “opened” and “focused” class from the picker root.\n                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )\n                    aria( P.$root[0], 'hidden', true )\n\n                }, 0 )\n\n                // If it’s already closed, do nothing more.\n                if ( !STATE.open ) return P\n\n                // Set it as closed.\n                STATE.open = false\n\n                // Allow the page to scroll.\n                if ( IS_DEFAULT_THEME ) {\n                    $html.\n                        css( 'overflow', '' ).\n                        css( 'padding-right', '-=' + getScrollbarWidth() )\n                }\n\n                // Unbind the document events.\n                $document.off( '.' + STATE.id )\n\n                // Trigger the queued “close” events.\n                return P.trigger( 'close' )\n            }, //close\n\n\n            /**\n             * Clear the values\n             */\n            clear: function( options ) {\n                return P.set( 'clear', null, options )\n            }, //clear\n\n\n            /**\n             * Set something\n             */\n            set: function( thing, value, options ) {\n\n                var thingItem, thingValue,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                // Make sure we have usable options.\n                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = value\n                    }\n\n                    // Go through the things of items to set.\n                    for ( thingItem in thingObject ) {\n\n                        // Grab the value of the thing.\n                        thingValue = thingObject[ thingItem ]\n\n                        // First, if the item exists and there’s a value, set it.\n                        if ( thingItem in P.component.item ) {\n                            if ( thingValue === undefined ) thingValue = null\n                            P.component.set( thingItem, thingValue, options )\n                        }\n\n                        // Then, check to update the element value and broadcast a change.\n                        if ( thingItem == 'select' || thingItem == 'clear' ) {\n                            $ELEMENT.\n                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).\n                                trigger( 'change' )\n                        }\n                    }\n\n                    // Render a new picker.\n                    P.render()\n                }\n\n                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.\n                return options.muted ? P : P.trigger( 'set', thingObject )\n            }, //set\n\n\n            /**\n             * Get something\n             */\n            get: function( thing, format ) {\n\n                // Make sure there’s something to get.\n                thing = thing || 'value'\n\n                // If a picker state exists, return that.\n                if ( STATE[ thing ] != null ) {\n                    return STATE[ thing ]\n                }\n\n                // Return the submission value, if that.\n                if ( thing == 'valueSubmit' ) {\n                    if ( P._hidden ) {\n                        return P._hidden.value\n                    }\n                    thing = 'value'\n                }\n\n                // Return the value, if that.\n                if ( thing == 'value' ) {\n                    return ELEMENT.value\n                }\n\n                // Check if a component item exists, return that.\n                if ( thing in P.component.item ) {\n                    if ( typeof format == 'string' ) {\n                        var thingValue = P.component.get( thing )\n                        return thingValue ?\n                            PickerConstructor._.trigger(\n                                P.component.formats.toString,\n                                P.component,\n                                [ format, thingValue ]\n                            ) : ''\n                    }\n                    return P.component.get( thing )\n                }\n            }, //get\n\n\n\n            /**\n             * Bind events on the things.\n             */\n            on: function( thing, method, internal ) {\n\n                var thingName, thingMethod,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = method\n                    }\n\n                    // Go through the things to bind to.\n                    for ( thingName in thingObject ) {\n\n                        // Grab the method of the thing.\n                        thingMethod = thingObject[ thingName ]\n\n                        // If it was an internal binding, prefix it.\n                        if ( internal ) {\n                            thingName = '_' + thingName\n                        }\n\n                        // Make sure the thing methods collection exists.\n                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []\n\n                        // Add the method to the relative method collection.\n                        STATE.methods[ thingName ].push( thingMethod )\n                    }\n                }\n\n                return P\n            }, //on\n\n\n\n            /**\n             * Unbind events on the things.\n             */\n            off: function() {\n                var i, thingName,\n                    names = arguments;\n                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {\n                    thingName = names[i]\n                    if ( thingName in STATE.methods ) {\n                        delete STATE.methods[thingName]\n                    }\n                }\n                return P\n            },\n\n\n            /**\n             * Fire off method events.\n             */\n            trigger: function( name, data ) {\n                var _trigger = function( name ) {\n                    var methodList = STATE.methods[ name ]\n                    if ( methodList ) {\n                        methodList.map( function( method ) {\n                            PickerConstructor._.trigger( method, P, [ data ] )\n                        })\n                    }\n                }\n                _trigger( '_' + name )\n                _trigger( name )\n                return P\n            } //trigger\n        } //PickerInstance.prototype\n\n\n    /**\n     * Wrap the picker holder components together.\n     */\n    function createWrappedComponent() {\n\n        // Create a picker wrapper holder\n        return PickerConstructor._.node( 'div',\n\n            // Create a picker wrapper node\n            PickerConstructor._.node( 'div',\n\n                // Create a picker frame\n                PickerConstructor._.node( 'div',\n\n                    // Create a picker box node\n                    PickerConstructor._.node( 'div',\n\n                        // Create the components nodes.\n                        P.component.nodes( STATE.open ),\n\n                        // The picker box class\n                        CLASSES.box\n                    ),\n\n                    // Picker wrap class\n                    CLASSES.wrap\n                ),\n\n                // Picker frame class\n                CLASSES.frame\n            ),\n\n            // Picker holder class\n            CLASSES.holder,\n\n            'tabindex=\"-1\"'\n        ) //endreturn\n    } //createWrappedComponent\n\n\n\n    /**\n     * Prepare the input element with all bindings.\n     */\n    function prepareElement() {\n\n        $ELEMENT.\n\n            // Store the picker data by component name.\n            data(NAME, P).\n\n            // Add the “input” class name.\n            addClass(CLASSES.input).\n\n            // If there’s a `data-value`, update the value of the element.\n            val( $ELEMENT.data('value') ?\n                P.get('select', SETTINGS.format) :\n                ELEMENT.value\n            )\n\n\n        // Only bind keydown events if the element isn’t editable.\n        if ( !SETTINGS.editable ) {\n\n            $ELEMENT.\n\n                // On focus/click, open the picker.\n                on( 'focus.' + STATE.id + ' click.' + STATE.id, function(event) {\n                    event.preventDefault()\n                    P.open()\n                }).\n\n                // Handle keyboard event based on the picker being opened or not.\n                on( 'keydown.' + STATE.id, handleKeydownEvent )\n        }\n\n\n        // Update the aria attributes.\n        aria(ELEMENT, {\n            haspopup: true,\n            expanded: false,\n            readonly: false,\n            owns: ELEMENT.id + '_root'\n        })\n    }\n\n\n    /**\n     * Prepare the root picker element with all bindings.\n     */\n    function prepareElementRoot() {\n        aria( P.$root[0], 'hidden', true )\n    }\n\n\n     /**\n      * Prepare the holder picker element with all bindings.\n      */\n    function prepareElementHolder() {\n\n        P.$holder.\n\n            on({\n\n                // For iOS8.\n                keydown: handleKeydownEvent,\n\n                'focus.toOpen': handleFocusToOpenEvent,\n\n                blur: function() {\n                    // Remove the “target” class.\n                    $ELEMENT.removeClass( CLASSES.target )\n                },\n\n                // When something within the holder is focused, stop from bubbling\n                // to the doc and remove the “focused” state from the root.\n                focusin: function( event ) {\n                    P.$root.removeClass( CLASSES.focused )\n                    event.stopPropagation()\n                },\n\n                // When something within the holder is clicked, stop it\n                // from bubbling to the doc.\n                'mousedown click': function( event ) {\n\n                    var target = event.target\n\n                    // Make sure the target isn’t the root holder so it can bubble up.\n                    if ( target != P.$holder[0] ) {\n\n                        event.stopPropagation()\n\n                        // * For mousedown events, cancel the default action in order to\n                        //   prevent cases where focus is shifted onto external elements\n                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).\n                        //   Also, for Firefox, don’t prevent action on the `option` element.\n                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {\n\n                            event.preventDefault()\n\n                            // Re-focus onto the holder so that users can click away\n                            // from elements focused within the picker.\n                            P.$holder[0].focus()\n                        }\n                    }\n                }\n\n            }).\n\n            // If there’s a click on an actionable element, carry out the actions.\n            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {\n\n                var $target = $( this ),\n                    targetData = $target.data(),\n                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),\n\n                    // * For IE, non-focusable elements can be active elements as well\n                    //   (http://stackoverflow.com/a/2684561).\n                    activeElement = getActiveElement()\n                    activeElement = activeElement && ( activeElement.type || activeElement.href )\n\n                // If it’s disabled or nothing inside is actively focused, re-focus the element.\n                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {\n                    P.$holder[0].focus()\n                }\n\n                // If something is superficially changed, update the `highlight` based on the `nav`.\n                if ( !targetDisabled && targetData.nav ) {\n                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )\n                }\n\n                // If something is picked, set `select` then close with focus.\n                else if ( !targetDisabled && 'pick' in targetData ) {\n                    P.set( 'select', targetData.pick )\n                    if ( SETTINGS.closeOnSelect ) {\n                        P.close( true )\n                    }\n                }\n\n                // If a “clear” button is pressed, empty the values and close with focus.\n                else if ( targetData.clear ) {\n                    P.clear()\n                    if ( SETTINGS.closeOnClear ) {\n                        P.close( true )\n                    }\n                }\n\n                else if ( targetData.close ) {\n                    P.close( true )\n                }\n\n            }) //P.$holder\n\n    }\n\n\n     /**\n      * Prepare the hidden input element along with all bindings.\n      */\n    function prepareElementHidden() {\n\n        var name\n\n        if ( SETTINGS.hiddenName === true ) {\n            name = ELEMENT.name\n            ELEMENT.name = ''\n        }\n        else {\n            name = [\n                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',\n                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'\n            ]\n            name = name[0] + ELEMENT.name + name[1]\n        }\n\n        P._hidden = $(\n            '<input ' +\n            'type=hidden ' +\n\n            // Create the name using the original input’s with a prefix and suffix.\n            'name=\"' + name + '\"' +\n\n            // If the element has a value, set the hidden value as well.\n            (\n                $ELEMENT.data('value') || ELEMENT.value ?\n                    ' value=\"' + P.get('select', SETTINGS.formatSubmit) + '\"' :\n                    ''\n            ) +\n            '>'\n        )[0]\n\n        $ELEMENT.\n\n            // If the value changes, update the hidden input with the correct format.\n            on('change.' + STATE.id, function() {\n                P._hidden.value = ELEMENT.value ?\n                    P.get('select', SETTINGS.formatSubmit) :\n                    ''\n            })\n    }\n\n\n    // Wait for transitions to end before focusing the holder. Otherwise, while\n    // using the `container` option, the view jumps to the container.\n    function focusPickerOnceOpened() {\n\n        if (IS_DEFAULT_THEME && supportsTransitions) {\n            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {\n                P.$holder[0].focus()\n            })\n        }\n        else {\n            P.$holder[0].focus()\n        }\n    }\n\n\n    function handleFocusToOpenEvent(event) {\n\n        // Stop the event from propagating to the doc.\n        event.stopPropagation()\n\n        // Add the “target” class.\n        $ELEMENT.addClass( CLASSES.target )\n\n        // Add the “focused” class to the root.\n        P.$root.addClass( CLASSES.focused )\n\n        // And then finally open the picker.\n        P.open()\n    }\n\n\n    // For iOS8.\n    function handleKeydownEvent( event ) {\n\n        var keycode = event.keyCode,\n\n            // Check if one of the delete keys was pressed.\n            isKeycodeDelete = /^(8|46)$/.test(keycode)\n\n        // For some reason IE clears the input value on “escape”.\n        if ( keycode == 27 ) {\n            P.close( true )\n            return false\n        }\n\n        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.\n        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {\n\n            // Prevent it from moving the page and bubbling to doc.\n            event.preventDefault()\n            event.stopPropagation()\n\n            // If `delete` was pressed, clear the values and close the picker.\n            // Otherwise open the picker.\n            if ( isKeycodeDelete ) { P.clear().close() }\n            else { P.open() }\n        }\n    }\n\n\n    // Return a new picker instance.\n    return new PickerInstance()\n} //PickerConstructor\n\n\n\n/**\n * The default classes and prefix to use for the HTML classes.\n */\nPickerConstructor.klasses = function( prefix ) {\n    prefix = prefix || 'picker'\n    return {\n\n        picker: prefix,\n        opened: prefix + '--opened',\n        focused: prefix + '--focused',\n\n        input: prefix + '__input',\n        active: prefix + '__input--active',\n        target: prefix + '__input--target',\n\n        holder: prefix + '__holder',\n\n        frame: prefix + '__frame',\n        wrap: prefix + '__wrap',\n\n        box: prefix + '__box'\n    }\n} //PickerConstructor.klasses\n\n\n\n/**\n * Check if the default theme is being used.\n */\nfunction isUsingDefaultTheme( element ) {\n\n    var theme,\n        prop = 'position'\n\n    // For IE.\n    if ( element.currentStyle ) {\n        theme = element.currentStyle[prop]\n    }\n\n    // For normal browsers.\n    else if ( window.getComputedStyle ) {\n        theme = getComputedStyle( element )[prop]\n    }\n\n    return theme == 'fixed'\n}\n\n\n\n/**\n * Get the width of the browser’s scrollbar.\n * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js\n */\nfunction getScrollbarWidth() {\n\n    if ( $html.height() <= $window.height() ) {\n        return 0\n    }\n\n    var $outer = $( '<div style=\"visibility:hidden;width:100px\" />' ).\n        appendTo( 'body' )\n\n    // Get the width without scrollbars.\n    var widthWithoutScroll = $outer[0].offsetWidth\n\n    // Force adding scrollbars.\n    $outer.css( 'overflow', 'scroll' )\n\n    // Add the inner div.\n    var $inner = $( '<div style=\"width:100%\" />' ).appendTo( $outer )\n\n    // Get the width with scrollbars.\n    var widthWithScroll = $inner[0].offsetWidth\n\n    // Remove the divs.\n    $outer.remove()\n\n    // Return the difference between the widths.\n    return widthWithoutScroll - widthWithScroll\n}\n\n\n\n/**\n * PickerConstructor helper methods.\n */\nPickerConstructor._ = {\n\n    /**\n     * Create a group of nodes. Expects:\n     * `\n        {\n            min:    {Integer},\n            max:    {Integer},\n            i:      {Integer},\n            node:   {String},\n            item:   {Function}\n        }\n     * `\n     */\n    group: function( groupObject ) {\n\n        var\n            // Scope for the looped object\n            loopObjectScope,\n\n            // Create the nodes list\n            nodesList = '',\n\n            // The counter starts from the `min`\n            counter = PickerConstructor._.trigger( groupObject.min, groupObject )\n\n\n        // Loop from the `min` to `max`, incrementing by `i`\n        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {\n\n            // Trigger the `item` function within scope of the object\n            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )\n\n            // Splice the subgroup and create nodes out of the sub nodes\n            nodesList += PickerConstructor._.node(\n                groupObject.node,\n                loopObjectScope[ 0 ],   // the node\n                loopObjectScope[ 1 ],   // the classes\n                loopObjectScope[ 2 ]    // the attributes\n            )\n        }\n\n        // Return the list of nodes\n        return nodesList\n    }, //group\n\n\n    /**\n     * Create a dom node string\n     */\n    node: function( wrapper, item, klass, attribute ) {\n\n        // If the item is false-y, just return an empty string\n        if ( !item ) return ''\n\n        // If the item is an array, do a join\n        item = $.isArray( item ) ? item.join( '' ) : item\n\n        // Check for the class\n        klass = klass ? ' class=\"' + klass + '\"' : ''\n\n        // Check for any attributes\n        attribute = attribute ? ' ' + attribute : ''\n\n        // Return the wrapped item\n        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'\n    }, //node\n\n\n    /**\n     * Lead numbers below 10 with a zero.\n     */\n    lead: function( number ) {\n        return ( number < 10 ? '0': '' ) + number\n    },\n\n\n    /**\n     * Trigger a function otherwise return the value.\n     */\n    trigger: function( callback, scope, args ) {\n        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback\n    },\n\n\n    /**\n     * If the second character is a digit, length is 2 otherwise 1.\n     */\n    digits: function( string ) {\n        return ( /\\d/ ).test( string[ 1 ] ) ? 2 : 1\n    },\n\n\n    /**\n     * Tell if something is a date object.\n     */\n    isDate: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )\n    },\n\n\n    /**\n     * Tell if something is an integer.\n     */\n    isInteger: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\n    },\n\n\n    /**\n     * Create ARIA attribute strings.\n     */\n    ariaAttr: ariaAttr\n} //PickerConstructor._\n\n\n\n/**\n * Extend the picker with a component and defaults.\n */\nPickerConstructor.extend = function( name, Component ) {\n\n    // Extend jQuery.\n    $.fn[ name ] = function( options, action ) {\n\n        // Grab the component data.\n        var componentData = this.data( name )\n\n        // If the picker is requested, return the data object.\n        if ( options == 'picker' ) {\n            return componentData\n        }\n\n        // If the component data exists and `options` is a string, carry out the action.\n        if ( componentData && typeof options == 'string' ) {\n            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )\n        }\n\n        // Otherwise go through each matched element and if the component\n        // doesn’t exist, create a new picker using `this` element\n        // and merging the defaults and options with a deep copy.\n        return this.each( function() {\n            var $this = $( this )\n            if ( !$this.data( name ) ) {\n                new PickerConstructor( this, name, Component, options )\n            }\n        })\n    }\n\n    // Set the defaults.\n    $.fn[ name ].defaults = Component.defaults\n} //PickerConstructor.extend\n\n\n\nfunction aria(element, attribute, value) {\n    if ( $.isPlainObject(attribute) ) {\n        for ( var key in attribute ) {\n            ariaSet(element, key, attribute[key])\n        }\n    }\n    else {\n        ariaSet(element, attribute, value)\n    }\n}\nfunction ariaSet(element, attribute, value) {\n    element.setAttribute(\n        (attribute == 'role' ? '' : 'aria-') + attribute,\n        value\n    )\n}\nfunction ariaAttr(attribute, data) {\n    if ( !$.isPlainObject(attribute) ) {\n        attribute = { attribute: data }\n    }\n    data = ''\n    for ( var key in attribute ) {\n        var attr = (key == 'role' ? '' : 'aria-') + key,\n            attrVal = attribute[key]\n        data += attrVal == null ? '' : attr + '=\"' + attribute[key] + '\"'\n    }\n    return data\n}\n\n// IE8 bug throws an error for activeElements within iframes.\nfunction getActiveElement() {\n    try {\n        return document.activeElement\n    } catch ( err ) { }\n}\n\n\n\n// Expose the picker constructor.\nreturn PickerConstructor\n\n\n}));\n\n\n\n","/*!\n * Date picker for pickadate.js v3.5.6\n * http://amsul.github.io/pickadate.js/date.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar DAYS_IN_WEEK = 7,\n    WEEKS_IN_CALENDAR = 6,\n    _ = Picker._\n\n\n\n/**\n * The date picker constructor\n */\nfunction DatePicker( picker, settings ) {\n\n    var calendar = this,\n        element = picker.$node[ 0 ],\n        elementValue = element.value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format,\n        isRTL = function() {\n\n            return element.currentStyle ?\n\n                // For IE.\n                element.currentStyle.direction == 'rtl' :\n\n                // For normal browsers.\n                getComputedStyle( picker.$root[0] ).direction == 'rtl'\n        }\n\n    calendar.settings = settings\n    calendar.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    calendar.queue = {\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse navigate create validate',\n        view: 'parse create validate viewset',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    calendar.item = {}\n\n    calendar.item.clear = null\n    calendar.item.disable = ( settings.disable || [] ).slice( 0 )\n    calendar.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( calendar.item.disable )\n\n    calendar.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        calendar.set( 'select', valueString, {\n            format: formatString,\n            defaultValue: true\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        calendar.\n            set( 'select', null ).\n            set( 'highlight', calendar.item.now )\n    }\n\n\n    // The keycode to movement mapping.\n    calendar.key = {\n        40: 7, // Down\n        38: -7, // Up\n        39: function() { return isRTL() ? -1 : 1 }, // Right\n        37: function() { return isRTL() ? 1 : -1 }, // Left\n        go: function( timeChange ) {\n            var highlightedObject = calendar.item.highlight,\n                targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )\n            calendar.set(\n                'highlight',\n                targetDate,\n                { interval: timeChange }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )\n                }\n            })\n            picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )\n                }\n            })\n        }, 1 ).\n        on( 'open', function() {\n            var includeToday = ''\n            if ( calendar.disabled( calendar.get('now') ) ) {\n                includeToday = ':not(.' + settings.klass.buttonToday + ')'\n            }\n            picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button, select' ).attr( 'disabled', true )\n        }, 1 )\n\n} //DatePicker\n\n\n/**\n * Set a datepicker item object.\n */\nDatePicker.prototype.set = function( type, value, options ) {\n\n    var calendar = this,\n        calendarItem = calendar.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        calendarItem[ type ] = value\n        return calendar\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {\n        value = calendar[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        calendar.set( 'highlight', calendarItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        calendar.set( 'view', calendarItem.highlight, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {\n            calendar.set( 'select', calendarItem.select, options )\n        }\n        if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {\n            calendar.set( 'highlight', calendarItem.highlight, options )\n        }\n    }\n\n    return calendar\n} //DatePicker.prototype.set\n\n\n/**\n * Get a datepicker item object.\n */\nDatePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //DatePicker.prototype.get\n\n\n/**\n * Create a picker date object.\n */\nDatePicker.prototype.create = function( type, value, options ) {\n\n    var isInfiniteValue,\n        calendar = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n\n    // If it’s infinity, update the value.\n    if ( value == -Infinity || value == Infinity ) {\n        isInfiniteValue = value\n    }\n\n    // If it’s an object, use the native date object.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.obj\n    }\n\n    // If it’s an array, convert it into a date and make sure\n    // that it’s a valid date – otherwise default to today.\n    else if ( $.isArray( value ) ) {\n        value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )\n        value = _.isDate( value ) ? value : calendar.create().obj\n    }\n\n    // If it’s a number or date object, make a normalized date.\n    else if ( _.isInteger( value ) || _.isDate( value ) ) {\n        value = calendar.normalize( new Date( value ), options )\n    }\n\n    // If it’s a literal true or any other case, set it to now.\n    else /*if ( value === true )*/ {\n        value = calendar.now( type, value, options )\n    }\n\n    // Return the compiled object.\n    return {\n        year: isInfiniteValue || value.getFullYear(),\n        month: isInfiniteValue || value.getMonth(),\n        date: isInfiniteValue || value.getDate(),\n        day: isInfiniteValue || value.getDay(),\n        obj: isInfiniteValue || value,\n        pick: isInfiniteValue || value.getTime()\n    }\n} //DatePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nDatePicker.prototype.createRange = function( from, to ) {\n\n    var calendar = this,\n        createDate = function( date ) {\n            if ( date === true || $.isArray( date ) || _.isDate( date ) ) {\n                return calendar.create( date )\n            }\n            return date\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createDate( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createDate( to )\n    }\n\n    // Create relative dates.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.year, to.month, to.date + from ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.year, from.month, from.date + to ];\n    }\n\n    return {\n        from: createDate( from ),\n        to: createDate( to )\n    }\n} //DatePicker.prototype.createRange\n\n\n/**\n * Check if a date unit falls within a date range object.\n */\nDatePicker.prototype.withinRange = function( range, dateUnit ) {\n    range = this.createRange(range.from, range.to)\n    return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two date range objects overlap.\n */\nDatePicker.prototype.overlapRanges = function( one, two ) {\n\n    var calendar = this\n\n    // Convert the ranges into comparable dates.\n    one = calendar.createRange( one.from, one.to )\n    two = calendar.createRange( two.from, two.to )\n\n    return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||\n        calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )\n}\n\n\n/**\n * Get the date today.\n */\nDatePicker.prototype.now = function( type, value, options ) {\n    value = new Date()\n    if ( options && options.rel ) {\n        value.setDate( value.getDate() + options.rel )\n    }\n    return this.normalize( value, options )\n}\n\n\n/**\n * Navigate to next/prev month.\n */\nDatePicker.prototype.navigate = function( type, value, options ) {\n\n    var targetDateObject,\n        targetYear,\n        targetMonth,\n        targetDate,\n        isTargetArray = $.isArray( value ),\n        isTargetObject = $.isPlainObject( value ),\n        viewsetObject = this.item.view/*,\n        safety = 100*/\n\n\n    if ( isTargetArray || isTargetObject ) {\n\n        if ( isTargetObject ) {\n            targetYear = value.year\n            targetMonth = value.month\n            targetDate = value.date\n        }\n        else {\n            targetYear = +value[0]\n            targetMonth = +value[1]\n            targetDate = +value[2]\n        }\n\n        // If we’re navigating months but the view is in a different\n        // month, navigate to the view’s year and month.\n        if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {\n            targetYear = viewsetObject.year\n            targetMonth = viewsetObject.month\n        }\n\n        // Figure out the expected target year and month.\n        targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )\n        targetYear = targetDateObject.getFullYear()\n        targetMonth = targetDateObject.getMonth()\n\n        // If the month we’re going to doesn’t have enough days,\n        // keep decreasing the date until we reach the month’s last date.\n        while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {\n            targetDate -= 1\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'\n            }*/\n        }\n\n        value = [ targetYear, targetMonth, targetDate ]\n    }\n\n    return value\n} //DatePicker.prototype.navigate\n\n\n/**\n * Normalize a date by setting the hours to midnight.\n */\nDatePicker.prototype.normalize = function( value/*, options*/ ) {\n    value.setHours( 0, 0, 0, 0 )\n    return value\n}\n\n\n/**\n * Measure the range of dates.\n */\nDatePicker.prototype.measure = function( type, value/*, options*/ ) {\n\n    var calendar = this\n\n    // If it’s anything false-y, remove the limits.\n    if ( !value ) {\n        value = type == 'min' ? -Infinity : Infinity\n    }\n\n    // If it’s a string, parse it.\n    else if ( typeof value == 'string' ) {\n        value = calendar.parse( type, value )\n    }\n\n    // If it's an integer, get a date relative to today.\n    else if ( _.isInteger( value ) ) {\n        value = calendar.now( type, value, { rel: value } )\n    }\n\n    return value\n} ///DatePicker.prototype.measure\n\n\n/**\n * Create a viewset object based on navigation.\n */\nDatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {\n    return this.create([ dateObject.year, dateObject.month, 1 ])\n}\n\n\n/**\n * Validate a date as enabled and shift if needed.\n */\nDatePicker.prototype.validate = function( type, dateObject, options ) {\n\n    var calendar = this,\n\n        // Keep a reference to the original date.\n        originalDateObject = dateObject,\n\n        // Make sure we have an interval.\n        interval = options && options.interval ? options.interval : 1,\n\n        // Check if the calendar enabled dates are inverted.\n        isFlippedBase = calendar.item.enable === -1,\n\n        // Check if we have any enabled dates after/before now.\n        hasEnabledBeforeTarget, hasEnabledAfterTarget,\n\n        // The min & max limits.\n        minLimitObject = calendar.item.min,\n        maxLimitObject = calendar.item.max,\n\n        // Check if we’ve reached the limit during shifting.\n        reachedMin, reachedMax,\n\n        // Check if the calendar is inverted and at least one weekday is enabled.\n        hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {\n\n            // If there’s a date, check where it is relative to the target.\n            if ( $.isArray( value ) ) {\n                var dateTime = calendar.create( value ).pick\n                if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true\n                else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true\n            }\n\n            // Return only integers for enabled weekdays.\n            return _.isInteger( value )\n        }).length/*,\n\n        safety = 100*/\n\n\n\n    // Cases to validate for:\n    // [1] Not inverted and date disabled.\n    // [2] Inverted and some dates enabled.\n    // [3] Not inverted and out of range.\n    //\n    // Cases to **not** validate for:\n    // • Navigating months.\n    // • Not inverted and date enabled.\n    // • Inverted and all dates disabled.\n    // • ..and anything else.\n    if ( !options || (!options.nav && !options.defaultValue) ) if (\n        /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||\n        /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||\n        /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )\n    ) {\n\n\n        // When inverted, flip the direction if there aren’t any enabled weekdays\n        // and there are no enabled dates in the direction of the interval.\n        if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {\n            interval *= -1\n        }\n\n\n        // Keep looping until we reach an enabled date.\n        while ( /*safety &&*/ calendar.disabled( dateObject ) ) {\n\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'\n            }*/\n\n\n            // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.\n            if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {\n                dateObject = originalDateObject\n                interval = interval > 0 ? 1 : -1\n            }\n\n\n            // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.\n            if ( dateObject.pick <= minLimitObject.pick ) {\n                reachedMin = true\n                interval = 1\n                dateObject = calendar.create([\n                    minLimitObject.year,\n                    minLimitObject.month,\n                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)\n                ])\n            }\n            else if ( dateObject.pick >= maxLimitObject.pick ) {\n                reachedMax = true\n                interval = -1\n                dateObject = calendar.create([\n                    maxLimitObject.year,\n                    maxLimitObject.month,\n                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)\n                ])\n            }\n\n\n            // If we’ve reached both limits, just break out of the loop.\n            if ( reachedMin && reachedMax ) {\n                break\n            }\n\n\n            // Finally, create the shifted date using the interval and keep looping.\n            dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])\n        }\n\n    } //endif\n\n\n    // Return the date object settled on.\n    return dateObject\n} //DatePicker.prototype.validate\n\n\n/**\n * Check if a date is disabled.\n */\nDatePicker.prototype.disabled = function( dateToVerify ) {\n\n    var\n        calendar = this,\n\n        // Filter through the disabled dates to check if this is one.\n        isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {\n\n            // If the date is a number, match the weekday with 0index and `firstDay` check.\n            if ( _.isInteger( dateToDisable ) ) {\n                return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7\n            }\n\n            // If it’s an array or a native JS date, create and match the exact date.\n            if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {\n                return dateToVerify.pick === calendar.create( dateToDisable ).pick\n            }\n\n            // If it’s an object, match a date within the “from” and “to” range.\n            if ( $.isPlainObject( dateToDisable ) ) {\n                return calendar.withinRange( dateToDisable, dateToVerify )\n            }\n        })\n\n    // If this date matches a disabled date, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {\n        return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||\n            $.isPlainObject( dateToDisable ) && dateToDisable.inverted\n    }).length\n\n    // Check the calendar “enabled” flag and respectively flip the\n    // disabled state. Then also check if it’s beyond the min/max limits.\n    return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        dateToVerify.pick < calendar.item.min.pick ||\n        dateToVerify.pick > calendar.item.max.pick\n\n} //DatePicker.prototype.disabled\n\n\n/**\n * Parse a string into a usable type.\n */\nDatePicker.prototype.parse = function( type, value, options ) {\n\n    var calendar = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = calendar.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    calendar.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            // Grab the formatting label.\n            formattingLabel = calendar.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            parsingObject[ label ] = value.substr( 0, formatLength )\n        }\n\n        // Update the value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Compensate for month 0index.\n    return [\n        parsingObject.yyyy || parsingObject.yy,\n        +( parsingObject.mm || parsingObject.m ) - 1,\n        parsingObject.dd || parsingObject.d\n    ]\n} //DatePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nDatePicker.prototype.formats = (function() {\n\n    // Return the length of the first word in a collection.\n    function getWordLengthFromCollection( string, collection, dateObject ) {\n\n        // Grab the first word from the string.\n        // Regex pattern from http://stackoverflow.com/q/150033\n        var word = string.match( /[^\\x00-\\x7F]+|\\w+/ )[ 0 ]\n\n        // If there's no month index, add it to the date object\n        if ( !dateObject.mm && !dateObject.m ) {\n            dateObject.m = collection.indexOf( word ) + 1\n        }\n\n        // Return the length of the word.\n        return word.length\n    }\n\n    // Get the length of the first word in a string.\n    function getFirstWordLength( string ) {\n        return string.match( /\\w+/ )[ 0 ].length\n    }\n\n    return {\n\n        d: function( string, dateObject ) {\n\n            // If there's string, then get the digits length.\n            // Otherwise return the selected date.\n            return string ? _.digits( string ) : dateObject.date\n        },\n        dd: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected date with a leading zero.\n            return string ? 2 : _.lead( dateObject.date )\n        },\n        ddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the short selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]\n        },\n        dddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the full selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]\n        },\n        m: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the digits\n            // Otherwise return the selected month with 0index compensation.\n            return string ? _.digits( string ) : dateObject.month + 1\n        },\n        mm: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected month with 0index and leading zero.\n            return string ? 2 : _.lead( dateObject.month + 1 )\n        },\n        mmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsShort\n\n            // If there's a string, get length of the relevant month from the short\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        mmmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsFull\n\n            // If there's a string, get length of the relevant month from the full\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        yy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected year by slicing out the first 2 digits.\n            return string ? 2 : ( '' + dateObject.year ).slice( 2 )\n        },\n        yyyy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 4.\n            // Otherwise return the selected year.\n            return string ? 4 : dateObject.year\n        },\n\n        // Create an array by splitting the formatting string passed.\n        toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },\n\n        // Format an object into a string using the formatting options.\n        toString: function ( formatString, itemObject ) {\n            var calendar = this\n            return calendar.formats.toArray( formatString ).map( function( label ) {\n                return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n            }).join( '' )\n        }\n    }\n})() //DatePicker.prototype.formats\n\n\n\n\n/**\n * Check if two date units are the exact.\n */\nDatePicker.prototype.isDateExact = function( one, two ) {\n\n    var calendar = this\n\n    // When we’re working with weekdays, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with date representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return calendar.create( one ).pick === calendar.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two date units overlap.\n */\nDatePicker.prototype.isDateOverlap = function( one, two ) {\n\n    var calendar = this,\n        firstDay = calendar.settings.firstDay ? 1 : 0\n\n    // When we’re working with a weekday index, compare the days.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        one = one % 7 + firstDay\n        return one === calendar.create( two ).day + 1\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        two = two % 7 + firstDay\n        return two === calendar.create( one ).day + 1\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nDatePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of dates as “disabled”.\n */\nDatePicker.prototype.deactivate = function( type, datesToDisable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToDisable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToDisable === false ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToDisable === true ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the dates to disable.\n    else {\n\n        datesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //DatePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of dates as “enabled”.\n */\nDatePicker.prototype.activate = function( type, datesToEnable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToEnable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToEnable === true ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToEnable === false ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled dates.\n    else {\n\n        datesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isExactRange\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isExactRange = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[3] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an exact range of dates,\n            // make sure there are no “inverted” dates because of it.\n            if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //DatePicker.prototype.activate\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nDatePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        calendar = this,\n        settings = calendar.settings,\n        calendarItem = calendar.item,\n        nowObject = calendarItem.now,\n        selectedObject = calendarItem.select,\n        highlightedObject = calendarItem.highlight,\n        viewsetObject = calendarItem.view,\n        disabledCollection = calendarItem.disable,\n        minLimitObject = calendarItem.min,\n        maxLimitObject = calendarItem.max,\n\n\n        // Create the calendar table head using a copy of weekday labels collection.\n        // * We do a copy so we don't mutate the original array.\n        tableHead = (function( collection, fullCollection ) {\n\n            // If the first day should be Monday, move Sunday to the end.\n            if ( settings.firstDay ) {\n                collection.push( collection.shift() )\n                fullCollection.push( fullCollection.shift() )\n            }\n\n            // Create and return the table head group.\n            return _.node(\n                'thead',\n                _.node(\n                    'tr',\n                    _.group({\n                        min: 0,\n                        max: DAYS_IN_WEEK - 1,\n                        i: 1,\n                        node: 'th',\n                        item: function( counter ) {\n                            return [\n                                collection[ counter ],\n                                settings.klass.weekdays,\n                                'scope=col title=\"' + fullCollection[ counter ] + '\"'\n                            ]\n                        }\n                    })\n                )\n            ) //endreturn\n        })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead\n\n\n        // Create the nav for next/prev month.\n        createMonthNav = function( next ) {\n\n            // Otherwise, return the created month tag.\n            return _.node(\n                'div',\n                ' ',\n                settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (\n\n                    // If the focused month is outside the range, disabled the button.\n                    ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||\n                    ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?\n                    ' ' + settings.klass.navDisabled : ''\n                ),\n                'data-nav=' + ( next || -1 ) + ' ' +\n                _.ariaAttr({\n                    role: 'button',\n                    controls: calendar.$node[0].id + '_table'\n                }) + ' ' +\n                'title=\"' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '\"'\n            ) //endreturn\n        }, //createMonthNav\n\n\n        // Create the month label.\n        createMonthLabel = function() {\n\n            var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull\n\n            // If there are months to select, add a dropdown menu.\n            if ( settings.selectMonths ) {\n\n                return _.node( 'select',\n                    _.group({\n                        min: 0,\n                        max: 11,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedMonth ) {\n\n                            return [\n\n                                // The looped month and no classes.\n                                monthsCollection[ loopedMonth ], 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedMonth +\n                                ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +\n                                (\n                                    (\n                                        ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||\n                                        ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )\n                                    ) ?\n                                    ' disabled' : ''\n                                )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectMonth,\n                    ( isOpen ? '' : 'disabled' ) + ' ' +\n                    _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelMonthSelect + '\"'\n                )\n            }\n\n            // If there's a need for a month selector\n            return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )\n        }, //createMonthLabel\n\n\n        // Create the year label.\n        createYearLabel = function() {\n\n            var focusedYear = viewsetObject.year,\n\n            // If years selector is set to a literal \"true\", set it to 5. Otherwise\n            // divide in half to get half before and half after focused year.\n            numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )\n\n            // If there are years to select, add a dropdown menu.\n            if ( numberYears ) {\n\n                var\n                    minYear = minLimitObject.year,\n                    maxYear = maxLimitObject.year,\n                    lowestYear = focusedYear - numberYears,\n                    highestYear = focusedYear + numberYears\n\n                // If the min year is greater than the lowest year, increase the highest year\n                // by the difference and set the lowest year to the min year.\n                if ( minYear > lowestYear ) {\n                    highestYear += minYear - lowestYear\n                    lowestYear = minYear\n                }\n\n                // If the max year is less than the highest year, decrease the lowest year\n                // by the lower of the two: available and needed years. Then set the\n                // highest year to the max year.\n                if ( maxYear < highestYear ) {\n\n                    var availableYears = lowestYear - minYear,\n                        neededYears = highestYear - maxYear\n\n                    lowestYear -= availableYears > neededYears ? neededYears : availableYears\n                    highestYear = maxYear\n                }\n\n                return _.node( 'select',\n                    _.group({\n                        min: lowestYear,\n                        max: highestYear,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedYear ) {\n                            return [\n\n                                // The looped year and no classes.\n                                loopedYear, 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectYear,\n                    ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelYearSelect + '\"'\n                )\n            }\n\n            // Otherwise just return the year focused\n            return _.node( 'div', focusedYear, settings.klass.year )\n        } //createYearLabel\n\n\n    // Create and return the entire calendar.\n    return _.node(\n        'div',\n        ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +\n        createMonthNav() + createMonthNav( 1 ),\n        settings.klass.header\n    ) + _.node(\n        'table',\n        tableHead +\n        _.node(\n            'tbody',\n            _.group({\n                min: 0,\n                max: WEEKS_IN_CALENDAR - 1,\n                i: 1,\n                node: 'tr',\n                item: function( rowCounter ) {\n\n                    // If Monday is the first day and the month starts on Sunday, shift the date back a week.\n                    var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0\n\n                    return [\n                        _.group({\n                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index\n                            max: function() {\n                                return this.min + DAYS_IN_WEEK - 1\n                            },\n                            i: 1,\n                            node: 'td',\n                            item: function( targetDate ) {\n\n                                // Convert the time date from a relative date to a target date.\n                                targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])\n\n                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,\n                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,\n                                    isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,\n                                    formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] )\n\n                                return [\n                                    _.node(\n                                        'div',\n                                        targetDate.date,\n                                        (function( klasses ) {\n\n                                            // Add the `infocus` or `outfocus` classes based on month in view.\n                                            klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )\n\n                                            // Add the `today` class if needed.\n                                            if ( nowObject.pick == targetDate.pick ) {\n                                                klasses.push( settings.klass.now )\n                                            }\n\n                                            // Add the `selected` class if something's selected and the time matches.\n                                            if ( isSelected ) {\n                                                klasses.push( settings.klass.selected )\n                                            }\n\n                                            // Add the `highlighted` class if something's highlighted and the time matches.\n                                            if ( isHighlighted ) {\n                                                klasses.push( settings.klass.highlighted )\n                                            }\n\n                                            // Add the `disabled` class if something's disabled and the object matches.\n                                            if ( isDisabled ) {\n                                                klasses.push( settings.klass.disabled )\n                                            }\n\n                                            return klasses.join( ' ' )\n                                        })([ settings.klass.day ]),\n                                        'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({\n                                            role: 'gridcell',\n                                            label: formattedDate,\n                                            selected: isSelected && calendar.$node.val() === formattedDate ? true : null,\n                                            activedescendant: isHighlighted ? true : null,\n                                            disabled: isDisabled ? true : null\n                                        })\n                                    ),\n                                    '',\n                                    _.ariaAttr({ role: 'presentation' })\n                                ] //endreturn\n                            }\n                        })\n                    ] //endreturn\n                }\n            })\n        ),\n        settings.klass.table,\n        'id=\"' + calendar.$node[0].id + '_table' + '\" ' + _.ariaAttr({\n            role: 'grid',\n            controls: calendar.$node[0].id,\n            readonly: true\n        })\n    ) +\n\n    // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.\n    _.node(\n        'div',\n        _.node( 'button', settings.today, settings.klass.buttonToday,\n            'type=button data-pick=' + nowObject.pick +\n            ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node( 'button', settings.clear, settings.klass.buttonClear,\n            'type=button data-clear=1' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node('button', settings.close, settings.klass.buttonClose,\n            'type=button data-close=true ' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ),\n        settings.klass.footer\n    ) //endreturn\n} //DatePicker.prototype.nodes\n\n\n\n\n/**\n * The date picker defaults.\n */\nDatePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // The title label to use for the month nav buttons\n        labelMonthNext: 'Next month',\n        labelMonthPrev: 'Previous month',\n\n        // The title label to use for the dropdown selectors\n        labelMonthSelect: 'Select a month',\n        labelYearSelect: 'Select a year',\n\n        // Months and weekdays\n        monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n        monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],\n        weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],\n        weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\n        // Today and clear\n        today: 'Today',\n        clear: 'Clear',\n        close: 'Close',\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // The format to show on the `input` element\n        format: 'd mmmm, yyyy',\n\n        // Classes\n        klass: {\n\n            table: prefix + 'table',\n\n            header: prefix + 'header',\n\n            navPrev: prefix + 'nav--prev',\n            navNext: prefix + 'nav--next',\n            navDisabled: prefix + 'nav--disabled',\n\n            month: prefix + 'month',\n            year: prefix + 'year',\n\n            selectMonth: prefix + 'select--month',\n            selectYear: prefix + 'select--year',\n\n            weekdays: prefix + 'weekday',\n\n            day: prefix + 'day',\n            disabled: prefix + 'day--disabled',\n            selected: prefix + 'day--selected',\n            highlighted: prefix + 'day--highlighted',\n            now: prefix + 'day--today',\n            infocus: prefix + 'day--infocus',\n            outfocus: prefix + 'day--outfocus',\n\n            footer: prefix + 'footer',\n\n            buttonClear: prefix + 'button--clear',\n            buttonToday: prefix + 'button--today',\n            buttonClose: prefix + 'button--close'\n        }\n    }\n})( Picker.klasses().picker + '__' )\n\n\n\n\n\n/**\n * Extend the picker to add the date picker.\n */\nPicker.extend( 'pickadate', DatePicker )\n\n\n}));\n\n\n\n","export { _createClass as createClass, _extends as extends, _inheritsLoose as inheritsLoose };\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}","/*\n * Customise pickadate JavaScript for Material\n */\n\n(function ($) {\n  'use strict'\n\n  var Datepicker = function (element, options) {\n    this._element = element\n    this._options = options\n  }\n\n  Datepicker.DEFAULTS = {\n    cancel        : 'Cancel',\n    closeOnCancel : true,\n    closeOnSelect : false,\n    container     : 'body',\n    disable       : [],\n    firstDay      : 0,\n    format        : 'd/m/yyyy',\n    formatSubmit  : '',\n    klass         : {\n      // button\n      buttonClear : 'btn btn-outline-primary picker-button-clear',\n      buttonClose : 'btn btn-outline-primary picker-button-close',\n      buttonToday : 'btn btn-outline-primary picker-button-today',\n\n      // day\n      day         : 'picker-day',\n      disabled    : 'picker-day-disabled',\n      highlighted : 'picker-day-highlighted',\n      infocus     : 'picker-day-infocus',\n      now         : 'picker-day-today',\n      outfocus    : 'picker-day-outfocus',\n      selected    : 'picker-day-selected',\n      weekdays    : 'picker-weekday',\n\n      // element\n      box         : 'picker-box',\n      footer      : 'picker-footer',\n      frame       : 'picker-frame',\n      header      : 'picker-header',\n      holder      : 'picker-holder',\n      table       : 'picker-table',\n      wrap        : 'picker-wrap',\n\n      // input element\n      active      : 'picker-input-active',\n      input       : 'picker-input',\n\n      // month and year nav\n      month       : 'picker-month',\n      navDisabled : 'picker-nav-disabled',\n      navNext     : 'material-icons picker-nav-next',\n      navPrev     : 'material-icons picker-nav-prev',\n      selectMonth : 'picker-select-month',\n      selectYear  : 'picker-select-year',\n      year        : 'picker-year',\n\n      // root picker\n      focused     : 'picker-focused',\n      opened      : 'picker-opened',\n      picker      : 'picker'\n    },\n    max           : false,\n    min           : false,\n    monthsFull    : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    monthsShort   : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    ok            : 'OK',\n    onClose       : false,\n    onOpen        : false,\n    onRender      : false,\n    onSet         : false,\n    onStart       : false,\n    onStop        : false,\n    selectMonths  : false,\n    selectYears   : false,\n    today         : '',\n    weekdaysFull  : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    weekdaysShort : ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n  }\n\n  Datepicker.prototype.display = function (datepickerApi, datepickerRoot, datepickerValue) {\n    $('.picker-date-display', datepickerRoot).remove()\n\n    $('.picker-wrap', datepickerRoot).prepend('<div class=\"picker-date-display\">' +\n      '<div class=\"picker-date-display-top\">' +\n        '<span class=\"picker-year-display\">' + datepickerApi.get(datepickerValue, 'yyyy') + '</span>' +\n      '</div>' +\n      '<div class=\"picker-date-display-bottom\">' +\n        '<span class=\"picker-weekday-display\">' + datepickerApi.get(datepickerValue, 'dddd') + '</span>' +\n        '<span class=\"picker-day-display\">' + datepickerApi.get(datepickerValue, 'd') + '</span>' +\n        '<span class=\"picker-month-display\">' + datepickerApi.get(datepickerValue, 'mmm') + '</span>' +\n      '</div>' +\n    '</div>')\n  }\n\n  Datepicker.prototype.show = function () {\n    var that = this\n\n    $(this._element).pickadate({\n      clear         : that._options.cancel,\n      close         : that._options.ok,\n      closeOnClear  : that._options.closeOnCancel,\n      closeOnSelect : that._options.closeOnSelect,\n      container     : that._options.container,\n      disable       : that._options.disable,\n      firstDay      : that._options.firstDay,\n      format        : that._options.format,\n      formatSubmit  : that._options.formatSubmit,\n      klass         : that._options.klass,\n      max           : that._options.max,\n      min           : that._options.min,\n      monthsFull    : that._options.monthsFull,\n      monthsShort   : that._options.monthsShort,\n      onClose       : that._options.onClose,\n      onOpen        : that._options.onOpen,\n      onRender      : that._options.onRender,\n      onSet         : that._options.onSet,\n      onStart       : that._options.onStart,\n      onStop        : that._options.onStop,\n      selectMonths  : that._options.selectMonths,\n      selectYears   : that._options.selectYears,\n      today         : that._options.today,\n      weekdaysFull  : that._options.weekdaysFull,\n      weekdaysShort : that._options.weekdaysShort\n    })\n\n    var datepickerApi  = $(this._element).pickadate('picker'),\n        datepickerNode = datepickerApi.$node,\n        datepickerRoot = datepickerApi.$root\n\n    datepickerApi.on({\n      close: function () {\n        $(document.activeElement).blur()\n      },\n      open: function () {\n        if (!$('.picker__date-display', datepickerRoot).length) {\n          that.display(datepickerApi, datepickerRoot, 'highlight')\n        }\n      },\n      set: function () {\n        if (datepickerApi.get('select') !== null) {\n          that.display(datepickerApi, datepickerRoot, 'select')\n        }\n      }\n    })\n  }\n\n  function Plugin (option) {\n    return this.each(function () {\n      var data    = $(this).data('bs.pickdate')\n      var options = $.extend({}, Datepicker.DEFAULTS, $(this).data(), typeof option == 'object' && option)\n\n      if (!data) {\n        $(this).data('bs.pickdate', (data = new Datepicker(this, options)))\n      }\n\n      data.show()\n    })\n  }\n\n  var old = $.fn.pickdate\n\n  $.fn.pickdate             = Plugin\n  $.fn.pickdate.Constructor = Datepicker\n\n  $.fn.pickdate.noConflict = function () {\n    $.fn.pickdate = old\n    return this\n  }\n}(jQuery))\n","import $ from 'jquery'\n\n/*\n * expansion panel\n * upon selecting the collapsed panel,\n * it expands to display in full\n */\n\nconst ExpansionPanel = (($) => {\n\n  // constants >>>\n  const DATA_KEY  = 'bs.collapse'\n  const EVENT_KEY = `.${DATA_KEY}`\n\n  const ClassName = {\n    SHOW             : 'show',\n    SHOW_PREDECESSOR : 'show-predecessor'\n  }\n\n  const Event = {\n    HIDE : `hide${EVENT_KEY}`,\n    SHOW : `show${EVENT_KEY}`\n  }\n\n  const Selector = {\n    PANEL      : '.expansion-panel',\n    PANEL_BODY : '.expansion-panel .collapse'\n  }\n  // <<< constants\n\n  $(document).on(`${Event.HIDE}`, Selector.PANEL_BODY, function () {\n    const target = $(this).closest(Selector.PANEL)\n\n    target.removeClass(ClassName.SHOW)\n\n    const predecessor = target.prev(Selector.PANEL)\n\n    if (predecessor.length) {\n      predecessor.removeClass(ClassName.SHOW_PREDECESSOR)\n    }\n  }).on(`${Event.SHOW}`, Selector.PANEL_BODY, function () {\n    const target = $(this).closest(Selector.PANEL)\n\n    target.addClass(ClassName.SHOW)\n\n    const predecessor = target.prev(Selector.PANEL)\n\n    if (predecessor.length) {\n      predecessor.addClass(ClassName.SHOW_PREDECESSOR)\n    }\n  })\n\n})($)\n\nexport default ExpansionPanel\n","import $ from 'jquery'\n\n/*\n * floating label\n * when a user engages with the text input field,\n * the floating inline labels move to float above the field\n */\n\nconst FloatingLabel = (($) => {\n\n  // constants >>>\n  const DATA_KEY    = 'md.floatinglabel'\n  const EVENT_KEY   = `.${DATA_KEY}`\n  const NAME        = 'floatinglabel'\n  const NO_CONFLICT = $.fn[NAME]\n\n  const ClassName = {\n    IS_FOCUSED : 'is-focused',\n    HAS_VALUE  : 'has-value'\n  }\n\n  const Event = {\n    CHANGE   : `change${EVENT_KEY}`,\n    FOCUSIN  : `focusin${EVENT_KEY}`,\n    FOCUSOUT : `focusout${EVENT_KEY}`\n  }\n\n  const Selector = {\n    DATA_PARENT : '.floating-label',\n    DATA_TOGGLE : '.floating-label .form-control'\n  }\n  // <<< constants\n\n  class FloatingLabel {\n    constructor(element) {\n      this._element = element\n      this._parent  = $(element).closest(Selector.DATA_PARENT)[0]\n    }\n\n    change() {\n      if ($(this._element).val() ||\n        $(this._element).is('select') &&\n        $('option:first-child', $(this._element)).html().replace(' ', '') !== '') {\n        $(this._parent).addClass(ClassName.HAS_VALUE)\n      } else {\n        $(this._parent).removeClass(ClassName.HAS_VALUE)\n      }\n    }\n\n    focusin() {\n      $(this._parent).addClass(ClassName.IS_FOCUSED)\n    }\n\n    focusout() {\n      $(this._parent).removeClass(ClassName.IS_FOCUSED)\n    }\n\n    static _jQueryInterface(event) {\n      return this.each(function () {\n        const _event = event ? event : 'change'\n\n        let data = $(this).data(DATA_KEY)\n\n        if (!data) {\n          data = new FloatingLabel(this)\n\n          $(this).data(DATA_KEY, data)\n        }\n\n        if (typeof _event === 'string') {\n          if (typeof data[_event] === 'undefined') {\n            throw new Error(`No method named \"${_event}\"`)\n          }\n\n          data[_event]()\n        }\n      })\n    }\n  }\n\n  $(document).on(`${Event.CHANGE} ${Event.FOCUSIN} ${Event.FOCUSOUT}`, Selector.DATA_TOGGLE, function (event) {\n    FloatingLabel._jQueryInterface.call($(this), event.type)\n  })\n\n  $.fn[NAME]             = FloatingLabel._jQueryInterface\n  $.fn[NAME].Constructor = FloatingLabel\n  $.fn[NAME].noConflict  = function () {\n    $.fn[NAME] = NO_CONFLICT\n\n    return FloatingLabel._jQueryInterface\n  }\n\n  return FloatingLabel\n\n})($)\n\nexport default FloatingLabel\n","import $ from 'jquery'\nimport Util from './util'\n\n/*\n * Navigation drawer\n * Based on Bootstrap's (v4.0.0) `modal.js`\n */\n\nconst NavDrawer = (($) => {\n\n  // constants >>>\n  const DATA_API_KEY   = '.data-api'\n  const DATA_KEY       = 'md.navdrawer'\n  const ESCAPE_KEYCODE = 27\n  const EVENT_KEY      = `.${DATA_KEY}`\n  const NAME           = 'navdrawer'\n  const NO_CONFLICT    = $.fn[NAME]\n\n  const Breakpoints = {\n    DESKTOP : 992,\n    TABLET  : 576\n  }\n\n  const ClassName = {\n    BACKDROP : 'navdrawer-backdrop',\n    OPEN     : 'navdrawer-open',\n    SHOW     : 'show'\n  }\n\n  const Default = {\n    breakpoint : '',\n    keyboard   : true,\n    show       : true,\n    type       : 'default'\n  }\n\n  const DefaultType = {\n    keyboard : 'boolean',\n    show     : 'boolean',\n    type     : 'string'\n  }\n\n  const Event = {\n    CLICK_DATA_API    : `click${EVENT_KEY}${DATA_API_KEY}`,\n    CLICK_DISMISS     : `click.dismiss${EVENT_KEY}`,\n    FOCUSIN           : `focusin${EVENT_KEY}`,\n    HIDDEN            : `hidden${EVENT_KEY}`,\n    HIDE              : `hide${EVENT_KEY}`,\n    KEYDOWN_DISMISS   : `keydown.dismiss${EVENT_KEY}`,\n    MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n    MOUSEUP_DISMISS   : `mouseup.dismiss${EVENT_KEY}`,\n    SHOW              : `show${EVENT_KEY}`,\n    SHOWN             : `shown${EVENT_KEY}`\n  }\n\n  const Selector = {\n    CONTENT      : '.navdrawer-content',\n    DATA_DISMISS : '[data-dismiss=\"navdrawer\"]',\n    DATA_TOGGLE  : '[data-toggle=\"navdrawer\"]'\n  }\n\n  const TransitionDurationEntering = {\n    DESKTOP : 150,\n    MOBILE  : 225,\n    TABLET  : 292.5\n  }\n\n  const TransitionDurationLeaving = {\n    DESKTOP : 130,\n    MOBILE  : 195,\n    TABLET  : 253.5\n  }\n  // <<< constants\n\n  class NavDrawer {\n    constructor(element, config) {\n      this._backdrop            = null\n      this._config              = this._getConfig(config)\n      this._content             = $(element).find(Selector.CONTENT)[0]\n      this._element             = element\n      this._ignoreBackdropClick = false\n      this._isShown             = false\n      this._typeBreakpoint      = this._config.breakpoint === '' ? '' : `-${this._config.breakpoint}`\n    }\n\n    hide(event) {\n      if (event) {\n        event.preventDefault()\n      }\n\n      if (this._isTransitioning || !this._isShown) {\n        return\n      }\n\n      const hideEvent = $.Event(Event.HIDE)\n\n      $(this._element).trigger(hideEvent)\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return\n      }\n\n      this._isShown = false\n\n      const supportsTransition = Util.supportsTransitionEnd()\n\n      if (supportsTransition) {\n        this._isTransitioning = true\n      }\n\n      this._setEscapeEvent()\n\n      $(document).off(Event.FOCUSIN)\n\n      $(this._element).removeClass(ClassName.SHOW)\n\n      $(this._element).off(Event.CLICK_DISMISS)\n\n      $(this._content).off(Event.MOUSEDOWN_DISMISS)\n\n      if (supportsTransition) {\n        $(this._element)\n          .one(Util.TRANSITION_END, (event) => this._hideNavdrawer(event))\n          .emulateTransitionEnd(this._getTransitionDuration(TransitionDurationLeaving))\n      } else {\n        this._hideNavdrawer()\n      }\n\n      this._showBackdrop()\n    }\n\n    show(relatedTarget) {\n      if (this._isTransitioning || this._isShown) {\n        return\n      }\n\n      if (Util.supportsTransitionEnd()) {\n        this._isTransitioning = true\n      }\n\n      const showEvent = $.Event(Event.SHOW, {\n        relatedTarget\n      })\n\n      $(this._element).trigger(showEvent)\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return\n      }\n\n      this._isShown = true\n\n      $(document.body).addClass(`${ClassName.OPEN}-${this._config.type}${this._typeBreakpoint}`)\n\n      this._setEscapeEvent()\n\n      $(this._element).addClass(`${NAME}-${this._config.type}${this._typeBreakpoint}`)\n\n      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, (event) => this.hide(event))\n\n      $(this._content).on(Event.MOUSEDOWN_DISMISS, () => {\n        $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n          if ($(event.target).is(this._element)) {\n            this._ignoreBackdropClick = true\n          }\n        })\n      })\n\n      this._showBackdrop()\n      this._showElement(relatedTarget)\n    }\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget)\n    }\n\n    _enforceFocus() {\n      $(document)\n        .off(Event.FOCUSIN)\n        .on(Event.FOCUSIN, (event) => {\n          if (document !== event.target &&\n              this._element !== event.target &&\n              $(this._element).has(event.target).length === 0) {\n            this._element.focus()\n          }\n        })\n    }\n\n    _getConfig(config) {\n      config = {\n        ...Default,\n        ...config\n      }\n\n      Util.typeCheckConfig(NAME, config, DefaultType)\n\n      return config\n    }\n\n    _getTransitionDuration(duration) {\n      if (window.innerWidth >= Breakpoints.DESKTOP) {\n        return duration.DESKTOP\n      } else if (window.innerWidth >= Breakpoints.TABLET) {\n        return duration.TABLET\n      }\n\n      return duration.MOBILE\n    }\n\n    _hideNavdrawer() {\n      this._element.style.display = 'none'\n\n      this._element.setAttribute('aria-hidden', true)\n\n      this._isTransitioning = false\n\n      $(document.body).removeClass(`${ClassName.OPEN}-${this._config.type}${this._typeBreakpoint}`)\n\n      $(this._element).trigger(Event.HIDDEN)\n    }\n\n    _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove()\n        this._backdrop = null\n      }\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n          if (event.which === ESCAPE_KEYCODE) {\n            event.preventDefault()\n\n            this.hide()\n          }\n        })\n      } else if (!this._isShown) {\n        $(this._element).off(Event.KEYDOWN_DISMISS)\n      }\n    }\n\n    _showBackdrop() {\n      const supportsTransition = Util.supportsTransitionEnd()\n\n      if (this._isShown) {\n        this._backdrop = document.createElement('div')\n\n        $(this._backdrop)\n          .addClass(ClassName.BACKDROP)\n          .addClass(`${ClassName.BACKDROP}-${this._config.type}${this._typeBreakpoint}`)\n          .appendTo(document.body)\n\n        $(this._element).on(Event.CLICK_DISMISS, (event) => {\n          if (this._ignoreBackdropClick) {\n            this._ignoreBackdropClick = false\n\n            return\n          }\n\n          if (event.target !== event.currentTarget) {\n            return\n          }\n\n          this.hide()\n        })\n\n        if (supportsTransition) {\n          Util.reflow(this._backdrop)\n        }\n\n        $(this._backdrop).addClass(ClassName.SHOW)\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName.SHOW)\n\n        this._removeBackdrop()\n      }\n    }\n\n    _showElement(relatedTarget) {\n      const supportsTransition = Util.supportsTransitionEnd()\n\n      if (!this._element.parentNode ||\n          this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        document.body.appendChild(this._element)\n      }\n\n      this._element.style.display = 'block'\n\n      this._element.removeAttribute('aria-hidden')\n\n      if (supportsTransition) {\n        Util.reflow(this._element)\n      }\n\n      $(this._element).addClass(ClassName.SHOW)\n\n      this._enforceFocus()\n\n      const shownEvent = $.Event(Event.SHOWN, {\n        relatedTarget\n      })\n\n      const transitionComplete = () => {\n        this._element.focus()\n\n        this._isTransitioning = false\n\n        $(this._element).trigger(shownEvent)\n      }\n\n      if (supportsTransition) {\n        $(this._content)\n          .one(Util.TRANSITION_END, transitionComplete)\n          .emulateTransitionEnd(this._getTransitionDuration(TransitionDurationEntering))\n      } else {\n        transitionComplete()\n      }\n    }\n\n    static get Default() {\n      return Default\n    }\n\n    static _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const _config = {\n          ...NavDrawer.Default,\n          ...$(this).data(),\n          ...typeof config === 'object' && config\n        }\n\n        let data = $(this).data(DATA_KEY)\n\n        if (!data) {\n          data = new NavDrawer(this, _config)\n\n          $(this).data(DATA_KEY, data)\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`)\n          }\n\n          data[config](relatedTarget)\n        } else if (_config.show) {\n          data.show(relatedTarget)\n        }\n      })\n    }\n  }\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    const selector = Util.getSelectorFromElement(this)\n\n    let target\n\n    if (selector) {\n      target = $(selector)[0]\n    }\n\n    const config = $(target).data(DATA_KEY) ? 'toggle' : {\n      ...$(target).data(),\n      ...$(this).data()\n    }\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault()\n    }\n\n    const $target = $(target).one(Event.SHOW, (showEvent) => {\n      if (showEvent.isDefaultPrevented()) {\n        return\n      }\n\n      $target.one(Event.HIDDEN, () => {\n        if ($(this).is(':visible')) {\n          this.focus()\n        }\n      })\n    })\n\n    NavDrawer._jQueryInterface.call($(target), config, this)\n  })\n\n  $.fn[NAME]             = NavDrawer._jQueryInterface\n  $.fn[NAME].Constructor = NavDrawer\n  $.fn[NAME].noConflict  = function () {\n    $.fn[NAME] = NO_CONFLICT\n\n    return NavDrawer._jQueryInterface\n  }\n\n  return NavDrawer\n\n})($)\n\nexport default NavDrawer\n","import $ from 'jquery'\n\n/*\n * selection control focus\n * chrome persists the focus style on checkboxes/radio buttons after clicking\n */\n\nconst SelectionControlFocus = (($) => {\n\n  // constants >>>\n  const DATA_KEY  = 'md.selectioncontrolfocus'\n  const EVENT_KEY = `.${DATA_KEY}`\n\n  const ClassName = {\n    FOCUS : 'focus'\n  }\n\n  const LastInteraction = {\n    IS_MOUSEDOWN : false\n  }\n\n  const Event = {\n    BLUR      : `blur${EVENT_KEY}`,\n    FOCUS     : `focus${EVENT_KEY}`,\n    MOUSEDOWN : `mousedown${EVENT_KEY}`,\n    MOUSEUP   : `mouseup${EVENT_KEY}`\n  }\n\n  const Selector = {\n    CONTROL : '.custom-control',\n    INPUT   : '.custom-control-input'\n  }\n  // <<< constants\n\n  $(document).on(`${Event.BLUR}`, Selector.INPUT, function () {\n    $(this).removeClass(ClassName.FOCUS)\n  }).on(`${Event.FOCUS}`, Selector.INPUT, function () {\n    if (LastInteraction.IS_MOUSEDOWN === false) {\n      $(this).addClass(ClassName.FOCUS)\n    }\n  }).on(`${Event.MOUSEDOWN}`, Selector.CONTROL, () => {\n    LastInteraction.IS_MOUSEDOWN = true\n  }).on(`${Event.MOUSEUP}`, Selector.CONTROL, () => {\n    setTimeout(() => {\n      LastInteraction.IS_MOUSEDOWN = false\n    }, 1)\n  })\n\n})($)\n\nexport default SelectionControlFocus\n","import $ from 'jquery'\nimport Util from './util'\n\n/*\n * Tab indicator animation\n * Requires Bootstrap's (v4.0.0) `tab.js`\n */\n\nconst TabSwitch = (($) => {\n\n  // constants >>>\n  const DATA_KEY    = 'md.tabswitch'\n  const NAME        = 'tabswitch'\n  const NO_CONFLICT = $.fn[NAME]\n\n  const Breakpoints = {\n    DESKTOP : 992,\n    TABLET  : 576\n  }\n\n  const ClassName = {\n    ANIMATE       : 'animate',\n    DROPDOWN_ITEM : 'dropdown-item',\n    INDICATOR     : 'nav-tabs-indicator',\n    MATERIAL      : 'nav-tabs-material',\n    SCROLLABLE    : 'nav-tabs-scrollable',\n    SHOW          : 'show'\n  }\n\n  const Event = {\n    SHOW_BS_TAB : 'show.bs.tab'\n  }\n\n  const Selector = {\n    DATA_TOGGLE : '.nav-tabs [data-toggle=\"tab\"]',\n    DROPDOWN    : '.dropdown',\n    NAV         : '.nav-tabs'\n  }\n\n  const TransitionDuration = {\n    DESKTOP : 200,\n    MOBILE  : 300,\n    TABLET  : 390\n  }\n  // <<< constants\n\n  class TabSwitch {\n    constructor(nav) {\n      this._nav          = nav\n      this._navindicator = null\n    }\n\n    switch(element, relatedTarget) {\n      const navLeft            = $(this._nav).offset().left\n      const navScrollLeft      = $(this._nav).scrollLeft()\n      const navWidth           = $(this._nav).outerWidth()\n      const supportsTransition = Util.supportsTransitionEnd()\n\n      if (!this._navindicator) {\n        this._createIndicator(navLeft, navScrollLeft, navWidth, relatedTarget)\n      }\n\n      if ($(element).hasClass(ClassName.DROPDOWN_ITEM)) {\n        element = $(element).closest(Selector.DROPDOWN)\n      }\n\n      const elLeft  = $(element).offset().left\n      const elWidth = $(element).outerWidth()\n\n      $(this._navindicator).addClass(ClassName.SHOW)\n\n      Util.reflow(this._navindicator)\n\n      if (supportsTransition) {\n        $(this._nav).addClass(ClassName.ANIMATE)\n      }\n\n      $(this._navindicator).css({\n        left  : elLeft + navScrollLeft - navLeft,\n        right : navWidth - (elLeft + navScrollLeft - navLeft + elWidth)\n      })\n\n      const complete = () => {\n        $(this._nav).removeClass(ClassName.ANIMATE)\n\n        $(this._navindicator).removeClass(ClassName.SHOW)\n      }\n\n      if (!supportsTransition) {\n        complete()\n\n        return\n      }\n\n      let transitionDuration = TransitionDuration.MOBILE\n\n      if (window.innerWidth >= Breakpoints.DESKTOP) {\n        transitionDuration = TransitionDuration.DESKTOP\n      } else if (window.innerWidth >= Breakpoints.TABLET) {\n        transitionDuration = TransitionDuration.TABLET\n      }\n\n      $(this._navindicator)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    }\n\n    _createIndicator(navLeft, navScrollLeft, navWidth, relatedTarget) {\n      this._navindicator = document.createElement('div')\n\n      $(this._navindicator)\n        .addClass(ClassName.INDICATOR)\n        .appendTo(this._nav)\n\n      if (relatedTarget !== 'undefined') {\n        if ($(relatedTarget).hasClass(ClassName.DROPDOWN_ITEM)) {\n          relatedTarget = $(relatedTarget).closest(Selector.DROPDOWN)\n        }\n\n        const relatedLeft  = $(relatedTarget).offset().left\n        const relatedWidth = $(relatedTarget).outerWidth()\n\n        $(this._navindicator).css({\n          left  : relatedLeft + navScrollLeft - navLeft,\n          right : navWidth - (relatedLeft + navScrollLeft - navLeft + relatedWidth)\n        })\n      }\n\n      $(this._nav).addClass(ClassName.MATERIAL)\n    }\n\n    static _jQueryInterface(relatedTarget) {\n      return this.each(function () {\n        const nav = $(this).closest(Selector.NAV)[0]\n\n        if (!nav) {\n          return\n        }\n\n        let data = $(nav).data(DATA_KEY)\n\n        if (!data) {\n          data = new TabSwitch(nav)\n\n          $(nav).data(DATA_KEY, data)\n        }\n\n        data.switch(this, relatedTarget)\n      })\n    }\n  }\n\n  $(document).on(Event.SHOW_BS_TAB, Selector.DATA_TOGGLE, function (event) {\n    TabSwitch._jQueryInterface.call($(this), event.relatedTarget)\n  })\n\n  $.fn[NAME]             = TabSwitch._jQueryInterface\n  $.fn[NAME].Constructor = TabSwitch\n  $.fn[NAME].noConflict  = function () {\n    $.fn[NAME] = NO_CONFLICT\n\n    return TabSwitch._jQueryInterface\n  }\n\n  return TabSwitch\n\n})($)\n\nexport default TabSwitch\n","import $ from 'jquery'\n\n/*\n * Global util js\n * Based on Bootstrap's (v4.0.0) `util.js`\n */\n\nconst Util = (($) => {\n\n  const MAX_UID  = 1000000\n  let transition = false\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType     : transition.end,\n      delegateType : transition.end,\n      handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n        }\n        return undefined // eslint-disable-line no-undefined\n      }\n    }\n  }\n\n  function setTransitionEndSupport() {\n    transition = transitionEndTest()\n\n    $.fn.emulateTransitionEnd = transitionEndEmulator\n\n    if (Util.supportsTransitionEnd()) {\n      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n    }\n  }\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n  }\n\n  function transitionEndEmulator(duration) {\n    let called = false\n\n    $(this).one(Util.TRANSITION_END, () => {\n      called = true\n    })\n\n    setTimeout(() => {\n      if (!called) {\n        Util.triggerTransitionEnd(this)\n      }\n    }, duration)\n\n    return this\n  }\n\n  function transitionEndTest() {\n    if (typeof window !== 'undefined' && window.QUnit) {\n      return false\n    }\n\n    return {\n      end: 'transitionend'\n    }\n  }\n\n  const Util = {\n\n    TRANSITION_END: 'mdTransitionEnd',\n\n    getSelectorFromElement(element) {\n      let selector = element.getAttribute('data-target')\n\n      if (!selector || selector === '#') {\n        selector = element.getAttribute('href') || ''\n      }\n\n      try {\n        const $selector = $(document).find(selector)\n\n        return $selector.length > 0 ? selector : null\n      } catch (err) {\n        return null\n      }\n    },\n\n    getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID)\n      } while (document.getElementById(prefix))\n      return prefix\n    },\n\n    isElement(obj) {\n      return (obj[0] || obj).nodeType\n    },\n\n    reflow(element) {\n      return element.offsetHeight\n    },\n\n    supportsTransitionEnd() {\n      return Boolean(transition)\n    },\n\n    triggerTransitionEnd(element) {\n      $(element).trigger(transition.end)\n    },\n\n    typeCheckConfig(componentName, config, configTypes) {\n      for (const property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          const expectedTypes = configTypes[property]\n          const value         = config[property]\n          const valueType     = value && Util.isElement(value) ? 'element' : toType(value)\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(\n              `${componentName.toUpperCase()}: ` +\n              `Option \"${property}\" provided type \"${valueType}\" ` +\n              `but expected type \"${expectedTypes}\".`)\n          }\n        }\n      }\n    }\n  }\n\n  setTransitionEndSupport()\n\n  return Util\n\n})($)\n\nexport default Util\n"]}