Your IP : 3.145.14.237


Current Path : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/ui/timeline/dist/
Upload File :
Current File : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/ui/timeline/dist/timeline.bundle.js

/* eslint-disable */
this.BX = this.BX || {};
(function (exports,main_loader,ui_dialogs_messagebox,main_popup,main_core_events,main_core) {
	'use strict';

	let _ = t => t,
	  _t,
	  _t2,
	  _t3,
	  _t4,
	  _t5,
	  _t6,
	  _t7,
	  _t8,
	  _t9,
	  _t10;

	/**
	 * @mixes EventEmitter
	 * @memberOf BX.UI.Timeline
	 */
	class Item {
	  constructor(params) {
	    this.isProgress = false;
	    main_core_events.EventEmitter.makeObservable(this, 'UI.Timeline.Item');
	    this.id = params.id;
	    this.createdTimestamp = null;
	    this.action = '';
	    this.title = '';
	    this.description = '';
	    this.htmlDescription = '';
	    this.textDescription = '';
	    this.userId = params.userId;
	    this.isFixed = params.isFixed === true;
	    this.data = {};
	    this.eventIds = new Set();
	    if (main_core.Type.isPlainObject(params)) {
	      if (main_core.Type.isSet(params.eventIds)) {
	        this.eventIds = params.eventIds;
	      }
	      if (main_core.Type.isString(params.action)) {
	        this.action = params.action;
	      }
	      if (main_core.Type.isString(params.title)) {
	        this.title = params.title;
	      }
	      if (main_core.Type.isString(params.description)) {
	        this.description = params.description;
	      }
	      if (main_core.Type.isString(params.htmlDescription)) {
	        this.htmlDescription = params.htmlDescription;
	      }
	      if (main_core.Type.isString(params.textDescription)) {
	        this.textDescription = params.textDescription;
	      }
	      if (main_core.Type.isNumber(params.createdTimestamp)) {
	        this.createdTimestamp = params.createdTimestamp;
	      }
	      if (main_core.Type.isPlainObject(params.data)) {
	        this.data = params.data;
	      }
	    }
	    this.layout = {};
	    this.timeFormat = 'H:M';
	    this.nameFormat = '';
	    this.users = new Map();
	    this.isLast = false;
	    this.events = params.events;
	    this.isPinned = false;
	  }
	  afterRender() {
	    main_core.Event.bind(this.renderPin(), 'click', this.onPinClick.bind(this));
	    this.bindActionsButtonClick();
	  }
	  bindActionsButtonClick() {
	    const button = this.getActionsButton();
	    if (button) {
	      main_core.Event.bind(button, 'click', this.onActionsButtonClick.bind(this));
	    }
	  }
	  setIsLast(isLast) {
	    this.isLast = isLast;
	    if (this.isRendered()) {
	      if (this.isLast) {
	        this.getContainer().classList.add('ui-item-detail-stream-section-last');
	      } else {
	        this.getContainer().classList.remove('ui-item-detail-stream-section-last');
	      }
	    }
	  }
	  setUserData(users) {
	    if (users) {
	      this.users = users;
	    }
	    return this;
	  }
	  setTimeFormat(timeFormat) {
	    if (main_core.Type.isString(timeFormat)) {
	      this.timeFormat = timeFormat;
	    }
	    return this;
	  }
	  setNameFormat(nameFormat) {
	    if (main_core.Type.isString(nameFormat)) {
	      this.nameFormat = nameFormat;
	    }
	    return this;
	  }
	  getContainer() {
	    return this.layout.container;
	  }
	  isRendered() {
	    return main_core.Type.isDomNode(this.getContainer());
	  }
	  getCreatedTime() {
	    if (this.createdTimestamp > 0) {
	      this.createdTimestamp = main_core.Text.toInteger(this.createdTimestamp);
	      return new Date(this.createdTimestamp);
	    }
	    return null;
	  }
	  formatTime(time) {
	    return BX.date.format(this.timeFormat, time);
	  }
	  getId() {
	    return this.id;
	  }
	  getTitle() {
	    return this.title;
	  }
	  getUserId() {
	    return main_core.Text.toInteger(this.userId);
	  }
	  getScope() {
	    if (main_core.Type.isString(this.data.scope)) {
	      return this.data.scope;
	    }
	    return null;
	  }
	  isScopeManual() {
	    const scope = this.getScope();
	    return !scope || scope === 'manual';
	  }
	  isScopeAutomation() {
	    return this.getScope() === 'automation';
	  }
	  isScopeTask() {
	    return this.getScope() === 'task';
	  }
	  isScopeRest() {
	    return this.getScope() === 'rest';
	  }
	  render() {
	    this.layout.container = this.renderContainer();
	    this.updateLayout();
	    return this.layout.container;
	  }
	  updateLayout() {
	    this.clearLayout(true);
	    this.layout.container.appendChild(this.renderIcon());
	    if (this.hasMenu()) {
	      this.layout.container.appendChild(this.renderActionsButton());
	    }
	    this.layout.container.appendChild(this.renderPin());
	    let content = this.getContent();
	    if (!content) {
	      content = this.renderContent();
	    }
	    this.layout.container.appendChild(content);
	    this.afterRender();
	  }
	  renderContainer() {
	    return main_core.Tag.render(_t || (_t = _`<div class="ui-item-detail-stream-section ${0}"></div>`), this.isLast ? 'ui-item-detail-stream-section-last' : '');
	  }
	  renderPin() {
	    if (!this.layout.pin) {
	      this.layout.pin = main_core.Tag.render(_t2 || (_t2 = _`<span class="ui-item-detail-stream-section-top-fixed-btn"></span>`));
	    }
	    if (this.isFixed) {
	      this.layout.pin.classList.add('ui-item-detail-stream-section-top-fixed-btn-active');
	    } else {
	      this.layout.pin.classList.remove('ui-item-detail-stream-section-top-fixed-btn-active');
	    }
	    return this.layout.pin;
	  }
	  renderContent() {
	    this.layout.content = main_core.Tag.render(_t3 || (_t3 = _`<div class="ui-item-detail-stream-section-content">${0}</div>`), this.renderDescription());
	    return this.getContent();
	  }
	  getContent() {
	    return this.layout.content;
	  }
	  renderDescription() {
	    this.layout.description = main_core.Tag.render(_t4 || (_t4 = _`<div class="ui-item-detail-stream-content-event"></div>`));
	    let header = this.renderHeader();
	    if (header) {
	      this.layout.description.appendChild(header);
	    }
	    this.layout.description.appendChild(this.renderMain());
	    return this.layout.description;
	  }
	  renderHeader() {
	    return null;
	  }
	  renderHeaderUser(userId, size = 21) {
	    userId = main_core.Text.toInteger(userId);
	    let userData = {
	      link: 'javascript: void(0)',
	      fullName: '',
	      photo: null
	    };
	    if (userId > 0) {
	      userData = this.users.get(userId);
	    }
	    if (!userData) {
	      return main_core.Tag.render(_t5 || (_t5 = _`<a></a>`));
	    }
	    const safeFullName = main_core.Tag.safe(_t6 || (_t6 = _`${0}`), userData.fullName);
	    return main_core.Tag.render(_t7 || (_t7 = _`<a class="ui-item-detail-stream-content-employee" href="${0}" target="_blank" title="${0}" ${0}></a>`), userData.link, safeFullName, userData.photo ? 'style="background-image: url(\'' + userData.photo + '\'); background-size: 100%;"' : '');
	  }
	  renderMain() {
	    this.layout.main = main_core.Tag.render(_t8 || (_t8 = _`<div class="ui-item-detail-stream-content-detail">${0}</div>`), this.description);
	    return this.getMain();
	  }
	  getMain() {
	    return this.layout.main;
	  }
	  renderIcon() {
	    this.layout.icon = main_core.Tag.render(_t9 || (_t9 = _`<div class="ui-item-detail-stream-section-icon"></div>`));
	    return this.layout.icon;
	  }
	  getItem() {
	    if (main_core.Type.isPlainObject(this.data.item)) {
	      return this.data.item;
	    }
	    return null;
	  }
	  onPinClick() {
	    this.isFixed = !this.isFixed;
	    this.renderPin();
	    if (main_core.Type.isFunction(this.events.onPinClick)) {
	      this.events.onPinClick(this);
	    }
	    this.emit('onPinClick');
	  }
	  clearLayout(isSkipContainer = false) {
	    const container = this.getContainer();
	    Object.keys(this.layout).forEach(name => {
	      const node = this.layout[name];
	      if (!isSkipContainer || container !== node) {
	        main_core.Dom.remove(node);
	        delete this.layout[name];
	      }
	    });
	    return this;
	  }
	  getDataForUpdate() {
	    return {
	      description: this.description,
	      htmlDescription: this.htmlDescription,
	      data: this.data,
	      userId: this.userId
	    };
	  }
	  updateData(params) {
	    if (main_core.Type.isPlainObject(params)) {
	      if (main_core.Type.isString(params.description)) {
	        this.description = params.description;
	      }
	      if (main_core.Type.isString(params.htmlDescription)) {
	        this.htmlDescription = params.htmlDescription;
	      }
	      if (main_core.Type.isPlainObject(params.data)) {
	        this.data = params.data;
	      }
	      if (params.userId > 0) {
	        this.userId = params.userId;
	      }
	    }
	    return this;
	  }
	  update(params) {
	    this.updateData(params).updateLayout();
	    return this;
	  }
	  onError(params) {
	    if (main_core.Type.isFunction(this.events.onError)) {
	      this.events.onError(params);
	    }
	    this.emit('error', params);
	  }
	  onDelete() {
	    if (main_core.Type.isFunction(this.events.onDelete)) {
	      this.events.onDelete(this);
	    }
	    this.emit('onDeleteComplete');
	  }
	  hasMenu() {
	    return this.hasActions();
	  }
	  hasActions() {
	    return this.getActions().length > 0;
	  }
	  getActions() {
	    return [];
	  }
	  renderActionsButton() {
	    this.layout.contextMenuButton = main_core.Tag.render(_t10 || (_t10 = _`<div class="ui-timeline-item-context-menu"></div>`));
	    return this.getActionsButton();
	  }
	  getActionsButton() {
	    return this.layout.contextMenuButton;
	  }
	  getActionsMenuId() {
	    return 'ui-timeline-item-context-menu-' + this.getId();
	  }
	  onActionsButtonClick() {
	    this.getActionsMenu().toggle();
	  }
	  getActionsMenu() {
	    return main_popup.MenuManager.create({
	      id: this.getActionsMenuId(),
	      bindElement: this.getActionsButton(),
	      items: this.getActions(),
	      offsetTop: 0,
	      offsetLeft: 16,
	      angle: {
	        position: "top",
	        offset: 0
	      },
	      events: {
	        onPopupShow: this.onContextMenuShow.bind(this),
	        onPopupClose: this.onContextMenuClose.bind(this)
	      }
	    });
	  }
	  onContextMenuShow() {
	    this.getActionsButton().classList.add('active');
	  }
	  onContextMenuClose() {
	    this.getActionsButton().classList.remove('active');
	    this.getActionsMenu().destroy();
	  }
	  startProgress() {
	    this.isProgress = true;
	    this.getLoader().show();
	  }
	  stopProgress() {
	    this.isProgress = false;
	    if (this.getLoader().isShown()) {
	      this.getLoader().hide();
	    }
	  }
	  getLoader() {
	    if (!this.loader) {
	      this.loader = new main_loader.Loader({
	        target: this.getContainer()
	      });
	    }
	    return this.loader;
	  }
	}

	let _$1 = t => t,
	  _t$1,
	  _t2$1,
	  _t3$1,
	  _t4$1,
	  _t5$1,
	  _t6$1;
	class History extends Item {
	  renderContainer() {
	    const container = super.renderContainer();
	    if (this.isScopeAutomation()) {
	      container.classList.add('ui-item-detail-stream-section-icon-robot');
	    } else {
	      container.classList.add('ui-item-detail-stream-section-info');
	    }
	    return container;
	  }
	  renderHeader() {
	    return main_core.Tag.render(_t$1 || (_t$1 = _$1`<div class="ui-item-detail-stream-content-header">
			<div class="ui-item-detail-stream-content-title">
				<span class="ui-item-detail-stream-content-title-text">${0}</span>
				<span class="ui-item-detail-stream-content-title-time">${0}</span>
			</div>
			${0}
		</div>`), main_core.Text.encode(this.getTitle()), this.formatTime(this.getCreatedTime()), this.renderHeaderUser(this.getUserId()));
	  }
	  renderStageChangeTitle() {
	    return main_core.Tag.render(_t2$1 || (_t2$1 = _$1`<div class="ui-item-detail-stream-content-title">
			<span class="ui-item-detail-stream-content-title-text">${0}</span>
		</div>`), main_core.Loc.getMessage('UI_TIMELINE_STAGE_CHANGE_SUBTITLE'));
	  }
	  renderStageChange() {
	    const stageFrom = this.getStageFrom();
	    const stageTo = this.getStageTo();
	    if (stageFrom && stageTo && stageFrom.id !== stageTo.id) {
	      return main_core.Tag.render(_t3$1 || (_t3$1 = _$1`<div class="ui-item-detail-stream-content-detail-info">
				<span class="ui-item-detail-stream-content-detail-info-status">${0}</span>
				<span class="ui-item-detail-stream-content-detail-info-separator"></span>
				<span class="ui-item-detail-stream-content-detail-info-status">${0}</span>
			</div>`), main_core.Text.encode(stageFrom.name), main_core.Text.encode(stageTo.name));
	    }
	    return null;
	  }
	  getStageFrom() {
	    if (main_core.Type.isPlainObject(this.data.stageFrom)) {
	      return this.data.stageFrom;
	    }
	    return null;
	  }
	  getStageTo() {
	    if (main_core.Type.isPlainObject(this.data.stageTo)) {
	      return this.data.stageTo;
	    }
	    return null;
	  }
	  getFields() {
	    if (main_core.Type.isArray(this.data.fields)) {
	      return this.data.fields;
	    }
	    return null;
	  }
	  renderFieldsChange() {
	    const fields = this.getFields();
	    if (fields) {
	      const list = [];
	      fields.forEach(field => {
	        list.push(main_core.Tag.render(_t4$1 || (_t4$1 = _$1`<div class="ui-item-detail-stream-content-detail-field">${0}</div>`), main_core.Text.encode(field.title)));
	      });
	      return main_core.Tag.render(_t5$1 || (_t5$1 = _$1`<div class="ui-item-detail-stream-content-detail-info ui-item-detail-stream-content-detail-info-break">
				${0}
			</div>`), list);
	    }
	    return null;
	  }
	  renderFieldsChangeTitle() {
	    return main_core.Tag.render(_t6$1 || (_t6$1 = _$1`<div class="ui-item-detail-stream-content-title">
			<span class="ui-item-detail-stream-content-title-text">${0}</span>
		</div>`), main_core.Loc.getMessage('UI_TIMELINE_FIELDS_CHANGE_SUBTITLE'));
	  }
	}

	let _$2 = t => t,
	  _t$2;
	class StageChange extends History {
	  renderMain() {
	    let stageChange = this.renderStageChange();
	    if (!stageChange) {
	      stageChange = '';
	    }
	    let fieldsChange = this.renderFieldsChange();
	    if (!fieldsChange) {
	      fieldsChange = '';
	    }
	    return main_core.Tag.render(_t$2 || (_t$2 = _$2`<div class="ui-item-detail-stream-content-detail">
			${0}
			${0}
		</div>`), stageChange, fieldsChange);
	  }
	}

	let _$3 = t => t,
	  _t$3;
	class FieldsChange extends History {
	  renderMain() {
	    let fieldsChange = this.renderFieldsChange();
	    if (!fieldsChange) {
	      fieldsChange = '';
	    }
	    return main_core.Tag.render(_t$3 || (_t$3 = _$3`<div class="ui-item-detail-stream-content-detail">
			${0}
		</div>`), fieldsChange);
	  }
	}

	/**
	 * @abstract
	 * @mixes EventEmitter
	 * @memberOf BX.UI.Timeline
	 */
	class Editor {
	  constructor(params) {
	    this.isProgress = false;
	    if (main_core.Type.isString(params.id) && params.id.length > 0) {
	      this.id = params.id;
	    } else {
	      this.id = main_core.Text.getRandom();
	    }
	    this.layout = {};
	    main_core_events.EventEmitter.makeObservable(this, 'BX.UI.Timeline.Editor');
	  }
	  getId() {
	    return this.id;
	  }
	  getTitle() {}
	  getContainer() {
	    return this.layout.container;
	  }
	  render() {
	    throw new Error('This method should be overridden');
	  }
	  clearLayout(isSkipContainer = false) {
	    const container = this.getContainer();
	    Object.keys(this.layout).forEach(name => {
	      const node = this.layout[name];
	      if (!isSkipContainer || container !== node) {
	        main_core.Dom.clean(node);
	        delete this.layout[name];
	      }
	    });
	    return this;
	  }
	  startProgress() {
	    this.isProgress = true;
	    this.getLoader().show();
	  }
	  stopProgress() {
	    this.isProgress = false;
	    if (this.getLoader().isShown()) {
	      this.getLoader().hide();
	    }
	  }
	  getLoader() {
	    if (!this.loader) {
	      this.loader = new main_loader.Loader({
	        target: this.getContainer()
	      });
	    }
	    return this.loader;
	  }
	  isRendered() {
	    return main_core.Type.isDomNode(this.getContainer());
	  }
	}

	let _$4 = t => t,
	  _t$4,
	  _t2$2,
	  _t3$2,
	  _t4$2,
	  _t5$2,
	  _t6$2,
	  _t7$1;

	/**
	 * @memberOf BX.UI.Timeline
	 * @mixes EventEmitter
	 */
	class CommentEditor extends Editor {
	  constructor(params) {
	    super(params);
	    this.commentId = 0;
	    this.editorContent = null;
	    if (main_core.Type.isNumber(params.commentId)) {
	      this.commentId = params.commentId;
	    }
	    this.setEventNamespace('BX.UI.Timeline.CommentEditor');
	  }
	  getTitle() {
	    return main_core.Loc.getMessage('UI_TIMELINE_EDITOR_COMMENT');
	  }
	  getVisualEditorName() {
	    return 'UiTimelineCommentVisualEditor' + this.getId().replace('- ', '');
	  }
	  getTextarea() {
	    return this.layout.textarea;
	  }
	  renderTextarea() {
	    this.layout.textarea = main_core.Tag.render(_t$4 || (_t$4 = _$4`<textarea onfocus="${0}" rows="1" class="ui-item-detail-stream-section-new-comment-textarea" placeholder="${0}"></textarea>`), this.onFocus.bind(this), main_core.Loc.getMessage('UI_TIMELINE_EDITOR_COMMENT_TEXTAREA'));
	    return this.getTextarea();
	  }
	  getVisualEditorContainer() {
	    return this.layout.visualEditorContainer;
	  }
	  renderVisualEditorContainer() {
	    this.layout.visualEditorContainer = main_core.Tag.render(_t2$2 || (_t2$2 = _$4`<div class="ui-timeline-comment-visual-editor"></div>`));
	    return this.getVisualEditorContainer();
	  }
	  getButtonsContainer() {
	    return this.layout.buttonsContainer;
	  }
	  renderButtons() {
	    this.layout.buttonsContainer = main_core.Tag.render(_t3$2 || (_t3$2 = _$4`<div class="ui-item-detail-stream-section-new-comment-btn-container">
			${0}
			${0}
		</div>`), this.renderSaveButton(), this.renderCancelButton());
	    return this.getButtonsContainer();
	  }
	  getSaveButton() {
	    return this.layout.saveButton;
	  }
	  renderSaveButton() {
	    this.layout.saveButton = main_core.Tag.render(_t4$2 || (_t4$2 = _$4`<button onclick="${0}" class="ui-btn ui-btn-xs ui-btn-primary">${0}</button>`), this.save.bind(this), main_core.Loc.getMessage('UI_TIMELINE_EDITOR_COMMENT_SEND'));
	    return this.getSaveButton();
	  }
	  getCancelButton() {
	    return this.layout.cancelButton;
	  }
	  renderCancelButton() {
	    this.layout.cancelButton = main_core.Tag.render(_t5$2 || (_t5$2 = _$4`<span onclick="${0}" class="ui-btn ui-btn-xs ui-btn-link">${0}</span>`), this.cancel.bind(this), main_core.Loc.getMessage('UI_TIMELINE_EDITOR_COMMENT_CANCEL'));
	    return this.getCancelButton();
	  }
	  render() {
	    this.layout.container = main_core.Tag.render(_t6$2 || (_t6$2 = _$4`<div class="ui-timeline-comment-editor">
				${0}
				${0}
				${0}
			</div>`), this.renderTextarea(), this.renderButtons(), this.renderVisualEditorContainer());
	    return this.getContainer();
	  }
	  onFocus() {
	    const container = this.getContainer();
	    if (container) {
	      container.classList.add('focus');
	    }
	    this.showVisualEditor();
	  }
	  showVisualEditor() {
	    if (!this.getVisualEditorContainer()) {
	      return;
	    }
	    if (this.postForm && this.visualEditor) {
	      this.postForm.eventNode.style.display = 'block';
	      this.visualEditor.Focus();
	    } else if (!this.isProgress) {
	      this.loadVisualEditor().then(() => {
	        main_core_events.EventEmitter.emit(this.postForm.eventNode, 'OnShowLHE', [true]);
	        //todo there should be some other way
	        setTimeout(() => {
	          this.editorContent = this.postForm.oEditor.GetContent();
	        }, 300);
	      }).catch(() => {
	        this.cancel();
	        this.emit('error', {
	          message: 'Could not load visual editor. Please try again later'
	        });
	      });
	    }
	  }
	  loadVisualEditor() {
	    return new Promise((resolve, reject) => {
	      if (this.isProgress) {
	        reject();
	      }
	      this.showEditorLoader();
	      const event = new main_core_events.BaseEvent({
	        data: {
	          name: this.getVisualEditorName(),
	          commentId: this.commentId
	        }
	      });
	      this.emitAsync('onLoadVisualEditor', event).then(() => {
	        const html = event.getData().html;
	        if (main_core.Type.isString(html)) {
	          main_core.Runtime.html(this.getVisualEditorContainer(), html).then(() => {
	            this.hideEditorLoader();
	            if (LHEPostForm && BXHtmlEditor) {
	              this.postForm = LHEPostForm.getHandler(this.getVisualEditorName());
	              this.visualEditor = BXHtmlEditor.Get(this.getVisualEditorName());
	              resolve();
	            } else {
	              reject();
	            }
	          });
	        } else {
	          reject();
	        }
	      }).catch(() => {
	        reject();
	      });
	    });
	  }
	  showEditorLoader() {
	    this.editorLoader = main_core.Tag.render(_t7$1 || (_t7$1 = _$4`<div class="ui-timeline-wait"></div>`));
	    main_core.Dom.append(this.editorLoader, this.getContainer());
	  }
	  hideEditorLoader() {
	    main_core.Dom.remove(this.editorLoader);
	  }
	  hideVisualEditor() {
	    if (this.postForm) {
	      this.postForm.eventNode.style.display = 'none';
	    }
	  }
	  save() {
	    if (this.isProgress || !this.postForm) {
	      return;
	    }
	    let isCancel = false;
	    const description = this.postForm.oEditor.GetContent();
	    this.editorContent = description;
	    const files = this.getAttachments();
	    this.emit('beforeSave', {
	      description,
	      isCancel,
	      files
	    });
	    if (description === '') {
	      this.getEmptyMessageNotification().show();
	      return;
	    }
	    this.startProgress();
	    const event = new main_core_events.BaseEvent({
	      data: {
	        description,
	        files,
	        commentId: this.commentId
	      }
	    });
	    this.emitAsync('onSave', event).then(() => {
	      this.postForm.reinit();
	      this.stopProgress();
	      this.emit('afterSave', {
	        data: event.getData()
	      });
	      this.cancel();
	    }).catch(() => {
	      //todo why are we here?
	      this.stopProgress();
	      this.cancel();
	      const message = event.getData().message;
	      if (message) {
	        this.emit('error', {
	          message
	        });
	      }
	    });
	  }
	  cancel() {
	    this.hideVisualEditor();
	    const container = this.getContainer();
	    if (container) {
	      container.classList.remove('focus');
	    }
	    this.stopProgress();
	    this.emit('cancel');
	  }
	  getEmptyMessageNotification() {
	    if (!this.emptyMessagePopup) {
	      this.emptyMessagePopup = new main_popup.Popup({
	        id: this.getId() + '-empty-message-popup',
	        bindElement: this.getSaveButton(),
	        content: BX.message('UI_TIMELINE_EMPTY_COMMENT_NOTIFICATION'),
	        darkMode: true,
	        autoHide: true,
	        zIndex: 990,
	        angle: {
	          position: 'top',
	          offset: 77
	        },
	        closeByEsc: true,
	        bindOptions: {
	          forceBindPosition: true
	        }
	      });
	    }
	    return this.emptyMessagePopup;
	  }
	  refresh() {
	    if (this.postForm && this.postForm.oEditor) {
	      if (this.editorContent) {
	        this.postForm.oEditor.SetContent(this.editorContent);
	      }
	    }
	    if (this.visualEditor) {
	      this.visualEditor.ReInitIframe();
	    }
	  }
	  getAttachments() {
	    const attachments = [];
	    if (!this.postForm || !main_core.Type.isPlainObject(this.postForm.arFiles) || !main_core.Type.isPlainObject(this.postForm.controllers)) {
	      return attachments;
	    }
	    const fileControllers = [];
	    Object.values(this.postForm.arFiles).forEach(controller => {
	      if (!fileControllers.includes(controller)) {
	        fileControllers.push(controller);
	      }
	    });
	    fileControllers.forEach(fileController => {
	      if (this.postForm.controllers[fileController] && main_core.Type.isPlainObject(this.postForm.controllers[fileController].values)) {
	        Object.keys(this.postForm.controllers[fileController].values).forEach(fileId => {
	          if (!attachments.includes(fileId)) {
	            attachments.push(fileId);
	          }
	        });
	      }
	    });
	    return attachments;
	  }
	}

	let _$5 = t => t,
	  _t$5,
	  _t2$3,
	  _t3$3,
	  _t4$3,
	  _t5$3,
	  _t6$3;
	const COLLAPSE_TEXT_MAX_LENGTH = 128;

	/**
	 * @memberOf BX.UI.Timeline
	 * @mixes EventEmitter
	 */
	class Comment extends History {
	  constructor(props) {
	    super(props);
	    this.isCollapsed = null;
	    this.isContentLoaded = null;
	    this.setEventNamespace('BX.UI.Timeline.Comment');
	  }
	  afterRender() {
	    super.afterRender();
	    if (this.isCollapsed === null) {
	      this.isCollapsed = this.isAddExpandBlock();
	    }
	    if (this.isContentLoaded === null) {
	      this.isContentLoaded = !this.hasFiles();
	    }
	    if (this.isCollapsed) {
	      this.getMain().classList.add('ui-timeline-content-description-collapsed');
	      this.getMain().classList.remove('ui-timeline-content-description-expand');
	    } else {
	      this.getMain().classList.remove('ui-timeline-content-description-collapsed');
	      this.getMain().classList.add('ui-timeline-content-description-expand');
	    }
	    if (this.isAddExpandBlock()) {
	      this.getMainDescription().appendChild(this.renderExpandBlock());
	    }
	    if (this.hasFiles()) {
	      this.getContent().appendChild(main_core.Tag.render(_t$5 || (_t$5 = _$5`<div class="ui-timeline-section-files">${0}</div>`), this.renderFilesContainer()));
	      main_core.Event.ready(() => {
	        setTimeout(() => {
	          this.loadFilesContent();
	        }, 100);
	      });
	    }
	  }
	  getFiles() {
	    if (main_core.Type.isArray(this.data.files)) {
	      return this.data.files;
	    }
	    return [];
	  }
	  hasFiles() {
	    return this.getFiles().length > 0;
	  }
	  isAddExpandBlock() {
	    return this.textDescription.length > COLLAPSE_TEXT_MAX_LENGTH || this.hasFiles();
	  }
	  renderContainer() {
	    const container = super.renderContainer();
	    container.classList.add('ui-item-detail-stream-section-comment');
	    container.classList.remove('ui-item-detail-stream-section-info');
	    return container;
	  }
	  renderMain() {
	    this.layout.main = main_core.Tag.render(_t2$3 || (_t2$3 = _$5`<div class="ui-item-detail-stream-content-detail">
			${0}
		</div>`), this.renderMainDescription());
	    return this.getMain();
	  }
	  getMain() {
	    return this.layout.main;
	  }
	  renderMainDescription() {
	    this.layout.mainDescription = main_core.Tag.render(_t3$3 || (_t3$3 = _$5`<div class="ui-item-detail-stream-content-description" onclick="${0}">${0}</div>`), this.onMainClick.bind(this), this.htmlDescription);
	    return this.getMainDescription();
	  }
	  getMainDescription() {
	    return this.layout.mainDescription;
	  }
	  renderExpandBlock() {
	    this.layout.expandBlock = main_core.Tag.render(_t4$3 || (_t4$3 = _$5`<div class="ui-timeline-content-description-expand-container">${0}</div>`), this.renderExpandButton());
	    return this.getExpandBlock();
	  }
	  getExpandBlock() {
	    return this.layout.expandBlock;
	  }
	  renderExpandButton() {
	    this.layout.expandButton = main_core.Tag.render(_t5$3 || (_t5$3 = _$5`<a class="ui-timeline-content-description-expand-btn" onclick="${0}">
			${0}
		</a>`), this.onExpandButtonClick.bind(this), main_core.Loc.getMessage(this.isCollapsed ? 'UI_TIMELINE_EXPAND_SM' : 'UI_TIMELINE_COLLAPSE_SM'));
	    return this.getExpandButton();
	  }
	  getExpandButton() {
	    return this.layout.expandButton;
	  }
	  getCommendEditor() {
	    if (!this.commentEditor) {
	      this.commentEditor = new CommentEditor({
	        commentId: this.getId(),
	        id: 'UICommentEditor' + this.getId() + (this.isPinned ? 'pinned' : '') + main_core.Text.getRandom()
	      });
	      this.commentEditor.layout.container = this.getContainer();
	      this.commentEditor.subscribe('cancel', this.switchToViewMode.bind(this));
	      this.commentEditor.subscribe('afterSave', this.onSaveComment.bind(this));
	    }
	    return this.commentEditor;
	  }
	  getEditorContainer() {
	    return this.layout.editorContainer;
	  }
	  renderEditorContainer() {
	    const editorContainer = this.getCommendEditor().getVisualEditorContainer();
	    if (editorContainer) {
	      this.layout.editorContainer = editorContainer;
	    } else {
	      this.layout.editorContainer = this.getCommendEditor().renderVisualEditorContainer();
	    }
	    return this.getEditorContainer();
	  }
	  getEditorButtons() {
	    return this.layout.editorButtons;
	  }
	  renderEditorButtons() {
	    this.layout.editorButtons = this.getCommendEditor().renderButtons();
	    return this.getEditorButtons();
	  }
	  renderFilesContainer() {
	    this.layout.filesContainer = main_core.Tag.render(_t6$3 || (_t6$3 = _$5`<div class="ui-timeline-section-files-inner"></div>`));
	    return this.getFilesContainer();
	  }
	  getFilesContainer() {
	    return this.layout.filesContainer;
	  }
	  switchToEditMode() {
	    if (!this.isRendered()) {
	      return;
	    }
	    if (!this.getEditorContainer()) {
	      this.getMain().appendChild(this.renderEditorContainer());
	      this.getMain().appendChild(this.renderEditorButtons());
	    } else {
	      this.getCommendEditor().refresh();
	    }
	    this.getContent().classList.add('ui-item-detail-comment-edit');
	    this.getCommendEditor().showVisualEditor();
	  }
	  switchToViewMode() {
	    this.getContent().classList.remove('ui-item-detail-comment-edit');
	    this.getCommendEditor().hideVisualEditor();
	  }
	  getActions() {
	    return [{
	      text: main_core.Loc.getMessage('UI_TIMELINE_ACTION_MODIFY'),
	      onclick: this.actionEdit.bind(this)
	    }, {
	      text: main_core.Loc.getMessage('UI_TIMELINE_ACTION_DELETE'),
	      onclick: this.actionDelete.bind(this)
	    }];
	  }
	  actionEdit() {
	    this.getActionsMenu().close();
	    this.switchToEditMode();
	  }
	  actionDelete() {
	    this.getActionsMenu().close();
	    ui_dialogs_messagebox.MessageBox.confirm(main_core.Loc.getMessage('UI_TIMELINE_COMMENT_DELETE_CONFIRM'), () => {
	      return new Promise(resolve => {
	        if (this.isProgress) {
	          return;
	        }
	        this.startProgress();
	        const event = new main_core_events.BaseEvent({
	          data: {
	            commentId: this.getId()
	          }
	        });
	        this.emitAsync('onDelete', event).then(() => {
	          this.stopProgress();
	          this.onDelete();
	          resolve();
	        }).catch(() => {
	          this.stopProgress();
	          const message = event.getData().message;
	          if (message) {
	            this.emit('error', {
	              message
	            });
	          }
	          resolve();
	        });
	      });
	    });
	  }
	  clearLayout(isSkipContainer = false) {
	    this.commentEditor = null;
	    return super.clearLayout(isSkipContainer);
	  }
	  onSaveComment(event) {
	    const data = event.getData();
	    if (data.data && data.data.comment) {
	      this.update(data.data.comment);
	    }
	  }
	  onMainClick({
	    target
	  }) {
	    if (main_core.Type.isDomNode(target)) {
	      const tagName = target.tagName.toLowerCase();
	      if (tagName === 'a' || tagName === 'img' || main_core.Dom.hasClass(target, 'feed-con-file-changes-link-more') || main_core.Dom.hasClass(target, 'feed-com-file-inline') || document.getSelection().toString().length > 0) {
	        return;
	      }
	    }
	    this.switchToEditMode();
	  }
	  onExpandButtonClick(event) {
	    event.preventDefault();
	    event.stopPropagation();
	    if (!this.isRendered()) {
	      return;
	    }
	    if (this.isCollapsed === true) {
	      this.getExpandBlock().style.maxHeight = this.getExpandBlock().scrollHeight + 130 + "px";
	      this.getMain().classList.remove('ui-timeline-content-description-collapsed');
	      this.getMain().classList.add('ui-timeline-content-description-expand');
	      setTimeout(() => {
	        this.getExpandBlock().style.maxHeight = "";
	      }, 300);
	      this.getExpandButton().innerText = main_core.Loc.getMessage('UI_TIMELINE_COLLAPSE_SM');
	      if (!this.isContentLoaded) {
	        this.isContentLoaded = true;
	        this.loadContent();
	      }
	      this.isCollapsed = false;
	    } else if (this.isCollapsed === false) {
	      this.getExpandBlock().style.maxHeight = this.getExpandBlock().scrollHeight + "px";
	      this.getMain().classList.add('ui-timeline-content-description-collapsed');
	      this.getMain().classList.remove('ui-timeline-content-description-expand');
	      setTimeout(() => {
	        this.getExpandBlock().style.maxHeight = "";
	      }, 0);
	      this.getExpandButton().innerText = main_core.Loc.getMessage('UI_TIMELINE_EXPAND_SM');
	      this.isCollapsed = true;
	    }
	  }
	  loadFilesContent() {
	    if (this.isProgress) {
	      return;
	    }
	    this.startProgress();
	    const event = new main_core_events.BaseEvent({
	      data: {
	        commentId: this.getId()
	      }
	    });
	    this.emitAsync('onLoadFilesContent', event).then(() => {
	      this.stopProgress();
	      const html = event.getData().html;
	      if (main_core.Type.isString(html)) {
	        main_core.Runtime.html(this.getFilesContainer(), html);
	      }
	    }).catch(() => {
	      this.stopProgress();
	      const message = event.getData().message;
	      if (message) {
	        this.emit('error', {
	          message
	        });
	      }
	    });
	  }
	  loadContent() {
	    if (this.isProgress) {
	      return;
	    }
	    this.startProgress();
	    const event = new main_core_events.BaseEvent({
	      data: {
	        commentId: this.getId()
	      }
	    });
	    this.emitAsync('onLoadContent', event).then(() => {
	      this.stopProgress();
	      const comment = event.getData().comment;
	      if (comment && main_core.Type.isString(comment.htmlDescription)) {
	        main_core.Runtime.html(this.getMainDescription(), comment.htmlDescription);
	        if (this.isAddExpandBlock()) {
	          this.getMainDescription().appendChild(this.getExpandBlock());
	        }
	        this.updateData(comment);
	      }
	    }).catch(() => {
	      this.stopProgress();
	      const message = event.getData().message;
	      if (message) {
	        this.emit('error', {
	          message
	        });
	      }
	    });
	  }
	}

	/**
	 * @abstract
	 */
	class Animation {
	  start() {}
	  finish(node, onFinish) {}
	}

	let _$6 = t => t,
	  _t$6;
	class Drop extends Animation {
	  constructor(params) {
	    super(params);
	    if (main_core.Type.isPlainObject(params)) {
	      if (params.item instanceof Item && main_core.Type.isDomNode(params.container)) {
	        this.item = params.item;
	        this.container = params.container;
	        this.insertAfter = params.insertAfter;
	      }
	    }
	  }
	  start() {
	    const timeout = Drop.DEFAULT_TIMEOUT;
	    return new Promise(resolve => {
	      if (!this.item || !this.container) {
	        resolve();
	      }
	      setTimeout(() => {
	        this.createGhost(this.item.render(), resolve);
	      }, timeout);
	    });
	  }
	  createGhost(node, onFinish) {
	    node.style.position = "absolute";
	    node.style.width = this.container.offsetWidth + "px";
	    node.style.top = main_core.Dom.getPosition(this.container).top + "px";
	    node.style.left = main_core.Dom.getPosition(this.container).left + "px";
	    document.body.appendChild(node);
	    this.anchor = main_core.Tag.render(_t$6 || (_t$6 = _$6`<div class="ui-item-detail-stream-section ui-item-detail-stream-section-shadow"></div>`));
	    main_core.Dom.prepend(this.anchor, this.container);
	    if (main_core.Type.isDomNode(this.insertAfter)) {
	      main_core.Dom.insertAfter(this.anchor, this.insertAfter);
	    }
	    this.moveGhost(node, onFinish);
	  }
	  moveGhost(node, onFinish) {
	    const anchorPosition = main_core.Dom.getPosition(this.anchor);
	    const startPosition = main_core.Dom.getPosition(this.container);
	    const movingEvent = new BX.easing({
	      duration: Drop.DURATION,
	      start: {
	        top: startPosition.top,
	        height: 0
	      },
	      finish: {
	        top: anchorPosition.top - 5,
	        height: main_core.Dom.getPosition(node).height
	      },
	      transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	      step: state => {
	        node.style.top = state.top + "px";
	        this.anchor.style.height = state.height + "px";
	      },
	      complete: () => {
	        this.finish(node, onFinish);
	      }
	    });
	    movingEvent.animate();
	  }
	  finish(node, onFinish) {
	    node.style.position = "";
	    node.style.width = "";
	    node.style.height = "";
	    node.style.top = "";
	    node.style.left = "";
	    node.style.opacity = "";
	    main_core.Dom.insertAfter(node, this.anchor);
	    main_core.Dom.remove(this.anchor);
	    this.anchor = null;
	    if (main_core.Type.isFunction(onFinish)) {
	      onFinish();
	    }
	  }
	}
	Drop.DEFAULT_TIMEOUT = 150;
	Drop.DURATION = 1200;

	class Pin extends Animation {
	  constructor(params) {
	    super(params);
	    if (main_core.Type.isPlainObject(params)) {
	      if (params.item instanceof Item && main_core.Type.isDomNode(params.anchor)) {
	        this.item = params.item;
	        this.anchor = params.anchor;
	        this.startPosition = params.startPosition;
	      }
	    }
	  }
	  start() {
	    return new Promise(resolve => {
	      if (!this.item || !this.anchor) {
	        resolve();
	      }
	      this.node = this.item.render();
	      main_core.Dom.addClass(this.node, 'ui-item-detail-stream-section-top-fixed');
	      this.node.style.position = "absolute";
	      this.node.style.width = this.startPosition.width + "px";
	      let _cloneHeight = this.startPosition.height;
	      const _minHeight = 65;
	      const _sumPaddingContent = 18;
	      if (_cloneHeight < _sumPaddingContent + _minHeight) _cloneHeight = _sumPaddingContent + _minHeight;
	      this.node.style.height = _cloneHeight + "px";
	      this.node.style.top = this.startPosition.top + "px";
	      this.node.style.left = this.startPosition.left + "px";
	      this.node.style.zIndex = 960;
	      document.body.appendChild(this.node);
	      this._anchorPosition = main_core.Dom.getPosition(this.anchor);
	      const finish = {
	        top: this._anchorPosition.top,
	        height: _cloneHeight + 15,
	        opacity: 1
	      };
	      const _difference = this.startPosition.top - this._anchorPosition.bottom;
	      const _deepHistoryLimit = 2 * (document.body.clientHeight + this.startPosition.height);
	      if (_difference > _deepHistoryLimit) {
	        finish.top = this.startPosition.top - _deepHistoryLimit;
	        finish.opacity = 0;
	      }
	      let _duration = Math.abs(finish.top - this.startPosition.top) * 2;
	      _duration = _duration < Pin.DURATION ? Pin.DURATION : _duration;
	      const movingEvent = new BX.easing({
	        duration: _duration,
	        start: {
	          top: this.startPosition.top,
	          height: 0,
	          opacity: 1
	        },
	        finish: finish,
	        transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	        step: state => {
	          this.node.style.top = state.top + "px";
	          this.node.style.opacity = state.opacity;
	          this.anchor.style.height = state.height + "px";
	        },
	        complete: () => {
	          this.finish(this.node, resolve);
	        }
	      });
	      movingEvent.animate();
	    });
	  }
	  finish(node, onFinish) {
	    node.style.position = "";
	    node.style.width = "";
	    node.style.height = "";
	    node.style.top = "";
	    node.style.left = "";
	    node.style.zIndex = "";
	    this.anchor.style.height = 0;
	    main_core.Dom.insertAfter(node, this.anchor);
	    if (main_core.Type.isFunction(onFinish)) {
	      onFinish();
	    }
	  }
	}
	Pin.DURATION = 1500;

	class Show extends Animation {
	  constructor(params) {
	    super(params);
	    if (main_core.Type.isPlainObject(params)) {
	      if (params.item instanceof Item && main_core.Type.isDomNode(params.container) && main_core.Type.isDomNode(params.insertAfter)) {
	        this.item = params.item;
	        this.container = params.container;
	        this.insertAfter = params.insertAfter;
	      }
	    }
	  }
	  start() {
	    return new Promise(resolve => {
	      if (!this.item || !this.container || !this.insertAfter) {
	        resolve();
	      }
	      main_core.Dom.insertAfter(this.item.render(), this.insertAfter);
	      this.expand().then(() => {
	        this.fadeIn().then(() => {
	          this.finish(this.item.getContainer(), resolve);
	        });
	      });
	    });
	  }
	  expand() {
	    return new Promise(resolve => {
	      const node = this.item.getContainer();
	      const position = main_core.Dom.getPosition(node);
	      node.style.height = 0;
	      node.style.opacity = 0;
	      node.style.overflow = 'hidden';
	      const show = new BX.easing({
	        duration: Show.EXPAND_DURATION,
	        start: {
	          height: 0
	        },
	        finish: {
	          height: position.height
	        },
	        transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	        step: state => {
	          node.style.height = state.height + 'px';
	        },
	        complete: resolve
	      });
	      show.animate();
	    });
	  }
	  fadeIn() {
	    return new Promise(resolve => {
	      this.item.getContainer().style.overflow = '';
	      const fadeIn = new BX.easing({
	        duration: Show.FADE_IN_DURATION,
	        start: {
	          opacity: 0
	        },
	        finish: {
	          opacity: 100
	        },
	        transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	        step: state => {
	          this.item.getContainer().style.opacity = state.opacity / 100;
	        },
	        complete: resolve
	      });
	      fadeIn.animate();
	    });
	  }
	  finish(node, onFinish) {
	    this.item.getContainer().style.height = "";
	    this.item.getContainer().style.opacity = "";
	    if (main_core.Type.isFunction(onFinish)) {
	      onFinish();
	    }
	  }
	}
	Show.EXPAND_DURATION = 150;
	Show.FADE_IN_DURATION = 150;

	let _$7 = t => t,
	  _t$7;
	class TaskComplete extends Animation {
	  constructor(params) {
	    super(params);
	    if (main_core.Type.isPlainObject(params)) {
	      if (params.item instanceof Item && params.task instanceof Item && main_core.Type.isDomNode(params.insertAfter)) {
	        this.item = params.item;
	        this.task = params.task;
	        this.insertAfter = params.insertAfter;
	      }
	    }
	  }
	  start() {
	    return new Promise(resolve => {
	      if (!this.item || !this.task || !this.container || !this.insertAfter) {
	        resolve();
	      }
	      const node = this.item.render();
	      const taskNode = this.task.getContainer();
	      const startPosition = main_core.Dom.getPosition(taskNode);
	      node.style.position = "absolute";
	      node.style.width = taskNode.offsetWidth + "px";
	      node.style.top = startPosition.top + "px";
	      node.style.left = startPosition.left + "px";
	      node.style.zIndex = "999";
	      main_core.Dom.addClass(node, 'ui-item-detail-stream-section-show');
	      document.body.appendChild(node);
	      this.anchor = main_core.Tag.render(_t$7 || (_t$7 = _$7`<div class="ui-item-detail-stream-section ui-item-detail-stream-section-shadow"></div>`));
	      main_core.Dom.prepend(this.anchor, this.container);
	      if (main_core.Type.isDomNode(this.insertAfter)) {
	        main_core.Dom.insertAfter(this.anchor, this.insertAfter);
	      }
	      taskNode.style.height = taskNode.offsetHeight + 'px';
	      main_core.Dom.addClass(taskNode, 'ui-item-detail-stream-section-hide');
	      setTimeout(function () {
	        const taskHeight = taskNode.offsetHeight;
	        this.anchor.style.height = taskHeight + "px";
	        main_core.Dom.remove(taskNode);
	        main_core.Dom.removeClass(node, 'ui-item-detail-stream-section-show');
	        const movingEvent = new BX.easing({
	          duration: 800,
	          start: {
	            top: main_core.Dom.getPosition(node).top,
	            height: taskHeight
	          },
	          finish: {
	            top: main_core.Dom.getPosition(this.anchor).top,
	            height: main_core.Dom.getPosition(node).height
	          },
	          transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	          step: state => {
	            node.style.top = state.top + "px";
	            this.anchor.style.height = state.height + "px";
	          },
	          complete: () => {
	            this.finish(node, resolve);
	          }
	        });
	        movingEvent.animate();
	      }.bind(this), 200);
	    });
	  }
	  finish(node, onFinish) {
	    node.style.position = "";
	    node.style.width = "";
	    node.style.top = "";
	    node.style.left = "";
	    node.style.zIndex = "";
	    main_core.Dom.insertAfter(node, this.anchor);
	    main_core.Dom.remove(this.anchor);
	    this.anchor = null;
	    if (main_core.Type.isFunction(onFinish)) {
	      onFinish();
	    }
	  }
	}
	TaskComplete.DURATION = 1200;

	class Hide extends Animation {
	  constructor(params) {
	    super(params);
	    if (main_core.Type.isPlainObject(params)) {
	      if (main_core.Type.isDomNode(params.node)) {
	        this.node = params.node;
	      }
	    }
	  }
	  start() {
	    return new Promise(resolve => {
	      if (!this.node) {
	        resolve();
	      }
	      const node = this.node;
	      const wrapperPosition = main_core.Dom.getPosition(node);
	      const hideEvent = new BX.easing({
	        duration: Hide.DURATION,
	        start: {
	          height: wrapperPosition.height,
	          opacity: 1,
	          marginBottom: 15
	        },
	        finish: {
	          height: 0,
	          opacity: 0,
	          marginBottom: 0
	        },
	        transition: BX.easing.makeEaseOut(BX.easing.transitions.quart),
	        step: state => {
	          if (node) {
	            node.style.height = state.height + "px";
	            node.style.opacity = state.opacity;
	            node.style.marginBottom = state.marginBottom;
	          }
	        },
	        complete: () => {
	          this.finish(node, resolve);
	        }
	      });
	      hideEvent.animate();
	    });
	  }
	  finish(node, onFinish) {
	    main_core.Dom.remove(node);
	    if (main_core.Type.isFunction(onFinish)) {
	      onFinish();
	    }
	  }
	}
	Hide.DURATION = 1000;

	var _items = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("items");
	var _isRunning = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("isRunning");
	class Queue {
	  static add(animation) {
	    babelHelpers.classPrivateFieldLooseBase(Queue, _items)[_items].push(animation);
	    return Queue;
	  }
	  static run() {
	    if (babelHelpers.classPrivateFieldLooseBase(Queue, _isRunning)[_isRunning]) {
	      return;
	    }

	    /** @var Animation animation */
	    let animations = babelHelpers.classPrivateFieldLooseBase(Queue, _items)[_items].shift();
	    if (!animations) {
	      return;
	    }
	    if (!main_core.Type.isArray(animations)) {
	      animations = [animations];
	    }
	    babelHelpers.classPrivateFieldLooseBase(Queue, _isRunning)[_isRunning] = true;
	    const promises = [];
	    animations.forEach(animation => {
	      if (animation instanceof Animation) {
	        promises.push(animation.start());
	      }
	    });
	    Promise.all(promises).then(() => {
	      babelHelpers.classPrivateFieldLooseBase(Queue, _isRunning)[_isRunning] = false;
	      Queue.run();
	    });
	  }
	}
	Object.defineProperty(Queue, _items, {
	  writable: true,
	  value: []
	});
	Object.defineProperty(Queue, _isRunning, {
	  writable: true,
	  value: false
	});

	let _$8 = t => t,
	  _t$8,
	  _t2$4,
	  _t3$4,
	  _t4$4,
	  _t5$4,
	  _t6$4,
	  _t7$2,
	  _t8$1,
	  _t9$1,
	  _t10$1,
	  _t11,
	  _t12;

	/**
	 * @mixes EventEmitter
	 * @memberOf BX.UI.Timeline
	 */
	class Stream {
	  constructor(params) {
	    this.users = new Map();
	    this.eventIds = new Set();
	    this.pinnedItems = [];
	    this.tasks = [];
	    this.items = [];
	    this.editors = new Map();
	    this.layout = {};
	    this.dateSeparators = new Map();
	    this.nameFormat = params.nameFormat;
	    main_core_events.EventEmitter.makeObservable(this, 'BX.UI.Timeline.Stream');
	    this.initItemClasses(params.itemClasses);
	    this.currentPage = 1;
	    if (main_core.Type.isPlainObject(params)) {
	      if (main_core.Type.isNumber(params.pageSize)) {
	        this.pageSize = params.pageSize;
	      }
	      if (!this.pageSize || this.pageSize <= 0) {
	        this.pageSize = 20;
	      }
	      this.addUsers(params.users);
	      if (main_core.Type.isArray(params.items)) {
	        params.items.forEach(data => {
	          const item = this.createItem(data);
	          if (item) {
	            this.addItem(item);
	          }
	        });
	      }
	      if (main_core.Type.isArray(params.tasks)) {
	        this.initTasks(params.tasks);
	      }
	      if (main_core.Type.isArray(params.editors)) {
	        params.editors.forEach(editor => {
	          if (editor instanceof Editor) {
	            this.editors.set(editor.getId(), editor);
	          }
	        });
	      }
	    }
	    this.bindEvents();
	    this.progress = false;
	    this.emit('onAfterInit', {
	      stream: this
	    });
	  }
	  initTasks(tasks) {
	    this.tasks = [];
	    tasks.forEach(data => {
	      const task = this.createItem(data);
	      if (task) {
	        this.tasks.push(task);
	      }
	    });
	  }
	  bindEvents() {
	    this.onScrollHandler = main_core.Runtime.throttle(this.onScroll.bind(this), 100).bind(this);
	    main_core.Event.ready(() => {
	      if (this.getItems().length >= this.pageSize) {
	        this.enableLoadOnScroll();
	      }
	    });
	    Array.from(this.editors.values()).forEach(editor => {
	      editor.subscribe('error', event => {
	        this.onError(event.getData());
	      });
	    });
	  }
	  initItemClasses(itemClasses) {
	    if (itemClasses) {
	      this.itemClasses = new Map(itemClasses);
	    } else {
	      this.itemClasses = new Map();
	    }
	    this.itemClasses.set('item_create', History);
	    this.itemClasses.set('stage_change', StageChange);
	    this.itemClasses.set('fields_change', FieldsChange);
	    this.itemClasses.set('comment', Comment);
	  }
	  createItem(data, itemClassName) {
	    if (!main_core.Type.isPlainObject(data.events)) {
	      data.events = {};
	    }
	    data.eventIds = this.eventIds;
	    data.events.onPinClick = this.onItemPinClick.bind(this);
	    data.events.onDelete = this.onItemDelete.bind(this);
	    data.events.onError = this.onError.bind(this);
	    if (!main_core.Type.isFunction(itemClassName)) {
	      itemClassName = this.getItemClassName(data);
	    }
	    const item = new itemClassName(data);
	    if (item instanceof Item) {
	      return item.setUserData(this.users).setTimeFormat(this.getTimeFormat()).setNameFormat(this.nameFormat);
	    }
	    return null;
	  }
	  addItem(item) {
	    if (item instanceof Item) {
	      this.items.push(item);
	      if (item.isFixed) {
	        this.pinnedItems.push(this.getPinnedItemFromItem(item));
	      }
	    }
	    return this;
	  }

	  /**
	   * @protected
	   */
	  static getItemFromArray(items, id) {
	    let result = null;
	    let key = 0;
	    while (true) {
	      if (!items[key]) {
	        break;
	      }
	      const item = items[key];
	      if (item.getId() === id) {
	        result = item;
	        break;
	      }
	      key++;
	    }
	    return result;
	  }
	  static getItemIndexFromArray(items, id) {
	    let result = null;
	    let key = 0;
	    while (true) {
	      if (!items[key]) {
	        break;
	      }
	      const item = items[key];
	      if (item.getId() === id) {
	        result = key;
	        break;
	      }
	      key++;
	    }
	    return result;
	  }
	  getItems() {
	    return this.items;
	  }
	  getItem(id) {
	    return Stream.getItemFromArray(this.getItems(), id);
	  }
	  getPinnedItems() {
	    return this.pinnedItems;
	  }
	  getPinnedItem(id) {
	    return Stream.getItemFromArray(this.getPinnedItems(), id);
	  }
	  getTasks() {
	    return this.tasks;
	  }
	  getTask(id) {
	    return Stream.getItemFromArray(this.getTasks(), id);
	  }
	  render() {
	    if (!this.layout.container) {
	      this.layout.container = main_core.Tag.render(_t$8 || (_t$8 = _$8`<div class="ui-item-detail-stream-container"></div>`));
	    }
	    if (this.editors.size > 0) {
	      this.renderEditors();
	    }
	    if (!this.layout.content) {
	      this.layout.content = main_core.Tag.render(_t2$4 || (_t2$4 = _$8`<div class="ui-item-detail-stream-content"></div>`));
	      this.layout.container.appendChild(this.layout.content);
	    }
	    if (!this.layout.pinnedItemsContainer) {
	      this.layout.pinnedItemsContainer = main_core.Tag.render(_t3$4 || (_t3$4 = _$8`<div class="ui-item-detail-stream-container-list ui-item-detail-stream-container-list-fixed"></div>`));
	      this.layout.content.appendChild(this.layout.pinnedItemsContainer);
	    }
	    this.renderPinnedItems();
	    if (!this.layout.tasksContainer) {
	      this.layout.tasksContainer = main_core.Tag.render(_t4$4 || (_t4$4 = _$8`<div class="ui-item-detail-stream-container-list"></div>`));
	      this.layout.content.appendChild(this.layout.tasksContainer);
	    }
	    this.renderTasks();
	    if (!this.layout.itemsContainer) {
	      this.layout.itemsContainer = main_core.Tag.render(_t5$4 || (_t5$4 = _$8`<div class="ui-item-detail-stream-container-list"></div>`));
	      this.layout.content.appendChild(this.layout.itemsContainer);
	    }
	    this.renderItems();
	    this.emit('onAfterRender');
	    return this.layout.container;
	  }
	  getContainer() {
	    return this.layout.container;
	  }
	  renderEditors() {
	    if (!this.layout.container) {
	      return;
	    }
	    if (!this.layout.editors) {
	      this.layout.editorsTitle = main_core.Tag.render(_t6$4 || (_t6$4 = _$8`<div class="ui-item-detail-stream-section-new-header"></div>`));
	      this.layout.editorsContent = main_core.Tag.render(_t7$2 || (_t7$2 = _$8`<div class="ui-item-detail-stream-section-new-detail"></div>`));
	      this.layout.editors = main_core.Tag.render(_t8$1 || (_t8$1 = _$8`<div class="ui-item-detail-stream-section ui-item-detail-stream-section-new">
				<div class="ui-item-detail-stream-section-icon"></div>
				<div class="ui-item-detail-stream-section-content">
					${0}
				</div>
				${0}
			</div>`), this.layout.editorsTitle, this.layout.editorsContent);
	      let isTitleActive = true;
	      Array.from(this.editors.values()).forEach(editor => {
	        this.layout.editorsTitle.appendChild(main_core.Tag.render(_t9$1 || (_t9$1 = _$8`<a class="ui-item-detail-stream-section-new-action ${0}">${0}</a>`), isTitleActive ? 'ui-item-detail-stream-section-new-action-active' : '', editor.getTitle()));
	        this.layout.editorsContent.appendChild(editor.render());
	        isTitleActive = false;
	      });
	      this.layout.container.appendChild(this.layout.editors);
	    }
	  }
	  renderPinnedItems() {
	    main_core.Dom.clean(this.layout.pinnedItemsContainer);
	    this.createFixedAnchor();
	    this.getPinnedItems().forEach(pinnedItem => {
	      if (!pinnedItem.isRendered()) {
	        pinnedItem.render();
	      }
	      main_core.Dom.append(pinnedItem.getContainer(), this.layout.pinnedItemsContainer);
	    });
	  }
	  createFixedAnchor() {
	    this.fixedAnchor = main_core.Tag.render(_t10$1 || (_t10$1 = _$8`<div class="ui-item-detail-stream-section-fixed-anchor"></div>`));
	    main_core.Dom.prepend(this.fixedAnchor, this.layout.pinnedItemsContainer);
	  }
	  updateTasks(tasks) {
	    if (!this.tasks) {
	      this.tasks = [];
	    }
	    const newTasks = [];
	    tasks.forEach(data => {
	      const task = this.createItem(data);
	      if (task) {
	        newTasks.push(task);
	        this.addUsers(data.users);
	      }
	    });
	    const deleteTasks = [];
	    this.tasks.forEach(task => {
	      if (!Stream.getItemFromArray(newTasks, task.getId())) {
	        deleteTasks.push(task);
	      }
	    });
	    deleteTasks.forEach(task => {
	      this.deleteItem(task);
	    });
	    let tasksTitle = this.getTasksTitle();
	    if (newTasks.length > 0) {
	      if (!tasksTitle) {
	        tasksTitle = this.renderTasksTitle();
	        this.layout.tasksContainer.appendChild(tasksTitle);
	      }
	      newTasks.forEach(task => {
	        if (!this.getTask(task.getId())) {
	          this.tasks.push(task);
	          Queue.add(new Show({
	            item: task,
	            container: this.layout.tasksContainer,
	            insertAfter: tasksTitle
	          }));
	        } else {
	          const streamTask = this.getTask(task.getId());
	          streamTask.setUserData(this.users);
	          streamTask.update(task.getDataForUpdate());
	        }
	      });
	    } else {
	      const title = this.getTasksTitle();
	      if (title) {
	        main_core.Dom.remove(title);
	        this.layout.tasksTitle = null;
	      }
	    }
	    Queue.run();
	  }
	  renderTasks() {
	    if (this.getTasks().length > 0) {
	      this.layout.tasksContainer.appendChild(this.renderTasksTitle());
	      this.getTasks().forEach(task => {
	        if (!task.isRendered()) {
	          main_core.Dom.append(task.render(), this.layout.tasksContainer);
	        }
	      });
	    } else {
	      const title = this.getTasksTitle();
	      if (title) {
	        title.parentElement.removeChild(title);
	      }
	    }
	  }
	  getTasksTitle() {
	    return this.layout.tasksTitle;
	  }
	  renderTasksTitle() {
	    if (!this.layout.tasksTitle) {
	      this.layout.tasksTitle = main_core.Tag.render(_t11 || (_t11 = _$8`<div class="ui-item-detail-stream-section ui-item-detail-stream-section-planned-label">
				<div class="ui-item-detail-stream-section-content">
					<div class="ui-item-detail-stream-planned-text">${0}</div>
				</div>
			</div>`), main_core.Loc.getMessage('UI_TIMELINE_TASKS_TITLE'));
	    }
	    return this.layout.tasksTitle;
	  }
	  renderItems() {
	    const lastItem = this.items[this.items.length - 1];
	    this.items.forEach(item => {
	      item.setIsLast(item === lastItem);
	      if (!item.isRendered()) {
	        const day = this.constructor.getDayFromDate(item.getCreatedTime());
	        if (!this.getDateSeparator(day)) {
	          const dateSeparator = this.createDateSeparator(day);
	          main_core.Dom.append(dateSeparator, this.layout.itemsContainer);
	        }
	        main_core.Dom.append(item.render(), this.layout.itemsContainer);
	      }
	    });
	  }
	  getDateSeparator(day) {
	    return this.dateSeparators.get(day);
	  }
	  createDateSeparator(day) {
	    const separator = this.renderDateSeparator(day);
	    this.dateSeparators.set(day, separator);
	    return separator;
	  }
	  static getDayFromDate(date) {
	    if (date instanceof Date) {
	      if (Stream.isToday(date)) {
	        return BX.date.format('today');
	      }
	      return BX.date.format('d F Y', date);
	    }
	    return null;
	  }
	  static isToday(date) {
	    return BX.date.format('d F Y', date) === BX.date.format('d F Y');
	  }
	  renderDateSeparator(day) {
	    return main_core.Tag.render(_t12 || (_t12 = _$8`<div class="ui-item-detail-stream-section ui-item-detail-stream-section-history-label">
			<div class="ui-item-detail-stream-section-content">
				<div class="ui-item-detail-stream-history-text">${0}</div>
			</div>
		</div>`), day);
	  }
	  getItemClassName(data) {
	    let itemClassName = null;
	    if (main_core.Type.isPlainObject(data) && main_core.Type.isString(data.itemClassName)) {
	      itemClassName = data.itemClassName;
	    }
	    if (itemClassName) {
	      itemClassName = main_core.Reflection.getClass(itemClassName);
	    }
	    if (!main_core.Type.isFunction(itemClassName)) {
	      if (main_core.Type.isPlainObject(data) && main_core.Type.isString(data.action)) {
	        itemClassName = this.itemClasses.get(data.action);
	      }
	      if (!itemClassName) {
	        itemClassName = History;
	      }
	    }
	    return itemClassName;
	  }
	  insertItem(item) {
	    if (!(item instanceof Item)) {
	      return this;
	    }
	    if (this.getItem(item.getId())) {
	      return this;
	    }
	    this.items.unshift(item);
	    const day = this.constructor.getDayFromDate(item.getCreatedTime());
	    if (!day) {
	      return this;
	    }
	    if (!this.getDateSeparator(day)) {
	      const separator = this.createDateSeparator(day);
	      main_core.Dom.prepend(separator, this.layout.itemsContainer);
	    }
	    Queue.add(new Drop({
	      item,
	      insertAfter: this.getDateSeparator(day),
	      container: this.layout.editorsContent
	    })).run();
	    return this;
	  }
	  getTimeFormat() {
	    if (!this.timeFormat) {
	      const datetimeFormat = main_core.Loc.getMessage("FORMAT_DATETIME").replace(/:SS/, "");
	      const dateFormat = main_core.Loc.getMessage("FORMAT_DATE");
	      this.timeFormat = BX.date.convertBitrixFormat(datetimeFormat.trim().replace(dateFormat, ""));
	    }
	    return this.timeFormat;
	  }
	  getDateTimeFormat() {
	    if (!this.dateTimeFormat) {
	      const datetimeFormat = main_core.Loc.getMessage("FORMAT_DATETIME").replace(/:SS/, "");
	      this.dateTimeFormat = BX.date.convertBitrixFormat(datetimeFormat);
	    }
	    return this.dateTimeFormat;
	  }
	  startProgress() {
	    this.progress = true;
	    if (!this.getLoader().isShown()) {
	      const lastItem = this.items[this.items.length - 1];
	      if (lastItem && lastItem.isRendered()) {
	        this.getLoader().show(lastItem.getContainer());
	      } else {
	        this.getLoader().show(this.layout.container);
	      }
	    }
	  }
	  stopProgress() {
	    this.progress = false;
	    this.getLoader().hide();
	  }
	  isProgress() {
	    return this.progress === true;
	  }
	  getLoader() {
	    if (!this.loader) {
	      this.loader = new main_loader.Loader({
	        size: 150
	      });
	    }
	    return this.loader;
	  }
	  enableLoadOnScroll() {
	    main_core.Event.bind(window, 'scroll', this.onScrollHandler);
	  }
	  disableLoadOnScroll() {
	    main_core.Event.unbind(window, 'scroll', this.onScrollHandler);
	  }
	  onScroll() {
	    if (this.isProgress()) {
	      return;
	    }
	    const lastItem = this.items[this.items.length - 1];
	    if (!lastItem) {
	      this.disableLoadOnScroll();
	      return;
	    }
	    if (!lastItem.isRendered()) {
	      return;
	    }
	    const pos = lastItem.getContainer().getBoundingClientRect();
	    if (pos.top <= document.documentElement.clientHeight) {
	      this.emit('onScrollToTheBottom');
	    }
	  }
	  getPinnedItemFromItem(item) {
	    const pinnedItem = main_core.Runtime.clone(item);
	    if (item.isRendered()) {
	      pinnedItem.clearLayout();
	    }
	    pinnedItem.setTimeFormat(this.getDateTimeFormat());
	    pinnedItem.isPinned = true;
	    return pinnedItem;
	  }
	  onItemPinClick(item) {
	    if (item.isFixed) {
	      this.pinItem(item);
	    } else {
	      this.unPinItem(item);
	    }
	    this.emit('onPinClick', {
	      item
	    });
	  }
	  pinItem(item) {
	    const pinnedItem = this.getPinnedItem(item.getId());
	    if (!pinnedItem) {
	      this.getPinnedItems().push(this.getPinnedItemFromItem(item));
	    }
	    Queue.add(new Pin({
	      item: this.getPinnedItem(item.getId()),
	      anchor: this.fixedAnchor,
	      startPosition: main_core.Dom.getPosition(item.getContainer())
	    })).run();
	    return this;
	  }
	  unPinItem(item) {
	    const pinnedItem = this.getPinnedItem(item.getId());
	    if (pinnedItem === item) {
	      const commonItem = this.getItem(pinnedItem.getId());
	      if (commonItem) {
	        commonItem.isFixed = false;
	        commonItem.renderPin();
	      }
	    }
	    if (pinnedItem && pinnedItem.isRendered()) {
	      Queue.add(new Hide({
	        node: pinnedItem.getContainer()
	      })).run();
	    }
	    this.pinnedItems = this.pinnedItems.filter(filteredItem => filteredItem.getId() !== item.getId());
	  }
	  onItemDelete(item) {
	    this.deleteItem(item);
	  }
	  deleteItem(item) {
	    let itemIndex = Stream.getItemIndexFromArray(this.items, item.getId());
	    const animations = [];
	    if (itemIndex !== null) {
	      if (item.isRendered()) {
	        const animation = new Hide({
	          node: this.getItem(item.getId()).getContainer()
	        });
	        animations.push(animation);
	      }
	      this.items.splice(itemIndex, 1);
	    }
	    itemIndex = Stream.getItemIndexFromArray(this.pinnedItems, item.getId());
	    if (itemIndex !== null) {
	      if (item.isRendered()) {
	        const animation = new Hide({
	          node: this.getPinnedItem(item.getId()).getContainer()
	        });
	        animations.push(animation);
	      }
	      this.pinnedItems.splice(itemIndex, 1);
	    }
	    itemIndex = Stream.getItemIndexFromArray(this.tasks, item.getId());
	    if (itemIndex !== null) {
	      let isAddHideAnimation = true;
	      if (item.completedData) {
	        const newItem = this.createItem(item.completedData);
	        if (newItem) {
	          if (!this.getItem(newItem.getId())) {
	            this.items.unshift(newItem);
	            const day = this.constructor.getDayFromDate(newItem.getCreatedTime());
	            if (day) {
	              if (!this.getDateSeparator(day)) {
	                const separator = this.createDateSeparator(day);
	                main_core.Dom.prepend(separator, this.layout.itemsContainer);
	              }
	              Queue.add(new TaskComplete({
	                item: newItem,
	                task: item,
	                insertAfter: this.getDateSeparator(day)
	              })).run();
	              isAddHideAnimation = false;
	            }
	          }
	        }
	      }
	      if (isAddHideAnimation) {
	        animations.push(new Hide({
	          node: this.getTask(item.getId()).getContainer()
	        }));
	      }
	      this.tasks.splice(itemIndex, 1);
	    }
	    Queue.add(animations).run();
	  }
	  onError({
	    message
	  }) {
	    this.showError(message);
	  }
	  showError(message) {
	    console.error(message);
	  }
	  addUsers(users) {
	    if (main_core.Type.isPlainObject(users)) {
	      if (!this.users) {
	        this.users = new Map();
	      }
	      Object.keys(users).forEach(userId => {
	        userId = main_core.Text.toInteger(userId);
	        if (userId > 0) {
	          this.users.set(userId, users[userId]);
	        }
	      });
	    }
	  }
	  addAnimation(animation) {
	    Queue.add(animation).run();
	  }
	}

	/**
	 * @memberOf BX.UI
	 */
	const Timeline = {
	  Stream,
	  Item,
	  History,
	  StageChange,
	  Editor,
	  CommentEditor,
	  FieldsChange
	};

	exports.Timeline = Timeline;

}((this.BX.UI = this.BX.UI || {}),BX,BX.UI.Dialogs,BX.Main,BX.Event,BX));
//# sourceMappingURL=timeline.bundle.js.map