define(["ng.cla.core.lmsg","cla_angular","/intranet/projects/js/built/projects.libs.js"], function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { 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] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = 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;
/******/
/******/ 	// identity function for calling harmony imports with the correct context
/******/ 	__webpack_require__.i = function(value) { return value; };
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "/intranet/projects/js/built/";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 22);
/******/ })
/************************************************************************/
/******/ ({

/***/ "../../../node_modules/css-loader/index.js!../../../node_modules/sass-loader/lib/loader.js!./assets/css/style.scss":
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__("../../../node_modules/css-loader/lib/css-base.js")();
// imports


// module
exports.push([module.i, ".task-section-edit-colour {\n  display: inline-block;\n}\n\n.tasks-board {\n  overflow-x: scroll;\n  overflow-y: hidden;\n}\n\n.tasks-board-scrollable {\n  display: flex;\n  flex-flow: row nowrap;\n  width: fit-content;\n  position: relative;\n}\n\n.task-board-list {\n  padding: 10px 0;\n}\n\n.status-dot {\n  height: 18px;\n  width: 18px;\n  display: block;\n  border-radius: 10rem;\n}\n\n.status-dot-history {\n  height: 10px;\n  width: 10px;\n  display: inline-block;\n  border-radius: 10rem;\n}\n\n.board-status-column.board-status-header {\n  background-color: hsl(204, 45%, 98%);\n  padding: 10px;\n  vertical-align: middle;\n  color: hsl(218, 21%, 23%);\n}\n\n.board-status-column {\n  width: 300px;\n  display: inline-block;\n  height: 100%;\n  background-color: hsl(204, 45%, 98%);\n  margin: 0 5px;\n  min-height: 40px;\n  border-radius: 5px;\n}\n\n.board-status-media {\n  overflow: visible;\n}\n\n/* Custom styling for the board column rename form input */\n.board-status-media .board-status-input {\n  width: 120px;\n  height: 30px;\n}\n\n.btn-board-status {\n  padding-top: 3px;\n  padding-bottom: 3px;\n}\n\n/* Board mode task item styling  */\n.task-item.board-task {\n  margin: 10px;\n}\n\n.task-item.list-task {\n  padding: 0.25rem 0.5rem;\n  margin-bottom: -1px;\n  border: 1px solid hsl(214, 32%, 91%);\n}\n\n.task-item.list-task .task-item-complete {\n  text-decoration: line-through;\n}\n\n.task-item.list-task .task-item-icon {\n  font-size: 1.15rem;\n  vertical-align: middle;\n}\n\n.task-item-icon-gray {\n  color: hsl(219, 10%, 49%);\n}\n\n.task-item-text {\n  color: hsl(219, 15%, 35%);\n}\n\n.board-task {\n  position: relative;\n  margin: 10px;\n}\n\n.board-task .board-task-title a {\n  color: hsl(218, 21%, 23%);\n}\n\n.board-task-drop-container {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\n\n.as-sortable-dragging,\n.as-sortable-dragging .task-item.board-task {\n  background: white;\n  position: relative;\n}\n\n.as-sortable-dragging .task-item.board-task .card {\n  box-shadow: 0px 12px 8px -6px rgba(0, 0, 0, 0.15);\n}\n\n.project-header .avatar {\n  margin-right: 5px;\n  width: 30px;\n  border-radius: 15px;\n}\n\n.menu-wrapper {\n  float: right;\n  margin-left: 5px;\n  margin-top: 5px;\n}\n\n.project-header-options {\n  float: right;\n  margin-top: 8px;\n}\n\n.header-row {\n  margin-bottom: 10px;\n}\n\n.projects.details .btn-rag {\n  border: none;\n  padding: 0;\n  font-size: 15px;\n  color: hsl(219, 15%, 35%);\n  background: hsl(210, 38%, 95%);\n  height: 30px;\n  width: 30px;\n  margin-left: 5px;\n  border-radius: 10rem;\n  font-weight: bold;\n}\n\n/* Changes text colour of active RAG item to #fff */\n.projects.details .btn-rag.active {\n  color: #fff;\n}\n\n.project-description img {\n  max-width: 100%;\n  height: auto !important;\n}\n\n.sub-header {\n  text-align: right;\n}\n\n.rag-status {\n  display: inline-block;\n}\n\n.project-image {\n  border-radius: var(--theme-rounded-corners);\n  max-width: 185px;\n}\n\n@media only screen and (max-width: 768px) {\n  .sub-header {\n    text-align: left;\n  }\n}\n.project-more-info {\n  margin-top: 10px;\n}\n\n.project-update-icon {\n  box-shadow: 0 0 9px 5px rgba(0, 0, 0, 0.07);\n  border-radius: 10rem;\n  padding: 0.6rem;\n  display: block;\n}\n\n.project-summary img {\n  border-radius: 50%;\n}\n\n.project-summary small {\n  display: block;\n}\n\n.tab-content .panel {\n  margin-top: 10px;\n}\n\n.tab-content .panel h3 {\n  margin: 5px 0;\n}\n\n.project-progress {\n  background-color: hsl(210, 38%, 95%);\n  padding: 15px 15px 0;\n}\n\n.project-list-details .project-progress {\n  padding-bottom: 15px;\n}\n\n.progress {\n  margin: 0;\n  height: 6px;\n  background-color: hsl(210, 38%, 95%);\n  border-radius: 0;\n  box-shadow: none;\n}\n\n.progress-bar {\n  box-shadow: none;\n}\n\n.files-show-more {\n  margin-top: 15px;\n  padding: 5px 10px;\n  display: block;\n  border: 1px solid hsl(210, 38%, 95%);\n  text-align: center;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n}\n\n.files-show-more:hover {\n  border-color: hsl(214, 32%, 91%);\n  background-color: hsl(204, 45%, 98%);\n  text-decoration: none;\n}\n\n/* sections */\n.new-section {\n  border-bottom: 1px solid hsl(214, 32%, 91%);\n  background-color: hsl(204, 45%, 98%);\n}\n\n/* task list */\n.task-list-section {\n  margin-bottom: 0;\n}\n\n.task-list-section .panel-heading {\n  position: relative;\n  overflow: visible;\n}\n\n.task-list-section .kolorPicker,\n.task-list-section .kolorPicker-wrapper {\n  display: inline-block;\n}\n\n.task-list-items {\n  min-height: 10px; /* Used to keep a drag+drop placeholder visible when list is empty */\n  margin-bottom: 0;\n}\n\n/* Allows board cards to be dragged between status columns when empty */\n.board-status-column [as-sortable=\"ctrl.dragTaskListeners\"] {\n  min-height: 130px;\n  height: 100%;\n}\n\n/* Aligns text in add task button to the left, overrides standard .btn-block styling */\n.btn.btn-add-task {\n  text-align: left;\n}\n\n.task-list-item .sortable {\n  cursor: move;\n}\n\n@media only screen and (max-width: 767px) {\n  .task-list-section .form-inline > input {\n    margin-bottom: 10px;\n  }\n}\n.task-item .checkbox-inline {\n  margin-top: -22px;\n}\n\n.task-list-item .section {\n  min-width: 40px;\n  min-height: 1px;\n  margin-top: -7px;\n  display: block;\n  float: right;\n}\n\n.team-role-variant-1 {\n  background-color: hsl(0, 74%, 57%);\n}\n\n.team-role-variant-2 {\n  background-color: hsl(237, 45%, 52%);\n}\n\n.team-role-variant-2 ~ .team-role-variant-2 {\n  background-color: hsl(143, 53%, 62%);\n}\n\n.team-role-variant-3 {\n  background-color: hsl(207, 71%, 57%);\n}\n\n.team-role-variant-4 {\n  background-color: hsl(179, 49%, 39%);\n}\n\n.team-role-variant-5 {\n  background-color: hsl(152, 44%, 28%);\n}\n\n.team-role-variant-6 {\n  background-color: hsl(148, 46%, 43%);\n}\n\n.team-role-variant-7 {\n  background-color: hsl(33, 88%, 65%);\n}\n\n.team-role-variant-8 {\n  background-color: hsl(0, 59%, 48%);\n}\n\n.team-role-variant-8 ~ .team-role-variant-8 {\n  background-color: hsl(242, 36%, 41%);\n}\n\n.team-role-variant-9 {\n  background-color: hsl(16, 63%, 37%);\n}\n\n.team-role-variant-10 {\n  background-color: hsl(218, 21%, 23%);\n}\n\n.task-duration-unit {\n  padding-top: 7px;\n}\n\n.task-duration-unit.hide-unit {\n  visibility: hidden;\n}\n\n/* READY FOR CONVERSION TO SCSS */\n@media only screen and (min-width: 768px) {\n  .project-info {\n    display: flex;\n  }\n}\n.project-info {\n  margin-bottom: 10px;\n}\n\n.project-info .project-info-left {\n  position: relative;\n}\n\n.project-info-left::after {\n  content: \"\";\n  width: 1px;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  background: hsl(210, 38%, 95%);\n  position: absolute;\n  margin: 0 7px;\n}\n\n@media only screen and (max-width: 768px) {\n  .project-info .project-info-left {\n    margin-bottom: 15px;\n    padding-bottom: 15px;\n  }\n  .project-info .project-info-left::after {\n    left: 0;\n    top: unset;\n    height: 1px;\n    width: auto;\n    margin: 0 15px;\n  }\n}\n/* Allows media to display overflow so custom border can be displayed on meta data */\n.meta-custom-wrapper {\n  overflow: visible;\n}\n\n.meta-custom {\n  position: relative;\n}\n\n/* Adds left-hand side border to meta blocks */\n.meta-custom::after {\n  content: \"\";\n  top: 0;\n  bottom: 10px;\n  left: 0;\n  border-left: 1px solid hsl(210, 38%, 95%);\n  position: absolute;\n  margin-left: -10px;\n}\n\n/* Hides left hand border on smaller screens */\n@media only screen and (max-width: 768px) {\n  .meta-custom::after {\n    display: none;\n  }\n}\n/* Adds custom margin to the bottom of the 'last modified' text so the 'created on' text aligns with the RAG status */\n.meta-custom-spacing {\n  margin-bottom: 18px;\n}\n\n/* Resets custom margin on smaller screens */\n@media only screen and (max-width: 768px) {\n  .meta-custom-spacing {\n    margin-bottom: 10.5px;\n  }\n}\n.loading-table {\n  opacity: 0.4;\n}\n\n.team-list-spinner {\n  left: 50%;\n  top: 50%;\n}\n\n.tasks-profile-img {\n  width: 25px;\n  height: 25px;\n}\n\n.btn.btn-custom-due-date {\n  padding-left: 0;\n}\n\n/* Custom position of completed toggle switch which aligns it right on desktop and left on smaller screens */\n.custom-toggle-position {\n  text-align: right;\n}\n\n@media only screen and (max-width: 768px) {\n  .custom-toggle-position {\n    text-align: left;\n  }\n}\n/* Adds custom styling to task priotity badge so it is vertically aligned with other items */\n.task-badge {\n  margin-right: 10px;\n  margin-top: 10px;\n  display: inline-block;\n}\n\n.delete-confirm-icon {\n  line-height: 70px;\n  font-size: 50px;\n  color: hsl(219, 10%, 49%);\n}\n\n/* Board mode - 'Saving' dialog box, which appears when a card has been moved */\n.tasks-board-saving {\n  position: fixed;\n  z-index: 99;\n  background: #fff;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  margin: 0 auto 20px;\n  padding: 10px;\n  width: 160px;\n  border-radius: 8px;\n  box-shadow: 0px 0px 18px 3px rgba(0, 0, 0, 0.1);\n}\n\n.overview-page-wrapper .card-overview {\n  box-shadow: none;\n  margin-bottom: 1rem;\n}\n\n.overview-page-wrapper .card-overview .card-header-overview {\n  padding: 0;\n}\n\n.overview-page-wrapper .card-header-overview .card-title {\n  font-weight: bold;\n}\n\n.overview-page-wrapper .card-header-overview .show-all-text {\n  font-size: 14px;\n}\n\n.overview-page-wrapper .card-header-overview .card-title .btn-overview {\n  margin-top: -20px;\n  margin-bottom: -10px;\n}\n\n.dashboard-profile-img {\n  border-radius: 10rem;\n}\n\n.overview-page-wrapper .card-body-overview {\n  max-height: 300px;\n  overflow-y: auto;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n/* Topics Styling */\n/* Topics table styling */\n.topics-table,\n.topics-table > tbody > tr > td,\n.topics-table > thead > tr > th {\n  border: none;\n}\n\n/* Topics table header styling */\n.topics-table thead tr th.sorting,\n.topics-table thead tr th.sorting_asc,\n.topics-table thead tr th.sorting_desc {\n  position: relative;\n  padding-left: 25px;\n}\n\n/* Workaround to show board tasks as like cla-card without actually being one */\n.card .card-status-border {\n  position: absolute;\n  width: 6px;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  border-radius: 8px 0 0 8px;\n  z-index: 1;\n}\n\n/* Sets minimum width of pinnable wrapper to 120px */\n.pinnable {\n  min-width: 120px;\n}\n\n/* Styling for sorting arrows */\n.sorting::after, .sorting_asc::after, .sorting_desc::after,\n.sorting::before, .sorting_asc::before, .sorting_desc::before {\n  content: \"\";\n  position: absolute;\n  left: 9px;\n  border-style: solid;\n  border-width: 2px;\n  border-color: #fff;\n  width: 7px;\n  height: 7px;\n  transform: rotate(-45deg);\n}\n\n/* Positions top arrow to the top */\n.sorting::before, .sorting_asc::before, .sorting_desc::before {\n  top: 50%;\n  margin-top: -6px;\n}\n\n/* Positions bottom arrow to the bottom */\n.sorting::after, .sorting_asc::after, .sorting_desc::after {\n  bottom: 50%;\n  margin-bottom: -6px;\n}\n\n/* Sets inactive top arrow to light grey */\n.sorting::before, .sorting_desc::before {\n  border-top-color: hsl(219, 15%, 35%);\n  border-right-color: hsl(219, 15%, 35%);\n}\n\n/* Sets inactive bottom arrow to light grey */\n.sorting::after, .sorting_asc::after {\n  border-bottom-color: hsl(219, 15%, 35%);\n  border-left-color: hsl(219, 15%, 35%);\n}\n\n/* Sets active top arrow to dark grey */\n.sorting_desc::after {\n  border-bottom-color: hsl(220, 26%, 14%);\n  border-left-color: hsl(220, 26%, 14%);\n}\n\n/* Sets active bottom arrow to dark grey */\n.sorting_asc::before {\n  border-top-color: hsl(220, 26%, 14%);\n  border-right-color: hsl(220, 26%, 14%);\n}\n\n/* Adds margin to bottom of table to fix issue with the table having to scroll */\n.topic-table-info {\n  display: block;\n  margin-top: 30px;\n  margin-bottom: 35px;\n}\n\n/* Puts the topic user images into a wrapper which stops the items inside from breaking line and limits the width of the table */\n.user-images-wrapper {\n  white-space: nowrap;\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n  max-width: 425px;\n}\n\n/* Adds right hand gradient to show when there are more users than can be displayed */\n.user-images-wrapper:after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  width: 40px;\n  background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgb(255, 255, 255) 100%);\n}\n\n/* Limits the width of the topic user images on tablet sized screens */\n@media only screen and (max-width: 768px) {\n  .user-images-wrapper {\n    max-width: 225px;\n  }\n}\n/* Limits the width of the topic user images on mobile sized screens */\n@media only screen and (max-width: 450px) {\n  .user-images-wrapper {\n    max-width: 85px;\n  }\n}\n/* Individual topic page styling    */\n.topic-details-list td {\n  padding: 0 10px;\n}\n\n.topic-title {\n  display: inline-block;\n}\n\n/* Project overview page */\n/* Comments component */\n.comment-attachments .comment-attachments-icon,\n.comment-count .comment-count-icon {\n  color: hsl(219, 10%, 49%);\n}\n\n/* Added a max-width to images in history so they don't overflow  */\n.history-wrapper img {\n  max-width: 100%;\n  height: auto !important;\n}\n\n/* Code to reverse styling of the files component so it fits the asthetics of the projects tabs */\n.projects-file-component .dms-view {\n  padding: 0;\n}\n\n.projects-file-component .dms-view .panel-body {\n  padding-top: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n.modal-backdrop + .modal-backdrop {\n  opacity: 0;\n}\n\n.add-project-wrapper {\n  position: relative;\n}\n.add-project-wrapper + .add-project-wrapper::after {\n  content: \"\";\n  background: hsl(214, 32%, 91%);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: -8px;\n  width: 1px;\n}\n\n.tile-my-projects-component .table-responsive {\n  border-top: none;\n}\n\n.table-avatar {\n  width: 22px;\n  position: relative;\n  margin-top: -4px;\n  border-radius: 150%;\n}\n\n.rag-R {\n  background-color: hsl(0, 74%, 57%);\n}\n\n.rag-A {\n  background-color: hsl(27, 82%, 57%);\n}\n\n.rag-G {\n  background-color: hsl(145, 44%, 51%);\n}\n\n.project-bookmark {\n  color: hsl(24, 73%, 50%);\n}\n\n.project-bookmark:hover {\n  color: lignten(hsl(24, 73%, 50%), 10%);\n}\n\n.task-item .checkbox-inline {\n  margin-top: -22px;\n}\n\n/* ng-sortable drag and drop */\n.as-sortable-placeholder {\n  min-height: 20px;\n  border: 2px dashed hsl(214, 18%, 63%);\n  border-radius: 5px;\n}\n\n/* ng-sortable drag and drop specifically for task cards*/\n.tasks-board-scrollable.tasks-board-tasks .as-sortable-placeholder {\n  width: calc(100% - 20px) !important;\n  margin: 6px 10px;\n  border-radius: 8px;\n}\n\n/* ng-sortable drag and drop for Task List*/\n.task-list-items .as-sortable-placeholder {\n  background: hsl(204, 45%, 98%);\n  margin: 5px;\n  width: calc(100% - 10px) !important;\n}\n\n.as-sortable-drag {\n  opacity: 0.8;\n  position: absolute;\n  pointer-events: none;\n  z-index: 9999;\n}\n\n.task-priority-option {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  margin-top: 5px;\n  vertical-align: text-bottom;\n}\n\n.task-priority-sidestrip {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 8px;\n  z-index: 2;\n  border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.task-priority-sidestrip .task-drag-area .drag-icon {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n}\n\n.task-priority-1 {\n  background-color: hsl(145, 44%, 51%);\n}\n\n.task-priority-2 {\n  background-color: hsl(27, 82%, 57%);\n}\n\n.task-priority-3 {\n  background-color: hsl(0, 84%, 68%);\n}\n\n.project-component-list-item td {\n  vertical-align: middle !important;\n}\n\n.project-component-rag {\n  border-radius: 50%;\n  padding: 4px 8px;\n}\n\n.projects-component-title-bar {\n  padding: 10px;\n  margin: 0 0 10px 0;\n  overflow: auto;\n  background-color: hsl(214, 32%, 91%);\n}\n\n.projects-component-title {\n  font-size: larger;\n}\n\n.project-component-services img {\n  padding-right: 5px;\n}\n\n.alert-full-width {\n  width: 100%;\n  display: inline-block;\n}\n\n.task-drag-area {\n  height: 100%;\n}\n\n.wysibb-text {\n  overflow: auto;\n}\n\n/* Tasks Component */\n.my-tasks-component .card-header-overview {\n  display: none;\n}\n\n.tile-my-tasks-component[data-gs-width=\"1\"] .task-item .task-project-name,\n.tile-my-tasks-component[data-gs-width=\"1\"] .task-item .task-date {\n  display: block;\n  float: none !important;\n}\n\n.history_type {\n  font-weight: bold;\n}\n\n.history_list_item_title {\n  font-weight: bold;\n}\n\n.history-status {\n  font-style: italic;\n}\n\n.history-list {\n  font-style: italic;\n}\n\n.card-wrapper:nth-child(4n+1) {\n  clear: both;\n}\n\n/* MAKE RIGHTS TABLE SCROLLABLE ON SMALL DEVICES */\n.rights-table-wrapper > div {\n  overflow-y: auto;\n}\n\n/* Spacing on My Tasks component */\n.sub-items .task-project-name {\n  margin-right: 10px;\n}\n\n.collapsable-info-panel .nav-stacked > li.active > a,\n.collapsable-info-panel .nav-stacked > li.active > a:hover {\n  background: hsl(207, 71%, 57%);\n}\n\n.tasks-profile-img {\n  width: 25px;\n  height: 25px;\n}\n\n/* Tasks item styling */\n.task-users {\n  padding: 6px 12px;\n}\n\n.extra-user-count {\n  padding: 2px 5px;\n  border-radius: 10rem;\n  background: hsl(210, 38%, 95%);\n  font-weight: bold;\n}\n\n.extra-user-count:hover {\n  background: hsl(210, 38%, 100%);\n  cursor: pointer;\n}\n\n.tasks-profile-img {\n  width: 25px;\n  height: 25px;\n}\n\n.cursor-default {\n  cursor: default;\n}\n\n/* Styles individual task profile images */\n.tasks-profile-single {\n  margin-left: 3px;\n  margin-bottom: 3px;\n  display: inline-block;\n}\n\n/* Adds a seperator line between the Polls and Surveys in Add modal. */\n.add-tasks-wrapper {\n  position: relative;\n}\n\n.add-tasks-wrapper + .add-tasks-wrapper::after {\n  content: \"\";\n  background: red;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: -8px;\n  width: 1px;\n}\n\n.projects-file-component .document-list .icons-view .document-item {\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.drag-container {\n  height: 100%;\n  position: relative;\n}", ""]);

// exports


/***/ }),

