define("fd5fa211-ef67-4b5b-9f0d-6117a93e44af_0.0.1", ["@microsoft/sp-core-library","react","react-dom","@microsoft/sp-webpart-base","mystrings","@microsoft/sp-http","photopileModule","jquery","jqueryui"], function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_22__, __WEBPACK_EXTERNAL_MODULE_24__, __WEBPACK_EXTERNAL_MODULE_25__, __WEBPACK_EXTERNAL_MODULE_26__) { return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var __extends = (this && this.__extends) || function (d, b) {
	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
	    function __() { this.constructor = d; }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	};
	var sp_core_library_1 = __webpack_require__(1);
	var React = __webpack_require__(2);
	var ReactDom = __webpack_require__(3);
	var sp_webpart_base_1 = __webpack_require__(4);
	var strings = __webpack_require__(5);
	var PhotopileWebPart_1 = __webpack_require__(6);
	var SPPicturesListService_1 = __webpack_require__(21);
	/**
	 * @class
	 * Defines the Photopile client side web part
	 */
	var PhotopileWebPartWebPart = (function (_super) {
	    __extends(PhotopileWebPartWebPart, _super);
	    /**
	     * @function
	     * Web Part constructor
	     */
	    function PhotopileWebPartWebPart(context) {
	        var _this = _super.call(this) || this;
	        /**
	       * @var
	       * Stores the list of SharePoint Pictures library found in the current SP web
	       */
	        _this.listsDropdownOptions = [];
	        return _this;
	    }
	    /**
	     * @function
	     * Function called when the web part is inialized
	     */
	    PhotopileWebPartWebPart.prototype.onInit = function () {
	        var _this = this;
	        //Init the PicturesListService to get the picture libs
	        var picturesListService = new SPPicturesListService_1.SPPicturesListService(this.properties, this.context);
	        //Request the libs
	        picturesListService.getPictureLibs()
	            .then(function (response) {
	            //Store the result as list of dropdown options
	            _this.listsDropdownOptions = response.value.map(function (list) {
	                return {
	                    key: list.Id,
	                    text: list.Title
	                };
	            });
	        });
	        return Promise.resolve();
	    };
	    /**
	     * @function
	     * Renders the web part
	     */
	    PhotopileWebPartWebPart.prototype.render = function () {
	        //Constructs the react element code to JSX
	        var element = React.createElement(PhotopileWebPart_1.default, {
	            listName: this.properties.listName,
	            orderBy: this.properties.orderBy,
	            orderByAsc: this.properties.orderByAsc,
	            count: this.properties.count,
	            numLayers: this.properties.numLayers,
	            thumbOverlap: this.properties.thumbOverlap,
	            thumbRotation: this.properties.thumbRotation,
	            thumbBorderWidth: this.properties.thumbBorderWidth,
	            thumbBorderColor: this.properties.thumbBorderColor,
	            thumbBorderHover: this.properties.thumbBorderHover,
	            draggable: this.properties.draggable,
	            fadeDuration: this.properties.fadeDuration,
	            pickupDuration: this.properties.pickupDuration,
	            photoZIndex: this.properties.photoZIndex,
	            photoBorder: this.properties.photoBorder,
	            photoBorderColor: this.properties.photoBorderColor,
	            showInfo: this.properties.showInfo,
	            autoplayGallery: this.properties.autoplayGallery,
	            autoplaySpeed: this.properties.autoplaySpeed,
	            context: this.context
	        });
	        //Render the dom
	        ReactDom.render(element, this.domElement);
	    };
	    Object.defineProperty(PhotopileWebPartWebPart.prototype, "disableReactivePropertyChanges", {
	        /**
	         * @function
	         * Prevent from changing the pane properties on typing
	         */
	        get: function () {
	            return false;
	        },
	        enumerable: true,
	        configurable: true
	    });
	    Object.defineProperty(PhotopileWebPartWebPart.prototype, "dataVersion", {
	        /**
	         * @function
	         * Gets the web part properties panel settings
	         */
	        get: function () {
	            return sp_core_library_1.Version.parse('1.0');
	        },
	        enumerable: true,
	        configurable: true
	    });
	    PhotopileWebPartWebPart.prototype.getPropertyPaneConfiguration = function () {
	        return {
	            pages: [
	                {
	                    header: {
	                        description: strings.PropertyPaneDescription
	                    },
	                    //Display the web part properties as accordion
	                    displayGroupsAsAccordion: true,
	                    groups: [
	                        {
	                            groupName: strings.PictureLibraryGroupName,
	                            groupFields: [
	                                sp_webpart_base_1.PropertyPaneDropdown('listName', {
	                                    label: strings.PictureLibraryFieldLabel,
	                                    options: this.listsDropdownOptions
	                                }),
	                                sp_webpart_base_1.PropertyPaneDropdown('orderBy', {
	                                    label: strings.OrderByFieldLabel,
	                                    options: [
	                                        { key: 'ID', text: strings.OrderByChoiceLabelId },
	                                        { key: 'Title', text: strings.OrderByChoiceLabelTitle },
	                                        { key: 'Created', text: strings.OrderByChoiceLabelCreated },
	                                        { key: 'Modified', text: strings.OrderByChoiceLabelModified },
	                                        { key: 'ImageWidth', text: strings.OrderByChoiceLabelImageWidth },
	                                        { key: 'ImageHeight', text: strings.OrderByChoiceLabelImageHeight }
	                                    ]
	                                }),
	                                sp_webpart_base_1.PropertyPaneDropdown('orderByAsc', {
	                                    label: strings.OrderByAscFieldLabel,
	                                    options: [
	                                        { key: 'asc', text: strings.OrderByAscChoiceLabel },
	                                        { key: 'desc', text: strings.OrderByDescChoiceLabel }
	                                    ]
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('count', {
	                                    label: strings.PictureLibraryCountLabel,
	                                    min: 1,
	                                    max: 100,
	                                    step: 1,
	                                    showValue: true
	                                })
	                            ]
	                        },
	                        {
	                            groupName: strings.ThumbnailsGroupName,
	                            groupFields: [
	                                sp_webpart_base_1.PropertyPaneSlider('numLayers', {
	                                    label: strings.NumLayersFieldLabel,
	                                    min: 1,
	                                    max: 20,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('thumbOverlap', {
	                                    label: strings.ThumbOverlabFieldLabel,
	                                    min: 1,
	                                    max: 130,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('thumbRotation', {
	                                    label: strings.ThumbRotationFieldLabel,
	                                    min: 0,
	                                    max: 360,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('thumbBorderWidth', {
	                                    label: strings.ThumbBorderWidthFieldLabel,
	                                    min: 0,
	                                    max: 50,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneTextField('thumbBorderColor', {
	                                    label: strings.ThumbBorderColorFieldLabel
	                                }),
	                                sp_webpart_base_1.PropertyPaneTextField('thumbBorderHover', {
	                                    label: strings.ThumbBorderHoverFieldLabel
	                                }),
	                                sp_webpart_base_1.PropertyPaneToggle('draggable', {
	                                    label: strings.DraggableFieldLabel
	                                })
	                            ]
	                        },
	                        {
	                            groupName: strings.PhotoContainerGroupName,
	                            groupFields: [
	                                sp_webpart_base_1.PropertyPaneSlider('fadeDuration', {
	                                    label: strings.FadeDurationFieldLabel,
	                                    min: 0,
	                                    max: 5000,
	                                    step: 100,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('pickupDuration', {
	                                    label: strings.PickupDurationFieldLabel,
	                                    min: 0,
	                                    max: 5000,
	                                    step: 100,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('photoZIndex', {
	                                    label: strings.PhotoZIndexFieldLabel,
	                                    min: 1,
	                                    max: 1000,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('photoBorder', {
	                                    label: strings.PhotoBorderFieldLabel,
	                                    min: 0,
	                                    max: 50,
	                                    step: 1,
	                                    showValue: true
	                                }),
	                                sp_webpart_base_1.PropertyPaneTextField('photoBorderColor', {
	                                    label: strings.PhotoBorderColorFieldLabel
	                                }),
	                                sp_webpart_base_1.PropertyPaneToggle('showInfo', {
	                                    label: strings.ShowInfoFieldLabel
	                                })
	                            ]
	                        },
	                        {
	                            groupName: strings.AutoplayGroupName,
	                            groupFields: [
	                                sp_webpart_base_1.PropertyPaneToggle('autoplayGallery', {
	                                    label: strings.AutoplayGalleryFieldLabel
	                                }),
	                                sp_webpart_base_1.PropertyPaneSlider('autoplaySpeed', {
	                                    label: strings.AutoplaySpeedFieldLabel,
	                                    min: 0,
	                                    max: 5000,
	                                    step: 100,
	                                    showValue: true
	                                })
	                            ]
	                        }
	                    ]
	                }
	            ]
	        };
	    };
	    return PhotopileWebPartWebPart;
	}(sp_webpart_base_1.BaseClientSideWebPart));
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.default = PhotopileWebPartWebPart;



/***/ },
/* 1 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_1__;

/***/ },
/* 2 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_2__;

/***/ },
/* 3 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_3__;

/***/ },
/* 4 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_4__;

/***/ },
/* 5 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_5__;

/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var __extends = (this && this.__extends) || function (d, b) {
	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
	    function __() { this.constructor = d; }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	};
	/**
	 * @file
	 * Photopile Web Part React JSX component.
	 *
	 * Contains JSX code to render the web part with HTML templates.
	 *
	 * Author: Olivier Carpentier
	 */
	var React = __webpack_require__(2);
	var Spinner_1 = __webpack_require__(7);
	var strings = __webpack_require__(5);
	var PhotopileWebPart_module_scss_1 = __webpack_require__(16);
	var SPPicturesListService_1 = __webpack_require__(21);
	var photopile = __webpack_require__(24);
	__webpack_require__(25);
	__webpack_require__(26);
	__webpack_require__(27);
	__webpack_require__(24);
	/**
	 * @class
	 * Defines Photopile web part class.
	 */
	var PhotopileWebPart = (function (_super) {
	    __extends(PhotopileWebPart, _super);
	    /**
	     * @function
	     * Photopile web part contructor.
	     */
	    function PhotopileWebPart(props, context) {
	        var _this = _super.call(this, props, context) || this;
	        //Save the context
	        _this.myPageContext = props.context;
	        //Init the component state
	        _this.state = {
	            results: [],
	            loaded: false
	        };
	        return _this;
	    }
	    ;
	    /**
	     * @function
	     * JSX Element render method
	     */
	    PhotopileWebPart.prototype.render = function () {
	        if (this.props.listName == null || this.props.listName == '') {
	            //Display select a list message
	            return (React.createElement("div", { className: "ms-MessageBar" },
	                React.createElement("div", { className: "ms-MessageBar-content" },
	                    React.createElement("div", { className: "ms-MessageBar-icon" },
	                        React.createElement("i", { className: "ms-Icon ms-Icon--infoCircle" })),
	                    React.createElement("div", { className: "ms-MessageBar-text" }, strings.ErrorSelectList))));
	        }
	        else {
	            if (this.state.loaded == false) {
	                //Display the loading spinner with the Office UI Fabric Spinner control
	                return (React.createElement("div", { className: PhotopileWebPart_module_scss_1.default.photopileWebPart },
	                    React.createElement("div", { className: PhotopileWebPart_module_scss_1.default.workingOnItSpinner },
	                        React.createElement(Spinner_1.Spinner, { type: Spinner_1.SpinnerType.normal }),
	                        React.createElement("div", { className: PhotopileWebPart_module_scss_1.default.loadingLabel },
	                            React.createElement("label", { className: "ms-Label" },
	                                " ",
	                                strings.Loading)))));
	            }
	            else if (this.state.results.length == 0) {
	                //Display message no items
	                return (React.createElement("div", { className: "ms-MessageBar ms-MessageBar--error" },
	                    React.createElement("div", { className: "ms-MessageBar-content" },
	                        React.createElement("div", { className: "ms-MessageBar-icon" },
	                            React.createElement("i", { className: "ms-Icon ms-Icon--xCircle" })),
	                        React.createElement("div", { className: "ms-MessageBar-text" }, strings.ErrorNoItems))));
	            }
	            else {
	                //Display the items list
	                return (React.createElement("div", { className: 'photopile-wrapper' },
	                    React.createElement("ul", { className: 'photopile' }, this.state.results.map(function (object, i) {
	                        //Select the best Alt text with title, description or file's name
	                        var altText = object.Title;
	                        if (altText == null || altText == '')
	                            altText = object.Description;
	                        if (altText == null || altText == '')
	                            altText = object.File.Name;
	                        //Render the item
	                        return (React.createElement("li", null,
	                            React.createElement("a", { href: object.File.ServerRelativeUrl },
	                                React.createElement("img", { src: object.File.ThumbnailServerUrl, alt: altText, width: "133", height: "100" }))));
	                    }))));
	            }
	        }
	    };
	    /**
	     * @function
	     * Function called when the component did mount
	     */
	    PhotopileWebPart.prototype.componentDidMount = function () {
	        var _this = this;
	        if (this.props.listName != null && this.props.listName != '') {
	            //Init the Picture list service
	            var picturesListService = new SPPicturesListService_1.SPPicturesListService(this.props, this.myPageContext);
	            //Load the list of pictures from the current lib
	            picturesListService.getPictures(this.props.listName)
	                .then(function (response) {
	                //Modify the component state with the json result
	                _this.setState({ results: response.value, loaded: true });
	            });
	        }
	    };
	    /**
	     * @function
	     * Function called when the web part properties has changed
	     */
	    PhotopileWebPart.prototype.componentWillReceiveProps = function (nextProps) {
	        var _this = this;
	        //Define the state with empty results
	        this.setState({ results: [], loaded: false });
	        if (nextProps.listName != null && nextProps.listName != '') {
	            //Init the Picture list service
	            var picturesListService = new SPPicturesListService_1.SPPicturesListService(nextProps, this.myPageContext);
	            //Load the list of pictures from the current lib
	            picturesListService.getPictures(nextProps.listName)
	                .then(function (response) {
	                //Modify the component state with the json result
	                _this.setState({ results: response.value, loaded: true });
	            });
	        }
	    };
	    /**
	     * @function
	     * Function called when the component has been rendered (ie HTML code is ready)
	     */
	    PhotopileWebPart.prototype.componentDidUpdate = function (prevProps, prevState) {
	        if (this.state.loaded) {
	            //Init photopile options
	            photopile.setNumLayers(this.props.numLayers);
	            photopile.setThumbOverlap(this.props.thumbOverlap);
	            photopile.setThumbRotation(this.props.thumbRotation);
	            photopile.setThumbBorderWidth(this.props.thumbBorderWidth);
	            photopile.setThumbBorderColor(this.props.thumbBorderColor);
	            photopile.setThumbBorderHover(this.props.thumbBorderHover);
	            photopile.setDraggable(this.props.draggable);
	            photopile.setFadeDuration(this.props.fadeDuration);
	            photopile.setPickupDuration(this.props.pickupDuration);
	            photopile.setPhotoZIndex(this.props.photoZIndex);
	            photopile.setPhotoBorder(this.props.photoBorder);
	            photopile.setPhotoBorderColor(this.props.photoBorderColor);
	            photopile.setShowInfo(this.props.showInfo);
	            photopile.setAutoplayGallery(this.props.autoplayGallery);
	            photopile.setAutoplaySpeed(this.props.autoplaySpeed);
	            //Init photopile
	            photopile.scatter();
	        }
	    };
	    return PhotopileWebPart;
	}(React.Component));
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.default = PhotopileWebPart;



/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	function __export(m) {
	    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
	}
	__export(__webpack_require__(8));
	


/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	function __export(m) {
	    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
	}
	__export(__webpack_require__(9));
	__export(__webpack_require__(10));
	


/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var __extends = (this && this.__extends) || function (d, b) {
	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
	    function __() { this.constructor = d; }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	};
	var React = __webpack_require__(2);
	var Spinner_Props_1 = __webpack_require__(10);
	var rtl_1 = __webpack_require__(11);
	var css_1 = __webpack_require__(13);
	__webpack_require__(14);
	var CIRCLE_COUNT = 8;
	var PARENT_SIZE_LARGE = 28;
	var PARENT_SIZE_NORMAL = 20;
	var OFFSET_SIZE_LARGE = 0.179;
	var OFFSET_SIZE_NORMAL = 0.2;
	var Spinner = (function (_super) {
	    __extends(Spinner, _super);
	    function Spinner() {
	        _super.apply(this, arguments);
	    }
	    Spinner.prototype.render = function () {
	        var _a = this.props, type = _a.type, label = _a.label, className = _a.className;
	        var isRTL = rtl_1.getRTL();
	        var parentSize = type === Spinner_Props_1.SpinnerType.large ? PARENT_SIZE_LARGE : PARENT_SIZE_NORMAL;
	        var offsetSize = type === Spinner_Props_1.SpinnerType.large ? OFFSET_SIZE_LARGE : OFFSET_SIZE_NORMAL;
	        var offset = parentSize * offsetSize;
	        var step = (2 * Math.PI) / CIRCLE_COUNT;
	        var angle = 0;
	        var i = CIRCLE_COUNT;
	        var radius = (parentSize - offset) * 0.5;
	        var circleObjects = [];
	        while (i--) {
	            var x = Math.round(parentSize * 0.5 + radius * Math.cos(angle)) - offset * 0.5;
	            var y = Math.round(parentSize * 0.5 + radius * Math.sin(angle)) - offset * 0.5;
	            var size = offset + 'px';
	            var style = { left: !isRTL ? x : 'auto', right: !isRTL ? 'auto' : x, top: y, width: size, height: size };
	            angle += step;
	            circleObjects.push(React.createElement("div", {className: 'ms-Spinner-circle', key: i, style: style}));
	        }
	        return (React.createElement("div", {className: css_1.css('ms-Spinner', className, {
	            'ms-Spinner--large': type === Spinner_Props_1.SpinnerType.large
	        })}, label && (React.createElement("div", {className: 'ms-Spinner-label', role: 'alert'}, label)), circleObjects));
	    };
	    Spinner.defaultProps = {
	        type: Spinner_Props_1.SpinnerType.normal
	    };
	    return Spinner;
	}(React.Component));
	exports.Spinner = Spinner;
	


/***/ },
/* 10 */
/***/ function(module, exports) {

	"use strict";
	(function (SpinnerType) {
	    SpinnerType[SpinnerType["normal"] = 0] = "normal";
	    SpinnerType[SpinnerType["large"] = 1] = "large";
	})(exports.SpinnerType || (exports.SpinnerType = {}));
	var SpinnerType = exports.SpinnerType;
	


/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var KeyCodes_1 = __webpack_require__(12);
	var _isRTL;
	/**
	 * Gets the rtl state of the page (returns true if in rtl.)
	 */
	function getRTL() {
	    if (_isRTL === undefined) {
	        _isRTL = document.documentElement.getAttribute('dir') === 'rtl';
	    }
	    return _isRTL;
	}
	exports.getRTL = getRTL;
	/**
	 * Sets the rtl state of the page (by adjusting the dir attribute of the html element.)
	 */
	function setRTL(isRTL) {
	    document.documentElement.setAttribute('dir', isRTL ? 'rtl' : 'ltr');
	    _isRTL = isRTL;
	}
	exports.setRTL = setRTL;
	/**
	 * Returns the given key, but flips right/left arrows if necessary.
	 */
	function getRTLSafeKeyCode(key) {
	    if (getRTL()) {
	        if (key === KeyCodes_1.KeyCodes.left) {
	            key = KeyCodes_1.KeyCodes.right;
	        }
	        else if (key === KeyCodes_1.KeyCodes.right) {
	            key = KeyCodes_1.KeyCodes.left;
	        }
	    }
	    return key;
	}
	exports.getRTLSafeKeyCode = getRTLSafeKeyCode;
	


/***/ },
/* 12 */
/***/ function(module, exports) {

	"use strict";
	(function (KeyCodes) {
	    KeyCodes[KeyCodes["a"] = 65] = "a";
	    KeyCodes[KeyCodes["backspace"] = 8] = "backspace";
	    KeyCodes[KeyCodes["comma"] = 188] = "comma";
	    KeyCodes[KeyCodes["del"] = 46] = "del";
	    KeyCodes[KeyCodes["down"] = 40] = "down";
	    KeyCodes[KeyCodes["end"] = 35] = "end";
	    KeyCodes[KeyCodes["enter"] = 13] = "enter";
	    KeyCodes[KeyCodes["escape"] = 27] = "escape";
	    KeyCodes[KeyCodes["home"] = 36] = "home";
	    KeyCodes[KeyCodes["left"] = 37] = "left";
	    KeyCodes[KeyCodes["pageDown"] = 34] = "pageDown";
	    KeyCodes[KeyCodes["pageUp"] = 33] = "pageUp";
	    KeyCodes[KeyCodes["right"] = 39] = "right";
	    KeyCodes[KeyCodes["semicolon"] = 186] = "semicolon";
	    KeyCodes[KeyCodes["space"] = 32] = "space";
	    KeyCodes[KeyCodes["tab"] = 9] = "tab";
	    KeyCodes[KeyCodes["up"] = 38] = "up";
	})(exports.KeyCodes || (exports.KeyCodes = {}));
	var KeyCodes = exports.KeyCodes;
	


/***/ },
/* 13 */
/***/ function(module, exports) {

	"use strict";
	function css() {
	    var args = [];
	    for (var _i = 0; _i < arguments.length; _i++) {
	        args[_i - 0] = arguments[_i];
	    }
	    var classes = [];
	    for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
	        var arg = args_1[_a];
	        if (arg) {
	            if (typeof arg === 'string') {
	                classes.push(arg);
	            }
	            else {
	                for (var key in arg) {
	                    if (arg[key]) {
	                        classes.push(key);
	                    }
	                }
	            }
	        }
	    }
	    return classes.join(' ');
	}
	exports.css = css;
	


/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var load_themed_styles_1 = __webpack_require__(15);
	load_themed_styles_1.loadStyles('.ms-Spinner{position:relative;height:20px}.ms-Spinner.ms-Spinner--large{height:28px}.ms-Spinner.ms-Spinner--large .ms-Spinner-label{left:34px;top:6px}.ms-Spinner-circle{position:absolute;border-radius:100px;background-color:#0078d7;opacity:0}@media screen and (-ms-high-contrast:active){.ms-Spinner-circle{background-color:#fff}}@media screen and (-ms-high-contrast:black-on-white){.ms-Spinner-circle{background-color:#000}}.ms-Spinner-label{position:relative;color:#333;font-family:"Segoe UI Regular WestEuropean","Segoe UI",Tahoma,Arial,sans-serif;font-size:12px;font-weight:400;color:#0078d7;left:28px;top:2px}[dir=ltr] .ms-Spinner.ms-Spinner--large .ms-Spinner-label{left:34px}[dir=rtl] .ms-Spinner.ms-Spinner--large .ms-Spinner-label{right:34px}[dir=ltr] .ms-Spinner-label{left:28px}[dir=rtl] .ms-Spinner-label{right:28px}@-webkit-keyframes pulse{0%{opacity:1}100%{opacity:0}}@keyframes pulse{0%{opacity:1}100%{opacity:0}}.ms-Spinner-circle{position:absolute;border-radius:100px;background-color:#0078d7;opacity:0;-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.ms-Spinner-circle:nth-child(1){opacity:.875;-webkit-animation-delay:.093s;animation-delay:.093s}.ms-Spinner-circle:nth-child(2){opacity:.75;-webkit-animation-delay:.187s;animation-delay:.187s}.ms-Spinner-circle:nth-child(3){opacity:.625;-webkit-animation-delay:.281s;animation-delay:.281s}.ms-Spinner-circle:nth-child(4){opacity:.5;-webkit-animation-delay:375ms;animation-delay:375ms}.ms-Spinner-circle:nth-child(5){opacity:.375;-webkit-animation-delay:.468s;animation-delay:.468s}.ms-Spinner-circle:nth-child(6){opacity:.25;-webkit-animation-delay:.562s;animation-delay:.562s}.ms-Spinner-circle:nth-child(7){opacity:.125;-webkit-animation-delay:.656s;animation-delay:.656s}');
	


/***/ },
/* 15 */
/***/ function(module, exports) {

	"use strict";
	;
	;
	// IE needs to inject styles using cssText. However, we need to evaluate this lazily, so this
	// value will initialize as undefined, and later will be set once on first loadStyles injection.
	var _injectStylesWithCssText;
	// Store the theming state in __themeState__ global scope for reuse in the case of duplicate
	// load-themed-styles hosted on the page.
	var _root = (typeof window === 'undefined') ? {} : window;
	var _themeState = _root.__themeState__ = _root.__themeState__ || {
	    theme: null,
	    lastStyleElement: null,
	    registeredStyles: []
	};
	/**
	 * Matches theming tokens. For example, "[theme: themeSlotName, default: #FFF]" (including the quotes).
	 */
	/* tslint:disable: max-line-length */
	var _themeTokenRegex = /[\'\"]\[theme:\s*(\w+)\s*(?:\,\s*default:\s*([\\"\']?[\.\,\(\)\#\-\s\w]*[\.\,\(\)\#\-\w][\"\']?))?\s*\][\'\"]/g;
	/* tslint:enable: max-line-length */
	/** Maximum style text length, for supporting IE style restrictions. */
	var MAX_STYLE_CONTENT_SIZE = 10000;
	/**
	 * Loads a set of style text. If it is registered too early, we will register it when the window.load
	 * event is fired.
	 * @param {string | ThemableArray} styles Themable style text to register.
	 */
	function loadStyles(styles) {
	    var styleParts = Array.isArray(styles) ? styles : splitStyles(styles);
	    if (_injectStylesWithCssText === undefined) {
	        _injectStylesWithCssText = shouldUseCssText();
	    }
	    applyThemableStyles(styleParts);
	}
	exports.loadStyles = loadStyles;
	/**
	 * Loads a set of style text. If it is registered too early, we will register it when the window.load event
	 * is fired.
	 * @param {string} styleText Style to register.
	 * @param {IStyleRecord} styleRecord Existing style record to re-apply.
	 */
	function applyThemableStyles(styles, styleRecord) {
	    _injectStylesWithCssText ?
	        registerStylesIE(styles, styleRecord) :
	        registerStyles(styles, styleRecord);
	}
	/**
	 * Registers a set theme tokens to find and replace. If styles were already registered, they will be
	 * replaced.
	 * @param {any} theme JSON object of theme tokens to values.
	 */
	function loadTheme(theme) {
	    _themeState.theme = theme;
	    // reload styles.
	    reloadStyles();
	}
	exports.loadTheme = loadTheme;
	/**
	 * Reloads styles.
	 * @param {any} theme JSON object of theme tokens to values.
	 */
	function reloadStyles() {
	    if (_themeState.theme) {
	        for (var _i = 0, _a = _themeState.registeredStyles; _i < _a.length; _i++) {
	            var styleRecord = _a[_i];
	            applyThemableStyles(styleRecord.themableStyle, styleRecord);
	        }
	    }
	}
	/**
	 * Find theme tokens and replaces them with provided theme values.
	 * @param {string} styles Tokenized styles to fix.
	 */
	function detokenize(styles) {
	    if (styles) {
	        styles = resolveThemableArray(splitStyles(styles));
	    }
	    return styles;
	}
	exports.detokenize = detokenize;
	/**
	 * Resolves ThemingInstruction objects in an array and joins the result into a string.
	 * @param {ThemableArray} splitStyleArray ThemableArray to resolve and join.
	 */
	function resolveThemableArray(splitStyleArray) {
	    var theme = _themeState.theme;
	    var resolvedCss;
	    if (splitStyleArray) {
	        // Resolve the array of theming instructions to an array of strings.
	        // Then join the array to produce the final CSS string.
	        var resolvedArray = splitStyleArray.map(function (currentValue) {
	            var themeSlot = currentValue.theme;
	            if (themeSlot != null) {
	                // A theming annotation. Resolve it.
	                var themedValue = theme ? theme[themeSlot] : null;
	                var defaultValue = currentValue.defaultValue;
	                // Warn to console if we hit an unthemed value even when themes are provided.
	                // Allow the themedValue to be null to explicitly request the default value.
	                if (theme && !themedValue && console && !(themeSlot in theme)) {
	                    /* tslint:disable: max-line-length */
	                    console.warn("Theming value not provided for \"" + themeSlot + "\". Falling back to \"" + (defaultValue || 'inherit') + "\".");
	                }
	                return themedValue || defaultValue || 'inherit';
	            }
	            else {
	                // A non-themable string. Preserve it.
	                return currentValue.rawString;
	            }
	        });
	        resolvedCss = resolvedArray.join('');
	    }
	    return resolvedCss;
	}
	/**
	 * Split tokenized CSS into an array of strings and theme specification objects
	 * @param {string} styles Tokenized styles to split.
	 */
	function splitStyles(styles) {
	    var result = [];
	    if (styles) {
	        var pos = 0; // Current position in styles.
	        var tokenMatch = void 0;
	        while (tokenMatch = _themeTokenRegex.exec(styles)) {
	            var matchIndex = tokenMatch.index;
	            if (matchIndex > pos) {
	                result.push({
	                    rawString: styles.substring(pos, matchIndex)
	                });
	            }
	            result.push({
	                theme: tokenMatch[1],
	                defaultValue: tokenMatch[2] // May be undefined
	            });
	            // index of the first character after the current match
	            pos = _themeTokenRegex.lastIndex;
	        }
	        // Push the rest of the string after the last match.
	        result.push({
	            rawString: styles.substring(pos)
	        });
	    }
	    return result;
	}
	exports.splitStyles = splitStyles;
	/**
	 * Registers a set of style text. If it is registered too early, we will register it when the
	 * window.load event is fired.
	 * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.
	 * @param {IStyleRecord} styleRecord May specify a style Element to update.
	 */
	function registerStyles(styleArray, styleRecord) {
	    var head = document.getElementsByTagName('head')[0];
	    var styleElement = document.createElement('style');
	    styleElement.type = 'text/css';
	    styleElement.appendChild(document.createTextNode(resolveThemableArray(styleArray)));
	    if (styleRecord) {
	        head.replaceChild(styleElement, styleRecord.styleElement);
	        styleRecord.styleElement = styleElement;
	    }
	    else {
	        head.appendChild(styleElement);
	    }
	    if (!styleRecord) {
	        _themeState.registeredStyles.push({
	            styleElement: styleElement,
	            themableStyle: styleArray
	        });
	    }
	}
	/**
	 * Registers a set of style text, for IE 9 and below, which has a ~30 style element limit so we need
	 * to register slightly differently.
	 * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.
	 * @param {IStyleRecord} styleRecord May specify a style Element to update.
	 */
	function registerStylesIE(styleArray, styleRecord) {
	    var head = document.getElementsByTagName('head')[0];
	    var lastStyleElement = _themeState.lastStyleElement, registeredStyles = _themeState.registeredStyles;
	    var stylesheet = lastStyleElement ? lastStyleElement.styleSheet : null;
	    var lastStyleContent = stylesheet ? stylesheet.cssText : '';
	    var lastRegisteredStyle = registeredStyles[registeredStyles.length - 1];
	    var resolvedStyleText = resolveThemableArray(styleArray);
	    if (!lastStyleElement || (lastStyleContent.length + resolvedStyleText.length) > MAX_STYLE_CONTENT_SIZE) {
	        lastStyleElement = document.createElement('style');
	        lastStyleElement.type = 'text/css';
	        if (styleRecord) {
	            head.replaceChild(lastStyleElement, styleRecord.styleElement);
	            styleRecord.styleElement = lastStyleElement;
	        }
	        else {
	            head.appendChild(lastStyleElement);
	        }
	        if (!styleRecord) {
	            lastRegisteredStyle = {
	                styleElement: lastStyleElement,
	                themableStyle: styleArray
	            };
	            registeredStyles.push(lastRegisteredStyle);
	        }
	    }
	    lastStyleElement.styleSheet.cssText += detokenize(resolvedStyleText);
	    Array.prototype.push.apply(lastRegisteredStyle.themableStyle, styleArray); // concat in-place
	    // Preserve the theme state.
	    _themeState.lastStyleElement = lastStyleElement;
	}
	/**
	 * Checks to see if styleSheet exists as a property off of a style element.
	 * This will determine if style registration should be done via cssText (<= IE9) or not
	 */
	function shouldUseCssText() {
	    var useCSSText = false;
	    if (typeof document !== 'undefined') {
	        var emptyStyle = document.createElement('style');
	        emptyStyle.type = 'text/css';
	        useCSSText = !!emptyStyle.styleSheet;
	    }
	    return useCSSText;
	}
	


/***/ },
/* 16 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	/* tslint:disable */
	__webpack_require__(17);
	var styles = {
	    photopileWebPart: 'photopileWebPart_44ab54de',
	    workingOnItSpinner: 'workingOnItSpinner_44ab54de',
	    loadingLabel: 'loadingLabel_44ab54de',
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.default = styles;
	/* tslint:enable */ 
	


/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {

	var content = __webpack_require__(18);
	var loader = __webpack_require__(20);
	
	if(typeof content === "string") content = [[module.id, content]];
	
	// add the styles to the DOM
	for (var i = 0; i < content.length; i++) loader.loadStyles(content[i][1]);
	
	if(content.locals) module.exports = content.locals;

/***/ },
/* 18 */
/***/ function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(19)();
	// imports
	
	
	// module
	exports.push([module.id, ".photopileWebPart_44ab54de .workingOnItSpinner_44ab54de{display:block;top:0;bottom:0;margin:auto;height:33.33333%;line-height:1.5em;padding:20px 20px}.photopileWebPart_44ab54de .loadingLabel_44ab54de{position:relative;top:-25px;left:35px}", ""]);
	
	// exports


/***/ },
/* 19 */
/***/ function(module, exports) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	// css base code, injected by the css-loader
	module.exports = function() {
		var list = [];
	
		// return the list of modules as css string
		list.toString = function toString() {
			var result = [];
			for(var i = 0; i < this.length; i++) {
				var item = this[i];
				if(item[2]) {
					result.push("@media " + item[2] + "{" + item[1] + "}");
				} else {
					result.push(item[1]);
				}
			}
			return result.join("");
		};
	
		// import a list of modules into the list
		list.i = function(modules, mediaQuery) {
			if(typeof modules === "string")
				modules = [[null, modules, ""]];
			var alreadyImportedModules = {};
			for(var i = 0; i < this.length; i++) {
				var id = this[i][0];
				if(typeof id === "number")
					alreadyImportedModules[id] = true;
			}
			for(i = 0; i < modules.length; i++) {
				var item = modules[i];
				// skip already imported module
				// this implementation is not 100% perfect for weird media query combinations
				//  when a module is imported multiple times with different media queries.
				//  I hope this will never occur (Hey this way we have smaller bundles)
				if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
					if(mediaQuery && !item[2]) {
						item[2] = mediaQuery;
					} else if(mediaQuery) {
						item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
					}
					list.push(item);
				}
			}
		};
		return list;
	};


/***/ },
/* 20 */
/***/ function(module, exports) {

	/* WEBPACK VAR INJECTION */(function(global) {/**
	 * An IThemingInstruction can specify a rawString to be preserved or a theme slot and a default value
	 * to use if that slot is not specified by the theme.
	 */
	"use strict";
	// IE needs to inject styles using cssText. However, we need to evaluate this lazily, so this
	// value will initialize as undefined, and later will be set once on first loadStyles injection.
	var _injectStylesWithCssText;
	// Store the theming state in __themeState__ global scope for reuse in the case of duplicate
	// load-themed-styles hosted on the page.
	var _root = (typeof window === 'undefined') ? global : window; // tslint:disable-line:no-any
	var _themeState = _root.__themeState__ = _root.__themeState__ || {
	    theme: undefined,
	    lastStyleElement: undefined,
	    registeredStyles: []
	};
	/**
	 * Matches theming tokens. For example, "[theme: themeSlotName, default: #FFF]" (including the quotes).
	 */
	/* tslint:disable: max-line-length */
	var _themeTokenRegex = /[\'\"]\[theme:\s*(\w+)\s*(?:\,\s*default:\s*([\\"\']?[\.\,\(\)\#\-\s\w]*[\.\,\(\)\#\-\w][\"\']?))?\s*\][\'\"]/g;
	/* tslint:enable: max-line-length */
	/** Maximum style text length, for supporting IE style restrictions. */
	var MAX_STYLE_CONTENT_SIZE = 10000;
	/**
	 * Loads a set of style text. If it is registered too early, we will register it when the window.load
	 * event is fired.
	 * @param {string | ThemableArray} styles Themable style text to register.
	 */
	function loadStyles(styles) {
	    var styleParts = Array.isArray(styles) ? styles : splitStyles(styles);
	    if (_injectStylesWithCssText === undefined) {
	        _injectStylesWithCssText = shouldUseCssText();
	    }
	    applyThemableStyles(styleParts);
	}
	exports.loadStyles = loadStyles;
	/**
	 * Allows for customizable loadStyles logic. e.g. for server side rendering application
	 * @param {(styles: string) => void} a loadStyles callback that gets called when styles are loaded or reloaded
	 */
	function configureLoadStyles(callback) {
	    _themeState.loadStyles = callback;
	}
	exports.configureLoadStyles = configureLoadStyles;
	/**
	 * Loads a set of style text. If it is registered too early, we will register it when the window.load event
	 * is fired.
	 * @param {string} styleText Style to register.
	 * @param {IStyleRecord} styleRecord Existing style record to re-apply.
	 */
	function applyThemableStyles(stylesArray, styleRecord) {
	    if (_themeState.loadStyles) {
	        var styles = resolveThemableArray(stylesArray);
	        _themeState.loadStyles(styles);
	    }
	    else {
	        _injectStylesWithCssText ?
	            registerStylesIE(stylesArray, styleRecord) :
	            registerStyles(stylesArray, styleRecord);
	    }
	}
	/**
	 * Registers a set theme tokens to find and replace. If styles were already registered, they will be
	 * replaced.
	 * @param {theme} theme JSON object of theme tokens to values.
	 */
	function loadTheme(theme) {
	    _themeState.theme = theme;
	    // reload styles.
	    reloadStyles();
	}
	exports.loadTheme = loadTheme;
	/**
	 * Reloads styles.
	 */
	function reloadStyles() {
	    if (_themeState.theme) {
	        for (var _i = 0, _a = _themeState.registeredStyles; _i < _a.length; _i++) {
	            var styleRecord = _a[_i];
	            applyThemableStyles(styleRecord.themableStyle, styleRecord);
	        }
	    }
	}
	/**
	 * Find theme tokens and replaces them with provided theme values.
	 * @param {string} styles Tokenized styles to fix.
	 */
	function detokenize(styles) {
	    if (styles) {
	        styles = resolveThemableArray(splitStyles(styles));
	    }
	    return styles;
	}
	exports.detokenize = detokenize;
	/**
	 * Resolves ThemingInstruction objects in an array and joins the result into a string.
	 * @param {ThemableArray} splitStyleArray ThemableArray to resolve and join.
	 */
	function resolveThemableArray(splitStyleArray) {
	    var theme = _themeState.theme;
	    var resolvedCss;
	    if (splitStyleArray) {
	        // Resolve the array of theming instructions to an array of strings.
	        // Then join the array to produce the final CSS string.
	        var resolvedArray = splitStyleArray.map(function (currentValue) {
	            var themeSlot = currentValue.theme;
	            if (themeSlot) {
	                // A theming annotation. Resolve it.
	                var themedValue = theme ? theme[themeSlot] : undefined;
	                var defaultValue = currentValue.defaultValue;
	                // Warn to console if we hit an unthemed value even when themes are provided.
	                // Allow the themedValue to be undefined to explicitly request the default value.
	                if (theme && !themedValue && console && !(themeSlot in theme)) {
	                    /* tslint:disable: max-line-length */
	                    console.warn("Theming value not provided for \"" + themeSlot + "\". Falling back to \"" + (defaultValue || 'inherit') + "\".");
	                }
	                return themedValue || defaultValue || 'inherit';
	            }
	            else {
	                // A non-themable string. Preserve it.
	                return currentValue.rawString;
	            }
	        });
	        resolvedCss = resolvedArray.join('');
	    }
	    return resolvedCss;
	}
	/**
	 * Split tokenized CSS into an array of strings and theme specification objects
	 * @param {string} styles Tokenized styles to split.
	 */
	function splitStyles(styles) {
	    var result = [];
	    if (styles) {
	        var pos = 0; // Current position in styles.
	        var tokenMatch = void 0;
	        while (tokenMatch = _themeTokenRegex.exec(styles)) {
	            var matchIndex = tokenMatch.index;
	            if (matchIndex > pos) {
	                result.push({
	                    rawString: styles.substring(pos, matchIndex)
	                });
	            }
	            result.push({
	                theme: tokenMatch[1],
	                defaultValue: tokenMatch[2] // May be undefined
	            });
	            // index of the first character after the current match
	            pos = _themeTokenRegex.lastIndex;
	        }
	        // Push the rest of the string after the last match.
	        result.push({
	            rawString: styles.substring(pos)
	        });
	    }
	    return result;
	}
	exports.splitStyles = splitStyles;
	/**
	 * Registers a set of style text. If it is registered too early, we will register it when the
	 * window.load event is fired.
	 * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.
	 * @param {IStyleRecord} styleRecord May specify a style Element to update.
	 */
	function registerStyles(styleArray, styleRecord) {
	    var head = document.getElementsByTagName('head')[0];
	    var styleElement = document.createElement('style');
	    styleElement.type = 'text/css';
	    styleElement.appendChild(document.createTextNode(resolveThemableArray(styleArray)));
	    if (styleRecord) {
	        head.replaceChild(styleElement, styleRecord.styleElement);
	        styleRecord.styleElement = styleElement;
	    }
	    else {
	        head.appendChild(styleElement);
	    }
	    if (!styleRecord) {
	        _themeState.registeredStyles.push({
	            styleElement: styleElement,
	            themableStyle: styleArray
	        });
	    }
	}
	/**
	 * Registers a set of style text, for IE 9 and below, which has a ~30 style element limit so we need
	 * to register slightly differently.
	 * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.
	 * @param {IStyleRecord} styleRecord May specify a style Element to update.
	 */
	function registerStylesIE(styleArray, styleRecord) {
	    var head = document.getElementsByTagName('head')[0];
	    var lastStyleElement = _themeState.lastStyleElement, registeredStyles = _themeState.registeredStyles;
	    var stylesheet = lastStyleElement ? lastStyleElement.styleSheet : undefined;
	    var lastStyleContent = stylesheet ? stylesheet.cssText : '';
	    var lastRegisteredStyle = registeredStyles[registeredStyles.length - 1];
	    var resolvedStyleText = resolveThemableArray(styleArray);
	    if (!lastStyleElement || (lastStyleContent.length + resolvedStyleText.length) > MAX_STYLE_CONTENT_SIZE) {
	        lastStyleElement = document.createElement('style');
	        lastStyleElement.type = 'text/css';
	        if (styleRecord) {
	            head.replaceChild(lastStyleElement, styleRecord.styleElement);
	            styleRecord.styleElement = lastStyleElement;
	        }
	        else {
	            head.appendChild(lastStyleElement);
	        }
	        if (!styleRecord) {
	            lastRegisteredStyle = {
	                styleElement: lastStyleElement,
	                themableStyle: styleArray
	            };
	            registeredStyles.push(lastRegisteredStyle);
	        }
	    }
	    lastStyleElement.styleSheet.cssText += detokenize(resolvedStyleText);
	    Array.prototype.push.apply(lastRegisteredStyle.themableStyle, styleArray); // concat in-place
	    // Preserve the theme state.
	    _themeState.lastStyleElement = lastStyleElement;
	}
	/**
	 * Checks to see if styleSheet exists as a property off of a style element.
	 * This will determine if style registration should be done via cssText (<= IE9) or not
	 */
	function shouldUseCssText() {
	    var useCSSText = false;
	    if (typeof document !== 'undefined') {
	        var emptyStyle = document.createElement('style');
	        emptyStyle.type = 'text/css';
	        useCSSText = !!emptyStyle.styleSheet;
	    }
	    return useCSSText;
	}
	
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";
	var sp_http_1 = __webpack_require__(22);
	var sp_core_library_1 = __webpack_require__(1);
	var MockHttpClient_1 = __webpack_require__(23);
	/**
	 * @class
	 * Service implementation to get list & list items from current SharePoint site
	 */
	var SPPicturesListService = (function () {
	    /**
	     * @function
	     * Service constructor
	     */
	    function SPPicturesListService(_props, pageContext) {
	        this.props = _props;
	        this.context = pageContext;
	    }
	    /**
	     * @function
	     * Gets the list of picture libs in the current SharePoint site
	     */
	    SPPicturesListService.prototype.getPictureLibs = function () {
	        if (sp_core_library_1.Environment.type === sp_core_library_1.EnvironmentType.Local) {
	            //If the running environment is local, load the data from the mock
	            return this.getPictureLibsFromMock();
	        }
	        else {
	            //If the running environment is SharePoint, request the lists REST service
	            //Gets only the list with BaseTemplate = 109 (picture libs)
	            return this.context.spHttpClient.get(this.context.pageContext.web.absoluteUrl + "/_api/lists?$select=Title,id,BaseTemplate&$filter=BaseTemplate%20eq%20109", sp_http_1.SPHttpClient.configurations.v1)
	                .then(function (response) {
	                return response.json();
	            });
	        }
	    };
	    /**
	     * @function
	     * Returns 3 fake SharePoint lists for the Mock mode
	     */
	    SPPicturesListService.prototype.getPictureLibsFromMock = function () {
	        return MockHttpClient_1.default.getLists(this.context.pageContext.web.absoluteUrl).then(function () {
	            var listData = {
	                value: [
	                    { Title: 'Mock List One', Id: '1', BaseTemplate: '109' },
	                    { Title: 'Mock List Two', Id: '2', BaseTemplate: '109' },
	                    { Title: 'Mock List Three', Id: '3', BaseTemplate: '109' }
	                ]
	            };
	            return listData;
	        });
	    };
	    /**
	     * @function
	     * Gets the pictures from a SharePoint list
	     */
	    SPPicturesListService.prototype.getPictures = function (libId) {
	        var _this = this;
	        if (sp_core_library_1.Environment.type === sp_core_library_1.EnvironmentType.Local) {
	            //If the running environment is local, load the data from the mock
	            return this.getPicturesFromMock(libId);
	        }
	        else {
	            //If the running environment is SharePoint, request the items REST service
	            //Builds the request to get only some fields, order the items & limit the number of items
	            //TODO: optimize the request to not include folders and get only items
	            var restUrl = this.context.pageContext.web.absoluteUrl;
	            restUrl += "/_api/Web/Lists(guid'";
	            restUrl += this.props.listName;
	            restUrl += "')/items?$expand=File&$select=Title,Description,id,File,FileSystemObjectType&$orderby=";
	            restUrl += this.props.orderBy;
	            restUrl += "%20";
	            restUrl += this.props.orderByAsc;
	            restUrl += "&$top=";
	            restUrl += this.props.count;
	            //Request the SharePoint web service
	            return this.context.spHttpClient.get(restUrl, sp_http_1.SPHttpClient.configurations.v1).then(function (response) {
	                return response.json().then(function (responseFormated) {
	                    var formatedResponse = { value: [] };
	                    //Fetchs the Json response to construct the final items list
	                    responseFormated.value.map(function (object, i) {
	                        //Tests if the result is a file and not a folder
	                        if (object['FileSystemObjectType'] == '0') {
	                            var spListItem = {
	                                'ID': object["ID"],
	                                'Title': object['Title'],
	                                'Description': object['Description'],
	                                'File': {
	                                    'Name': object['File']['Name'],
	                                    'ServerRelativeUrl': object['File']['ServerRelativeUrl']
	                                }
	                            };
	                            //Creates the thumbnail item url from the Picture path
	                            spListItem.File.ThumbnailServerUrl = _this.getThumbnailUrl(spListItem.File.ServerRelativeUrl, spListItem.File.Name);
	                            formatedResponse.value.push(spListItem);
	                        }
	                    });
	                    return formatedResponse;
	                });
	            });
	        }
	    };
	    /**
	     * @function
	     * Gets the thumbnail picture url from the Picture name.
	     * In SharePoint pictures libs, the thumbnail url is formated as for example '/_t/10_jpg.jpg'
	     */
	    SPPicturesListService.prototype.getThumbnailUrl = function (pictureUrl, pictureName) {
	        if (pictureUrl == null || pictureUrl == '')
	            return '';
	        var thumbUrl = '';
	        thumbUrl = pictureUrl.replace(pictureName, '');
	        thumbUrl += "_t/";
	        thumbUrl += pictureName.replace(".", "_");
	        thumbUrl += ".jpg";
	        return thumbUrl;
	    };
	    /**
	     * @function
	     * Gets the pictures list from the mock. This function will return a
	     * different list of pics for the lib 1 & 2, and an empty list for the third.
	     */
	    SPPicturesListService.prototype.getPicturesFromMock = function (libId) {
	        return MockHttpClient_1.default.getListsItems(this.context.pageContext.web.absoluteUrl).then(function () {
	            var listData = { value: [] };
	            if (libId == '1') {
	                listData = {
	                    value: [
	                        {
	                            "ID": "1", "Title": "Barton Dam, Ann Arbor, Michigan", "Description": "",
	                            "File": {
	                                "Name": "01.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/01.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/01.jpg"
	                            }
	                        },
	                        {
	                            "ID": "2", "Title": "Building Atlanta, Georgia", "Description": "",
	                            "File": {
	                                "Name": "02.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/02.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/02.jpg"
	                            }
	                        },
	                        {
	                            "ID": "3", "Title": "Nice day for a swim", "Description": "",
	                            "File": {
	                                "Name": "03.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/03.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/03.jpg"
	                            }
	                        },
	                        {
	                            "ID": "4", "Title": "The plants that never die", "Description": "",
	                            "File": {
	                                "Name": "04.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/04.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/04.jpg"
	                            }
	                        },
	                        {
	                            "ID": "5", "Title": "Downtown Atlanta, Georgia", "Description": "",
	                            "File": {
	                                "Name": "05.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/05.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/05.jpg"
	                            }
	                        },
	                        {
	                            "ID": "6", "Title": "Atlanta traffic", "Description": "",
	                            "File": {
	                                "Name": "06.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/06.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/06.jpg"
	                            }
	                        },
	                        {
	                            "ID": "7", "Title": "A pathetic dog", "Description": "",
	                            "File": {
	                                "Name": "07.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/07.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/07.jpg"
	                            }
	                        },
	                        {
	                            "ID": "8", "Title": "Two happy dogs", "Description": "",
	                            "File": {
	                                "Name": "08.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/08.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/08.jpg"
	                            }
	                        },
	                        {
	                            "ID": "9", "Title": "Antigua, Guatemala", "Description": "",
	                            "File": {
	                                "Name": "09.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/09.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/09.jpg"
	                            }
	                        },
	                        {
	                            "ID": "10", "Title": "Iximche, Guatemala", "Description": "",
	                            "File": {
	                                "Name": "10.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/10.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/10.jpg"
	                            }
	                        }
	                    ]
	                };
	            }
	            else if (libId == '2') {
	                listData = {
	                    value: [
	                        {
	                            "ID": "11", "Title": "Barton Dam, Ann Arbor, Michigan", "Description": "",
	                            "File": {
	                                "Name": "11.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/11.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/11.jpg"
	                            }
	                        },
	                        {
	                            "ID": "12", "Title": "Building Atlanta, Georgia", "Description": "",
	                            "File": {
	                                "Name": "12.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/12.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/12.jpg"
	                            }
	                        },
	                        {
	                            "ID": "13", "Title": "Nice day for a swim", "Description": "",
	                            "File": {
	                                "Name": "13.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/13.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/13.jpg"
	                            }
	                        },
	                        {
	                            "ID": "14", "Title": "The plants that never die", "Description": "",
	                            "File": {
	                                "Name": "14.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/14.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/14.jpg"
	                            }
	                        },
	                        {
	                            "ID": "15", "Title": "Downtown Atlanta, Georgia", "Description": "",
	                            "File": {
	                                "Name": "15.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/15.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/15.jpg"
	                            }
	                        },
	                        {
	                            "ID": "16", "Title": "Atlanta traffic", "Description": "",
	                            "File": {
	                                "Name": "16.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/16.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/16.jpg"
	                            }
	                        },
	                        {
	                            "ID": "17", "Title": "A pathetic dog", "Description": "",
	                            "File": {
	                                "Name": "17.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/17.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/17.jpg"
	                            }
	                        },
	                        {
	                            "ID": "18", "Title": "Two happy dogs", "Description": "",
	                            "File": {
	                                "Name": "18.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/18.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/18.jpg"
	                            }
	                        },
	                        {
	                            "ID": "19", "Title": "Antigua, Guatemala", "Description": "",
	                            "File": {
	                                "Name": "19.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/19.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/19.jpg"
	                            }
	                        },
	                        {
	                            "ID": "20", "Title": "Iximche, Guatemala", "Description": "",
	                            "File": {
	                                "Name": "20.jpg",
	                                "ServerRelativeUrl": "../src/webparts/photopileWebPart/images/fullsize/20.jpg",
	                                "ThumbnailServerUrl": "../src/webparts/photopileWebPart/images/thumbs/20.jpg"
	                            }
	                        }
	                    ]
	                };
	            }
	            return listData;
	        });
	    };
	    return SPPicturesListService;
	}());
	exports.SPPicturesListService = SPPicturesListService;
	


/***/ },
/* 22 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_22__;

/***/ },
/* 23 */
/***/ function(module, exports) {

	"use strict";
	/**
	 * @class
	 * Defines a http client to request mock data to use the web part with the local workbench
	 */
	var MockHttpClient = (function () {
	    function MockHttpClient() {
	    }
	    /**
	     * @function
	     * Mock get SharePoint list request
	     */
	    MockHttpClient.getLists = function (restUrl, options) {
	        return new Promise(function (resolve) {
	            resolve(MockHttpClient._lists);
	        });
	    };
	    /**
	     * @function
	     * Mock get SharePoint list items request
	     */
	    MockHttpClient.getListsItems = function (restUrl, options) {
	        return new Promise(function (resolve) {
	            resolve(MockHttpClient._items);
	        });
	    };
	    return MockHttpClient;
	}());
	/**
	 * @var
	 * Mock SharePoint list sample
	 */
	MockHttpClient._lists = [{ Title: 'Mock List', Id: '1', BaseTemplate: '109' }];
	/**
	 * @var
	 * Mock SharePoint list item sample
	 */
	MockHttpClient._items = [
	    { "ID": "1", "Title": "Pic 1", "Description": "", "File": { "Name": "1.jpg", "ServerRelativeUrl": "/Images/1.jpg" } }
	];
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.default = MockHttpClient;



/***/ },
/* 24 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_24__;

/***/ },
/* 25 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_25__;

/***/ },
/* 26 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_26__;

/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {

	/* tslint:disable */
	__webpack_require__(28);
	/* tslint:enable */ 
	


/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {

	var content = __webpack_require__(29);
	var loader = __webpack_require__(20);
	
	if(typeof content === "string") content = [[module.id, content]];
	
	// add the styles to the DOM
	for (var i = 0; i < content.length; i++) loader.loadStyles(content[i][1]);
	
	if(content.locals) module.exports = content.locals;

/***/ },
/* 29 */
/***/ function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(19)();
	// imports
	
	
	// module
	exports.push([module.id, "@media (max-width:320px){ul.photopile li a{max-width:85px}}@media (min-width:321px) and (max-width:568px){ul.photopile li a{max-width:100px}}@media (min-width:569px) and (max-width:768px){ul.photopile li a{max-width:115px}}@media (min-width:769px) and (max-width:1024px){ul.photopile li a{max-width:125px}}@media (min-width:1025px){ul.photopile li a{max-width:150px}}div#photopile-nav-next,div#photopile-nav-next:hover,div#photopile-nav-prev,div#photopile-nav-prev:hover{background-image:url(//photopilewebpart.blob.core.windows.net/photopile-web-part/nav-sprites.png)}ul.photopile{display:none}ul.photopile{position:relative;display:inline-block;width:100%;margin:0;padding:0;list-style:none}ul.photopile li{display:inline-block;position:relative;margin:2px;padding:0;-webkit-backface-visibility:hidden}ul.photopile li a{display:block;padding:2px;outline:0;text-decoration:none;border:1px solid #6F6F6F;box-shadow:0 0 20px #3D3D3D}ul.photopile li.photopile-active-thumbnail a:hover,ul.photopile li.photopile-active-thumbnail:hover{cursor:default}ul.photopile li a img{display:block;margin:0;padding:0;border:1px solid #6F6F6F;width:100%;height:auto;box-sizing:border-box}div#photopile-active-image-container{border:1px solid #6F6F6F;box-shadow:0 20px 80px #000;box-sizing:border-box}div#photopile-active-image-container img{margin:0 auto;height:auto}div#photopile-active-image-info{position:relative;width:100%;background:rgba(0,0,0,.3)}div#photopile-active-image-info p{color:#fff;font-size:12px;margin:0;padding:3px 8px}div#photopile-nav-next,div#photopile-nav-prev{opacity:0;position:absolute;top:50%;width:30px;height:40px;margin-top:-20px;cursor:pointer}div#photopile-nav-next{right:0;margin-right:-35px;background-position:-50px 0}div#photopile-nav-next:hover{background-position:-50px -50px}div#photopile-nav-prev{left:0;right:0;margin-left:-35px;background-position:0 0}div#photopile-nav-prev:hover{background-position:0 -50px}", ""]);
	
	// exports


/***/ }
/******/ ])});;
//# sourceMappingURL=photopile-web-part.bundle.js.map