/***/ "../../../node_modules/css-loader/lib/css-base.js":
/***/ (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;
};


/***/ }),

/***/ "../../../node_modules/style-loader/addStyles.js":
/***/ (function(module, exports, __webpack_require__) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
var stylesInDom = {},
	memoize = function(fn) {
		var memo;
		return function () {
			if (typeof memo === "undefined") memo = fn.apply(this, arguments);
			return memo;
		};
	},
	isOldIE = memoize(function() {
		// Test for IE <= 9 as proposed by Browserhacks
		// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
		// Tests for existence of standard globals is to allow style-loader 
		// to operate correctly into non-standard environments
		// @see https://github.com/webpack-contrib/style-loader/issues/177
		return window && document && document.all && !window.atob;
	}),
	getElement = (function(fn) {
		var memo = {};
		return function(selector) {
			if (typeof memo[selector] === "undefined") {
				memo[selector] = fn.call(this, selector);
			}
			return memo[selector]
		};
	})(function (styleTarget) {
		return document.querySelector(styleTarget)
	}),
	singletonElement = null,
	singletonCounter = 0,
	styleElementsInsertedAtTop = [],
	fixUrls = __webpack_require__("../../../node_modules/style-loader/fixUrls.js");

module.exports = function(list, options) {
	if(typeof DEBUG !== "undefined" && DEBUG) {
		if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
	}

	options = options || {};
	options.attrs = typeof options.attrs === "object" ? options.attrs : {};

	// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
	// tags it will allow on a page
	if (typeof options.singleton === "undefined") options.singleton = isOldIE();

	// By default, add <style> tags to the <head> element
	if (typeof options.insertInto === "undefined") options.insertInto = "head";

	// By default, add <style> tags to the bottom of the target
	if (typeof options.insertAt === "undefined") options.insertAt = "bottom";

	var styles = listToStyles(list);
	addStylesToDom(styles, options);

	return function update(newList) {
		var mayRemove = [];
		for(var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];
			domStyle.refs--;
			mayRemove.push(domStyle);
		}
		if(newList) {
			var newStyles = listToStyles(newList);
			addStylesToDom(newStyles, options);
		}
		for(var i = 0; i < mayRemove.length; i++) {
			var domStyle = mayRemove[i];
			if(domStyle.refs === 0) {
				for(var j = 0; j < domStyle.parts.length; j++)
					domStyle.parts[j]();
				delete stylesInDom[domStyle.id];
			}
		}
	};
};

function addStylesToDom(styles, options) {
	for(var i = 0; i < styles.length; i++) {
		var item = styles[i];
		var domStyle = stylesInDom[item.id];
		if(domStyle) {
			domStyle.refs++;
			for(var j = 0; j < domStyle.parts.length; j++) {
				domStyle.parts[j](item.parts[j]);
			}
			for(; j < item.parts.length; j++) {
				domStyle.parts.push(addStyle(item.parts[j], options));
			}
		} else {
			var parts = [];
			for(var j = 0; j < item.parts.length; j++) {
				parts.push(addStyle(item.parts[j], options));
			}
			stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
		}
	}
}

function listToStyles(list) {
	var styles = [];
	var newStyles = {};
	for(var i = 0; i < list.length; i++) {
		var item = list[i];
		var id = item[0];
		var css = item[1];
		var media = item[2];
		var sourceMap = item[3];
		var part = {css: css, media: media, sourceMap: sourceMap};
		if(!newStyles[id])
			styles.push(newStyles[id] = {id: id, parts: [part]});
		else
			newStyles[id].parts.push(part);
	}
	return styles;
}

function insertStyleElement(options, styleElement) {
	var styleTarget = getElement(options.insertInto)
	if (!styleTarget) {
		throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
	}
	var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
	if (options.insertAt === "top") {
		if(!lastStyleElementInsertedAtTop) {
			styleTarget.insertBefore(styleElement, styleTarget.firstChild);
		} else if(lastStyleElementInsertedAtTop.nextSibling) {
			styleTarget.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
		} else {
			styleTarget.appendChild(styleElement);
		}
		styleElementsInsertedAtTop.push(styleElement);
	} else if (options.insertAt === "bottom") {
		styleTarget.appendChild(styleElement);
	} else {
		throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
	}
}

function removeStyleElement(styleElement) {
	styleElement.parentNode.removeChild(styleElement);
	var idx = styleElementsInsertedAtTop.indexOf(styleElement);
	if(idx >= 0) {
		styleElementsInsertedAtTop.splice(idx, 1);
	}
}

function createStyleElement(options) {
	var styleElement = document.createElement("style");
	options.attrs.type = "text/css";

	attachTagAttrs(styleElement, options.attrs);
	insertStyleElement(options, styleElement);
	return styleElement;
}

function createLinkElement(options) {
	var linkElement = document.createElement("link");
	options.attrs.type = "text/css";
	options.attrs.rel = "stylesheet";

	attachTagAttrs(linkElement, options.attrs);
	insertStyleElement(options, linkElement);
	return linkElement;
}

function attachTagAttrs(element, attrs) {
	Object.keys(attrs).forEach(function (key) {
		element.setAttribute(key, attrs[key]);
	});
}

function addStyle(obj, options) {
	var styleElement, update, remove;

	if (options.singleton) {
		var styleIndex = singletonCounter++;
		styleElement = singletonElement || (singletonElement = createStyleElement(options));
		update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
		remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
	} else if(obj.sourceMap &&
		typeof URL === "function" &&
		typeof URL.createObjectURL === "function" &&
		typeof URL.revokeObjectURL === "function" &&
		typeof Blob === "function" &&
		typeof btoa === "function") {
		styleElement = createLinkElement(options);
		update = updateLink.bind(null, styleElement, options);
		remove = function() {
			removeStyleElement(styleElement);
			if(styleElement.href)
				URL.revokeObjectURL(styleElement.href);
		};
	} else {
		styleElement = createStyleElement(options);
		update = applyToTag.bind(null, styleElement);
		remove = function() {
			removeStyleElement(styleElement);
		};
	}

	update(obj);

	return function updateStyle(newObj) {
		if(newObj) {
			if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
				return;
			update(obj = newObj);
		} else {
			remove();
		}
	};
}

var replaceText = (function () {
	var textStore = [];

	return function (index, replacement) {
		textStore[index] = replacement;
		return textStore.filter(Boolean).join('\n');
	};
})();

function applyToSingletonTag(styleElement, index, remove, obj) {
	var css = remove ? "" : obj.css;

	if (styleElement.styleSheet) {
		styleElement.styleSheet.cssText = replaceText(index, css);
	} else {
		var cssNode = document.createTextNode(css);
		var childNodes = styleElement.childNodes;
		if (childNodes[index]) styleElement.removeChild(childNodes[index]);
		if (childNodes.length) {
			styleElement.insertBefore(cssNode, childNodes[index]);
		} else {
			styleElement.appendChild(cssNode);
		}
	}
}

function applyToTag(styleElement, obj) {
	var css = obj.css;
	var media = obj.media;

	if(media) {
		styleElement.setAttribute("media", media)
	}

	if(styleElement.styleSheet) {
		styleElement.styleSheet.cssText = css;
	} else {
		while(styleElement.firstChild) {
			styleElement.removeChild(styleElement.firstChild);
		}
		styleElement.appendChild(document.createTextNode(css));
	}
}

function updateLink(linkElement, options, obj) {
	var css = obj.css;
	var sourceMap = obj.sourceMap;

	/* If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
	and there is no publicPath defined then lets turn convertToAbsoluteUrls
	on by default.  Otherwise default to the convertToAbsoluteUrls option
	directly
	*/
	var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;

	if (options.convertToAbsoluteUrls || autoFixUrls){
		css = fixUrls(css);
	}

	if(sourceMap) {
		// http://stackoverflow.com/a/26603875
		css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
	}

	var blob = new Blob([css], { type: "text/css" });

	var oldSrc = linkElement.href;

	linkElement.href = URL.createObjectURL(blob);

	if(oldSrc)
		URL.revokeObjectURL(oldSrc);
}


/***/ }),

/***/ "../../../node_modules/style-loader/fixUrls.js":
/***/ (function(module, exports) {


/**
 * When source maps are enabled, `style-loader` uses a link element with a data-uri to
 * embed the css on the page. This breaks all relative urls because now they are relative to a
 * bundle instead of the current page.
 *
 * One solution is to only use full urls, but that may be impossible.
 *
 * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
 *
 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
 *
 */

module.exports = function (css) {
  // get current location
  var location = typeof window !== "undefined" && window.location;

  if (!location) {
    throw new Error("fixUrls requires window.location");
  }

	// blank or null?
	if (!css || typeof css !== "string") {
	  return css;
  }

  var baseUrl = location.protocol + "//" + location.host;
  var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");

	// convert each url(...)
	/*
	This regular expression is just a way to recursively match brackets within
	a string.

	 /url\s*\(  = Match on the word "url" with any whitespace after it and then a parens
	   (  = Start a capturing group
	     (?:  = Start a non-capturing group
	         [^)(]  = Match anything that isn't a parentheses
	         |  = OR
	         \(  = Match a start parentheses
	             (?:  = Start another non-capturing groups
	                 [^)(]+  = Match anything that isn't a parentheses
	                 |  = OR
	                 \(  = Match a start parentheses
	                     [^)(]*  = Match anything that isn't a parentheses
	                 \)  = Match a end parentheses
	             )  = End Group
              *\) = Match anything and then a close parens
          )  = Close non-capturing group
          *  = Match anything
       )  = Close capturing group
	 \)  = Match a close parens

	 /gi  = Get all matches, not the first.  Be case insensitive.
	 */
	var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
		// strip quotes (if they exist)
		var unquotedOrigUrl = origUrl
			.trim()
			.replace(/^"(.*)"$/, function(o, $1){ return $1; })
			.replace(/^'(.*)'$/, function(o, $1){ return $1; });

		// already a full url? no change
		if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) {
		  return fullMatch;
		}

		// convert the url to a full url
		var newUrl;

		if (unquotedOrigUrl.indexOf("//") === 0) {
		  	//TODO: should we add protocol?
			newUrl = unquotedOrigUrl;
		} else if (unquotedOrigUrl.indexOf("/") === 0) {
			// path should be relative to the base url
			newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
		} else {
			// path should be relative to current directory
			newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
		}

		// send back the fixed url(...)
		return "url(" + JSON.stringify(newUrl) + ")";
	});

	// send back the fixed css
	return fixedCss;
};


/***/ }),

/***/ "./assets/css/style.scss":
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__("../../../node_modules/css-loader/index.js!../../../node_modules/sass-loader/lib/loader.js!./assets/css/style.scss");
if(typeof content === 'string') content = [[module.i, content, '']];
// add the styles to the DOM
var update = __webpack_require__("../../../node_modules/style-loader/addStyles.js")(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/sass-loader/lib/loader.js!./style.scss", function() {
			var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/sass-loader/lib/loader.js!./style.scss");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),

/***/ "./js/controller/projectEditCtrl.js":
/***/ (function(module, exports) {

(function()
{
	var moduleName = 'projectEditApp';

	angular.module(moduleName)
		.controller("projectEditCtrl", ["$scope", "$http", 'breadcrumb.service', projectEditController]);

	function projectEditController($scope, $http, breadcrumbService)
	{
		$scope.project = project.info;
		$scope.company_options = project.info.companies;
		$scope.company = 0;

		$scope.roleData = [];
        $scope.rightData = [];

        $scope.stageTwoBegun = false;

		// Go to the right tab
		var tab = window.location.hash;
		if (tab.length > 0)
		{
			tab = tab.substr(2);

			if (angular.element('#' + tab).length > 0)
            {
                angular.element('#top-tab-content > .nav-item > .active').removeClass('active');
                angular.element('#top-tab-list > .nav-item > .active').removeClass('active');
                angular.element('#' + tab).addClass('active');
                angular.element('#' + tab + 'Tab > .nav-link').addClass('active');

                // set activeTab in local storage to override value if previously set when on another tab
                localStorage.setItem('activeTab', tab);
            }
		}

		// The description text can't be set from the template as it will be rendered after the
		// BBCode component and show BBCode markup in the WYSIWYG view
		angular.element('#projectDescription').val($scope.project.description);

		var breadcrumb =
		[
			{
				'url': '/projects',
				'name': lmsg('projects.breadcrumb.projects')
			}
		];

		if ($scope.project.id > 0)
		{
			breadcrumb.push(
			{
				'url': '/projects/' + $scope.project.id,
				'name': $scope.project.name
			});
			breadcrumb.push(
			{
				'url': '',
				'name': lmsg('projects.breadcrumb.edit_project')
			});
		} else
		{
			breadcrumb.push(
			{
				'url': '',
				'name': lmsg('projects.breadcrumb.add_project')
			});
		}
		breadcrumbService.setCrumbs(breadcrumb);

		for (var i = 0; i < $scope.company_options.length; i++)
		{
			if ($scope.company_options[i].value == project.info.company_id)
			{
				$scope.company = $scope.company_options[i];
			}
		}

		if ($scope.company == 0)
			$scope.company = $scope.company_options[0];

		$scope.status = project.info.status;
		$scope.duration = project.info.duration_units;
		$scope.duration_other = '';
		$scope.duration_other_name = lmsg('projects.duration.other');

		if (($scope.duration != lmsg('projects.duration.hours')) &&
			($scope.duration != lmsg('projects.duration.days')))
		{
			$scope.duration_other = $scope.duration;
			$scope.duration = lmsg('projects.duration.other');
		}

		$scope.rolesInit = function(roles, rights, is_edit)
        {
            $scope.roleData.length = 0;
            $scope.roleData.options = roles.options;
            $scope.roleData.roles = roles.roles;
            $scope.rightData.rights = rights.rights;
            $scope.rightData.rightGroups = rights.right_groups;
            $scope.stageTwoBegun = !!is_edit;
        };

		$scope.confirmDelete = function(event, project_id)
		{
			event.preventDefault();

			if(confirm(lmsg('projects.js.are_you_sure')))
			{
				var url = '/api/projects/' + project_id;
				$http.delete(url).then(function(result)
				{
					if (result.data.result)
						window.location.href = '/projects?message=' + encodeURIComponent(lmsg('projects.js.project.project_deleted'));
					else
						cla.showMessage(lmsg('common.general.error') + ': ' + result.data.message, '', true);
				});
			}
		};

		$scope.onTabClick = function(tabName)
		{
		    if (tabName === "tabRolesRights")
                $scope.stageTwoBegun = true;

			window.location.hash = '/' + tabName;
		};

		$scope.onContinueClick = function(e) {
			e.preventDefault();
			$scope.stageTwoBegun = true;

            angular.element('.nav-pills a[href="#tabRolesRights"]').trigger('click');

			// jump to the top of the project edit dialog, so that the help text is visible
			var top = angular.element("#projectEditApp").prop("offsetTop");
			window.scrollTo(0, top);
		}
	}
}());


/***/ }),

/***/ "./js/projects.edit.js":
/***/ (function(module, exports, __webpack_require__) {

var angular = __webpack_require__(1);
window.angular = angular;

__webpack_require__(2);
__webpack_require__(0);

angular.module('projectEditApp', ['ui.bootstrap', 'ngResource', 'cla.core.lmsg', 'cla.core.breadcrumb']);
__webpack_require__("./js/controller/projectEditCtrl.js");

/***/ }),

/***/ 0:
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE_0__;

/***/ }),

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

module.exports = __WEBPACK_EXTERNAL_MODULE_1__;

/***/ }),

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

module.exports = __WEBPACK_EXTERNAL_MODULE_2__;

/***/ }),

/***/ 22:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__("./assets/css/style.scss");
module.exports = __webpack_require__("./js/projects.edit.js");


/***/ })

/******/ })});;