{"version":3,"file":"static/js/index.9f245b26.js","sources":["webpack://core-admin_panel/./src/shared/components/Confirmation/NewConfirmation.module.scss?1e90","webpack://core-admin_panel/./src/shared/components/Spacer/spacer.module.scss?8720","webpack://core-admin_panel/./src/shared/components/TasksImport/components/styles.module.scss?9225","webpack://core-admin_panel/../sources/ext/auto_scheduling/constraint_types.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling_configs.js","webpack://core-admin_panel/../sources/core/relations/links_common.js","webpack://core-admin_panel/../sources/utils/helpers.js","webpack://core-admin_panel/../sources/core/worktime/dynamic_resource_calendars.js","webpack://core-admin_panel/../sources/core/ui/plugins/jquery_hooks.js","webpack://core-admin_panel/../sources/core/relations/graph_helper.js","webpack://core-admin_panel/../sources/core/relations/links_builder.js","webpack://core-admin_panel/../sources/core/ui/utils/dom_helpers.js","webpack://core-admin_panel/../sources/ext/auto_scheduling/task_plan.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/constraints.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/date_comparator.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/alap_strategy.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/asap_strategy.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/planner.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/connected_groups.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling/loops_finder.ts","webpack://core-admin_panel/../sources/utils/global.js","webpack://core-admin_panel/../sources/ext/click_drag/eventsManager.ts","webpack://core-admin_panel/../sources/utils/eventable.js","webpack://core-admin_panel/../sources/ext/click_drag/selectedRegion.ts","webpack://core-admin_panel/../sources/ext/drag_timeline/eventsManager.ts","webpack://core-admin_panel/../sources/ext/keyboard_navigation/modals.js","webpack://core-admin_panel/../sources/ext/quick_info/quickInfo.ts","webpack://core-admin_panel/../sources/utils/utils.js","webpack://core-admin_panel/../sources/core/ui/utils/dom_event_scope.js","webpack://core-admin_panel/../sources/ext/tooltip/tooltip.ts","webpack://core-admin_panel/../sources/ext/tooltip/tooltipManager.ts","webpack://core-admin_panel/../sources/ext/undo/monitor.ts","webpack://core-admin_panel/../sources/ext/undo/undo.ts","webpack://core-admin_panel/../sources/ext/extension_manager.ts","webpack://core-admin_panel/../sources/constants/index.js","webpack://core-admin_panel/../sources/core/common/config.ts","webpack://core-admin_panel/../sources/utils/env.js","webpack://core-admin_panel/../sources/core/common/serialize.ts","webpack://core-admin_panel/../sources/core/common/ajax.js","webpack://core-admin_panel/../sources/core/common/date_parsers/fast_version.ts","webpack://core-admin_panel/../sources/core/common/date_parsers/csp_compliant_version.ts","webpack://core-admin_panel/../sources/core/common/date.js","webpack://core-admin_panel/../node_modules/remote-client/dist/remote.es6.js","webpack://core-admin_panel/../sources/core/remote/remote_events.js","webpack://core-admin_panel/../sources/utils/timeout.js","webpack://core-admin_panel/../sources/core/common/state.js","webpack://core-admin_panel/../sources/utils/promise.js","webpack://core-admin_panel/../sources/core/facades/datastore_tasks.js","webpack://core-admin_panel/../sources/core/datastore/power_array.js","webpack://core-admin_panel/../sources/utils/placeholder_task.js","webpack://core-admin_panel/../sources/core/datastore/datastore.js","webpack://core-admin_panel/../sources/core/datastore/treedatastore.js","webpack://core-admin_panel/../sources/utils/is_headless.js","webpack://core-admin_panel/../sources/core/datastore/datastore_render.js","webpack://core-admin_panel/../sources/core/facades/datastore.js","webpack://core-admin_panel/../sources/core/datastore/select.js","webpack://core-admin_panel/../sources/core/facades/datastore_links.js","webpack://core-admin_panel/../sources/core/ui/timeline/scales.js","webpack://core-admin_panel/../sources/core/ui/timeline/scales_ignore.js","webpack://core-admin_panel/../sources/core/gantt_data_range.js","webpack://core-admin_panel/../sources/utils/task_tree_helpers.js","webpack://core-admin_panel/../sources/core/dataprocessor/data_processor_events.ts","webpack://core-admin_panel/../sources/core/dataprocessor/simple_storage.ts","webpack://core-admin_panel/../sources/core/dataprocessor/data_processor.ts","webpack://core-admin_panel/../sources/core/dataprocessor/extend_gantt.ts","webpack://core-admin_panel/../sources/core/dataprocessor/index.js","webpack://core-admin_panel/../sources/core/plugins/batch_update.js","webpack://core-admin_panel/../sources/core/plugins/wbs.js","webpack://core-admin_panel/../sources/core/plugins/resources.js","webpack://core-admin_panel/../sources/core/plugins/resource_assignments.js","webpack://core-admin_panel/../sources/core/plugins/new_task_placeholder.js","webpack://core-admin_panel/../sources/core/plugins/auto_task_types.js","webpack://core-admin_panel/../sources/core/common/duration_formatter.ts","webpack://core-admin_panel/../sources/core/common/link_formatter_simple.ts","webpack://core-admin_panel/../sources/core/common/link_formatter.ts","webpack://core-admin_panel/../sources/core/plugins/formatters.js","webpack://core-admin_panel/../sources/core/plugins/empty_state_screen.ts","webpack://core-admin_panel/../sources/core/ui/render/baseline_helper.js","webpack://core-admin_panel/../sources/core/plugins/baselines.js","webpack://core-admin_panel/../sources/core/ui/row_position_mixin.js","webpack://core-admin_panel/../sources/core/ui/row_position_fixed_height.js","webpack://core-admin_panel/../sources/core/ui/plugins/column_grid_dnd/scrollable_grid.ts","webpack://core-admin_panel/../sources/core/ui/plugins/column_grid_dnd/column_grid_dnd.ts","webpack://core-admin_panel/../sources/core/ui/mouse_event_container.js","webpack://core-admin_panel/../sources/core/ui/grid/grid.js","webpack://core-admin_panel/../sources/core/worktime/calendar_arguments_helper.js","webpack://core-admin_panel/../sources/core/ui/grid/grid_resize.js","webpack://core-admin_panel/../sources/core/ui/grid/task_grid_row_resize.js","webpack://core-admin_panel/../sources/core/worktime/strategy/work_calendar_merger.js","webpack://core-admin_panel/../sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","webpack://core-admin_panel/../sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","webpack://core-admin_panel/../sources/core/worktime/strategy/work_unit_cache/larger_units_helper.ts","webpack://core-admin_panel/../sources/core/worktime/strategy/work_unit_cache/date_duration_cache.ts","webpack://core-admin_panel/../sources/core/worktime/strategy/calendar_strategy.js","webpack://core-admin_panel/../sources/core/worktime/strategy/work_unit_cache/index.ts","webpack://core-admin_panel/../sources/core/worktime/legacy_resource_config.js","webpack://core-admin_panel/../sources/core/worktime/calendar_manager.js","webpack://core-admin_panel/../sources/core/worktime/strategy/no_work_time.js","webpack://core-admin_panel/../sources/core/worktime/time_calculator.js","webpack://core-admin_panel/../sources/core/ui/resize_listener.js","webpack://core-admin_panel/../sources/locale/locale_ar.ts","webpack://core-admin_panel/../sources/locale/locale_be.ts","webpack://core-admin_panel/../sources/locale/locale_ca.ts","webpack://core-admin_panel/../sources/locale/locale_cn.ts","webpack://core-admin_panel/../sources/locale/locale_cs.ts","webpack://core-admin_panel/../sources/locale/locale_da.ts","webpack://core-admin_panel/../sources/locale/locale_de.ts","webpack://core-admin_panel/../sources/locale/locale_el.ts","webpack://core-admin_panel/../sources/locale/locale_en.ts","webpack://core-admin_panel/../sources/locale/locale_es.ts","webpack://core-admin_panel/../sources/locale/locale_fa.ts","webpack://core-admin_panel/../sources/locale/locale_fi.ts","webpack://core-admin_panel/../sources/locale/locale_fr.ts","webpack://core-admin_panel/../sources/locale/locale_he.ts","webpack://core-admin_panel/../sources/locale/locale_hr.ts","webpack://core-admin_panel/../sources/locale/locale_hu.ts","webpack://core-admin_panel/../sources/locale/locale_id.ts","webpack://core-admin_panel/../sources/locale/locale_it.ts","webpack://core-admin_panel/../sources/locale/locale_jp.ts","webpack://core-admin_panel/../sources/locale/locale_kr.ts","webpack://core-admin_panel/../sources/locale/locale_manager.ts","webpack://core-admin_panel/../sources/locale/locale_nb.ts","webpack://core-admin_panel/../sources/locale/locale_nl.ts","webpack://core-admin_panel/../sources/locale/locale_no.ts","webpack://core-admin_panel/../sources/locale/locale_pl.ts","webpack://core-admin_panel/../sources/locale/locale_pt.ts","webpack://core-admin_panel/../sources/locale/locale_ro.ts","webpack://core-admin_panel/../sources/locale/locale_ru.ts","webpack://core-admin_panel/../sources/locale/locale_si.ts","webpack://core-admin_panel/../sources/locale/locale_sk.ts","webpack://core-admin_panel/../sources/locale/locale_sv.ts","webpack://core-admin_panel/../sources/locale/locale_tr.ts","webpack://core-admin_panel/../sources/locale/locale_ua.ts","webpack://core-admin_panel/../sources/factory/make_instance_common.js","webpack://core-admin_panel/../sources/core/ui/configurable.js","webpack://core-admin_panel/../sources/core/ui/ui_factory.js","webpack://core-admin_panel/../sources/core/ui/mouse.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/render/is_legacy_smart_render.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_grid_row_rectangle.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_visible_bars_range.js","webpack://core-admin_panel/../sources/core/ui/render/render_factory.js","webpack://core-admin_panel/../sources/core/ui/render/layer_engine.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_bar_rectangle.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/factory/get_visible_link_range.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_link_rectangle.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_link_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/gantt_layers.js","webpack://core-admin_panel/../sources/core/ui/layout/cell.js","webpack://core-admin_panel/../sources/utils/extends.js","webpack://core-admin_panel/../sources/core/ui/layout/layout.js","webpack://core-admin_panel/../sources/core/ui/layout/view_layout.js","webpack://core-admin_panel/../sources/core/ui/layout/view_cell.js","webpack://core-admin_panel/../sources/core/ui/layout/resizer_cell.js","webpack://core-admin_panel/../sources/core/ui/layout/scrollbar_cell.js","webpack://core-admin_panel/../sources/core/ui/timeline/tasks_canvas_render.js","webpack://core-admin_panel/../sources/core/ui/timeline/timeline.js","webpack://core-admin_panel/../sources/core/ui/resource_store_mixin.js","webpack://core-admin_panel/../sources/core/ui/timeline/timeline_layers.js","webpack://core-admin_panel/../sources/core/ui/grid/resource_grid.js","webpack://core-admin_panel/../sources/core/ui/timeline/resource_timeline.js","webpack://core-admin_panel/../sources/core/ui/timeline/resource_histogram.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/keyboard_mappings/default.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/base.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/controller.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/text.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/number.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/select.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/date.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/predecessor.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/editors/duration.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_bar_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/render/task_bar_render.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_project_bar_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_split_task_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_bg_row_rectangle.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/get_visible_cells_range.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_column_visible.js","webpack://core-admin_panel/../sources/core/ui/render/prerender/task_bg_placeholder.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/is_grid_row_in_viewport.js","webpack://core-admin_panel/../sources/core/resource_timetable_builder.js","webpack://core-admin_panel/../sources/core/ui/render/viewport/are_dates_in_viewport.js","webpack://core-admin_panel/../sources/core/ui/render/task_constraints_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_deadline_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_baselines_render.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd_marker.js","webpack://core-admin_panel/../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","webpack://core-admin_panel/../sources/core/ui/grid/main_grid_initializer.js","webpack://core-admin_panel/../sources/core/ui/timeline/tasks_dnd.js","webpack://core-admin_panel/../sources/core/ui/timeline/links_dnd.js","webpack://core-admin_panel/../sources/core/ui/timeline/main_timeline_initializer.js","webpack://core-admin_panel/../sources/core/ui/main_layout_initializer.js","webpack://core-admin_panel/../sources/core/ui/index.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/keyboard_mappings.js","webpack://core-admin_panel/../sources/core/ui/grid/editors/linked_properties.js","webpack://core-admin_panel/../sources/core/ui/render/task_grid_line_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_bg_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_bar_smart_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_project_smart_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_project_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_rollup_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_split_render.js","webpack://core-admin_panel/../sources/core/ui/render/link_render.js","webpack://core-admin_panel/../sources/core/ui/render/resource_matrix_render.js","webpack://core-admin_panel/../sources/core/ui/render/resource_histogram_render.js","webpack://core-admin_panel/../sources/core/ui/render/task_grid_row_resize_render.js","webpack://core-admin_panel/../sources/core/ui/skin.js","webpack://core-admin_panel/../sources/core/ui/plugins/autoscroll.js","webpack://core-admin_panel/../sources/core/ui/plugins/dhtmlx_hooks.js","webpack://core-admin_panel/../sources/core/ui/plugins/timeline_zoom.ts","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/base_control.js","webpack://core-admin_panel/../sources/core/ui/utils/html_helpers.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/select_control.js","webpack://core-admin_panel/../sources/core/common/duration_formatter_numeric.ts","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/parent_control.js","webpack://core-admin_panel/../sources/dhtmlxgantt.web.ts","webpack://core-admin_panel/../sources/factory/gantt_factory.ts","webpack://core-admin_panel/../sources/factory/make_instance_web.js","webpack://core-admin_panel/../sources/core/facades/worktime_calendars.js","webpack://core-admin_panel/../sources/core/common/services.js","webpack://core-admin_panel/../sources/core/worktime/work_time.js","webpack://core-admin_panel/../sources/core/common/dnd.js","webpack://core-admin_panel/../sources/core/common/templates.js","webpack://core-admin_panel/../sources/core/datastore/datastore_hooks.js","webpack://core-admin_panel/../sources/core/plugins/index.js","webpack://core-admin_panel/../sources/core/grid_column_api.gpl.js","webpack://core-admin_panel/../sources/core/grid_column_api.js","webpack://core-admin_panel/../sources/core/tasks.js","webpack://core-admin_panel/../sources/core/loading/parsing.js","webpack://core-admin_panel/../sources/core/data.js","webpack://core-admin_panel/../sources/core/data_task_types.js","webpack://core-admin_panel/../sources/core/cached_functions.js","webpack://core-admin_panel/../sources/core/gantt_core.js","webpack://core-admin_panel/../sources/core/common/assert.js","webpack://core-admin_panel/../sources/core/destructor.js","webpack://core-admin_panel/../sources/locale/index.ts","webpack://core-admin_panel/../sources/core/ui_core.js","webpack://core-admin_panel/../sources/core/ui/message.js","webpack://core-admin_panel/../sources/core/facades/layout.js","webpack://core-admin_panel/../sources/css/skins/skyblue.js","webpack://core-admin_panel/../sources/css/skins/dark.js","webpack://core-admin_panel/../sources/css/skins/meadow.js","webpack://core-admin_panel/../sources/css/skins/terrace.js","webpack://core-admin_panel/../sources/css/skins/broadway.js","webpack://core-admin_panel/../sources/css/skins/material.js","webpack://core-admin_panel/../sources/css/skins/contrast_black.js","webpack://core-admin_panel/../sources/css/skins/contrast_white.js","webpack://core-admin_panel/../sources/core/ui/plugins/index.js","webpack://core-admin_panel/../sources/core/ui/touch.js","webpack://core-admin_panel/../sources/core/ui/lightbox/index.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/template_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/textarea_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/time_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/checkbox_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/radio_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/duration_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/resources_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/constraint_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/typeselect_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/controls/baseline_control.js","webpack://core-admin_panel/../sources/core/ui/lightbox/lightbox_optional_time.js","webpack://core-admin_panel/../sources/core/ui/wai_aria.js","webpack://core-admin_panel/../sources/core/loading/ajax_loading.js","webpack://core-admin_panel/../sources/core/loading/dynamic_loading.js","webpack://core-admin_panel/../sources/ext/extensions_all.ts","webpack://core-admin_panel/../sources/ext/auto_scheduling.js","webpack://core-admin_panel/../sources/ext/auto_scheduling/ui_handlers.ts","webpack://core-admin_panel/../sources/ext/click_drag/index.ts","webpack://core-admin_panel/../sources/ext/critical_path.js","webpack://core-admin_panel/../sources/ext/critical_path/slack.js","webpack://core-admin_panel/../sources/ext/critical_path/critical_path.js","webpack://core-admin_panel/../sources/ext/drag_timeline/index.ts","webpack://core-admin_panel/../sources/ext/fullscreen/index.ts","webpack://core-admin_panel/../sources/ext/keyboard_navigation.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/common/keyboard_shortcuts.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/common/eventhandler.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/common/trap_modal_focus.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/elements/gantt_node.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/elements/nav_node.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/elements/header_cell.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/elements/task_row.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/elements/task_cell.js","webpack://core-admin_panel/../sources/ext/keyboard_navigation/core.js","webpack://core-admin_panel/../sources/ext/quick_info/index.ts","webpack://core-admin_panel/../sources/ext/tooltip/index.ts","webpack://core-admin_panel/../sources/ext/undo/index.ts","webpack://core-admin_panel/../sources/ext/grouping.js","webpack://core-admin_panel/../sources/ext/marker.js","webpack://core-admin_panel/../sources/ext/multiselect.js","webpack://core-admin_panel/../sources/ext/overlay.js","webpack://core-admin_panel/../sources/ext/export_api/index.ts","webpack://core-admin_panel/../sources/dhtmlxgantt.enterprise.ts","webpack://core-admin_panel/./src/services/TaskUpdateFifoQueue.ts","webpack://core-admin_panel/./src/shared/stores/GanttContextMenuStore.ts","webpack://core-admin_panel/./src/shared/utils/mapDependencyToGanttLink.ts","webpack://core-admin_panel/./src/shared/stores/GanttStore.ts","webpack://core-admin_panel/./src/shared/stores/TasksStore.ts","webpack://core-admin_panel/./src/IocContainer.ts","webpack://core-admin_panel/./src/api/axios.ts","webpack://core-admin_panel/./src/api/matrix.ts","webpack://core-admin_panel/./src/api/chat.ts","webpack://core-admin_panel/./src/api/company.ts","webpack://core-admin_panel/./src/api/feedback.ts","webpack://core-admin_panel/./src/api/import.ts","webpack://core-admin_panel/./src/api/oauth.ts","webpack://core-admin_panel/./src/api/projects.ts","webpack://core-admin_panel/./src/api/tasks.ts","webpack://core-admin_panel/./src/api/utils/calculateDynamicTimeout.ts","webpack://core-admin_panel/./src/api/utils/handlePollingErrors.ts","webpack://core-admin_panel/./src/api/worker.ts","webpack://core-admin_panel/./src/api/workers.ts","webpack://core-admin_panel/./src/assets/scripts/modernizr/modernizr-custom.js","webpack://core-admin_panel/./src/modules/Tasks/Views/GanttVisual/DocumentViewer/i18n.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Filters/utils/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/helpers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/gantt.ts","webpack://core-admin_panel/./src/services/Effect/api/createIssueEffect.ts","webpack://core-admin_panel/./src/services/Effect/api/createActivityIdsEffect.ts","webpack://core-admin_panel/./src/services/Effect/BatchLoader.ts","webpack://core-admin_panel/./src/services/Effect/ActivityIdsLoader.ts","webpack://core-admin_panel/./src/services/Effect/IssuesLoader.ts","webpack://core-admin_panel/./src/services/Effect/api/createProjecDepsEffect.ts","webpack://core-admin_panel/./src/services/Effect/ProjectLoader.ts","webpack://core-admin_panel/./src/services/Effect/api/createTasksEffect.ts","webpack://core-admin_panel/./src/services/Effect/TasksLoader.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/load.ts","webpack://core-admin_panel/./src/modules/Dashboard/meta.ts","webpack://core-admin_panel/./src/modules/Tasks/utils/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/utils/utils.ts","webpack://core-admin_panel/./src/services/Effect/Polling.ts","webpack://core-admin_panel/./src/services/Effect/api/runPollingEffect.ts","webpack://core-admin_panel/./src/services/Effect/errors.ts","webpack://core-admin_panel/./src/services/Effect/helpers/index.ts","webpack://core-admin_panel/./src/services/Firebase/Firebase.ts","webpack://core-admin_panel/./src/services/TasksObserver/TasksObserver.ts","webpack://core-admin_panel/./src/services/TasksObserver/TasksObserverEvent.ts","webpack://core-admin_panel/./src/services/TasksObserver/const.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/styles.ts","webpack://core-admin_panel/./src/shared/components/ProgressReport/utils/apiHelpers.ts","webpack://core-admin_panel/./src/shared/components/ProgressReport/utils/helpers.ts","webpack://core-admin_panel/./src/shared/components/ProgressReport/utils/uploadImagesToMatrix.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/utils/constants.ts","webpack://core-admin_panel/./src/shared/components/Tooltip/tooltip.module.scss?578d","webpack://core-admin_panel/./src/shared/components/Tooltip/Tooltip.tsx","webpack://core-admin_panel/./src/shared/constants/common.ts","webpack://core-admin_panel/./src/shared/constants/completionUnits.ts","webpack://core-admin_panel/./src/shared/constants/env.ts","webpack://core-admin_panel/./src/shared/constants/firebase.ts","webpack://core-admin_panel/./src/shared/constants/gantt.ts","webpack://core-admin_panel/./src/shared/constants/mixpanelEvents.ts","webpack://core-admin_panel/./src/shared/constants/queryCache.ts","webpack://core-admin_panel/./src/shared/helpers/api.ts","webpack://core-admin_panel/./src/shared/helpers/axios.ts","webpack://core-admin_panel/./src/shared/helpers/common.ts","webpack://core-admin_panel/./src/shared/helpers/dates.ts","webpack://core-admin_panel/./src/shared/helpers/debounce.ts","webpack://core-admin_panel/./src/shared/helpers/ls.ts","webpack://core-admin_panel/./src/shared/helpers/project.ts","webpack://core-admin_panel/./src/shared/helpers/queryParams.ts","webpack://core-admin_panel/./src/shared/helpers/task.ts","webpack://core-admin_panel/./src/shared/helpers/tasks.ts","webpack://core-admin_panel/./src/shared/helpers/throttle.ts","webpack://core-admin_panel/./src/shared/helpers/worker.ts","webpack://core-admin_panel/./src/shared/hooks/analytics/useMixpanel.ts","webpack://core-admin_panel/./src/shared/hooks/core/useDebounce.ts","webpack://core-admin_panel/./src/shared/hooks/core/useEventListener.ts","webpack://core-admin_panel/./src/shared/hooks/core/useMount.ts","webpack://core-admin_panel/./src/shared/hooks/core/useOusideClick.ts","webpack://core-admin_panel/./src/shared/hooks/core/usePrevious.ts","webpack://core-admin_panel/./src/shared/hooks/core/useUnmount.ts","webpack://core-admin_panel/./src/shared/hooks/analytics/useZoomInfo.ts","webpack://core-admin_panel/./src/shared/hooks/useAnalyticsService.ts","webpack://core-admin_panel/./src/shared/hooks/useAppConstants.ts","webpack://core-admin_panel/./src/shared/hooks/useCompany.ts","webpack://core-admin_panel/./src/shared/hooks/useParsedQuery.ts","webpack://core-admin_panel/./src/shared/hooks/usePopupScrollHandler.ts","webpack://core-admin_panel/./src/shared/hooks/useProfile.ts","webpack://core-admin_panel/./src/shared/hooks/useProject.ts","webpack://core-admin_panel/./src/shared/mapping/task.ts","webpack://core-admin_panel/./src/shared/models/Gantt.ts","webpack://core-admin_panel/./src/shared/models/TaskDependency.ts","webpack://core-admin_panel/./src/shared/models/company.ts","webpack://core-admin_panel/./src/shared/models/feedback.ts","webpack://core-admin_panel/./src/shared/models/ioc.ts","webpack://core-admin_panel/./src/shared/models/project.ts","webpack://core-admin_panel/./src/shared/models/task/const.ts","webpack://core-admin_panel/./src/shared/models/task/task.ts","webpack://core-admin_panel/./src/shared/models/task/taskStatus.ts","webpack://core-admin_panel/./src/shared/stores/UIStore.ts","webpack://core-admin_panel/./src/shared/stores/utils/calculations.ts","webpack://core-admin_panel/./src/shared/stores/utils/transforms.ts","webpack://core-admin_panel/./src/shared/utils/UAParser.ts","webpack://core-admin_panel/./src/store/actions.ts","webpack://core-admin_panel/./src/store/company/actions.ts","webpack://core-admin_panel/./src/shared/constants/errors.ts","webpack://core-admin_panel/./src/store/ducks/auth/actions.ts","webpack://core-admin_panel/./src/store/ducks/auth/types.ts","webpack://core-admin_panel/./src/store/onboarding/index.ts","webpack://core-admin_panel/./src/api/subscription.ts","webpack://core-admin_panel/./src/store/profile/actions.ts","webpack://core-admin_panel/./src/store/profile/index.ts","webpack://core-admin_panel/./src/store/profile/utils.ts","webpack://core-admin_panel/./src/store/projects/actions.ts","webpack://core-admin_panel/./src/store/projects/index.ts","webpack://core-admin_panel/./src/store/tasks/actions.ts","webpack://core-admin_panel/./src/store/tasks/index.ts","webpack://core-admin_panel/./src/store/utils/serializeError.ts","webpack://core-admin_panel/./src/shared/utils/resizeObserver.ts","webpack://core-admin_panel/./src/modules/ApplyAuthCode/ApplyAuthCode.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/types.ts","webpack://core-admin_panel/./src/modules/Landing/components/MediaBlocks/MediaBlocks.tsx","webpack://core-admin_panel/./src/shared/helpers/reducerHelpers.ts","webpack://core-admin_panel/./src/modules/SignIn/index.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/constants.tsx","webpack://core-admin_panel/./src/shared/models/worker.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/GanttSplitDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/Baseline/Baseline.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkWatcher/BulkWatcher.tsx","webpack://core-admin_panel/./src/modules/Tasks/DailyRisk/TaskFlagClassifier.tsx","webpack://core-admin_panel/./src/shared/models/task/chat.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/utils/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/SidebarPanel.tsx","webpack://core-admin_panel/./src/shared/hooks/useTaskCacheHlper/types.ts","webpack://core-admin_panel/./src/shared/components/MetaTags/index.tsx","webpack://core-admin_panel/./src/shared/components/OnboardingLayout/ZetOnboardingContainer/ZetOnboardingContainer.tsx","webpack://core-admin_panel/./src/shared/helpers/hooks/useCountDown.ts","webpack://core-admin_panel/./src/shared/hooks/core/useScrollToTopOnMount.ts","webpack://core-admin_panel/./src/shared/hooks/useLandingStyles.ts","webpack://core-admin_panel/./src/shared/hooks/useClassName.ts","webpack://core-admin_panel/./src/shared/layout/base/BaseLayoutStylesContainer.tsx","webpack://core-admin_panel/./src/services/ScrollToService.ts","webpack://core-admin_panel/./src/shared/components/DownloadAppLink/index.tsx","webpack://core-admin_panel/./src/shared/components/ExternalLink/index.tsx","webpack://core-admin_panel/./src/shared/components/LanguageSwitcher/constants.ts","webpack://core-admin_panel/./src/shared/components/LanguageSwitcher/LandingLngSwitcher.module.scss?a172","webpack://core-admin_panel/./src/shared/components/LanguageSwitcher/LandingLngSwitcher.tsx","webpack://core-admin_panel/./src/shared/components/Logo/Logo.tsx","webpack://core-admin_panel/./src/shared/hooks/useUserAgent.ts","webpack://core-admin_panel/./src/shared/layout/base/Header/Header.tsx","webpack://core-admin_panel/./src/shared/layout/base/Footer/Footer.tsx","webpack://core-admin_panel/./src/shared/layout/base/OnboardingLayout.tsx","webpack://core-admin_panel/./src/shared/hooks/useProjectSelector.ts","webpack://core-admin_panel/./src/modules/CollabLanding/CollabLanding.module.scss?e227","webpack://core-admin_panel/./src/modules/CollabLanding/CollabLanding.tsx","webpack://core-admin_panel/./src/shared/helpers/validationSchemas.ts","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlBooking/CtrlBooking.module.scss?e6f8","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlBooking/CtrlBooking.tsx","webpack://core-admin_panel/./src/shared/components/LanguageSwitcher/InternalLngSwitcher.tsx","webpack://core-admin_panel/./src/shared/constants/icons.ts","webpack://core-admin_panel/./src/shared/hooks/useIsCompanyAdmin.ts","webpack://core-admin_panel/./src/shared/hooks/useUnreadMessageCount.ts","webpack://core-admin_panel/./src/store/selectors/index.ts","webpack://core-admin_panel/./src/shared/layout/admin/NavMenu/NavMenuItem/NavMenuItem.module.scss","webpack://core-admin_panel/./src/shared/layout/admin/NavMenu/NavMenuItem/NavMenuItem.tsx","webpack://core-admin_panel/./src/shared/hooks/useAppIsReady.ts","webpack://core-admin_panel/./src/shared/layout/admin/NavMenu/NavMenu.tsx","webpack://core-admin_panel/./src/shared/components/Avatar/Avatar.tsx","webpack://core-admin_panel/./src/shared/layout/admin/UserMenu/UserMenu.tsx","webpack://core-admin_panel/./src/shared/layout/admin/WidgetMenu/index.tsx","webpack://core-admin_panel/./src/shared/layout/admin/WorkspaceSwitcher/workspaceSwitcher.module.scss?68fe","webpack://core-admin_panel/./src/shared/layout/admin/WorkspaceSwitcher/WorkspaceSwitcher.tsx","webpack://core-admin_panel/./src/shared/layout/admin/Header/Header.module.scss?aeec","webpack://core-admin_panel/./src/shared/layout/admin/Header/useHeaderControls.ts","webpack://core-admin_panel/./src/shared/layout/admin/Header/Header.tsx","webpack://core-admin_panel/./src/shared/layout/admin/Layout/Layout.tsx","webpack://core-admin_panel/./src/shared/layout/admin/Panel/Panel.module.scss?5575","webpack://core-admin_panel/./src/shared/layout/admin/Panel/Panel.tsx","webpack://core-admin_panel/./src/shared/layout/admin/ScreenGreed/ScreenGreed.tsx","webpack://core-admin_panel/./src/shared/layout/admin/SlidePanel/SlidePanel.module.scss","webpack://core-admin_panel/./src/shared/layout/admin/SlidePanel/SlidePanelBody/slidePanelBody.module.scss?d887","webpack://core-admin_panel/./src/shared/layout/admin/SlidePanel/SlidePanelBody/SlidePanelBody.tsx","webpack://core-admin_panel/./src/shared/layout/admin/SlidePanel/SlidePanel.tsx","webpack://core-admin_panel/./src/shared/layout/admin/SlidePanel/SlidePanelHeader/SlidePanelHeader.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/FormControl.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Geocoder/Geocoder.tsx","webpack://core-admin_panel/./src/shared/components/Slider/index.tsx","webpack://core-admin_panel/./src/shared/components/Cropper/NoAvatar.tsx","webpack://core-admin_panel/./src/shared/components/Cropper/Cropper.tsx","webpack://core-admin_panel/./src/shared/components/Cropper/useCropper.ts","webpack://core-admin_panel/./src/modules/CompanyProfile/CompanyForm/CompanyForm.tsx","webpack://core-admin_panel/./src/shared/components/SkeletonPreloader/index.module.scss","webpack://core-admin_panel/./src/shared/components/SkeletonPreloader/SkeletonPreloader.tsx","webpack://core-admin_panel/./src/modules/CompanyProfile/CompanyPreview/CompanyPreviewUpsell.module.scss?6ec8","webpack://core-admin_panel/./src/modules/CompanyProfile/CompanyPreview/CompanyPreview.tsx","webpack://core-admin_panel/./src/modules/CompanyProfile/CreateCompanyDesc/utils/getUniqueWorkerRoles.ts","webpack://core-admin_panel/./src/modules/CompanyProfile/CreateCompanyDesc/CreateCompanyDesc.tsx","webpack://core-admin_panel/./src/modules/CompanyProfile/CompanyProfile.tsx","webpack://core-admin_panel/./src/shared/components/LaptopSteps/LaptopSteps.module.scss?b132","webpack://core-admin_panel/./src/shared/components/LaptopSteps/LaptopSteps.tsx","webpack://core-admin_panel/./src/shared/components/MobileAuthStep/MobileAuthStep.module.scss?671e","webpack://core-admin_panel/./src/shared/components/MobileAuthStep/MobileAuthStep.tsx","webpack://core-admin_panel/./src/modules/ComputerStart/ComputerStart.tsx","webpack://core-admin_panel/./src/api/contact.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/CountryCodeSelector/index.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/PhoneInput/PhoneInput.tsx","webpack://core-admin_panel/./src/modules/Contact/contentHelper.ts","webpack://core-admin_panel/./src/modules/Contact/ContactForm/ContactForm.tsx","webpack://core-admin_panel/./src/modules/Contact/HeroSection/index.tsx","webpack://core-admin_panel/./src/modules/Contact/Contact.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Trim.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/EmailInput/index.tsx","webpack://core-admin_panel/./src/modules/ForgotPassword/ForgotPassword.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/hooks/usePasswordVisibility.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/PhoneControl/phoneControl.module.scss","webpack://core-admin_panel/./src/shared/components/CoreForm/PhoneControl/PhoneControl.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Radios/Radios.tsx","webpack://core-admin_panel/./src/shared/helpers/hooks/useRecaptcha.ts","webpack://core-admin_panel/./src/modules/InviteSignup/InviteSignupForm.tsx","webpack://core-admin_panel/./src/modules/SignUp/Alternative/GetStarted/DownloadAppContainer/CompanyInfo.tsx","webpack://core-admin_panel/./src/modules/InviteSignup/utils.ts","webpack://core-admin_panel/./src/modules/InviteSignup/InviteSignup.tsx","webpack://core-admin_panel/./src/shared/hooks/core/useEffectOnce.ts","webpack://core-admin_panel/./src/modules/Landing/components/Box/Box.module.scss?210f","webpack://core-admin_panel/./src/modules/Landing/components/Companies/Companies.module.scss?aed0","webpack://core-admin_panel/./src/modules/Landing/components/Companies/Companies.tsx","webpack://core-admin_panel/./src/modules/Landing/components/CtrlButton/CtrlButton.module.scss?a8ab","webpack://core-admin_panel/./src/modules/Landing/components/CtrlButton/CtrlButton.tsx","webpack://core-admin_panel/./src/modules/Landing/components/ContentSection/ContentSection.module.scss?3775","webpack://core-admin_panel/./src/modules/Landing/components/ContentSection/ContentSection.tsx","webpack://core-admin_panel/./src/modules/Landing/components/EasyToUse/EasyToUse.module.scss?600f","webpack://core-admin_panel/./src/modules/Landing/components/EasyToUse/SvgPoint.tsx","webpack://core-admin_panel/./src/modules/Landing/components/EasyToUse/EasyToUse.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Icon/Icon.module.scss?4761","webpack://core-admin_panel/./src/modules/Landing/components/Icon/Icon.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Social/Social.module.scss?9e04","webpack://core-admin_panel/./src/modules/Landing/components/Social/Social.tsx","webpack://core-admin_panel/./src/modules/Landing/components/CtrlForm/CtrlForm.module.scss?4dd6","webpack://core-admin_panel/./src/modules/Landing/components/CtrlForm/CtrlForm.tsx","webpack://core-admin_panel/./src/modules/Landing/components/CtrlTextfield/CtrlTextfield.module.scss?d880","webpack://core-admin_panel/./src/modules/Landing/components/CtrlTextfield/CtrlTextfield.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Subscribe/Subscribe.module.scss?9d99","webpack://core-admin_panel/./src/modules/Landing/components/Subscribe/Subscribe.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Footer/Footer.module.scss?4878","webpack://core-admin_panel/./src/modules/Landing/components/Footer/Footer.tsx","webpack://core-admin_panel/./src/modules/Landing/components/CtrlAppDetect/CtrlAppDetect.module.scss?b90b","webpack://core-admin_panel/./src/modules/Landing/components/CtrlAppDetect/CtrlAppDetect.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Header/Header.module.scss?66ab","webpack://core-admin_panel/./src/modules/Landing/components/Header/Header.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Hero/Hero.module.scss?b4e8","webpack://core-admin_panel/./src/modules/Landing/components/Hero/Hero.tsx","webpack://core-admin_panel/./src/modules/Landing/components/CtrlTab/CtrlTab.module.scss?701a","webpack://core-admin_panel/./src/modules/Landing/components/CtrlTab/CtrlTab.tsx","webpack://core-admin_panel/./src/modules/Landing/components/ContentSection/ContentTabs/ContentTabs.module.scss?e931","webpack://core-admin_panel/./src/modules/Landing/components/ContentSection/ContentTabs/ContentTabs.tsx","webpack://core-admin_panel/./src/modules/Landing/components/MediaBlocks/MediaBlocks.module.scss?3071","webpack://core-admin_panel/./src/modules/Landing/components/Reviews/Review/Review.module.scss?db70","webpack://core-admin_panel/./src/modules/Landing/components/Reviews/Review/Review.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Slider/constants.ts","webpack://core-admin_panel/./src/modules/Landing/components/Slider/Slider.module.scss?8502","webpack://core-admin_panel/./src/modules/Landing/components/Slider/Slider.tsx","webpack://core-admin_panel/./src/modules/Landing/components/Reviews/Reviews.module.scss?c080","webpack://core-admin_panel/./src/modules/Landing/components/Reviews/Reviews.tsx","webpack://core-admin_panel/./src/modules/Landing/Landing.tsx","webpack://core-admin_panel/./src/shared/hooks/analytics/useFacebookTracking.ts","webpack://core-admin_panel/./src/shared/components/LaptopActions/LaptopActions.module.scss?5ebc","webpack://core-admin_panel/./src/shared/components/LaptopActions/LaptopAction.tsx","webpack://core-admin_panel/./src/shared/components/LaptopMedia/LaptopMedia.module.scss?6e82","webpack://core-admin_panel/./src/shared/components/LaptopMedia/LaptopMedia.tsx","webpack://core-admin_panel/./src/modules/MobileAccountComplete/MobileAccountComplete.tsx","webpack://core-admin_panel/./src/modules/OAuth/ProcoreOAuth.tsx","webpack://core-admin_panel/./src/modules/OAuth/index.tsx","webpack://core-admin_panel/./src/modules/Project/ProjectForm/validationSchema.tsx","webpack://core-admin_panel/./src/shared/components/ProgressBar/index.tsx","webpack://core-admin_panel/./src/api/export.ts","webpack://core-admin_panel/./src/api/utils/sleep.ts","webpack://core-admin_panel/./src/services/ExportToCSV.ts","webpack://core-admin_panel/./src/shared/components/DropPanel/index.tsx","webpack://core-admin_panel/./src/shared/hooks/useTasksUrlState.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/CoreFormControl.tsx","webpack://core-admin_panel/./src/shared/components/TasksExport/TasksExportForm.tsx","webpack://core-admin_panel/./src/shared/components/TasksExport/TaskExportButton.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/TasksImportContext/TasksImportState.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/TasksImportContext/TasksImportContext.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/components/LegendCompare.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TaskImportPreviewTable.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TaskImportResult.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportMajorError.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Switcher/Switcher.tsx","webpack://core-admin_panel/./src/shared/components/FormikChangeWatcher/FormikChangeWatcher.tsx","webpack://core-admin_panel/./src/shared/hooks/useCompanyLocale.ts","webpack://core-admin_panel/./src/shared/hooks/usePreferDateFormat.ts","webpack://core-admin_panel/./src/shared/components/StatusElement/index.tsx","webpack://core-admin_panel/./src/shared/constants/statuses.ts","webpack://core-admin_panel/./src/shared/components/TaskStatusIcon/index.tsx","webpack://core-admin_panel/./src/shared/components/TaskStatus/TaskStatus.tsx","webpack://core-admin_panel/./src/shared/components/TaskCard/TaskCard.tsx","webpack://core-admin_panel/./src/shared/hooks/useBrowserLocale.ts","webpack://core-admin_panel/./src/shared/hooks/useQueryCache/QueryCacheHelper.ts","webpack://core-admin_panel/./src/shared/hooks/useQueryCache/useQueryCache.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/utils/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/GanttColumnsDropdown/ProjectCustomColumnPopup/utils.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/utils/types.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportMapping/schema.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportMapping/CustomColumnMapping.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportMapping/customFieldImportHelpers.ts","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportMapping/TasksImportMapping.tsx","webpack://core-admin_panel/./src/shared/components/DragAndDrop/index.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportSource/TasksImportFileSelector.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/components/TasksImportSource/TasksImportSource.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/TasksImportContext/TasksImportProvider.tsx","webpack://core-admin_panel/./src/shared/components/TasksImport/TasksImportPopup.tsx","webpack://core-admin_panel/./src/modules/Project/components/ProjectPreview/ProjectPreview.module.scss?5b2c","webpack://core-admin_panel/./src/modules/Project/components/ProjectPreview/useCloneProject.ts","webpack://core-admin_panel/./src/modules/Project/components/ProjectPreview/useCloneProjectStatus.ts","webpack://core-admin_panel/./src/modules/Project/components/ProjectPreview/ProjectPreview.tsx","webpack://core-admin_panel/./src/api/timezone.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncProjectSubcontractorSelect/index.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/SkeletonFieldPreloader.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/TimePicker/index.tsx","webpack://core-admin_panel/./src/shared/components/Permission/index.tsx","webpack://core-admin_panel/./src/modules/Project/ProjectForm/ProjectForm.tsx","webpack://core-admin_panel/./src/shared/hooks/useBrowserTimezone.ts","webpack://core-admin_panel/./src/modules/Project/Project.tsx","webpack://core-admin_panel/./src/shared/components/HelpModal/HelpModal.tsx","webpack://core-admin_panel/./src/shared/hooks/useEffectWithCompany.ts","webpack://core-admin_panel/./src/modules/Projects/components/ProjectItem/ProjectItem.tsx","webpack://core-admin_panel/./src/modules/Projects/components/ProjectsList/ProjectsList.module.scss?2041","webpack://core-admin_panel/./src/modules/Projects/components/ProjectsList/ProjectsList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/FilterDropdown.module.scss?1e77","webpack://core-admin_panel/./src/shared/components/CoreNewUI/SearchInput/SearchInput.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/SearchField/SearchField.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/Autocomplete/Autocomplete.module.scss?9a3f","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlBtnOption/CtrlBtnOption.module.scss?6778","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlBtnOption/CtrlBtnOption.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/Autocomplete/Autocomplete.tsx","webpack://core-admin_panel/./src/shared/hooks/useKey.ts","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlDrop/CtrlDrop.module.scss?39f3","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlDrop/CtrlDrop.tsx","webpack://core-admin_panel/./src/modules/Projects/components/ProjectsFilterAndSearch/helpers.ts","webpack://core-admin_panel/./src/modules/Projects/components/ProjectsFilterAndSearch/ProjectsFilterAndSearch.tsx","webpack://core-admin_panel/./src/modules/Projects/Projects.tsx","webpack://core-admin_panel/./src/modules/ResetPassword/resetPassword.module.scss?444a","webpack://core-admin_panel/./src/modules/ResetPassword/ResetPassword.tsx","webpack://core-admin_panel/./src/shared/hooks/useWorkflowStatuses.ts","webpack://core-admin_panel/./src/shared/hooks/UseTaskStatusOptions.ts","webpack://core-admin_panel/./src/modules/SharedTask/hooks/useSharedTaskStatusOptions.ts","webpack://core-admin_panel/./src/shared/hooks/core/useToggle.ts","webpack://core-admin_panel/./src/shared/components/TaskStatusHistory/index.ts","webpack://core-admin_panel/./src/shared/components/TaskStatusHistory/TaskStatusHistory.tsx","webpack://core-admin_panel/./src/modules/SharedTask/AppCard/AppCard.tsx","webpack://core-admin_panel/./src/modules/SharedTask/NotFound.tsx","webpack://core-admin_panel/./src/modules/SharedTask/Parts/AssigneesPart.tsx","webpack://core-admin_panel/./src/shared/components/CompletionAmountSlider/CompletionAmountSlider.module.scss?ce5f","webpack://core-admin_panel/./src/shared/components/CompletionAmountSlider/CompletionAmountSlider.tsx","webpack://core-admin_panel/./src/modules/SharedTask/Parts/AdditionalInfoPart/AdditionalInfoPart.tsx","webpack://core-admin_panel/./src/modules/SharedTask/Parts/TaskMainInfoPart/TaskMainInfoPart.tsx","webpack://core-admin_panel/./src/modules/SharedTask/Parts/DownloadAppPart.tsx","webpack://core-admin_panel/./src/modules/SharedTask/SharedTask.module.scss","webpack://core-admin_panel/./src/modules/SharedTask/TaskStatusSelect/TaskStatusSelect.tsx","webpack://core-admin_panel/./src/modules/SharedTask/SharedTask.tsx","webpack://core-admin_panel/./src/shared/components/MultiFactorDialog/MultiFactorDialog.tsx","webpack://core-admin_panel/./src/services/EventManager.ts","webpack://core-admin_panel/./src/store/onboarding/actions.ts","webpack://core-admin_panel/./src/modules/SignUp/Alternative/index.tsx","webpack://core-admin_panel/./src/modules/SignUp/index.tsx","webpack://core-admin_panel/./src/modules/SignUp/Alternative/GetStarted/GetStartedSignup.module.scss?d4b1","webpack://core-admin_panel/./src/modules/SignUp/Alternative/GetStarted/GetStartedSignup.tsx","webpack://core-admin_panel/./src/modules/SignUp/CongratsPopup/CongratsPopup.tsx","webpack://core-admin_panel/./src/shared/components/EmptyGridBubble/index.tsx","webpack://core-admin_panel/./src/shared/components/Toolbar/Toolbar.module.scss?c66b","webpack://core-admin_panel/./src/shared/components/Toolbar/Toolbar.tsx","webpack://core-admin_panel/./src/shared/components/ProjectLevelToolbar/ProjectLevelToolbar.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControlInline/FieldInline/FieldInline.module.scss?643e","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControlInline/FieldInline/FieldInline.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControlInline/FormControlInline.module.scss?1a18","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControlInline/FormControlInline.tsx","webpack://core-admin_panel/./src/shared/components/ProjectNameInlineEdit/ProjectNameInlineEdit.module.scss?7158","webpack://core-admin_panel/./src/shared/components/ProjectNameInlineEdit/ProjectNameInlineEdit.tsx","webpack://core-admin_panel/./src/shared/components/Table/Table.module.scss?1636","webpack://core-admin_panel/./src/shared/components/Table/components/Columns/TableColumns.tsx","webpack://core-admin_panel/./src/shared/components/Table/components/Columns/TableRow.tsx","webpack://core-admin_panel/./src/shared/components/Table/components/TableSortIndicator/TableSortIndicator.tsx","webpack://core-admin_panel/./src/shared/components/Table/Table.tsx","webpack://core-admin_panel/./src/shared/components/WorkspaceSwitcher/WorkspaceSwitcher.module.scss?4e78","webpack://core-admin_panel/./src/shared/components/WorkspaceSwitcher/WorkspaceSwitcher.tsx","webpack://core-admin_panel/./src/shared/hooks/useProjectWorkers.tsx","webpack://core-admin_panel/./src/shared/hooks/useResponsibleOrgColors.ts","webpack://core-admin_panel/./src/shared/hooks/useSaveLastSelectedProjectId.ts","webpack://core-admin_panel/./src/shared/hooks/useProjectIdValidation.ts","webpack://core-admin_panel/./src/shared/constants/localStorageKeys.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsContext/index.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/hooks/useGetSubcontractor.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/CtrlColor/CtrlColor.module.scss?ec7c","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/CtrlColor/CtrlColor.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/ColorsList/ColorsList.module.scss?b47f","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/ColorsList/ColorsList.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/CtrlColorPreview/CtrlColorPreview.module.scss?1e63","webpack://core-admin_panel/./src/modules/Subcontractors/components/CtrlColorPreview/CtrlColorPreview.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/utils/getSimilarNames.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/hooks/useSimilarSubcontractors.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/utils/detectNameCollisions.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorForm/components/SubcontractorSimilar/SubcontractorSimilar.module.scss?264e","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorForm/components/SubcontractorSimilar/SubcontractorSimilar.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorForm/SubcontractorForm.module.scss?7810","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorForm/SubcontractorForm.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/InfoMember/InfoMember.module.scss?3d3c","webpack://core-admin_panel/./src/shared/components/CoreNewUI/InfoMember/InfoMember.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncCompanyWorkerSelect/components.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncCompanyWorkerSelect/index.module.scss","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncCompanyWorkerSelect/AsyncCompanyWorkerSelect.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorMember/SubcontractorMember.module.scss?d036","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/components/Subcontactor/SubcontractorMember/SubcontractorMember.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/SubcontractorTab.module.scss?72c3","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/components/SubcontractorTab/SubcontractorTab.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/constants/validation.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/hooks/mutations.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/hooks/useHandleSubcontractors.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/SubcontractorsPanel.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorsPanel/SubcontractorsPanel.module.scss?97eb","webpack://core-admin_panel/./src/modules/Subcontractors/hooks/useGetSubcontractors.ts","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorInfo/SubcontractorInfo.module.scss?bf96","webpack://core-admin_panel/./src/modules/Subcontractors/components/SubcontractorInfo/SubcontractorInfo.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/hooks/useSubcontractorsColumns.tsx","webpack://core-admin_panel/./src/modules/Subcontractors/Subcontractors.module.scss?cbf5","webpack://core-admin_panel/./src/modules/Subcontractors/utils/utils.ts","webpack://core-admin_panel/./src/modules/Subcontractors/Subcontractors.tsx","webpack://core-admin_panel/./src/modules/Tasks/hooks/useRemovePreviousProjectActivities.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/hooks/useUndo.ts","webpack://core-admin_panel/./src/store/projects/selectors.ts","webpack://core-admin_panel/./src/shared/hooks/useOptionsForSelect.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/useLocationsOptions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/useProjectSubcontractorOptions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/useTaskStatusOptions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/useResponsibleOptions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/IssuesFilterDropdown.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncProjectWorkerSelect/components.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncProjectWorkerSelect/AsyncProjectWorkerSelect.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/utils.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/TaskStatusSelect/TaskStatusSelect.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/IssuesBulkActions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/bulkStatus.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/bulkResponsible.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/hooks/useBulkActions.ts","webpack://core-admin_panel/./src/shared/prediction/date-expander.ts","webpack://core-admin_panel/./src/shared/prediction/TaskGraph.ts","webpack://core-admin_panel/./src/shared/prediction/expander.ts","webpack://core-admin_panel/./src/shared/utils/normalizeI18Key.ts","webpack://core-admin_panel/./src/modules/Tasks/hooks/useTasksActions.ts","webpack://core-admin_panel/./src/services/TasksObserver/TasksObserverProvider.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/components/useDeleteOneSelectedIssue.ts","webpack://core-admin_panel/./src/shared/components/ProjectCollabPopup/helpers.ts","webpack://core-admin_panel/./src/shared/components/ProjectCollabPopup/ProjectCollabPopup.module.scss?fff9","webpack://core-admin_panel/./src/shared/components/ProjectCollabPopup/ProjectCollabPopup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/CtrlDates/CtrlDates.module.scss?30ef","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/CtrlDates/CtrlDates.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/DatePicker/index.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlChip/CtrlChip.module.scss?ddc5","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlChip/CtrlChip.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlChipGroup/CtrlChipGroup.module.scss?f68b","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlChipGroup/CtrlChipGroup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/DateDropdown/DateDropdown.module.scss?a419","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/DateDropdown/DateDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/hooks/useGanttZoom.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/utils/getOrg.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ExportDropdown/ExportDropdown.module.scss?5909","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ExportDropdown/util.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ExportDropdown/ExportDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useRowsOpenState.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/utils.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Gantt/utils/baselineHandlers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/date.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/ganttColumns.module.scss?8b05","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/useInlineSelectController.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/SelectEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/CostImpactEditor.tsx","webpack://core-admin_panel/./src/shared/hooks/useCrews.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/CrewSelector.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/CustomFields/CustomFieldSelectEditor/CustomFieldSelectorEditor.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/CustomFields/CustomFieldSelectEditor/CustomFieldSelectEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/IssueTypeEditor.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/CreatableSelect/CreatableSelect.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/LocationEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/ResponsibleEditor/index.module.scss","webpack://core-admin_panel/./src/shared/utils/inviteWorker.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MemberInvite/MemberInvite.module.scss?aaf2","webpack://core-admin_panel/./src/modules/Worker/mutations.ts","webpack://core-admin_panel/./src/modules/Worker/WorkerForm/validation.ts","webpack://core-admin_panel/./src/modules/Worker/WorkerForm/ShortWorkerForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/popups/InviteTaskResponsible.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/ResponsibleEditor/ResponsibleEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/SeverityEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/StatusEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/SubcontractorEditor.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncTaskTypeSelect/index.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/TaskTypeEditor.tsx","webpack://core-admin_panel/./src/shared/hooks/useZones.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/ZoneSelector.tsx","webpack://core-admin_panel/./src/routerHistory.ts","webpack://core-admin_panel/./src/services/TaskChainUpdateQueue/TaskChainUpdateQueue.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/inlineEditors.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/config.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useGanttColumns.ts","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheckOption/CtrlCheckOption.module.scss?3b42","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheckOption/CtrlCheckOption.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/GanttColumnsDropdown/GanttColumnsDropdown.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/GanttColumnsDropdown/ProjectCustomColumnPopup/ProjectCustomColumnPopup.module.scss?b652","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/GanttColumnsDropdown/ProjectCustomColumnPopup/ProjectCustomColumnPopup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/GanttColumnsDropdown/GanttColumnsDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Toolbar/Toolbar.module.scss?edcc","webpack://core-admin_panel/./src/modules/Tasks/components/Toolbar/ToolbarMoreActions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Toolbar/ToolbarSection.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Toolbar/Toolbar.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Toolbar/ToolbarItem.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/IssuesActionsBar.module.scss?10f5","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/IssuesActionsBar.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/IssuesActionsBar/useIssuesBulkActions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/NoDataBubble.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/simpleLock.ts","webpack://core-admin_panel/./src/shared/components/ShareTask/index.tsx","webpack://core-admin_panel/./src/shared/hooks/useIsTablet.tsx","webpack://core-admin_panel/./src/store/tasks/selectors.ts","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/BaselineDropdown.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/DateControl/DateControl.module.scss?ee4d","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/DateControl/DateControl.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/InfoWorker/InfoWorker.module.scss?ea6a","webpack://core-admin_panel/./src/shared/components/CoreNewUI/InfoWorker/InfoWorker.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/Snapshot/Snapshot.module.scss?5111","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/Snapshot/Snapshot.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/SnapshotsList/SnapshotsList.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/SnapshotsList/SnapshotsList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/components/Baseline/Baseline.module.scss?86b0","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/BaselineDropdown/BaselineDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ColorByButton/ColorTasksModeBtn.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlColorPicker/components/CtrlColor/CtrlColor.module.scss?6de8","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlColorPicker/components/CtrlColor/CtrlColor.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlColorPicker/CtrlColorPicker.module.scss?9f91","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlColorPicker/CtrlColorPicker.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ColorDropdown/ColorDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/ColorDropdown/ColorDropdown.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/DateDropdown/DailiesDateDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/DateDropdown/GanttVisualDateDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/TodayButton.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/WBSAutocomplete.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/DailiesActionBar/DailiesFilterDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/generateTaskLayer.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/usePrint/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/usePrint/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/TasksActionsBar.module.scss?3998","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/useTasksBulkOperations.ts","webpack://core-admin_panel/./src/shared/components/WorkerStatus/index.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/WorkerStatusSelect/index.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/StatusSelect.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkWatcher/BulkWatcher.module.scss?396e","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkWatcher/components.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkWatcher/utils.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/TasksBulkActions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkResponsible/BulkResponsible.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkSubcontractor/BulkSubcontractor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkLocation/BulkLocation.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkType/BulkType.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/bulkPopups/BulkStatus/BulkStatus.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlSwitcher/CtrlSwitcher.module.scss?4e60","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlSwitcher/CtrlSwitcher.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/TasksFilterDropdown.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/ActionsBar/components/FilterDropdown/useTaskTypeOptions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/TasksActionsBar.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/TasksActionsBar/useTasksBulkActions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/usePrint/usePrint.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoGallery/components/GalleryEmpty/GalleryEmpty.module.scss?e914","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoGallery/components/GalleryEmpty/GalleryEmpty.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ImageGallery/ImageGallery.module.scss?66cd","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ImageGallery/ImageGallery.tsx","webpack://core-admin_panel/./src/shared/components/Pill/styles.module.scss?d0ac","webpack://core-admin_panel/./src/shared/components/Pill/Pill.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/updateSearchQuery.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/utils/handler.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/DailyCardSeparator.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/DailiesCardComments.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/utils/formatting.ts","webpack://core-admin_panel/./src/shared/components/Spacer/HSpacer.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/useFetchDailiesIssues.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/ActivityIssues.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/DailyCardHeader.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/DailiesReportCard.tsx","webpack://core-admin_panel/./src/shared/helpers/reports.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportCard/DailiesCardReportContent.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesGeneralComments/DailiesGeneralComments.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/useDailiesGeneralComments.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/utils/groupGeneralComments.ts","webpack://core-admin_panel/./src/shared/components/ProgressReport/utils/validationSchema.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/utils/commentFormValidationSchema.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/utils/handlePostGeneralComments.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesCommentForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/hooks/utils/groupFeedback.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/useDailiesReports.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/useFetchDailiesTasks.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/utils/mergeFeedback.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/hooks/useCurrentDateReports.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportHeader.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailiesReportIssues.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReportingPopup/ProgressReportPopupProvider.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailyTasksWithNoReports/DailyTasksWithNoReports.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/DailyTaskWithReport/DailyTaskWithReport.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Dailies/Dailies.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/IssueUpdatesPopup/IssueUpdatesPopup.module.scss?b6b8","webpack://core-admin_panel/./src/shared/components/CoreNewUI/IssueUpdatesPopup/IssueUpdatesPopup.tsx","webpack://core-admin_panel/./src/shared/components/TasksBulkAssignPopup/TasksBulkAssignPopup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/TaskContextMenu/TaskContextMenu.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/Editors/DateEditor.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useDetectNewTask.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Filters/utils/dateRange.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useWeeksRange.ts","webpack://core-admin_panel/./src/modules/Tasks/hooks/useIssuesDictionary.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/asyncHelpers.ts","webpack://core-admin_panel/./src/shared/hooks/core/useEffectAfterMount.ts","webpack://core-admin_panel/./src/api/weather.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/components/ProjectCalendarConvertDay/ProjectCalendarConvertDay.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/GanttView.module.scss?df66","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useNavigateToMentions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useTaskMentionClickHandler.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/ganttPlugin.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/copyPaste.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/statusIcon.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/checkboxColumnPlugin.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/contextMenuPlugin.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/handlers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/layers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/GanttView.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useActiveTask.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/plugins/useGanttPlugins.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useGanttScrollPosition.ts","webpack://core-admin_panel/./src/shared/hooks/useGanttSubcontractorColors.tsx","webpack://core-admin_panel/./src/shared/hooks/useGanttWeatherReport.tsx","webpack://core-admin_panel/./src/shared/hooks/useGanttLabelCategories.tsx","webpack://core-admin_panel/./src/shared/hooks/useLabelCategories.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useHideContextOnGanttScroll.tsx","webpack://core-admin_panel/./src/modules/Tasks/utils/handleInitialStateParams.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useGanttScrollListener.ts","webpack://core-admin_panel/./src/shared/prediction/utils.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/dataProcessors.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/layout.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/zoomLevels.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/helpers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/validationSchema.ts","webpack://core-admin_panel/./src/shared/components/Tabs/TabsContext.tsx","webpack://core-admin_panel/./src/shared/components/Tabs/Tabs.tsx","webpack://core-admin_panel/./src/shared/components/Tabs/Tab.tsx","webpack://core-admin_panel/./src/shared/components/Tabs/TabsContentContainer.tsx","webpack://core-admin_panel/./src/shared/components/Tabs/TabsHeader.module.scss?3d68","webpack://core-admin_panel/./src/shared/components/Tabs/TabsHeader.tsx","webpack://core-admin_panel/./src/shared/utils/prepareAssignees.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/PanelSection/PanelSection.module.scss?f99b","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/PanelSection/PanelSection.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/WbsSection/Wbs/Wbs.module.scss?ca35","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/WbsSection/Wbs/Wbs.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/WbsSection/WbsSection.tsx","webpack://core-admin_panel/./src/api/gantt.ts","webpack://core-admin_panel/./src/shared/hooks/useSubtaskCount.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/constants.ts","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCard/CtrlCard.module.scss?d833","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCard/CtrlCard.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/CoreNativeDatePicker/CoreNativeDatePicker.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/ActionsForm/ActionsForm.module.scss?6f84","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/ActionsForm/ActionsForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/Action/Action.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/ActionsList.module.scss?c90b","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/utils.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActionsList/ActionsList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Collapse/Collpase.module.scss?a586","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Collapse/Collapse.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActivityForm/ActivityForm.module.scss?5acf","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CustomFieldSection/CustomFieldSection.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/utils/helpers.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoGallery/InfoGallery.module.scss?e4e9","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoGallery/InfoGallery.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/hooks/useLoadTaskChatHistory.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoLinksList/InfoLinksList.module.scss?569f","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoLinksList/InfoLinksList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActivityForm/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/ActivityForm/ActivityForm.tsx","webpack://core-admin_panel/./src/shared/helpers/gantt.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/DependenciesList.module.scss?4a72","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/TaskAsyncSelect/index.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/DependencyForm/DependencyForm.module.scss?d825","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/DependencyForm/DependencyForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/Dependency/Dependency.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/Dependency/Dependency.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/DependenciesList/DependenciesList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/Comments.module.scss?a160","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsAction/CommentsAction.module.scss?cd8e","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsClear/CommentsClear.module.scss?b0b4","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsDate/CommentsDate.module.scss?c5d1","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsNew/CommentsNew.module.scss?ffda","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/Comments.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsAction/CommentsAction.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsClear/CommentsClear.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsDate/CommentsDate.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Comments/components/CommentsNew/CommentsNew.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoHistory/InfoHistory.module.scss?2c08","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/InfoHistory/InfoHistory.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/HistoryList/HistoryList.module.scss?d980","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/HistoryList/HistoryList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/IssuesList/IssueForm.module.scss?b110","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/IssuesList/IssueForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/IssuesList/Issue.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/IssuesList/IssuesList.module.scss?c856","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/IssuesList/IssuesList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/PanelInfo/PanelInfo.module.scss?2e8e","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/PanelInfo/PanelInfo.tsx","webpack://core-admin_panel/./src/shared/components/TaskAssigneersFilter/index.module.scss?ef5c","webpack://core-admin_panel/./src/modules/Worker/queries.ts","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/AsyncCompanyOrgsSelect/index.tsx","webpack://core-admin_panel/./src/shared/constants/worker.ts","webpack://core-admin_panel/./src/shared/hooks/useLoadWorkerTrades.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/AssigneesTabContext.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MemberInvite/MemberInvite.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Member/Member.module.scss?22b4","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Member/Member.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Suggestions/Suggestions.module.scss?4e48","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Suggestions/Suggestions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersAdd/MembersAdd.module.scss?d4fb","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersAdd/MembersAdd.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/utils/functions.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersList/components/SelectGroup.module.scss?a801","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersList/components/SelectGroup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersList/MembersList.module.scss?7656","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersList/MembersList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/SearchWorkers.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/ResponsibleSection/ReassignmentResponsible.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersClear/MembersClear.module.scss?7b8c","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/MembersClear/MembersClear.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/ResponsibleSection/ResponsibleEmpty.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/Responsible/Responsible.module.scss?622a","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/ResponsibleSection/ResponsibleSelected.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/ResponsibleSection/ResponsibleSection.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/WatchersSection/AddNewWatchers.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/WatchersSection/SelectedWatchersList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/WatchersSection/WatchersEmpty.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/components/WatchersSection/WatchersSection.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/AssigneesTab/AssigneesTab.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/ChatTimeline/EmptyChatTimeline/ChatTimelinePlaceholder.module.scss?ad33","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/ChatTimeline/EmptyChatTimeline/ChatTimelinePlaceholder.tsx","webpack://core-admin_panel/./src/api/groups.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/styles.module.scss?2076","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/utils/index.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/CommentCard.tsx","webpack://core-admin_panel/./src/shared/hooks/useGetGroup.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/CommentList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentCard/hooks/useCommentsFeed.ts","webpack://core-admin_panel/./src/shared/hooks/useFetchFeedback.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentForm/styles.module.scss?50bd","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentForm/CommentForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTimeline/CommentsTimeline.tsx","webpack://core-admin_panel/./src/shared/hooks/useCalculatePosition.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/ChatTimeline/ChatTimeline.module.scss","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/ChatTimeline/index.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/components/CommentsTab/CommentsTab.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/types.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/ActivityPanel/utils/getPreparedFormikValues.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/ActivityPanel/ActivityPanel.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/hooks.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/hooks/useActivityMembers.ts","webpack://core-admin_panel/./src/shared/hooks/useTaskState.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/utils/methods.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/ActivityPanel/ActivityPanel.module.scss?2cbe","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/constants.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ActivitiesList/ActivitiesList.module.scss?aaa8","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ActivitiesList/ActivityListItem/ActivityListItem.module.scss?93d1","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ActivitiesList/ActivityListItem/ActivityListItem.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ActivitiesList/utils/mapActivitiesToSelectTaskOptions.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/ActivitiesList/ActivitiesList.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/IssuePanelForm/IssuePanelForm.module.scss?c5fd","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/components/IssuePanelForm/IssuePanelForm.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/IssuePanel.module.scss?f212","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/utils/getChangedFields.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/utils/getPreparedFormValues.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/utils/validationSchema.ts","webpack://core-admin_panel/./src/modules/Tasks/components/SidebarPanel/IssuePanel/IssuePanel.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Gantt/GanttDefaultView.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/GanttVisual/GanttVisual.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Issues/utils.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Issues/Issues.tsx","webpack://core-admin_panel/./src/modules/Tasks/Views/Lookahead/utils/handlers.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Lookahead/utils/config.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/Lookahead/GanttLookaheadView.tsx","webpack://core-admin_panel/./src/modules/Worker/hooks/useWorkerPath.ts","webpack://core-admin_panel/./src/shared/components/ErrorBoundary/ErrorBoundary.tsx","webpack://core-admin_panel/./src/shared/components/ErrorBoundary/ErrorBoundary.module.scss?5316","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/shared.module.scss?fa6c","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/ActualManpowerCounter/actualManpowerCounter.module.scss?1cd7","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/ActualManpowerCounter/index.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/ProgressSlider/progressSlider.module.scss?5419","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/ProgressSlider/index.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/DailyCard/dailyCard.module.scss?2c59","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/DailyCard/DailyCard.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/InlineFormElements/InlineFormElements.module.scss?107f","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/InlineFormElements/InlineInput.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/components/InlineFormElements/InlineSelect.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/hooks/useProgressReport.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/hooks/useScrollAfterLoading.ts","webpack://core-admin_panel/./src/shared/components/ProgressReport/progressReport.module.scss?844a","webpack://core-admin_panel/./src/shared/components/ProgressReport/ProgressReportCommentForm/components.module.scss?67d2","webpack://core-admin_panel/./src/shared/components/ProgressReport/ProgressReportCommentForm/ProgressReportCommentForm.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/ProgressReport.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/hooks/useHandleSubmitProgressReport.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReportingPopup/progressReportPopup.module.scss?b41f","webpack://core-admin_panel/./src/shared/components/ProgressReportingPopup/ProgressReportingPopup.tsx","webpack://core-admin_panel/./src/shared/components/TimelineBadge/TimelineBadge.module.scss","webpack://core-admin_panel/./src/shared/components/TimelineBadge/TimelineBadge.tsx","webpack://core-admin_panel/./src/shared/hooks/useQueryKeys.ts","webpack://core-admin_panel/./src/shared/hooks/useTaskCacheHlper/helpers.ts","webpack://core-admin_panel/./src/modules/Tasks/Views/View.tsx","webpack://core-admin_panel/./src/shared/hooks/useTaskCacheHlper/useTaskCacheHelper.ts","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useLoadRowNumbersAndLinks.ts","webpack://core-admin_panel/./src/services/TasksObserver/UseTasksObserver.tsx","webpack://core-admin_panel/./src/services/TasksObserver/utils.ts","webpack://core-admin_panel/./src/shared/components/TutorialPopup/tutorialPopup.module.scss?f0b2","webpack://core-admin_panel/./src/shared/components/TutorialPopup/TutorialPopup.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/popups/TasksTutorialPopup.tsx","webpack://core-admin_panel/./src/modules/Tasks/Tasks.tsx","webpack://core-admin_panel/./src/modules/Tasks/hooks/useTasksInterceptor.ts","webpack://core-admin_panel/./src/shared/helpers/statuses.ts","webpack://core-admin_panel/./src/modules/Worker/ProfileStatus/ProfileStatus.tsx","webpack://core-admin_panel/./src/modules/Worker/WorkerCard/WorkerCard.module.scss","webpack://core-admin_panel/./src/modules/Worker/WorkerCard/WorkerCard.tsx","webpack://core-admin_panel/./src/modules/Worker/WorkerForm/WorkerForm.tsx","webpack://core-admin_panel/./src/modules/Worker/WorkerProfile/WorkerProfile.tsx","webpack://core-admin_panel/./src/modules/Worker/WorkerTasks/WorkerTasks.module.scss?76bc","webpack://core-admin_panel/./src/modules/Worker/WorkerTasks/WorkerTasks.tsx","webpack://core-admin_panel/./src/modules/Worker/WorkerDetails.tsx","webpack://core-admin_panel/./src/modules/Worker/CompanyWorker.tsx","webpack://core-admin_panel/./src/modules/Worker/ProjectWorker.tsx","webpack://core-admin_panel/./src/modules/Worker/hooks/useProjectWorker.tsx","webpack://core-admin_panel/./src/modules/Worker/Worker.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlSwitch/CtrlSwitch.module.scss?83a4","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlSwitch/CtrlSwitch.tsx","webpack://core-admin_panel/./src/modules/Worker/Profile/components/ReAuthUserPopup/ReAuthUserPopup.tsx","webpack://core-admin_panel/./src/modules/Worker/Profile/components/TwoFactor/TwoFactorAuthSettings.module.scss?2107","webpack://core-admin_panel/./src/modules/Worker/Profile/components/TwoFactor/TwoFactorAuthSettings.tsx","webpack://core-admin_panel/./src/modules/Worker/Profile/validationSchema.ts","webpack://core-admin_panel/./src/modules/Worker/Profile/Profile.tsx","webpack://core-admin_panel/./src/shared/components/Table/components/Columns/Centered.tsx","webpack://core-admin_panel/./src/modules/Workers/Columns/TextArrayColumn.tsx","webpack://core-admin_panel/./src/modules/Workers/Columns/Name/NameColumn.module.scss?c395","webpack://core-admin_panel/./src/modules/Workers/Columns/Name/NameColumn.tsx","webpack://core-admin_panel/./src/modules/Workers/Columns/Orgs/OrgsColumn.module.scss?3db1","webpack://core-admin_panel/./src/modules/Workers/Columns/Orgs/OrgsColumn.tsx","webpack://core-admin_panel/./src/modules/Workers/Columns/Status/StatusColumn.module.scss?9f55","webpack://core-admin_panel/./src/modules/Workers/Columns/Status/StatusColumn.tsx","webpack://core-admin_panel/./src/modules/Workers/utils/constants.ts","webpack://core-admin_panel/./src/modules/Workers/FilterDropdown/FilterDropdown.tsx","webpack://core-admin_panel/./src/modules/Workers/Workers.module.scss","webpack://core-admin_panel/./src/modules/Workers/Workers.tsx","webpack://core-admin_panel/./src/shared/components/ProfileLoader/ProfileLoader.tsx","webpack://core-admin_panel/./src/shared/hooks/useHandleMentionRedirects.ts","webpack://core-admin_panel/./src/shared/components/ProtectedRoute/index.tsx","webpack://core-admin_panel/./src/shared/components/UnauthenticatedRoute/index.tsx","webpack://core-admin_panel/./src/shared/hooks/core/useMounted.ts","webpack://core-admin_panel/./src/MainRoutes.tsx","webpack://core-admin_panel/./src/shared/hooks/useCompanyDataLoader.ts","webpack://core-admin_panel/./src/shared/hooks/useSentryUserInfo.ts","webpack://core-admin_panel/./src/shared/helpers/mobx.ts","webpack://core-admin_panel/./src/shared/helpers/sentry.ts","webpack://core-admin_panel/./src/App.tsx","webpack://core-admin_panel/./src/react-i18next.config.js","webpack://core-admin_panel/./src/index.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Filters/FilterProvider.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Filters/utils/constants.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/hooks/useGanttLayoutSettings.tsx","webpack://core-admin_panel/./src/modules/Tasks/components/Gantt/utils/eventStore.tsx","webpack://core-admin_panel/./src/modules/Tasks/hooks/useViewMode.tsx","webpack://core-admin_panel/./src/shared/components/AuthUserProvider/AuthUserProvider.tsx","webpack://core-admin_panel/./src/shared/components/Button/index.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/Confirmation.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/ConfirmationCleanLayout.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/ConfirmationPopup.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/NewConfirmation.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/components/ActionButton.module.scss?96bb","webpack://core-admin_panel/./src/shared/components/Confirmation/components/ActionButton.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/components/Description.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/useConfirm/useConfirm.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/useConfirm/ConfirmationContext.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/useConfirm/ConfirmationWrapper.tsx","webpack://core-admin_panel/./src/shared/components/Confirmation/useConfirm/state.ts","webpack://core-admin_panel/./src/shared/components/Confirmation/useConfirm/ConformationProvider.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/DropdownIndicator/DropdownIndicator.tsx","webpack://core-admin_panel/./src/shared/components/CoreForm/Select/Select.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlButton/CtrlButton.module.scss?eee4","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlButton/CtrlButton.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheck/CtrlCheck.module.scss?8a9b","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheck/CtrlCheck.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheckGroup/CtrlCheckGroup.module.scss?b4ce","webpack://core-admin_panel/./src/shared/components/CoreNewUI/CtrlCheckGroup/CtrlCheckGroup.tsx","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControl/FormControl.module.scss?7770","webpack://core-admin_panel/./src/shared/components/CoreNewUI/FormControl/FormControl.tsx","webpack://core-admin_panel/./src/shared/components/Icon/index.tsx","webpack://core-admin_panel/./src/shared/components/Loader/index.tsx","webpack://core-admin_panel/./src/shared/components/Popup/PopupContent.tsx","webpack://core-admin_panel/./src/shared/components/Popup/Popup.tsx","webpack://core-admin_panel/./src/shared/components/ProgressReport/hooks/useInitializeMatrixSession.tsx","webpack://core-admin_panel/./src/shared/components/Spacer/VSpacer.tsx","webpack://core-admin_panel/./src/shared/constants/routes.tsx","webpack://core-admin_panel/./src/shared/hooks/useCompanyWorkerRoles.tsx","webpack://core-admin_panel/./src/shared/hooks/useLocalStorage.tsx","webpack://core-admin_panel/./src/store/ducks/auth/reducers.tsx","webpack://core-admin_panel/./src/store/workers/actions.ts","webpack://core-admin_panel/./src/store/workers/index.ts","webpack://core-admin_panel/./src/store/index.tsx","webpack://core-admin_panel/./src/store/ducks/index.tsx"],"sourcesContent":["// extracted by css-extract-rspack-plugin\nexport default {\"confirmation\":\"confirmation-ee6BRq\",\"confirmation__item\":\"confirmation__item-tWpWcI\",\"confirmationItem\":\"confirmation__item-tWpWcI\",\"confirmation__header\":\"confirmation__header-YqJXdM\",\"confirmationHeader\":\"confirmation__header-YqJXdM\",\"confirmation__title\":\"confirmation__title-qgJ21P\",\"confirmationTitle\":\"confirmation__title-qgJ21P\",\"confirmation__footer\":\"confirmation__footer-Vgxl4m\",\"confirmationFooter\":\"confirmation__footer-Vgxl4m\",\"confirmation__footer--actions\":\"confirmation__footer--actions-V8G1Oe\",\"confirmationFooterActions\":\"confirmation__footer--actions-V8G1Oe\",\"confirmation__button\":\"confirmation__button-levnUT\",\"confirmationButton\":\"confirmation__button-levnUT\",\"confirmation__button--cancel\":\"confirmation__button--cancel-d3dvMk\",\"confirmationButtonCancel\":\"confirmation__button--cancel-d3dvMk\",\"confirmation__button-close\":\"confirmation__button-close-jLRfg4\",\"confirmationButtonClose\":\"confirmation__button-close-jLRfg4\"};","// extracted by css-extract-rspack-plugin\nexport default {\"h-spacer-1\":\"h-spacer-1-GOhK_c\",\"hSpacer1\":\"h-spacer-1-GOhK_c\",\"v-spacer-1\":\"v-spacer-1-VcszS4\",\"vSpacer1\":\"v-spacer-1-VcszS4\",\"h-spacer-2\":\"h-spacer-2-VgbaF9\",\"hSpacer2\":\"h-spacer-2-VgbaF9\",\"v-spacer-2\":\"v-spacer-2-w33pCB\",\"vSpacer2\":\"v-spacer-2-w33pCB\",\"h-spacer-3\":\"h-spacer-3-pzA7zf\",\"hSpacer3\":\"h-spacer-3-pzA7zf\",\"v-spacer-3\":\"v-spacer-3-rCNKSR\",\"vSpacer3\":\"v-spacer-3-rCNKSR\",\"h-spacer-4\":\"h-spacer-4-QufGnu\",\"hSpacer4\":\"h-spacer-4-QufGnu\",\"v-spacer-4\":\"v-spacer-4-jgD94C\",\"vSpacer4\":\"v-spacer-4-jgD94C\",\"h-spacer-5\":\"h-spacer-5-lEeG0k\",\"hSpacer5\":\"h-spacer-5-lEeG0k\",\"v-spacer-5\":\"v-spacer-5-KhgHVB\",\"vSpacer5\":\"v-spacer-5-KhgHVB\",\"h-spacer-6\":\"h-spacer-6-jQquTs\",\"hSpacer6\":\"h-spacer-6-jQquTs\",\"v-spacer-6\":\"v-spacer-6-zzEbBr\",\"vSpacer6\":\"v-spacer-6-zzEbBr\",\"h-spacer-7\":\"h-spacer-7-qUQBpT\",\"hSpacer7\":\"h-spacer-7-qUQBpT\",\"v-spacer-7\":\"v-spacer-7-l2B1JB\",\"vSpacer7\":\"v-spacer-7-l2B1JB\",\"h-spacer-8\":\"h-spacer-8-KmXtOX\",\"hSpacer8\":\"h-spacer-8-KmXtOX\",\"v-spacer-8\":\"v-spacer-8-NvhNbb\",\"vSpacer8\":\"v-spacer-8-NvhNbb\",\"h-spacer-9\":\"h-spacer-9-fZ0dN_\",\"hSpacer9\":\"h-spacer-9-fZ0dN_\",\"v-spacer-9\":\"v-spacer-9-YAU3kn\",\"vSpacer9\":\"v-spacer-9-YAU3kn\",\"h-spacer-10\":\"h-spacer-10-kP1XDX\",\"hSpacer10\":\"h-spacer-10-kP1XDX\",\"v-spacer-10\":\"v-spacer-10-yHLFt9\",\"vSpacer10\":\"v-spacer-10-yHLFt9\",\"h-spacer-11\":\"h-spacer-11-xYA0_V\",\"hSpacer11\":\"h-spacer-11-xYA0_V\",\"v-spacer-11\":\"v-spacer-11-lhh6R4\",\"vSpacer11\":\"v-spacer-11-lhh6R4\",\"h-spacer-12\":\"h-spacer-12-eWrrXM\",\"hSpacer12\":\"h-spacer-12-eWrrXM\",\"v-spacer-12\":\"v-spacer-12-tPfJp7\",\"vSpacer12\":\"v-spacer-12-tPfJp7\",\"h-spacer-13\":\"h-spacer-13-jEcYox\",\"hSpacer13\":\"h-spacer-13-jEcYox\",\"v-spacer-13\":\"v-spacer-13-Krew6M\",\"vSpacer13\":\"v-spacer-13-Krew6M\",\"h-spacer-14\":\"h-spacer-14-blObR7\",\"hSpacer14\":\"h-spacer-14-blObR7\",\"v-spacer-14\":\"v-spacer-14-n01TMi\",\"vSpacer14\":\"v-spacer-14-n01TMi\"};","// extracted by css-extract-rspack-plugin\nexport default {\"progressbar__container\":\"progressbar__container-qjs77C\",\"progressbarContainer\":\"progressbar__container-qjs77C\",\"custom-column-heading\":\"custom-column-heading-VpKGyr\",\"customColumnHeading\":\"custom-column-heading-VpKGyr\",\"custom-column-heading--cta\":\"custom-column-heading--cta-L41neN\",\"customColumnHeadingCta\":\"custom-column-heading--cta-L41neN\",\"custom-column-heading--cta-icon\":\"custom-column-heading--cta-icon-rJFf5L\",\"customColumnHeadingCtaIcon\":\"custom-column-heading--cta-icon-rJFf5L\",\"custom-column-heading--cta-icon--disabled\":\"custom-column-heading--cta-icon--disabled-Q32eVn\",\"customColumnHeadingCtaIconDisabled\":\"custom-column-heading--cta-icon--disabled-Q32eVn\",\"custom-column-item\":\"custom-column-item-hPHLcd\",\"customColumnItem\":\"custom-column-item-hPHLcd\",\"custom-column-label\":\"custom-column-label-Rd3zMi\",\"customColumnLabel\":\"custom-column-label-Rd3zMi\",\"custom-column-input\":\"custom-column-input-L5iQa9\",\"customColumnInput\":\"custom-column-input-L5iQa9\",\"custom-column-select-wrapper\":\"custom-column-select-wrapper-sN7OvY\",\"customColumnSelectWrapper\":\"custom-column-select-wrapper-sN7OvY\",\"custom-column-delete\":\"custom-column-delete-nlr8hi\",\"customColumnDelete\":\"custom-column-delete-nlr8hi\",\"custom-column-delete--is-submitting\":\"custom-column-delete--is-submitting-boGwXZ\",\"customColumnDeleteIsSubmitting\":\"custom-column-delete--is-submitting-boGwXZ\",\"tableHeader\":\"tableHeader-a9MRou\",\"tableBody\":\"tableBody-U3rWqr\",\"table__cell--default\":\"table__cell--default-sy49E8\",\"tableCellDefault\":\"table__cell--default-sy49E8\",\"footer\":\"footer-FiIgFA\",\"tableScrollContainer\":\"tableScrollContainer-wJIOEz\",\"aka-table__th-content--start\":\"aka-table__th-content--start-KhTTCF\",\"akaTableThContentStart\":\"aka-table__th-content--start-KhTTCF\"};","export enum ConstraintTypes {\n\t// As Soon As Possible (ASAP)\n\tASAP = \"asap\",\n\t// As Late As Possible (ALAP)\n\tALAP = \"alap\",\n\t// Start No Earlier Than (SNET)\n\tSNET = \"snet\",\n\t// Start No Later Than (SNLT)\n\tSNLT = \"snlt\",\n\t// Finish No Earlier Than (FNET)\n\tFNET = \"fnet\",\n\t// Finish No Later Than (FNLT)\n\tFNLT = \"fnlt\",\n\t// Must Start On (MSO)\n\tMSO = \"mso\",\n\t// Must Finish On (MFO)\n\tMFO = \"mfo\"\n}","export default function(gantt) {\n\tgantt.config.auto_scheduling_use_progress = false;\n\tgantt.config.auto_scheduling_project_constraint = false;\n\n};\n\n","export default function (gantt) {\n\t// helpers for building chain of dependencies, used for critical path calculation and for auto scheduling\n\n\tgantt._get_linked_task = function (link, getTarget) {\n\t\tvar task = null;\n\t\tvar taskId = getTarget ? link.target : link.source;\n\n\t\tif (gantt.isTaskExists(taskId)) {\n\t\t\ttask = gantt.getTask(taskId);\n\t\t}\n\n\t\treturn task;\n\t};\n\tgantt._get_link_target = function (link) {\n\t\treturn gantt._get_linked_task(link, true);\n\t};\n\n\tgantt._get_link_source = function (link) {\n\t\treturn gantt._get_linked_task(link, false);\n\t};\n\n\tvar caching = false;\n\tvar formattedLinksStash = {};\n\tvar inheritedSuccessorsStash = {};\n\tvar inheritedPredecessorsStash = {};\n\tvar getPredecessorsCache = {};\n\n\n\tgantt._isLinksCacheEnabled = function () {\n\t\treturn caching;\n\t};\n\tgantt._startLinksCache = function () {\n\t\tformattedLinksStash = {};\n\t\tinheritedSuccessorsStash = {};\n\t\tinheritedPredecessorsStash = {};\n\t\tgetPredecessorsCache = {};\n\t\tcaching = true;\n\t};\n\tgantt._endLinksCache = function () {\n\t\tformattedLinksStash = {};\n\t\tinheritedSuccessorsStash = {};\n\t\tinheritedPredecessorsStash = {};\n\t\tgetPredecessorsCache = {};\n\t\tcaching = false;\n\t};\n\n\tfunction isManuallyScheduledSummary(task){\n\t\treturn gantt.isSummaryTask(task) && task.auto_scheduling === false;\n\t}\n\n\tgantt._formatLink = function (link, sourceDates, targetDates) {\n\n\n\t\tif (caching && formattedLinksStash[link.id]) {\n\t\t\treturn formattedLinksStash[link.id];\n\t\t}\n\n\t\tvar relations = [];\n\t\tvar target = this._get_link_target(link);\n\t\tvar source = this._get_link_source(link);\n\n\t\tif (!(source && target)) {\n\t\t\treturn relations;\n\t\t}\n\n\t\tif ((gantt.isSummaryTask(target) && gantt.isChildOf(source.id, target.id)) || (gantt.isSummaryTask(source) && gantt.isChildOf(target.id, source.id))) {\n\t\t\treturn relations;\n\t\t}\n\n\t\tvar backwardsScheduling = gantt.config.schedule_from_end && gantt.config.project_end;\n\t\tvar respectTargetOffset = gantt.config.auto_scheduling_move_projects;\n\t\tif(!gantt.config.auto_scheduling_compatibility && gantt.config.auto_scheduling_strict){\n\t\t\trespectTargetOffset = false;\n\t\t}\n\n\n\n\t\t// there are three kinds of connections at this point\n\t\t// task -> task - regular link\n\t\t// task -> project - transform it into set of regular links (task -> [each subtask]), use offset beetween subtask and project dates as lag, in order not to change mutual positions of subtasks inside a project\n\t\t// project -> task - transform it into ([each subtask] -> task) links\n\t\t// project -> project - transform it into ([each subtask of p1] -> [each subtask of p2]) links\n\t\tsourceDates = sourceDates || (this.isSummaryTask(source) && !isManuallyScheduledSummary(source)) ? this.getSubtaskDates(source.id) : {\n\t\t\tstart_date: source.start_date,\n\t\t\tend_date: source.end_date\n\t\t};\n\n\t\tvar from = this._getImplicitLinks(link, source, function (c) {\n\t\t\tif(!respectTargetOffset || !backwardsScheduling){\n\t\t\t\treturn 0;\t\n\t\t\t}else{\n\t\t\t\tif (!c.$source.length && !(gantt.getState(\"tasksDnd\").drag_id == c.id)) {\n\t\t\t\t\t// drag_id - virtual lag shouldn't restrict task that is being moved inside project\n\t\t\t\t\treturn gantt.calculateDuration({\n\t\t\t\t\t\tstart_date: c.end_date,\n\t\t\t\t\t\tend_date: sourceDates.end_date,\n\t\t\t\t\t\ttask: source\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, true);\n\n\t\tif (!targetDates){\n\t\t\ttargetDates = {\n\t\t\t\tstart_date: target.start_date,\n\t\t\t\tend_date: target.end_date\n\t\t\t};\n\t\t\tif (this.isSummaryTask(target) && !isManuallyScheduledSummary(target)){\n\t\t\t\ttargetDates = this.getSubtaskDates(target.id);\n\t\t\t\ttargetDates.start_date = targetDates.end_date;\n\t\t\t\t// GS-2427. When a successor starts earlier its predecessor, we should\n\t\t\t\t// obtain the dates of the predecessor\n\t\t\t\tthis.eachTask(function(child){\n\t\t\t\t\t// exclude projects as their dates are unreliable until the scheduling is done\n\t\t\t\t\tif (child.type === this.config.types.project){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!child.$target.length && child.start_date < targetDates.start_date){\n\t\t\t\t\t\ttargetDates.start_date = child.start_date;\n\t\t\t\t\t}\n\t\t\t\t},target.id);\n\t\t\t}\n\t\t}\n\n\t\tvar to = this._getImplicitLinks(link, target, function (actualTarget) {\n\t\t\tif (!respectTargetOffset || backwardsScheduling) {\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\tif (!actualTarget.$target.length && !(gantt.getState(\"tasksDnd\").drag_id == actualTarget.id)) {// drag_id - virtual lag shouldn't restrict task that is being moved inside project\n\t\t\t\t\treturn gantt.calculateDuration({\n\t\t\t\t\t\tstart_date: targetDates.start_date,\n\t\t\t\t\t\tend_date: actualTarget.start_date,\n\t\t\t\t\t\ttask: target\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfor (var i = 0, fromLength = from.length; i < fromLength; i++) {\n\t\t\tvar fromTask = from[i];\n\t\t\tfor (var j = 0, toLength = to.length; j < toLength; j++) {\n\t\t\t\tvar toTask = to[j];\n\n\t\t\t\tvar lag = fromTask.lag * 1 + toTask.lag * 1;\n\n\t\t\t\tvar subtaskLink = {\n\t\t\t\t\tid: link.id,\n\t\t\t\t\ttype: link.type,\n\t\t\t\t\tsource: fromTask.task,\n\t\t\t\t\ttarget: toTask.task,\n\t\t\t\t\tsubtaskLink: fromTask.subtaskLink,\n\t\t\t\t\tlag: (link.lag * 1 || 0) + lag\n\t\t\t\t};\n\n\t\t\t\tgantt._linkedTasks[subtaskLink.target] = gantt._linkedTasks[subtaskLink.target] || {};\n\t\t\t\tgantt._linkedTasks[subtaskLink.target][subtaskLink.source] = true;\n\n\t\t\t\trelations.push(gantt._convertToFinishToStartLink(toTask.task, subtaskLink, source, target, fromTask.taskParent, toTask.taskParent));\n\t\t\t}\n\t\t}\n\n\t\tif (caching)\n\t\t\tformattedLinksStash[link.id] = relations;\n\n\t\treturn relations;\n\t};\n\n\tgantt._isAutoSchedulable = function (task) {\n\t\tconst scheduleTask = task.auto_scheduling !== false && task.unscheduled !== true;\n\t\tif (!scheduleTask){\n\t\t\treturn false;\n\t\t}\n\t\t// GS-2420. Don't auto-schedule project when it has only unscheduled children\n\t\tif (this.isSummaryTask(task)){\n\t\t\tlet unscheduledChildren = true;\n\t\t\tthis.eachTask(function(child){\n\t\t\t\tif (unscheduledChildren){\n\t\t\t\t\tconst scheduleChild = gantt._isAutoSchedulable(child);\n\t\t\t\t\tif (scheduleChild){\n\t\t\t\t\t\tunscheduledChildren = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, task.id);\n\t\t\tif (unscheduledChildren){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\n\tgantt._getImplicitLinks = function (link, parent, selectOffset, selectSourceLinks) {\n\t\tvar relations = [];\n\n\t\tif (this.isSummaryTask(parent) && !isManuallyScheduledSummary(parent)) {\n\n\t\t\t// if the summary task contains multiple chains of linked tasks - no need to consider every task of the chain,\n\t\t\t// it will be enough to check the first/last tasks of the chain\n\t\t\t// special conditions if there are unscheduled tasks in the chain, or negative lag values that put the end date of the successor task prior to its predecessors' date\n\t\t\tvar children = {};\n\t\t\tthis.eachTask(function (c) {\n\t\t\t\tif (!this.isSummaryTask(c) || isManuallyScheduledSummary(c)) {\n\t\t\t\t\tchildren[c.id] = c;\n\t\t\t\t}\n\t\t\t}, parent.id);\n\n\t\t\tvar skipChild;\n\n\t\t\tfor (var c in children) {\n\t\t\t\tvar task = children[c];\n\t\t\t\t// don't create subtask links with unscheduled tasks\n\t\t\t\tif (!gantt._isAutoSchedulable(task)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar linksCollection = selectSourceLinks ? task.$source : task.$target;\n\n\t\t\t\tskipChild = false;\n\n\t\t\t\tfor (var l = 0; l < linksCollection.length; l++) {\n\t\t\t\t\t// GS-2014 and GS-2588. If the link type is SS or SF, we shouldn't change the skipChild variable\n\t\t\t\t\t// because the target task should be moved to an earlier date\n\t\t\t\t\tif (link.type == gantt.config.links.start_to_start || link.type == gantt.config.links.start_to_finish){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvar siblingLink = gantt.getLink(linksCollection[l]);\n\t\t\t\t\tvar siblingId = selectSourceLinks ? siblingLink.target : siblingLink.source;\n\t\t\t\t\tvar siblingTask = children[siblingId];\n\t\t\t\t\tif (siblingTask && gantt._isAutoSchedulable(task) && gantt._isAutoSchedulable(siblingTask)) {\n\t\t\t\t\t\tlet linkLag = 0;\n\t\t\t\t\t\tif (siblingLink.lag){\n\t\t\t\t\t\t\tlinkLag = Math.abs(siblingLink.lag);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// GS-2014 and GS-2588. If the link type is not FS, the actual lag will be different\n\t\t\t\t\t\tif (siblingLink.type != gantt.config.links.finish_to_start){\n\t\t\t\t\t\t\tlinkLag += gantt._convertToFinishToStartLink(null, {}, task, siblingTask).additionalLag;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst sameTarget = siblingLink.target == siblingTask.id;\n\t\t\t\t\t\tconst insignificantTargetLag = sameTarget && linkLag && linkLag <= siblingTask.duration;\n\n\t\t\t\t\t\tconst sameSource = siblingLink.target == task.id;\n\t\t\t\t\t\tconst insignificantSourceLag = sameSource && linkLag && linkLag <= task.duration;\n\n\t\t\t\t\t\tif (insignificantTargetLag || insignificantSourceLag) {\n\t\t\t\t\t\t\tskipChild = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipChild) {\n\t\t\t\t\t// GS-1689. If a task has links between other tasks within the project,\n\t\t\t\t\t// Gantt shouldn't try to keep the position within the project\n\t\t\t\t\tlet calculateLag = true;\n\t\t\t\t\tfor (const predecessorId in gantt._linkedTasks[task.id]){\n\t\t\t\t\t\tif (gantt.isChildOf(predecessorId, link.target)){\n\t\t\t\t\t\t\tcalculateLag = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet offsetLag = 0;\n\t\t\t\t\tif (calculateLag) {\n\t\t\t\t\t\toffsetLag = selectOffset(task);\n\t\t\t\t\t}\n\t\t\t\t\trelations.push({ task: task.id, taskParent: task.parent, lag: offsetLag, subtaskLink: true });\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\trelations.push({ task: parent.id, taskParent: parent.parent, lag: 0 });\n\t\t}\n\n\t\treturn relations;\n\t};\n\n\tgantt._getDirectDependencies = function (task, selectSuccessors) {\n\t\tgantt._linkedTasks = gantt._linkedTasks || {};\n\n\t\tvar links = [],\n\t\t\tsuccessors = [];\n\n\t\tvar linksIds = selectSuccessors ? task.$source : task.$target;\n\n\t\tfor (var i = 0; i < linksIds.length; i++) {\n\t\t\tvar link = this.getLink(linksIds[i]);\n\t\t\tif (this.isTaskExists(link.source) && this.isTaskExists(link.target)) {\n\t\t\t\tvar target = this.getTask(link.target);\n\t\t\t\tif (!this._isAutoSchedulable(target) || !this._isAutoSchedulable(task)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if(gantt.config.auto_scheduling_use_progress) {\n\t\t\t\t\tif(target.progress == 1){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlinks.push(link);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tlinks.push(link);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tsuccessors = successors.concat(this._formatLink(links[i]));\n\t\t}\n\n\t\treturn successors;\n\t};\n\n\tgantt._getInheritedDependencies = function (task, selectSuccessors) {\n\n\t\t//var successors = [];\n\t\tvar stop = false;\n\t\tvar inheritedRelations = [];\n\t\tvar cacheCollection;\n\t\tif (this.isTaskExists(task.id)) {\n\t\t\tthis.eachParent(function (parent) {\n\t\t\t\tif (stop)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (caching) {\n\t\t\t\t\tcacheCollection = selectSuccessors ? inheritedSuccessorsStash : inheritedPredecessorsStash;\n\t\t\t\t\tif (cacheCollection[parent.id]) {\n\t\t\t\t\t\tinheritedRelations = inheritedRelations.concat(cacheCollection[parent.id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar parentDependencies;\n\t\t\t\tif (this.isSummaryTask(parent)) {\n\t\t\t\t\tif (!this._isAutoSchedulable(parent)) {\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentDependencies = this._getDirectDependencies(parent, selectSuccessors);\n\t\t\t\t\t\tif (caching) {\n\t\t\t\t\t\t\tcacheCollection[parent.id] = parentDependencies;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinheritedRelations = inheritedRelations.concat(parentDependencies);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, task.id, this);\n\t\t}\n\n\t\treturn inheritedRelations;\n\t};\n\n\n\tgantt._getDirectSuccessors = function (task) {\n\t\treturn this._getDirectDependencies(task, true);\n\t};\n\n\tgantt._getInheritedSuccessors = function (task) {\n\t\treturn this._getInheritedDependencies(task, true);\n\t};\n\n\tgantt._getDirectPredecessors = function (task) {\n\t\treturn this._getDirectDependencies(task, false);\n\t};\n\n\tgantt._getInheritedPredecessors = function (task) {\n\t\treturn this._getInheritedDependencies(task, false);\n\t};\n\n\tgantt._getSuccessors = function (task, skipInherited) {\n\t\tvar successors = this._getDirectSuccessors(task);\n\t\tif (skipInherited) {\n\t\t\treturn successors;\n\t\t} else {\n\t\t\treturn successors.concat(this._getInheritedSuccessors(task));\n\t\t}\n\t};\n\n\tgantt._getPredecessors = function (task, skipInherited) {\n\t\tvar key = String(task.id) + \"-\" + String(skipInherited);\n\t\tvar result;\n\n\t\tif (caching && getPredecessorsCache[key]) {\n\t\t\treturn getPredecessorsCache[key];\n\t\t}\n\n\t\tvar predecessors = this._getDirectPredecessors(task);\n\t\tif (skipInherited) {\n\t\t\tresult = predecessors;\n\t\t} else {\n\t\t\tresult = predecessors.concat(this._getInheritedPredecessors(task));\n\t\t}\n\t\tif (caching) {\n\t\t\tgetPredecessorsCache[key] = result;\n\t\t}\n\t\treturn result;\n\t};\n\n\n\tgantt._convertToFinishToStartLink = function (id, link, sourceTask, targetTask, sourceParent, targetParent) {\n\t\t// convert finish-to-finish, start-to-finish and start-to-start to finish-to-start link and provide some additional properties\n\t\tvar res = {\n\t\t\ttarget: id,\n\t\t\tlink: gantt.config.links.finish_to_start,\n\t\t\tid: link.id,\n\t\t\tlag: link.lag || 0,\n\t\t\tsourceLag: 0,\n\t\t\ttargetLag: 0,\n\t\t\ttrueLag: link.lag || 0,\n\t\t\tsource: link.source,\n\t\t\tpreferredStart: null,\n\t\t\tsourceParent: sourceParent,\n\t\t\ttargetParent: targetParent,\n\t\t\thashSum: null,\n\t\t\tsubtaskLink: link.subtaskLink\n\t\t};\n\t\t// GS-148: switch uses strict comparison, so we need to convert the values to the same type\n\t\tvar additionalLag = 0;\n\t\tswitch (String(link.type)) {\n\t\t\tcase String(gantt.config.links.start_to_start):\n\t\t\t\tadditionalLag = -sourceTask.duration;\n\t\t\t\tres.sourceLag = additionalLag;\n\t\t\t\tbreak;\n\t\t\tcase String(gantt.config.links.finish_to_finish):\n\t\t\t\tadditionalLag = -targetTask.duration;\n\t\t\t\tres.targetLag = additionalLag;\n\t\t\t\tbreak;\n\t\t\tcase String(gantt.config.links.start_to_finish):\n\t\t\t\tadditionalLag = -sourceTask.duration - targetTask.duration;\n\t\t\t\tres.sourceLag = -sourceTask.duration;\n\t\t\t\tres.targetLag = -targetTask.duration;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tadditionalLag = 0;\n\t\t}\n\n\t\tres.lag += additionalLag;\n\t\tres.hashSum = res.lag + \"_\" + res.link + \"_\" + res.source + \"_\" + res.target;\n\t\treturn res;\n\t};\n};","var units = {\n\t\"second\": 1,\n\t\"minute\": 60,\n\t\"hour\": 60 * 60,\n\t\"day\": 60 * 60 * 24,\n\t\"week\": 60 * 60 * 24 * 7,\n\t\"month\": 60 * 60 * 24 * 30,\n\t\"quarter\": 60 * 60 * 24 * 30 * 3,\n\t\"year\": 60 * 60 * 24 * 365\n};\nfunction getSecondsInUnit(unit){\n\treturn units[unit] || units.hour;\n}\n\nfunction forEach(arr, callback) {\n\tif (arr.forEach) {\n\t\tarr.forEach(callback);\n\t} else {\n\t\tvar workArray = arr.slice();\n\t\tfor (var i = 0; i < workArray.length; i++) {\n\t\t\tcallback(workArray[i], i);\n\t\t}\n\t}\n}\n\nfunction arrayMap(arr, callback) {\n\tif (arr.map) {\n\t\treturn arr.map(callback);\n\t} else {\n\t\tvar workArray = arr.slice();\n\t\tvar resArray = [];\n\n\t\tfor (var i = 0; i < workArray.length; i++) {\n\t\t\tresArray.push(callback(workArray[i], i));\n\t\t}\n\t\treturn resArray;\n\t}\n}\n\n\nfunction arrayFind(arr, callback) {\n\tif (arr.find) {\n\t\treturn arr.find(callback);\n\t} else {\n\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\tif (callback(arr[i], i)) {\n\t\t\t\treturn arr[i];\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction arrayIncludes(arr, item) {\n\tif(arr.includes){\n\t\treturn arr.includes(item);\n\t}else{\n\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\tif (arr[i] === item) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n\n// iframe-safe array type check instead of using instanceof\nfunction isArray(obj){\n\tif(Array.isArray){\n\t\treturn Array.isArray(obj);\n\t}else{\n\t\t// close enough\n\t\treturn (obj && obj.length !== undefined && obj.pop && obj.push);\n\t}\n}\n\n// non-primitive string object, e.g. new String(\"abc\")\nfunction isStringObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function String() { [native code] }\";\n}\n\n// non-primitive number object, e.g. new Number(5)\nfunction isNumberObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Number() { [native code] }\";\n}\n\n// non-primitive number object, e.g. new Boolean(true)\nfunction isBooleanObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Boolean() { [native code] }\";\n}\n\nfunction isDate(obj) {\n\tif (obj && typeof obj === \"object\") {\n\t\treturn !!(obj.getFullYear && obj.getMonth && obj.getDate);\n\t} else {\n\t\treturn false;\n\t}\n}\n\nfunction isValidDate(obj){\n\treturn isDate(obj) && !isNaN(obj.getTime());\n}\n\nfunction arrayFilter(arr, callback) {\n\tvar result = [];\n\n\tif (arr.filter) {\n\t\treturn arr.filter(callback);\n\t} else {\n\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\tif (callback(arr[i], i)) {\n\t\t\t\tresult[result.length] = arr[i];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\nfunction hashToArray(hash) {\n\tvar result = [];\n\n\tfor (var key in hash) {\n\t\tif (hash.hasOwnProperty(key)) {\n\t\t\tresult.push(hash[key]);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction arraySome(arr, callback) {\n\tif (arr.length === 0) return false;\n\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (callback(arr[i], i, arr)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction arrayDifference(arr, callback) {\n\treturn arrayFilter(arr, function(item, i) {\n\t\treturn !callback(item, i);\n\t});\n}\n\nfunction throttle (callback, timeout) {\n\tvar wait = false;\n\n\treturn function () {\n\t\tif (!wait) {\n\t\t\tcallback.apply(null, arguments);\n\t\t\twait = true;\n\t\t\tsetTimeout(function () {\n\t\t\t\twait = false;\n\t\t\t}, timeout);\n\t\t}\n\t};\n}\n\nfunction delay (callback, timeout){\n\tvar timer;\n\n\tvar result = function() {\n\t\tresult.$cancelTimeout();\n\t\tresult.$pending = true;\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\ttimer = setTimeout(function(){\n\t\t\tcallback.apply(this, args);\n\t\t\tresult.$pending = false;\n\t\t}, timeout);\n\t};\n\n\tresult.$pending = false;\n\tresult.$cancelTimeout = function(){\n\t\tclearTimeout(timer);\n\t\tresult.$pending = false;\n\t};\n\tresult.$execute = function(){\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\tcallback.apply(this, args);\n\t\tresult.$cancelTimeout();\n\t};\n\n\treturn result;\n}\n\nfunction sortArrayOfHash(arr, field, desc) {\n\tvar compare = function(a, b) {\n\t\treturn a < b;\n\t};\n\n\tarr.sort(function(a, b) {\n\t\tif (a[field] === b[field]) return 0;\n\n\t\treturn desc ? compare(a[field], b[field]) : compare(b[field], a[field]);\n\t});\n}\n\nfunction objectKeys(obj) {\n\tif (Object.keys) {\n\t\treturn Object.keys(obj);\n\t}\n\tvar result = [];\n\tvar key;\n\tfor (key in obj) {\n\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t\t\tresult.push(key);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction isEventable(obj) {\n\treturn obj.attachEvent && obj.detachEvent;\n}\n\n//GS-1090: A task should be able to have the id = 0\nfunction replaceValidZeroId(id, rootId) {\n\tif (checkZeroId(id) && !checkZeroId(rootId)){\n\t\tid = \"0\";\n\t}\n\treturn id;\n}\n\nfunction checkZeroId(id) {\n\tif (id === 0){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction findBinary(array, target) {\n\t// modified binary search, target value not exactly match array elements, looking for closest one\n\n\tvar low = 0, high = array.length - 1, i, item, prev;\n\twhile (low <= high) {\n\n\t\ti = Math.floor((low + high) / 2);\n\t\titem = +array[i];\n\t\tprev = +array[i - 1];\n\t\tif (item < target) {\n\t\t\tlow = i + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (item > target) {\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\n\t\t\t\thigh = i - 1;\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\n\t\t\t\treturn i - 1;\n\t\t\t}\n\n\t\t}\n\t\twhile (+array[i] == +array[i + 1]) i++;\n\n\t\treturn i;\n\t}\n\treturn array.length - 1;\n}\n\nexport {\n\tgetSecondsInUnit,\n\tforEach,\n\tarrayMap,\n\tarrayIncludes,\n\tarrayFind,\n\tarrayFilter,\n\tarrayDifference,\n\tarraySome,\n\thashToArray,\n\tsortArrayOfHash,\n\tthrottle,\n\tisArray,\n\tisDate,\n\tisValidDate,\n\tisStringObject,\n\tisNumberObject,\n\tisBooleanObject,\n\tdelay,\n\tobjectKeys,\n\tisEventable,\n\treplaceValidZeroId,\n\tcheckZeroId,\n\tfindBinary\n};","export default function() {\n\tfunction getResourcesCalendarKey(resourceAssignments){\n\t\treturn resourceAssignments.map(function(res){\n\t\t\tif(res && res.resource_id){\n\t\t\t\treturn res.resource_id;\n\t\t\t} else {\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}).sort().join(\"-\");\n\t}\n\n\tvar dynamicCalendars = {};\n\n\tfunction mergeResourceCalendars(resourceAssignments, manager){\n\t\treturn manager.mergeCalendars(resourceAssignments.map(function(assignment){\n\t\t\tvar resourceId = (assignment && assignment.resource_id) ? assignment.resource_id : assignment;\n\t\t\treturn manager.getResourceCalendar(resourceId);\n\t\t}));\n\t}\n\tfunction getCalendarIdFromMultipleResources(resourceAssignments, manager){\n\t\tvar key = getResourcesCalendarKey(resourceAssignments);\n\t\tif(!resourceAssignments.length){\n\t\t\treturn null;\n\t\t}else if(resourceAssignments.length === 1){\n\t\t\treturn manager.getResourceCalendar(key).id;\n\t\t}else if (dynamicCalendars[key]){\n\t\t\treturn dynamicCalendars[key].id;\n\t\t} else {\n\t\t\tvar tempCalendar = mergeResourceCalendars(resourceAssignments, manager);\n\n\t\t\tdynamicCalendars[key] = tempCalendar;\n\t\t\treturn manager.addCalendar(tempCalendar);\n\t\t}\n\t}\n\n\treturn {\n\t\tgetCalendarIdFromMultipleResources: getCalendarIdFromMultipleResources\n\t};\n};","if (window.jQuery){\n\n\t(function( $ ){\n\n\t\tvar methods = [];\n\t\t$.fn.dhx_gantt = function(config){\n\t\t\tconfig = config || {};\n\t\t\tif (typeof(config) === 'string') {\n\t\t\t\tif (methods[config] ) {\n\t\t\t\t\treturn methods[config].apply(this, []);\n\t\t\t\t}else {\n\t\t\t\t\t$.error('Method ' + config + ' does not exist on jQuery.dhx_gantt');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar views = [];\n\t\t\t\tthis.each(function() {\n\t\t\t\t\tif (this && this.getAttribute){\n\t\t\t\t\t\tif (!this.gantt && !(window.gantt.$root == this)){\n\n\t\t\t\t\t\t\tvar newgantt = (window.gantt.$container && window.Gantt) ? window.Gantt.getGanttInstance():window.gantt;\n\t\t\t\t\t\t\tfor (var key in config)\n\t\t\t\t\t\t\t\tif (key!=\"data\")\n\t\t\t\t\t\t\t\t\tnewgantt.config[key] = config[key];\n\n\t\t\t\t\t\t\tnewgantt.init(this);\n\t\t\t\t\t\t\tif (config.data)\n\t\t\t\t\t\t\t\tnewgantt.parse(config.data);\n\n\t\t\t\t\t\t\tviews.push(newgantt);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tviews.push(typeof this.gantt == \"object\" ? this.gantt : window.gantt);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\n\t\t\t\tif (views.length === 1) return views[0];\n\t\t\t\treturn views;\n\t\t\t}\n\t\t};\n\n\t})(window.jQuery);\n\n}\n\n\nexport default null;","import * as helpers from \"../../utils/helpers\";\n\nexport default function(){\n\treturn {\n\t\tgetVertices: function(relations){\n\t\t\tvar ids = {};\n\t\t\tvar rel;\n\t\t\tfor(var i = 0, len = relations.length; i < len; i++){\n\t\t\t\trel = relations[i];\n\t\t\t\tids[rel.target] = rel.target;\n\t\t\t\tids[rel.source] = rel.source;\n\t\t\t}\n\n\t\t\tvar vertices = [];\n\t\t\tvar id;\n\t\t\tfor(var i in ids){\n\t\t\t\tid = ids[i];\n\t\t\t\tvertices.push(id);\n\t\t\t}\n\n\t\t\treturn vertices;\n\t\t},\n\t\ttopologicalSort: function(edges){\n\t\t\tvar vertices = this.getVertices(edges);\n\t\t\tvar hash = {};\n\n\t\t\tfor(var i = 0, len = vertices.length; i < len; i ++){\n\t\t\t\thash[vertices[i]] = {id: vertices[i], $source:[], $target:[], $incoming: 0};\n\t\t\t}\n\n\t\t\tfor(var i = 0, len = edges.length; i < len; i++){\n\t\t\t\tvar successor = hash[edges[i].target];\n\t\t\t\tsuccessor.$target.push(i);\n\t\t\t\tsuccessor.$incoming = successor.$target.length;\n\t\t\t\thash[edges[i].source].$source.push(i);\n\n\t\t\t}\n\n\t\t\t// topological sort, Kahn's algorithm\n\t\t\tvar S = vertices.filter(function(v){ return !hash[v].$incoming; });\n\n\t\t\tvar L = [];\n\n\t\t\twhile(S.length){\n\t\t\t\tvar n = S.pop();\n\n\t\t\t\tL.push(n);\n\n\t\t\t\tvar node = hash[n];\n\n\t\t\t\tfor(var i = 0; i < node.$source.length; i++){\n\t\t\t\t\tvar m = hash[edges[node.$source[i]].target];\n\t\t\t\t\tm.$incoming--;\n\t\t\t\t\tif(!m.$incoming){\n\t\t\t\t\t\tS.push(m.id);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn L;\n\n\t\t},\n\t\tgroupAdjacentEdges: function(edges){\n\t\t\tvar res = {};\n\t\t\tvar edge;\n\t\t\tfor(var i = 0, len = edges.length; i < len; i++){\n\t\t\t\tedge = edges[i];\n\t\t\t\tif(!res[edge.source]){\n\t\t\t\t\tres[edge.source] = [];\n\t\t\t\t}\n\t\t\t\tres[edge.source].push(edge);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\ttarjanStronglyConnectedComponents: function(vertices, edges){\n\t\t\t//https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n\t\t\t// iterative implementation\n\t\t\tvar verticesHash = {};\n\t\t\tvar stack = [];\n\t\t\tvar edgesFromTasks = this.groupAdjacentEdges(edges);\n\t\t\tvar recurse = false;\n\t\t\tvar connectedComponents = [];\n\n\t\t\tfor(var i = 0; i < vertices.length; i++){\n\t\t\t\tvar root = getVertex(vertices[i]);\n\t\t\t\tif(root.visited) continue;\n\t\t\t\tvar workStack = [root];\n\t\t\t\tvar index = 0;\n\t\t\t\twhile(workStack.length){\n\t\t\t\t\tvar v = workStack.pop();\n\n\t\t\t\t\tif(!v.visited){\n\t\t\t\t\t\tv.index = index;\n\t\t\t\t\t\tv.lowLink = index;\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tstack.push(v);\n\t\t\t\t\t\tv.onStack = true;\n\t\t\t\t\t\tv.visited = true;\n\t\t\t\t\t}\n\t\t\t\t\trecurse = false;\n\t\t\t\t\tvar edges = edgesFromTasks[v.id] || [];\n\t\t\t\t\tfor(var e = 0; e < edges.length; e++){\n\t\t\t\t\t\tvar w = getVertex(edges[e].target);\n\t\t\t\t\t\tw.edge = edges[e];\n\t\t\t\t\t\tif(w.index === undefined){\n\t\t\t\t\t\t\tworkStack.push(v);\n\t\t\t\t\t\t\tworkStack.push(w);\n\t\t\t\t\t\t\trecurse = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}else if(w.onStack){\n\t\t\t\t\t\t\tv.lowLink = Math.min(v.lowLink, w.index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(recurse)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (v.index == v.lowLink){\n\t\t\t\t\t\tvar com = {tasks:[], links:[], linkKeys:[]};\n\t\t\t\t\t\twhile(true){\n\t\t\t\t\t\t\tw = stack.pop();\n\t\t\t\t\t\t\tw.onStack = false;\n\t\t\t\t\t\t\tcom.tasks.push(w.id);\n\t\t\t\t\t\t\tif(w.edge){\n\t\t\t\t\t\t\t\tcom.links.push(w.edge.id);\n\t\t\t\t\t\t\t\tcom.linkKeys.push(w.edge.hashSum);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(w == v){\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconnectedComponents.push(com);\n\t\t\t\t\t}\n\t\t\t\t\tif(workStack.length){\n\t\t\t\t\t\tw = v;\n\t\t\t\t\t\tv = workStack[workStack.length - 1];\n\t\t\t\t\t\tv.lowLink = Math.min(v.lowLink, w.lowLink);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn connectedComponents;\n\n\t\t\tfunction getVertex(id){\n\t\t\t\tif(!verticesHash[id]){\n\t\t\t\t\tverticesHash[id] = {id: id, onStack:false, index: undefined, lowLink: undefined, edge: undefined};\n\t\t\t\t}\n\n\t\t\t\treturn verticesHash[id];\n\t\t\t}\n\t\t},\n\n\t\tfindLoops: function(relations){\n\t\t\tvar cycles = [];\n\n\t\t\thelpers.forEach(relations, function(rel){\n\t\t\t\tif(rel.target == rel.source)\n\t\t\t\t\tcycles.push({ tasks: [rel.source], links: [rel.id]});\n\t\t\t});\n\n\t\t\tvar vertices = this.getVertices(relations);\n\n\t\t\tvar connectedComponents = this.tarjanStronglyConnectedComponents(vertices, relations);\n\t\t\thelpers.forEach(connectedComponents, function(component){\n\t\t\t\tif(component.tasks.length > 1){\n\t\t\t\t\tcycles.push(component);//{ tasks: [task ids], links: [links ids]}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn cycles;\n\t\t\t//{task:id, link:link.type, lag: link.lag || 0, source: link.source}\n\t\t}\n\t};\n};","export default function(gantt) {\n\treturn {\n\t\tgetVirtualRoot: function(){\n\t\t\treturn gantt.mixin(\n\t\t\t\tgantt.getSubtaskDates(),\n\t\t\t\t{\n\t\t\t\t\tid: gantt.config.root_id,\n\t\t\t\t\ttype: gantt.config.types.project,\n\t\t\t\t\t$source: [],\n\t\t\t\t\t$target: [],\n\t\t\t\t\t$virtual: true\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\n\t\tgetLinkedTasks: function(id, includePredecessors){\n\t\t\tvar startIds = [id];\n\t\n\t\t\t//TODO: format links cache\n\t\t\tvar clearCache = false;\n\t\t\tif(!gantt._isLinksCacheEnabled()) {\n\t\t\t\tgantt._startLinksCache();\n\t\t\t\tclearCache = true;\n\t\t\t}\n\t\t\tvar relations = [];\n\t\t\tvar visited = {};\n\t\t\tvar result = {};\n\t\t\tfor(var i = 0; i < startIds.length; i++){\n\t\t\t\tthis._getLinkedTasks(startIds[i], visited, includePredecessors, result);\n\t\t\t}\n\t\n\t\t\tfor(var i in result){\n\t\t\t\trelations.push(result[i]);\n\t\t\t}\n\t\n\t\t\t//TODO: remove redundant edges before continue https://en.wikipedia.org/wiki/Transitive_reduction\n\t\t\tif(clearCache)\n\t\t\t\tgantt._endLinksCache();\n\t\t\treturn relations;\n\t\t},\n\t\n\t\t_collectRelations: function(rootObj, isChild, includePredecessors, visitedLinks){\n\t\t\tvar successors = gantt._getSuccessors(rootObj, isChild);\n\t\n\t\t\tvar predecessors = [];\n\t\t\tif (includePredecessors) {\n\t\t\t\tpredecessors = gantt._getPredecessors(rootObj, isChild);\n\t\t\t}\n\t\t\t\n\t\t\tvar linkKey;\n\t\t\tvar relations = [];\n\t\t\tfor(var i = 0; i < successors.length; i++){\n\t\t\t\tlinkKey = successors[i].hashSum;\n\t\t\t\tif(visitedLinks[linkKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}else{\n\t\t\t\t\tvisitedLinks[linkKey] = true;\n\t\t\t\t\trelations.push(successors[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var i = 0; i < predecessors.length; i++){\n\t\t\t\tlinkKey = predecessors[i].hashSum;\n\t\t\t\tif(visitedLinks[linkKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}else{\n\t\t\t\t\tvisitedLinks[linkKey] = true;\n\t\t\t\t\trelations.push(predecessors[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn relations;\n\t\t},\n\t\t_getLinkedTasks: function(rootTask, visitedTasks, includePredecessors, output) {\n\t\t\tvar from = rootTask === undefined ? gantt.config.root_id : rootTask;\n\t\t\tvar visitedTasks = {};\n\t\t\tvar visitedLinks = {};\n\t\t\tvar rootObj;\n\t\n\t\t\tvar tasksStack = [{from: from, includePredecessors: includePredecessors, isChild:false}];\n\t\n\t\t\twhile(tasksStack.length){\n\t\t\t\tvar current = tasksStack.pop();\n\t\t\t\tvar isChild = current.isChild;\n\t\n\t\t\t\tfrom = current.from;\n\t\t\t\tif(visitedTasks[from]){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trootObj = gantt.isTaskExists(from) ? gantt.getTask(from) : this.getVirtualRoot();\n\t\t\t\tvisitedTasks[from] = true;\n\t\t\t\t\n\t\t\t\tvar relations = this._collectRelations(rootObj, isChild, includePredecessors, visitedLinks);\n\t\n\t\t\t\tfor(var i=0; i < relations.length; i++){\n\t\t\t\t\tvar rel = relations[i];\n\n\t\t\t\t\tlet includeRelation = true;\n\t\t\t\t\tif(gantt.config.auto_scheduling_use_progress){\n\t\t\t\t\t\tconst target = gantt.getTask(rel.target);\n\t\t\t\t\t\tif(target.progress == 1){\n\t\t\t\t\t\t\tincludeRelation = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// don't process links for unscheduled tasks\n\t\t\t\t\tconst target = gantt.getTask(rel.target);\n\t\t\t\t\tconst source = gantt.getTask(rel.source);\n\t\t\t\t\tif (target.unscheduled || source.unscheduled){\n\t\t\t\t\t\tincludeRelation = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(includeRelation){\n\t\t\t\t\t\toutput[rel.hashSum] = rel;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar isSameParent = rel.sourceParent == rel.targetParent;\n\t\t\t\t\tvar targetTask = rel.target;\n\t\t\t\t\tif(!visitedTasks[targetTask])\n\t\t\t\t\t\ttasksStack.push({from: rel.target, includePredecessors: true, isChild: isSameParent});\n\t\t\t\t}\n\t\n\t\t\t\tif(gantt.hasChild(rootObj.id)){\n\t\t\t\t\tvar children = gantt.getChildren(rootObj.id);\n\t\t\t\t\tfor(var i=0; i < children.length; i++){\n\t\t\t\t\t\tif(!visitedTasks[children[i]])\n\t\t\t\t\t\t\ttasksStack.push({from: children[i], includePredecessors: true, isChild: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn output;\n\t\t}\n\t};\n};","//returns position of html element on the page\nfunction getNodePosition(elem) {\n\tvar top=0, left=0, right=0, bottom=0;\n\tif (elem.getBoundingClientRect) { //HTML5 method\n\t\tvar box = elem.getBoundingClientRect();\n\t\tvar body = document.body;\n\t\tvar docElem = (document.documentElement ||\n\t\t\tdocument.body.parentNode ||\n\t\t\tdocument.body);\n\n\t\tvar scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n\t\tvar scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n\t\tvar clientTop = docElem.clientTop || body.clientTop || 0;\n\t\tvar clientLeft = docElem.clientLeft || body.clientLeft || 0;\n\t\ttop = box.top + scrollTop - clientTop;\n\t\tleft = box.left + scrollLeft - clientLeft;\n\n\t\tright = document.body.offsetWidth - box.right;\n\t\tbottom = document.body.offsetHeight - box.bottom;\n\t} else { //fallback to naive approach\n\t\twhile(elem) {\n\t\t\ttop = top + parseInt(elem.offsetTop,10);\n\t\t\tleft = left + parseInt(elem.offsetLeft,10);\n\t\t\telem = elem.offsetParent;\n\t\t}\n\n\t\tright = document.body.offsetWidth - elem.offsetWidth - left;\n\t\tbottom = document.body.offsetHeight - elem.offsetHeight - top;\n\t}\n\treturn { y: Math.round(top), x: Math.round(left), width:elem.offsetWidth, height:elem.offsetHeight, right: Math.round(right), bottom: Math.round(bottom) };\n}\n\nfunction isVisible(node){\n\tvar display = false,\n\t\tvisibility = false;\n\tif(window.getComputedStyle){\n\t\tvar style = window.getComputedStyle(node, null);\n\t\tdisplay = style[\"display\"];\n\t\tvisibility = style[\"visibility\"];\n\t}else if(node.currentStyle){\n\t\tdisplay = node.currentStyle[\"display\"];\n\t\tvisibility = node.currentStyle[\"visibility\"];\n\t}\n\treturn (display != \"none\" && visibility != \"hidden\");\n}\n\nfunction hasNonNegativeTabIndex(node){\n\treturn !isNaN(node.getAttribute(\"tabindex\")) && (node.getAttribute(\"tabindex\")*1 >= 0);\n}\n\nfunction hasHref(node){\n\tvar canHaveHref = {\"a\": true, \"area\": true};\n\tif(canHaveHref[node.nodeName.loLowerCase()]){\n\t\treturn !!node.getAttribute(\"href\");\n\t}\n\treturn true;\n}\n\nfunction isEnabled(node){\n\tvar canDisable = {\"input\":true, \"select\":true, \"textarea\":true, \"button\":true, \"object\":true};\n\tif(canDisable[node.nodeName.toLowerCase()]){\n\t\treturn !node.hasAttribute(\"disabled\");\n\t}\n\n\treturn true;\n}\n\nfunction getFocusableNodes(root){\n\tvar nodes = root.querySelectorAll([\n\t\t\"a[href]\",\n\t\t\"area[href]\",\n\t\t\"input\",\n\t\t\"select\",\n\t\t\"textarea\",\n\t\t\"button\",\n\t\t\"iframe\",\n\t\t\"object\",\n\t\t\"embed\",\n\t\t\"[tabindex]\",\n\t\t\"[contenteditable]\"\n\t].join(\", \"));\n\n\tvar nodesArray = Array.prototype.slice.call(nodes, 0);\n\t\n\tfor(var i = 0; i < nodesArray.length; i++){\n\t\tnodesArray[i].$position = i;\n\t\t// we remember original nodes order, \n\t\t// so when we sort them by tabindex we ensure order of nodes with same tabindex is preserved, \n\t\t// since some browsers do unstable sort\n\t}\n\t\n\t// use tabindex to sort focusable nodes\n\tnodesArray.sort(function(a, b) {\n\t\tif(a.tabIndex === 0 && b.tabIndex !== 0){\n\t\t\treturn 1;\n\t\t}\n\t\tif(a.tabIndex !== 0 && b.tabIndex === 0){\n\t\t\treturn -1;\n\t\t}\n\t\t\n\t\tif (a.tabIndex === b.tabIndex){\n\t\t\t// ensure we do stable sort\n\t\t\treturn a.$position - b.$position;\n\t\t}\n\t\tif (a.tabIndex < b.tabIndex) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 1;\n\t});\n\t\n\tfor(var i = 0; i < nodesArray.length; i++){\n\t\tvar node = nodesArray[i];\n\t\tvar isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);\n\t\tif(!isValid){\n\t\t\tnodesArray.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n\treturn nodesArray;\n}\n\nfunction getScrollSize(){\n\tvar div = document.createElement(\"div\");\n\tdiv.style.cssText=\"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\";\n\n\tdocument.body.appendChild(div);\n\tvar width = div.offsetWidth-div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn Math.max(width, 15);\n}\n\nfunction getClassName(node){\n\tif(!node) return \"\";\n\n\tvar className = node.className || \"\";\n\tif(className.baseVal)//'className' exist but not a string - IE svg element in DOM\n\t\tclassName = className.baseVal;\n\n\tif(!className.indexOf)\n\t\tclassName = \"\";\n\n\treturn _trimString(className);\n}\n\nfunction addClassName(node, className){\n\tif (className && node.className.indexOf(className) === -1) {\n\t\tnode.className += \" \" + className;\n\t}\n}\n\nfunction removeClassName(node, name) {\n\tname = name.split(\" \");\n\tfor (var i = 0; i < name.length; i++) {\n\t\tvar regEx = new RegExp(\"\\\\s?\\\\b\" + name[i] + \"\\\\b(?![-_.])\", \"\");\n\t\tnode.className = node.className.replace(regEx, \"\");\n\t}\n}\n\nfunction hasClass(element, className){\n\tif ('classList' in element) {\n\t\treturn element.classList.contains(className);\n\t} else { \n\t\treturn new RegExp(\"\\\\b\" + className + \"\\\\b\").test(element.className);\n\t}\n}\n\nfunction toNode(node) {\n\tif (typeof node === \"string\") {\n\t\treturn (document.getElementById(node) || document.querySelector(node) || document.body);\n\t}\n\treturn node || document.body;\n}\n\nvar _slave;\nfunction insertNode(node, newone) {\n\tif(!_slave){\n\t\t_slave = document.createElement(\"div\");\n\t}\n\t_slave.innerHTML = newone;\n\tvar child = _slave.firstChild;\n\tnode.appendChild(child);\n\treturn child;\n}\n\nfunction removeNode(node) {\n\tif (node && node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\nfunction getChildNodes(node, css) {\n\tvar ch = node.childNodes;\n\tvar len = ch.length;\n\tvar out = [];\n\tfor (var i = 0; i < len; i++) {\n\t\tvar obj = ch[i];\n\t\tif (obj.className && obj.className.indexOf(css) !== -1) {\n\t\t\tout.push(obj);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction getTargetNode(e) {\n\tvar trg;\n\tif (e.tagName)\n\t\ttrg = e;\n\telse {\n\t\te = e || window.event;\n\t\ttrg = e.target || e.srcElement;\n\t\tif (trg.shadowRoot && e.composedPath) {\n\t\t\ttrg = e.composedPath()[0];\n\t\t}\n\t}\n\treturn trg;\n}\n\nfunction locateAttribute(e, attribute) {\n\tif(!attribute) return;\n\n\tvar trg = getTargetNode(e);\n\n\twhile (trg){\n\t\tif (trg.getAttribute){\t//text nodes has not getAttribute\n\t\t\tvar test = trg.getAttribute(attribute);\n\t\t\tif (test) return trg;\n\t\t}\n\t\ttrg=trg.parentNode;\n\t}\n\treturn null;\n}\n\nfunction _trimString(str){\n\tvar func = String.prototype.trim || function(){ return this.replace(/^\\s+|\\s+$/g, \"\"); };\n\treturn func.apply(str);\n}\n\nfunction locateClassName(e, classname, strict){\n\tvar trg = getTargetNode(e);\n\tvar css = \"\";\n\n\tif(strict === undefined)\n\t\tstrict = true;\n\n\twhile (trg){\n\t\tcss = getClassName(trg);\n\t\tif(css){\n\t\t\tvar ind = css.indexOf(classname);\n\t\t\tif (ind >= 0){\n\t\t\t\tif (!strict)\n\t\t\t\t\treturn trg;\n\n\t\t\t\t//check that we have exact match\n\t\t\t\tvar left = (ind === 0) || (!_trimString(css.charAt(ind - 1)));\n\t\t\t\tvar right = ((ind + classname.length >= css.length)) || (!_trimString(css.charAt(ind + classname.length)));\n\n\t\t\t\tif (left && right)\n\t\t\t\t\treturn trg;\n\t\t\t}\n\t\t}\n\t\ttrg=trg.parentNode;\n\t}\n\treturn null;\n}\n\n/*\nevent position relatively to DOM element\n */\nfunction getRelativeEventPosition(ev, node){\n\tvar d = document.documentElement;\n\tvar box = getNodePosition(node);\n\n\treturn {\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft - box.x + node.scrollLeft,\n\t\ty: ev.clientY + d.scrollTop - d.clientTop - box.y + node.scrollTop\n\t};\n}\n\nfunction getRelativeNodePosition(child, parent){\n\tconst childPos = getNodePosition(child);\n\tconst parentPos = getNodePosition(parent);\n\treturn {\n\t\tx: childPos.x - parentPos.x,\n\t\ty: childPos.y - parentPos.y\n\t};\n}\n\nfunction isChildOf(child, parent){\n\tif(!child || !parent){\n\t\treturn false;\n\t}\n\n\twhile(child && child != parent) {\n\t\tchild = child.parentNode;\n\t}\n\n\treturn child === parent;\n}\n\nfunction closest(element, selector){\n\tif(element.closest){\n\t\treturn element.closest(selector);\n\t}else if(element.matches || element.msMatchesSelector || element.webkitMatchesSelector){\n\t\tvar el = element;\n\t\tif (!document.documentElement.contains(el)) return null;\n\t\tdo {\n\t\t\tvar method = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;\n\n\t\t\tif (method.call(el, selector)) return el;\n\t\t\tel = el.parentElement || el.parentNode;\n\t\t} while (el !== null && el.nodeType === 1); \n\t\treturn null;\n\t}else{\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\"Your browser is not supported\");\n\t\treturn null;\n\t}\n}\n\nfunction getClosestSizedElement(element) {\n\twhile (element) {\n\t\tif (element.offsetWidth > 0 && element.offsetHeight > 0) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentElement;\n\t}\n\treturn null;\n}\n\nfunction isShadowDomSupported() {\n\treturn document.head.createShadowRoot || document.head.attachShadow;\n}\n\n/**\n * Returns element that has the browser focus, or null if no element has focus.\n * Works with shadow DOM, so it's prefereed to use this function instead of document.activeElement directly.\n * @returns HTMLElement\n */\nfunction getActiveElement(){\n\tvar activeElement = document.activeElement;\n\tif (activeElement.shadowRoot) {\n\t\tactiveElement = activeElement.shadowRoot.activeElement;\n\t}\n\tif (activeElement === document.body && document.getSelection) {\n\t\tactiveElement = document.getSelection().focusNode || document.body;\n\t}\n\n\treturn activeElement;\n}\n\n/**\n * Returns document.body or the host node of the ShadowRoot, if the element is attached to ShadowDom\n * @param {HTMLElement} element \n * @returns HTMLElement\n */\nfunction getRootNode(element) {\n\tif (!element) {\n\t\treturn document.body;\n\t}\n\tif (!isShadowDomSupported()) {\n\t\treturn document.body;\n\t}\n\twhile (element.parentNode && (element = element.parentNode)) {\n\t\tif (element instanceof ShadowRoot) {\n\t\t\treturn element.host;\n\t\t}\n\t}\n\treturn document.body;\n}\n\nfunction hasShadowParent(element) {\n\treturn !!getRootNode(element);\n}\n\nexport {\n\tgetNodePosition,\n\tgetFocusableNodes,\n\tgetScrollSize,\n\tgetClassName,\n\taddClassName,\n\tremoveClassName,\n\tinsertNode,\n\tremoveNode,\n\tgetChildNodes,\n\ttoNode,\n\tlocateClassName,\n\tlocateAttribute,\n\tgetTargetNode,\n\tgetRelativeEventPosition,\n\tisChildOf,\n\thasClass,\n\tclosest,\n\tgetRootNode,\n\thasShadowParent,\n\tisShadowDomSupported,\n\tgetActiveElement,\n\tgetRelativeNodePosition,\n\tgetClosestSizedElement\n};","export class TaskPlan implements ITaskPlan {\n\tstatic Create(parent?: TaskPlan): TaskPlan {\n\t\tconst plan = new TaskPlan();\n\t\tif (parent) {\n\t\t\tfor (const i in plan) {\n\t\t\t\tif (parent[i] !== undefined) {\n\t\t\t\t\tplan[i] = parent[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn plan;\n\t}\n\n\tpublic link: string | number;\n\tpublic task: string | number;\n\t// tslint:disable-next-line variable-name\n\tpublic start_date: Date | null;\n\t// tslint:disable-next-line variable-name\n\tpublic end_date: Date | null;\n\n\tpublic latestStart: Date;\n\tpublic earliestStart: Date;\n\tpublic earliestEnd: Date;\n\tpublic latestEnd: Date;\n\n\tpublic latestSchedulingStart: Date;\n\tpublic earliestSchedulingStart: Date;\n\tpublic latestSchedulingEnd: Date;\n\tpublic earliestSchedulingEnd: Date;\n\n\tpublic kind: string;\n\tpublic conflict: boolean;\n\n\tconstructor() {\n\t\tthis.link = null;\n\t\tthis.task = null;\n\t\tthis.start_date = null;\n\t\tthis.end_date = null;\n\t\tthis.latestStart = null;\n\t\tthis.earliestStart = null;\n\t\tthis.earliestEnd = null;\n\t\tthis.latestEnd = null;\n\t\tthis.latestSchedulingStart = null;\n\t\tthis.earliestSchedulingStart = null;\n\t\tthis.latestSchedulingEnd = null;\n\t\tthis.earliestSchedulingEnd = null;\n\t\tthis.kind = \"asap\";\n\t\tthis.conflict = false;\n\t}\n}","import * as helpers from \"../../utils/helpers\";\nimport { ConstraintTypes } from \"./constraint_types\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class ConstraintsHelper {\n\tstatic Create(gantt: any): ConstraintsHelper {\n\t\treturn new ConstraintsHelper(gantt);\n\t}\n\n\tprivate _gantt: any;\n\tprivate constructor(gantt: any) {\n\t\tthis._gantt = gantt;\n\t}\n\n\tisAsapTask = (task: ITask): boolean => {\n\t\tconst constraintType = this.getConstraintType(task);\n\t\tif (this._gantt.config.schedule_from_end) {\n\t\t\tif (constraintType === ConstraintTypes.ASAP) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (constraintType === ConstraintTypes.ALAP) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t};\n\n\tisAlapTask = (task: ITask): boolean => {\n\t\treturn !this.isAsapTask(task);\n\t};\n\n\tgetConstraintType = (task: ITask): ConstraintTypes => {\n\t\t// GS-1487. Don't add a constraint if auto-scheduling is cancelled\n\t\tif (!this._gantt._isAutoSchedulable(task)){\n\t\t\treturn;\n\t\t}\n\n\t\tconst constraint = this._getTaskConstraint(task);\n\n\t\t// in case of backward scheduling, tasks without explicit constraints are considered ALAP tasks\n\t\tif (constraint.constraint_type) {\n\t\t\treturn constraint.constraint_type;\n\t\t} else if (this._gantt.config.schedule_from_end) {\n\t\t\treturn ConstraintTypes.ALAP;\n\t\t} else {\n\t\t\treturn ConstraintTypes.ASAP;\n\t\t}\n\t};\n\n\t_getTaskConstraint = (task: ITask) => {\n\n\t\tlet constraint = this._getOwnConstraint(task);\n\n\t\t// GS-2231. Child task shouldn't inherit constraints in the group mode\n\t\tif(this._gantt.config.auto_scheduling_project_constraint && !this._gantt.getState().group_mode){\n\n\t\t\tlet defaultConstraintType = ConstraintTypes.ASAP;\n\t\t\tif(this._gantt.config.schedule_from_end){\n\t\t\t\tdefaultConstraintType = ConstraintTypes.ALAP;\n\t\t\t}\n\n\t\t\tif((constraint && constraint.constraint_type) === defaultConstraintType || !constraint){\n\t\t\t\tconstraint = this._getParentConstraint(task);\n\t\t\t}\n\t\t}\n\n\t\treturn constraint;\n\t};\n\n\t_getOwnConstraint = (task: ITask) => {\n\t\treturn {\n\t\t\tconstraint_type: task.constraint_type,\n\t\t\tconstraint_date: task.constraint_date\n\t\t};\n\t};\n\n\t_getParentConstraint = (task: ITask) => {\n\t\tlet defaultConstraintType = ConstraintTypes.ASAP;\n\t\tif(this._gantt.config.schedule_from_end){\n\t\t\tdefaultConstraintType = ConstraintTypes.ALAP;\n\t\t}\n\n\t\tlet constraint = {\n\t\t\tconstraint_type: defaultConstraintType,\n\t\t\tconstraint_date: null\n\t\t};\n\n\t\tthis._gantt.eachParent((parent) => {\n\t\t\tif(constraint.constraint_type !== defaultConstraintType){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(parent.constraint_type && parent.constraint_type !== defaultConstraintType){\n\t\t\t\tconstraint = {\n\t\t\t\t\tconstraint_type: parent.constraint_type,\n\t\t\t\t\tconstraint_date: parent.constraint_date\n\t\t\t\t};\n\t\t\t}\n\t\t}, task.id);\n\t\treturn constraint;\n\t};\n\n\thasConstraint = (task: ITask): boolean => {\n\t\treturn !!this.getConstraintType(task);\n\t};\n\n\tprocessConstraint = (task: ITask, plan: TaskPlan): TaskPlan => {\n\t\tconst constraint = this._getTaskConstraint(task);\n\n\t\tif (constraint) {\n\t\t\tif (\n\t\t\t\tconstraint.constraint_type === ConstraintTypes.ALAP ||\n\t\t\t\tconstraint.constraint_type === ConstraintTypes.ASAP\n\t\t\t) {\n\t\t\t\t// this kind of constraint is calculated after main scheduling\n\t\t\t} else if(helpers.isValidDate(constraint.constraint_date)) {\n\t\t\t\tconst constraintDate = constraint.constraint_date;\n\n\t\t\t\tconst newPlan = TaskPlan.Create(plan);\n\t\t\t\tnewPlan.task = task.id;\n\n\t\t\t\tswitch (constraint.constraint_type) {\n\t\t\t\t\tcase ConstraintTypes.SNET:\n\t\t\t\t\t\tnewPlan.earliestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.SNLT:\n\t\t\t\t\t\tnewPlan.latestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.latestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.latestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.FNET:\n\t\t\t\t\t\tnewPlan.earliestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.earliestEnd = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.FNLT:\n\t\t\t\t\t\tnewPlan.latestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestEnd = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.MSO:\n\t\t\t\t\t\tnewPlan.earliestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestStart = newPlan.earliestStart;\n\t\t\t\t\t\tnewPlan.latestEnd = newPlan.earliestEnd;\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.MFO:\n\t\t\t\t\t\tnewPlan.earliestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestStart = newPlan.earliestStart;\n\t\t\t\t\t\tnewPlan.latestEnd = newPlan.earliestEnd;\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\treturn newPlan;\n\t\t\t}\n\t\t}\n\n\t\treturn plan;\n\t};\n\n\tgetConstraints = (id: TaskID, relations: IInternalLink[]): ITask[] => {\n\t\tconst result = [];\n\t\tconst tasks = {};\n\n\t\tconst store = (task: any) => {\n\t\t\tif (tasks[task.id]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.hasConstraint(task) && !this._gantt.isSummaryTask(task)) {\n\t\t\t\ttasks[task.id] = task;\n\t\t\t}\n\t\t};\n\n\t\tif (this._gantt.isTaskExists(id)) {\n\t\t\tconst task = this._gantt.getTask(id);\n\t\t\tstore(task);\n\t\t}\n\n\t\tthis._gantt.eachTask(task => store(task), id);\n\n\t\tlet current;\n\t\tif (relations) {\n\t\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\t\tconst rel = relations[i];\n\t\t\t\tif (!tasks[rel.target]) {\n\t\t\t\t\tcurrent = this._gantt.getTask(rel.target);\n\t\t\t\t\tstore(current);\n\t\t\t\t}\n\t\t\t\tif (!tasks[rel.source]) {\n\t\t\t\t\tcurrent = this._gantt.getTask(rel.source);\n\t\t\t\t\tstore(current);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const taskId in tasks) {\n\t\t\t// GS-745 do not auto-schedule placeholders\n\t\t\tif (tasks[taskId].type !== this._gantt.config.types.placeholder) {\n\t\t\t\tresult.push(tasks[taskId]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n}\n","export default class DateComparator {\n\tprotected _gantt: any;\n\n\tconstructor(gantt) {\n\t\tthis._gantt = gantt;\n\t}\n\n\tpublic isEqual(dateA: Date, dateB: Date, task: ITask): boolean {\n\t\treturn !this._gantt._hasDuration(dateA, dateB, task);\n\t}\n\n\tpublic isFirstSmaller(small: Date, big: Date, task: ITask): boolean {\n\t\tif (small.valueOf() < big.valueOf() && !this.isEqual(small, big, task)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic isSmallerOrDefault(smallDate: Date, bigDate: Date, task: ITask): boolean {\n\t\treturn !!(!smallDate || this.isFirstSmaller(smallDate, bigDate, task));\n\t}\n\n\tpublic isGreaterOrDefault(smallDate: Date, bigDate: Date, task: ITask): boolean {\n\t\treturn !!(!smallDate || this.isFirstSmaller(bigDate, smallDate, task));\n\t}\n}","import DateComparator from \"./date_comparator\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class AlapStrategy implements ISchedulingStrategy {\n\tstatic Create(gantt: any): AlapStrategy {\n\t\tconst instance = new AlapStrategy();\n\t\tinstance._gantt = gantt;\n\t\tinstance._comparator = new DateComparator(gantt);\n\t\treturn instance;\n\t}\n\n\tprotected _gantt: any;\n\tprotected _comparator: DateComparator;\n\n\tresolveRelationDate(taskId: TaskID, adjacentLinks: ITaskRelations, plansHash: IPlansHash): TaskPlan {\n\t\tlet maxEnd = null;\n\t\tlet linkId = null;\n\t\tlet maxStart = null;\n\t\tlet defaultStart = null;\n\t\tconst task = this._gantt.getTask(taskId);\n\t\tconst relations = adjacentLinks.successors;\n\t\tlet maxRelationDate = null;\n\t\tconst masterPlan = plansHash[taskId];\n\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\tconst relation = relations[i];\n\n\t\t\t// .preferredStart still exists only to emulate pre 6.1 auto scheduling behavior\n\t\t\t// will be removed in future versions\n\t\t\t// TODO: remove .preferredStart in v7.0\n\t\t\tdefaultStart = relation.preferredStart;\n\t\t\tconst constraintDate = this.getLatestEndDate(relation, plansHash, task);\n\t\t\tconst constraintStartDate = this._gantt.calculateEndDate({ start_date: constraintDate, duration: - task.duration, task });\n\n\t\t\tif (this._comparator.isGreaterOrDefault(maxRelationDate, constraintDate, task)) {\n\t\t\t\tmaxRelationDate = constraintDate;\n\t\t\t}\n\t\t\tif (this._comparator.isGreaterOrDefault(defaultStart, constraintStartDate, task) && this._comparator.isGreaterOrDefault(maxEnd, constraintDate, task)) {\n\t\t\t\tmaxEnd = constraintDate;\n\t\t\t\tmaxStart = constraintStartDate;\n\t\t\t\tlinkId = relation.id;\n\t\t\t}\n\t\t}\n\n\t\tif (!relations.length && this._gantt.config.project_end) {\n\t\t\tif (this._comparator.isGreaterOrDefault(this._gantt.config.project_end, task.end_date, task)) {\n\t\t\t\tmaxEnd = this._gantt.config.project_end;\n\t\t\t}\n\t\t\t// GS-1152. don't process tasks with cancelled auto-scheduling\n\t\t\tif (this._gantt.callEvent(\"onBeforeTaskAutoSchedule\", [task, task.end_date]) === false) {\n\t\t\t\tmaxEnd = task.end_date;\n\t\t\t}\n\t\t}\n\n\t\tif (maxEnd) {\n\t\t\t// GS-1556. Tasks with zero duration shouldn't violate the project_end date\n\t\t\tif (task.duration){\n\t\t\t\tmaxEnd = this._gantt.getClosestWorkTime({ date: maxEnd, dir: \"future\", task });\n\t\t\t\tmaxStart = this._gantt.calculateEndDate({ start_date: maxEnd, duration: - task.duration, task });\n\t\t\t} else {\n\t\t\t\tmaxStart = maxEnd = this._gantt.getClosestWorkTime({ date: maxEnd, dir: \"past\", task });\n\t\t\t}\n\t\t}\n\n\t\tconst currentPlan = TaskPlan.Create(masterPlan);\n\n\t\tcurrentPlan.link = linkId;\n\t\tcurrentPlan.task = taskId;\n\t\tcurrentPlan.end_date = maxEnd;\n\t\tcurrentPlan.start_date = maxStart;\n\t\tcurrentPlan.kind = \"alap\";\n\n\t\tif (maxRelationDate) {\n\t\t\tcurrentPlan.latestSchedulingStart = this._gantt.calculateEndDate({ start_date: maxRelationDate, duration: - task.duration, task });\n\t\t\tcurrentPlan.latestSchedulingEnd = maxRelationDate;\n\t\t}\n\n\t\treturn currentPlan;\n\n\t}\n\n\tprotected getSuccessorStartDate(id: TaskID, plansHash: IPlansHash): Date {\n\t\tconst plan = plansHash[id];\n\t\tconst task = this._gantt.getTask(id);\n\t\tlet res;\n\n\t\tif (!(plan && (plan.start_date || plan.end_date))) {\n\t\t\tres = task.start_date;\n\t\t} else if (plan.start_date) {\n\t\t\tres = plan.start_date;\n\t\t} else {\n\t\t\tres = this._gantt.calculateEndDate({ start_date: plan.end_date, duration: - task.duration, task });\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tprotected getLatestEndDate(relation: IInternalLink, plansHash: IPlansHash, task: ITask) {\n\t\tconst successorStart = this.getSuccessorStartDate(relation.target, plansHash);\n\t\tconst predecessor = task;\n\n\t\tlet predecessorEnd = this._gantt.getClosestWorkTime({ date: successorStart, dir: \"past\", task: predecessor });\n\n\t\tif (predecessorEnd && relation.lag && relation.lag * 1 === relation.lag * 1) {\n\t\t\tpredecessorEnd = this._gantt.calculateEndDate({ start_date: predecessorEnd, duration: -relation.lag * 1, task: predecessor });\n\t\t}\n\n\t\treturn predecessorEnd;\n\t}\n}","import DateComparator from \"./date_comparator\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class AsapStrategy implements ISchedulingStrategy {\n\tstatic Create(gantt: any): AsapStrategy {\n\t\tconst instance = new AsapStrategy();\n\t\tinstance._gantt = gantt;\n\t\tinstance._comparator = new DateComparator(gantt);\n\t\treturn instance;\n\t}\n\n\tprotected _gantt: any;\n\tprotected _comparator: DateComparator;\n\n\tresolveRelationDate(\n\t\ttaskId: TaskID,\n\t\tadjacentLinks: ITaskRelations,\n\t\tplansHash: IPlansHash\n\t): TaskPlan {\n\t\tlet minStart = null;\n\t\tlet linkId = null;\n\n\t\tlet defaultStart = null;\n\t\tconst task = this._gantt.getTask(taskId);\n\t\tconst relations = adjacentLinks.predecessors;\n\n\t\tconst autoScheduledDates = {};\n\t\tlet minRelationDate = null;\n\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\tconst relation = relations[i];\n\n\t\t\t// .preferredStart still exists only to emulate pre 6.1 auto scheduling behavior\n\t\t\t// will be removed in future versions\n\t\t\t// TODO: remove .preferredStart in v7.0\n\t\t\tdefaultStart = relation.preferredStart;\n\n\t\t\tconst constraintDate = this.getEarliestStartDate(\n\t\t\t\trelation,\n\t\t\t\tplansHash,\n\t\t\t\ttask\n\t\t\t);\n\n\t\t\tif (this._comparator.isSmallerOrDefault(minRelationDate, constraintDate, task)) {\n\t\t\t\tminRelationDate = constraintDate;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis._comparator.isSmallerOrDefault(defaultStart, constraintDate, task) &&\n\t\t\t\tthis._comparator.isSmallerOrDefault(minStart, constraintDate, task)\n\t\t\t) {\n\t\t\t\tminStart = constraintDate;\n\t\t\t\tlinkId = relation.id;\n\t\t\t}\n\t\t\tif (!task.duration){\n\t\t\t\tconst link = this._gantt.getLink(relation.id);\n\t\t\t\tif (autoScheduledDates[link.type] === undefined){\n\t\t\t\t\tautoScheduledDates[link.type] = +constraintDate;\n\t\t\t\t}\n\t\t\t\telse if (autoScheduledDates[link.type] < +constraintDate){\n\t\t\t\t\tautoScheduledDates[link.type] = +constraintDate;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (!relations.length && this._gantt.config.project_start) {\n\t\t\tif (this._comparator.isSmallerOrDefault(task.start_date, this._gantt.config.project_start, task) ||\n\t\t\t// GS-403 - auto_scheduling_strict = true to schedule independent asap tasks to the earliest date, auto_scheduling_strict=false to keep the old behavior\n\t\t\t(this._gantt.config.auto_scheduling_strict && this._comparator.isGreaterOrDefault(task.start_date, this._gantt.config.project_start, task)\n\t\t\t)\n\t\t\t) {\n\t\t\t\tminStart = this._gantt.config.project_start;\n\t\t\t}\n\t\t\t// GS-1152. don't process tasks with cancelled auto-scheduling\n\t\t\tif (this._gantt.callEvent(\"onBeforeTaskAutoSchedule\", [task, task.start_date]) === false) {\n\t\t\t\tminStart = task.start_date;\n\t\t\t}\n\t\t}\n\n\t\tlet maxEnd = null;\n\t\tif (minStart) {\n\t\t\tif (task.duration) {\n\t\t\t\tminStart = this._gantt.getClosestWorkTime({\n\t\t\t\t\tdate: minStart,\n\t\t\t\t\tdir: \"future\",\n\t\t\t\t\ttask\n\t\t\t\t});\n\t\t\t\tmaxEnd = this._gantt.calculateEndDate({\n\t\t\t\t\tstart_date: minStart,\n\t\t\t\t\tduration: task.duration,\n\t\t\t\t\ttask\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// GS-1340 and GS-2508. For FF links, the milestones should start before the weekends\n\t\t\t\t// When there are multiple links, other types have a higher priority over FF links\n\t\t\t\tlet milestoneWorktimeDirection = \"future\";\n\t\t\t\tconst linkProps = this._gantt.config.links;\n\t\t\t\tif (autoScheduledDates[linkProps.finish_to_finish] !== undefined){\n\t\t\t\t\tconst onlyFFLink = relations.length === 1;\n\t\t\t\t\tlet noRelevantLinks = true;\n\t\t\t\t\tfor (const linkType in autoScheduledDates){\n\t\t\t\t\t\tif (linkType != linkProps.finish_to_finish &&\n\t\t\t\t\t\t\tautoScheduledDates[linkProps.finish_to_finish] < autoScheduledDates[linkType]){\n\t\t\t\t\t\t\t\tnoRelevantLinks = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onlyFFLink || noRelevantLinks){\n\t\t\t\t\t\tmilestoneWorktimeDirection = \"past\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tminStart = maxEnd = this._gantt.getClosestWorkTime({ date: minStart, dir: milestoneWorktimeDirection, task });\n\t\t\t}\n\n\t\t}\n\n\t\tconst masterPlan = plansHash[taskId];\n\t\tconst currentPlan = TaskPlan.Create(masterPlan);\n\n\t\tcurrentPlan.link = linkId;\n\t\tcurrentPlan.task = taskId;\n\t\tcurrentPlan.start_date = minStart;\n\t\tcurrentPlan.end_date = maxEnd;\n\t\tcurrentPlan.kind = \"asap\";\n\n\t\tif (minRelationDate) {\n\t\t\tcurrentPlan.earliestSchedulingStart = minRelationDate;\n\t\t\tcurrentPlan.earliestSchedulingEnd = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: minRelationDate,\n\t\t\t\tduration: task.duration,\n\t\t\t\ttask\n\t\t\t});\n\t\t}\n\n\t\treturn currentPlan;\n\t}\n\n\tprotected getPredecessorEndDate(id: TaskID, plansHash: IPlansHash): Date {\n\t\tconst plan = plansHash[id];\n\t\tconst task = this._gantt.getTask(id);\n\t\tlet res;\n\n\t\tif (!(plan && (plan.start_date || plan.end_date))) {\n\t\t\tres = task.end_date;\n\t\t} else if (plan.end_date) {\n\t\t\tres = plan.end_date;\n\t\t} else {\n\t\t\tres = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: plan.start_date,\n\t\t\t\tduration: task.duration,\n\t\t\t\ttask\n\t\t\t});\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tprotected getEarliestStartDate(relation: IInternalLink, plansHash: IPlansHash, task: ITask): Date {\n\t\tconst predecessorEnd = this.getPredecessorEndDate(\n\t\t\trelation.source,\n\t\t\tplansHash\n\t\t);\n\t\tconst successor = task;\n\t\tconst predecessor = this._gantt.getTask(relation.source);\n\t\tlet successorStart: Date;\n\n\t\tif (\n\t\t\t(predecessorEnd &&\n\t\t\trelation.lag &&\n\t\t\trelation.lag * 1 === relation.lag * 1)\n\t\t) {\n\t\t\t// GS-2330. If it is a subtask link and we move projects, we should use the project calendar\n\t\t\tlet taskCalendar = successor;\n\t\t\tif (this._gantt.config.auto_scheduling_move_projects && relation.subtaskLink && this._gantt.isTaskExists(relation.targetParent)){\n\t\t\t\ttaskCalendar = this._gantt.getTask(relation.targetParent);\n\t\t\t}\n\n\t\t\tsuccessorStart = this._gantt.getClosestWorkTime({\n\t\t\t\tdate: predecessorEnd,\n\t\t\t\tdir: \"future\",\n\t\t\t\ttask: predecessor\n\t\t\t});\n\n\t\t\tif(relation.sourceLag){\n\t\t\t\tsuccessorStart = this._gantt.calculateEndDate({\n\t\t\t\t\tstart_date: successorStart,\n\t\t\t\t\tduration: relation.sourceLag * 1,\n\t\t\t\t\ttask: predecessor\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(relation.targetLag){\n\t\t\t\tsuccessorStart = this._gantt.calculateEndDate({\n\t\t\t\t\tstart_date: successorStart,\n\t\t\t\t\tduration: relation.targetLag * 1,\n\t\t\t\t\ttask: taskCalendar\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsuccessorStart = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: successorStart,\n\t\t\t\tduration: relation.trueLag * 1,\n\t\t\t\ttask: taskCalendar\n\t\t\t});\n\n\t\t} else {\n\t\t\tconst ffLink = this._gantt.getLink(relation.id).type === this._gantt.config.links.finish_to_finish;\n\n\t\t\tif (!successor.duration && ffLink) {\n\t\t\t\tsuccessorStart = this._gantt.getClosestWorkTime({\n\t\t\t\t\tdate: predecessorEnd,\n\t\t\t\t\tdir: \"past\",\n\t\t\t\t\ttask: successor\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsuccessorStart = this._gantt.getClosestWorkTime({\n\t\t\t\t\tdate: predecessorEnd,\n\t\t\t\t\tdir: \"future\",\n\t\t\t\t\ttask: successor\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\treturn successorStart;\n\t}\n}\n","import { AlapStrategy } from \"./alap_strategy\";\nimport { AsapStrategy } from \"./asap_strategy\";\nimport { ConstraintTypes } from \"./constraint_types\";\nimport { ConstraintsHelper } from \"./constraints\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class AutoSchedulingPlanner {\n\tprivate _gantt: any;\n\tprivate _constraintsHelper: ConstraintsHelper;\n\tprivate _graphHelper: any;\n\tprivate _asapStrategy: AsapStrategy;\n\tprivate _alapStrategy: AlapStrategy;\n\tprivate _secondIterationRequired?: boolean;\n\tprivate _secondIteration: boolean = false;\n\n\tconstructor(\n\t\tgantt: any,\n\t\tgraphHelper: any,\n\t\tconstraintsHelper: ConstraintsHelper\n\t) {\n\t\tthis._gantt = gantt;\n\t\tthis._constraintsHelper = constraintsHelper;\n\t\tthis._graphHelper = graphHelper;\n\t\tthis._asapStrategy = AsapStrategy.Create(gantt);\n\t\tthis._alapStrategy = AlapStrategy.Create(gantt);\n\t\tthis._secondIterationRequired = false;\n\t}\n\n\tgeneratePlan(relations: IInternalLink[], constraints: ITask[]): TaskPlan[] {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst gantt = this._gantt;\n\t\tconst constraintsHelper = this._constraintsHelper;\n\t\tconst alapStrategy = this._alapStrategy;\n\t\tconst asapStrategy = this._asapStrategy;\n\n\t\tconst {\n\t\t\torderedIds,\n\t\t\treversedIds,\n\t\t\trelationsMap,\n\t\t\tplansHash } = this.buildWorkCollections(relations, constraints, graphHelper);\n\n\t\tlet result: TaskPlan[];\n\n\t\tthis.processConstraints(orderedIds, plansHash, gantt, constraintsHelper);\n\n\t\tif (gantt.config.schedule_from_end) {\n\t\t\t// when scheduling from end - iterate tasks from end and schedule them as late as possible\n\t\t\t// after that - iterate tasks from start and schedule asap tasks\n\t\t\tresult = this.iterateTasks(reversedIds, orderedIds, constraintsHelper.isAlapTask, alapStrategy, asapStrategy, relationsMap, plansHash);\n\t\t} else {\n\t\t\t// when scheduling from end - iterate tasks from start and schedule them as soon as possible\n\t\t\t// after that - iterate tasks from end and schedule asap alap\n\t\t\tresult = this.iterateTasks(orderedIds, reversedIds, constraintsHelper.isAsapTask, asapStrategy, alapStrategy, relationsMap, plansHash);\n\t\t}\n\t\treturn result;\n\t}\n\n\tapplyProjectPlan(projectPlan: TaskPlan[]): ITask[] {\n\t\tconst gantt = this._gantt;\n\n\t\tlet plan: TaskPlan;\n\t\tlet task: ITask;\n\t\tlet link: ILink;\n\t\tlet reason: ITask;\n\n\t\tconst updateTasks = [];\n\t\tfor (let i = 0; i < projectPlan.length; i++) {\n\t\t\tlink = null;\n\t\t\treason = null;\n\t\t\tplan = projectPlan[i];\n\n\t\t\tif (!gantt.isTaskExists(plan.task)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttask = gantt.getTask(plan.task);\n\t\t\tif (plan.link) {\n\t\t\t\tlink = gantt.getLink(plan.link);\n\t\t\t\tif (plan.kind === \"asap\") {\n\t\t\t\t\treason = this._gantt.getTask(link.source);\n\t\t\t\t} else {\n\t\t\t\t\t// alap tasks are scheduled by their successors\n\t\t\t\t\treason = this._gantt.getTask(link.target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet newDate = null;\n\t\t\tif (\n\t\t\t\tplan.start_date &&\n\t\t\t\ttask.start_date.valueOf() !== plan.start_date.valueOf()\n\t\t\t) {\n\t\t\t\tnewDate = plan.start_date;\n\t\t\t}\n\n\t\t\tif (!newDate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttask.start_date = newDate;\n\t\t\ttask.end_date = gantt.calculateEndDate(task);\n\n\t\t\tupdateTasks.push(task.id);\n\t\t\tgantt.callEvent(\"onAfterTaskAutoSchedule\", [\n\t\t\t\ttask,\n\t\t\t\tnewDate,\n\t\t\t\tlink,\n\t\t\t\treason\n\t\t\t]);\n\t\t}\n\t\treturn updateTasks;\n\t}\n\n\tprotected iterateTasks(\n\t\tmainSequence: TaskID[],\n\t\tsecondarySequence: TaskID[],\n\t\tisMainSequence: (task: ITask) => boolean,\n\t\tmainSequenceStrategy: ISchedulingStrategy,\n\t\tsecondarySequenceStrategy: ISchedulingStrategy,\n\t\trelationsMap: ITaskLinksMap,\n\t\tplansHash: IPlansHash\n\n\t): TaskPlan[] {\n\t\tconst gantt = this._gantt;\n\t\tconst result: TaskPlan[] = [];\n\n\t\tfor (let i = 0; i < mainSequence.length; i++) {\n\t\t\tconst currentId = mainSequence[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\t\t\tif (!gantt._isAutoSchedulable(task)){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst plan = mainSequenceStrategy.resolveRelationDate(\n\t\t\t\tcurrentId,\n\t\t\t\trelationsMap[currentId],\n\t\t\t\tplansHash\n\t\t\t);\n\t\t\tthis.limitPlanDates(task, plan);\n\t\t\tif (isMainSequence(task)) {\n\t\t\t\tthis.processResolvedDate(task, plan, result, plansHash);\n\t\t\t} else {\n\t\t\t\tplansHash[task.id] = plan;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < secondarySequence.length; i++) {\n\t\t\tconst currentId = secondarySequence[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\t\t\tif (!gantt._isAutoSchedulable(task)){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!isMainSequence(task)) {\n\t\t\t\tconst plan = secondarySequenceStrategy.resolveRelationDate(\n\t\t\t\t\tcurrentId,\n\t\t\t\t\trelationsMap[currentId],\n\t\t\t\t\tplansHash\n\t\t\t\t);\n\t\t\t\tthis.limitPlanDates(task, plan);\n\t\t\t\tthis.processResolvedDate(task, plan, result, plansHash);\n\t\t\t}\n\t\t}\n\n\t\tif (this._secondIterationRequired){\n\t\t\tif (this._secondIteration){\n\t\t\t\tthis._secondIteration = false;\n\t\t\t} else {\n\t\t\t\tthis._secondIteration = true;\n\n\t\t\t\t// if the duration of the project tasks changed, the lag value is updated\n\t\t\t\t// so, we need to auto-schedule tasks again with the updated dates\n\t\t\t\tif (this.summaryLagChanged(gantt, relationsMap, plansHash)){\n\t\t\t\t\treturn this.iterateTasks(\n\t\t\t\t\t\tmainSequence,\n\t\t\t\t\t\tsecondarySequence,\n\t\t\t\t\t\tisMainSequence,\n\t\t\t\t\t\tmainSequenceStrategy,\n\t\t\t\t\t\tsecondarySequenceStrategy,\n\t\t\t\t\t\trelationsMap,\n\t\t\t\t\t\tplansHash\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprotected summaryLagChanged(gantt, relationsMap, plansHash){\n\t\t// update projects and relations from plans\n\t\tconst projectUpdates = {};\n\t\tconst linksToUpdate = {};\n\n\t\t// get minimal and maximal dates for target and source projects\n\t\tfor (const taskId in relationsMap){\n\t\t\trelationsMap[taskId].predecessors.forEach((relation)=>{\n\t\t\t\tif (relation.subtaskLink){\n\t\t\t\t\tconst link = gantt.getLink(relation.id);\n\t\t\t\t\tthis.getProjectUpdates(gantt, plansHash, relation, link, \"source\", projectUpdates, linksToUpdate);\n\t\t\t\t\tthis.getProjectUpdates(gantt, plansHash, relation, link, \"target\", projectUpdates, linksToUpdate);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// update project tasks\n\t\tlet shouldReschedule = false;\n\n\t\tfor (const projectId in projectUpdates){\n\t\t\tconst updatedProject = projectUpdates[projectId];\n\t\t\tif (!updatedProject.min || !updatedProject.max){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst task = gantt.getTask(projectId);\n\t\t\t// we cannot rely on the `duration` parameter as it can have a different value for project tasks\n\t\t\t// during the initial scheduling\n\t\t\tconst initialDuration = gantt.calculateDuration({start_date: task.start_date, end_date: task.end_date, task});\n\t\t\t// we need to modify the dates and duration of the project tasks as\n\t\t\t// the _formatLink and the functions that follow rely on these parameters\n\t\t\t// it shouldn't impact logic as project tasks ignore the date parameters\n\t\t\tconst newDuration = gantt.calculateDuration({start_date: updatedProject.min, end_date: updatedProject.max, task});\n\t\t\tif (newDuration === initialDuration){\n\t\t\t\t// no need to reschedule\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttask.start_date = updatedProject.min;\n\t\t\ttask.end_date = updatedProject.max;\n\t\t\ttask.duration = newDuration;\n\t\t}\n\t\t\n\t\tfor (const linkId in linksToUpdate){\n\t\t\tconst link = linksToUpdate[linkId];\n\t\t\tlet sourceDates, targetDates;\n\n\t\t\tconst updatedSource = projectUpdates[link.source];\n\t\t\tconst updatedTarget = projectUpdates[link.target];\n\t\t\tif (updatedSource){\n\t\t\t\tsourceDates = {\n\t\t\t\t\tstart_date: updatedSource.start_date,\n\t\t\t\t\tend_date: updatedSource.end_date\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (updatedTarget){\n\t\t\t\tsourceDates = {\n\t\t\t\t\tstart_date: updatedTarget.start_date,\n\t\t\t\t\tend_date: updatedTarget.end_date\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// get updated formatted link with updated dates\n\t\t\tconst updatedRelations = gantt._formatLink(link, sourceDates, targetDates);\n\t\t\t// update relationsMap\n\t\t\tupdatedRelations.forEach(function(updatedRelation){\n\t\t\tfor (const taskId in relationsMap){\n\t\t\t\trelationsMap[taskId].predecessors.forEach(function(relation){\n\t\t\t\t\t\tconst idMatch = relation.id === updatedRelation.id;\n\t\t\t\t\t\tconst targetMatch = relation.target === updatedRelation.target;\n\t\t\t\t\t\tconst sourceMatch = relation.source === updatedRelation.source;\n\t\t\t\t\t\tif (idMatch && targetMatch && sourceMatch){\n\t\t\t\t\t\t\trelation.lag = updatedRelation.lag;\n\t\t\t\t\t\t\trelation.sourceLag = updatedRelation.sourceLag;\n\t\t\t\t\t\t\trelation.targetLag = updatedRelation.targetLag;\n\t\t\t\t\t\t\trelation.hashSum = updatedRelation.hashSum;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tshouldReschedule = true;\n\t\t}\n\t\treturn shouldReschedule;\n\t}\n\n\tprotected getProjectUpdates(gantt, plansHash, relation, link, relationProp, projectUpdates, linksToUpdate){\n\t\tconst task = gantt.getTask(link[relationProp]);\n\t\tif (task.type === gantt.config.types.project){\n\t\t\tprojectUpdates[link[relationProp]] = projectUpdates[link[relationProp]] || {id: link[relationProp], link};\n\t\t\tconst projectForUpdate = projectUpdates[link[relationProp]];\n\t\t\tlet childTask = plansHash[relation[relationProp]];\n\t\t\tif (childTask){\n\t\t\t\tif (relationProp == \"source\" && (!childTask.start_date || !childTask.end_date)){\n\t\t\t\t\tchildTask = gantt.getTask(childTask.task);\n\t\t\t\t}\n\n\t\t\t\tprojectForUpdate.min = projectForUpdate.min || childTask.start_date;\n\t\t\t\tif (projectForUpdate.min > childTask.start_date){\n\t\t\t\t\tprojectForUpdate.min = childTask.start_date;\n\t\t\t\t}\n\t\t\t\tprojectForUpdate.max = projectForUpdate.max || childTask.end_date;\n\t\t\t\tif (projectForUpdate.max < childTask.end_date){\n\t\t\t\t\tprojectForUpdate.max = childTask.end_date;\n\t\t\t\t}\n\t\t\t\tlinksToUpdate[link.id] = link;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected processResolvedDate(\n\t\ttask: ITask,\n\t\tplan: TaskPlan,\n\t\tresult: TaskPlan[],\n\t\tplansHash: any\n\t): void {\n\t\tif (plan.start_date && this._gantt.isLinkExists(plan.link)) {\n\t\t\tlet link = null;\n\t\t\tlet reason = null;\n\t\t\tif (plan.link) {\n\t\t\t\tlink = this._gantt.getLink(plan.link);\n\t\t\t\tif (plan.kind === \"asap\") {\n\t\t\t\t\treason = this._gantt.getTask(link.source);\n\t\t\t\t} else {\n\t\t\t\t\t// alap tasks are scheduled by their successors\n\t\t\t\t\treason = this._gantt.getTask(link.target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttask.start_date.valueOf() !== plan.start_date.valueOf() &&\n\t\t\t\tthis._gantt.callEvent(\"onBeforeTaskAutoSchedule\", [\n\t\t\t\t\ttask,\n\t\t\t\t\tplan.start_date,\n\t\t\t\t\tlink,\n\t\t\t\t\treason\n\t\t\t\t]) === false\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tplansHash[task.id] = plan;\n\t\tif (plan.start_date) {\n\t\t\tresult.push(plan);\n\t\t}\n\t}\n\n\tprotected limitPlanDates(task: ITask, plan: TaskPlan): TaskPlan {\n\t\tconst effectiveStart = plan.start_date || task.start_date;\n\n\t\tif (plan.earliestStart) {\n\t\t\tif (effectiveStart < plan.earliestStart) {\n\t\t\t\tplan.start_date = plan.earliestStart;\n\t\t\t\tplan.end_date = plan.earliestEnd;\n\t\t\t}\n\t\t}\n\n\t\tif (plan.latestStart) {\n\t\t\tif (effectiveStart > plan.latestStart) {\n\t\t\t\tplan.start_date = plan.latestStart;\n\t\t\t\tplan.end_date = plan.latestEnd;\n\t\t\t}\n\t\t}\n\n\t\tif (plan.latestSchedulingStart && effectiveStart > plan.latestSchedulingStart) {\n\t\t\tplan.start_date = plan.latestSchedulingStart;\n\t\t\tplan.end_date = plan.latestSchedulingEnd;\n\t\t}\n\n\t\tif (plan.earliestSchedulingStart && effectiveStart < plan.earliestSchedulingStart) {\n\t\t\tplan.start_date = plan.earliestSchedulingStart;\n\t\t\tplan.end_date = plan.earliestSchedulingEnd;\n\t\t}\n\n\t\tif (plan.start_date) { // start/end dates are either both defined or both not\n\t\t\tif (plan.start_date > plan.latestSchedulingStart ||\n\t\t\t\tplan.start_date < plan.earliestSchedulingStart ||\n\t\t\t\tplan.start_date > plan.latestStart ||\n\t\t\t\tplan.start_date < plan.earliestStart ||\n\t\t\t\tplan.end_date > plan.latestSchedulingEnd ||\n\t\t\t\tplan.end_date < plan.earliestSchedulingEnd ||\n\t\t\t\tplan.end_date > plan.latestEnd ||\n\t\t\t\tplan.end_date < plan.earliestEnd) {\n\n\t\t\t\tplan.conflict = true;\n\t\t\t}\n\t\t}\n\t\treturn plan;\n\t}\n\n\tprotected buildWorkCollections(relations: IInternalLink[], constraints: ITask[], graphHelper: any) {\n\t\tconst gantt = this._gantt;\n\t\tconst orderedIds: TaskID[] = graphHelper.topologicalSort(relations);\n\t\tconst reversedIds: TaskID[] = orderedIds.slice().reverse();\n\t\tconst plansHash: IPlansHash = {};\n\n\t\tconst relationsMap: ITaskLinksMap = {};\n\t\tfor (let i = 0, len = orderedIds.length; i < len; i++) {\n\t\t\tconst id = orderedIds[i];\n\t\t\tconst task = gantt.getTask(id);\n\t\t\tif (!gantt._isAutoSchedulable(task)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trelationsMap[id] = {\n\t\t\t\tsuccessors: [],\n\t\t\t\tpredecessors: []\n\t\t\t};\n\n\t\t\tplansHash[id] = null;\n\t\t}\n\n\t\tfor (let i = 0, len = constraints.length; i < len; i++) {\n\t\t\tconst task = constraints[i];\n\n\t\t\tif (plansHash[task.id] === undefined) {\n\t\t\t\treversedIds.unshift(task.id);\n\t\t\t\torderedIds.unshift(task.id);\n\t\t\t\tplansHash[task.id] = null;\n\t\t\t\trelationsMap[task.id] = {\n\t\t\t\t\tsuccessors: [],\n\t\t\t\t\tpredecessors: []\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0, len = relations.length; i < len; i++) {\n\t\t\tconst rel = relations[i];\n\t\t\tif (relationsMap[rel.source]) {\n\t\t\t\trelationsMap[rel.source].successors.push(rel);\n\t\t\t}\n\n\t\t\tif (relationsMap[rel.target]) {\n\t\t\t\trelationsMap[rel.target].predecessors.push(rel);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\torderedIds,\n\t\t\treversedIds,\n\t\t\trelationsMap,\n\t\t\tplansHash\n\t\t};\n\t}\n\n\tprotected processConstraints(orderedIds: TaskID[], plansHash: IPlansHash, gantt: any, constraintsHelper: ConstraintsHelper) {\n\t\tfor (let i = 0; i < orderedIds.length; i++) {\n\t\t\tconst currentId = orderedIds[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\n\t\t\tconst constraintType = constraintsHelper.getConstraintType(task);\n\t\t\tif (\n\t\t\t\tconstraintType &&\n\t\t\t\tconstraintType !== ConstraintTypes.ASAP &&\n\t\t\t\tconstraintType !== ConstraintTypes.ALAP\n\t\t\t) {\n\t\t\t\tconst plan = constraintsHelper.processConstraint(\n\t\t\t\t\ttask,\n\t\t\t\t\tTaskPlan.Create()\n\t\t\t\t);\n\t\t\t\tplansHash[task.id] = plan;\n\t\t\t}\n\t\t}\n\t}\n}\n","interface IFlagHash {\n\t[id: string]: boolean;\n}\n\nfunction findGroups(links: IInternalLink[]): IConnectedGroup[] {\n\tconst visited: IFlagHash = {};\n\tconst groups = [];\n\tlet source: TaskID;\n\tlet target: TaskID;\n\tlet root: TaskID;\n\t// main loop - find any unvisited vertex from the input array and\n\t// treat it as the source, then perform a breadth first search from\n\t// it. All vertices visited from this search belong to the same group\n\tfor (let i = 0; i < links.length; i++) {\n\t\tsource = links[i].source;\n\t\ttarget = links[i].target;\n\t\troot = null;\n\t\tif (!visited[source]) {\n\t\t\troot = source;\n\t\t} else if (!visited[target]) {\n\t\t\troot = target;\n\t\t}\n\t\tif (root) {\n\t\t\t// there is an unvisited vertex in this pair.\n\t\t\t// perform a breadth first search, and push the resulting\n\t\t\t// group onto the list of all groups\n\t\t\tconst length = links.length;\n\t\t\tgroups.push(breadthFirstSearch(root, links, visited));\n\t\t\tif (length !== links.length) {\n\t\t\t\ti = -1;\n\t\t\t}\n\t\t}\n\t}\n\treturn groups;\n}\n\n// Breadth First Search function\n// v is the source vertex\n// links is the input array, which contains all gantt relations\n// visited is a dictionary for keeping track of whether a node is visited\nfunction breadthFirstSearch(\n\tv: TaskID,\n\tlinks: IInternalLink[],\n\tvisited: IFlagHash\n): IConnectedGroupsDetailed {\n\tconst queue: TaskID[] = [v];\n\tconst groupTasks: TaskID[] = [];\n\tconst groupLinksInternal: { [hashSum: string]: IInternalLink } = {};\n\tconst groupLinksPublic: { [id: string]: boolean } = {};\n\n\tlet currentVertex: TaskID;\n\twhile (queue.length > 0) {\n\t\tcurrentVertex = queue.shift();\n\t\tif (!visited[currentVertex]) {\n\t\t\tvisited[currentVertex] = true;\n\t\t\tgroupTasks.push(currentVertex);\n\t\t\t// go through the input array to find vertices that are\n\t\t\t// directly adjacent to the current vertex, and put them\n\t\t\t// onto the queue\n\t\t\tfor (let i = 0; i < links.length; i++) {\n\t\t\t\tconst link = links[i];\n\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\tif ((link.source == currentVertex || link.sourceParent == currentVertex)) {\n\t\t\t\t\tif (!visited[link.target]) {\n\t\t\t\t\t\tqueue.push(link.target);\n\t\t\t\t\t\tgroupLinksPublic[link.id] = true;\n\t\t\t\t\t\tlinks.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t\tgroupLinksInternal[link.hashSum] = link;\n\n\t\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\t} else if ((link.target == currentVertex || link.targetParent == currentVertex)) {\n\t\t\t\t\tif (!visited[link.source]) {\n\t\t\t\t\t\tqueue.push(link.source);\n\t\t\t\t\t\tgroupLinksPublic[link.id] = true;\n\t\t\t\t\t\tlinks.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t\tgroupLinksInternal[link.hashSum] = link;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst linksArray: LinkID[] = [];\n\tlet linksObjects: IInternalLink[] = [];\n\tfor (const i in groupLinksPublic) {\n\t\tlinksArray.push(i);\n\t}\n\tfor (const i in groupLinksInternal) {\n\t\tlinksObjects.push(groupLinksInternal[i]);\n\t}\n\t// GS-1689. If we have several levels of projects, the code above might not add the links\n\t// so, we need to return the original `links` object\n\tif (!linksObjects.length){\n\t\tlinksObjects = links;\n\t}\n\t// return everything in the current \"group\"\n\treturn { tasks: groupTasks, links: linksArray, processedLinks: linksObjects };\n}\n\nexport class ConnectedGroupsHelper {\n\tprivate _linksBuilder: any;\n\tprivate _gantt: any;\n\tconstructor(gantt: any, linksBuilder: any) {\n\t\tthis._linksBuilder = linksBuilder;\n\t\tthis._gantt = gantt;\n\t}\n\n\tgetConnectedGroupRelations = (id: TaskID): IInternalLink[] => {\n\t\tconst links = this._linksBuilder.getLinkedTasks();\n\t\tconst group = breadthFirstSearch(id, links, {});\n\t\treturn group.processedLinks;\n\t};\n\n\tgetConnectedGroup = (id: TaskID): IConnectedGroup | IConnectedGroup[] => {\n\t\tconst links = this._linksBuilder.getLinkedTasks();\n\t\tif (id !== undefined) {\n\t\t\tif (this._gantt.getTask(id).type === this._gantt.config.types.project) {\n\t\t\t\treturn { tasks: [], links: [] };\n\t\t\t}\n\n\t\t\tconst group = breadthFirstSearch(id, links, {});\n\t\t\treturn {\n\t\t\t\ttasks: group.tasks,\n\t\t\t\tlinks: group.links\n\t\t\t};\n\t\t} else {\n\t\t\treturn findGroups(links).map(group => ({ tasks: group.tasks, links: group.links }));\n\t\t}\n\t};\n}\n","export class LoopsFinder {\n\tprivate _linksBuilder: any;\n\tprivate _graphHelper: any;\n\tprivate _gantt: any;\n\tconstructor(gantt: any, graphHelper: any, linksBuilder: any) {\n\t\tthis._linksBuilder = linksBuilder;\n\t\tthis._graphHelper = graphHelper;\n\t\tthis._gantt = gantt;\n\t}\n\tisCircularLink = (link: ILink): boolean => {\n\t\treturn !!this.getLoopContainingLink(link);\n\t};\n\n\tgetLoopContainingLink = (link: ILink): any => {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst linksBuilder = this._linksBuilder;\n\t\tconst gantt = this._gantt;\n\n\t\tlet allRelations = linksBuilder.getLinkedTasks();\n\t\tif (!gantt.isLinkExists(link.id)) {\n\t\t\tallRelations = allRelations.concat(gantt._formatLink(link));\n\t\t}\n\n\t\tconst cycles = graphHelper.findLoops(allRelations);\n\n\t\tconst found = false;\n\t\tfor (let i = 0; i < cycles.length && !found; i++) {\n\t\t\tconst links = cycles[i].links;\n\t\t\tfor (let j = 0; j < links.length; j++) {\n\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\tif (links[j] == link.id) {\n\t\t\t\t\treturn cycles[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfindCycles = () => {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst linksBuilder = this._linksBuilder;\n\n\t\tconst allRelations = linksBuilder.getLinkedTasks();\n\t\treturn graphHelper.findLoops(allRelations);\n\t};\n}\n","\n/* eslint-disable no-restricted-globals */\nvar globalScope;\nif(typeof window !== \"undefined\"){\n\tglobalScope = window;\n}else{\n\tglobalScope = global;\n}\n/* eslint-enable no-restricted-globals */\n\nexport default globalScope;","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\nimport global from \"../../utils/global\";\nimport { SelectedRegion } from \"./selectedRegion\";\n\nexport class EventsManager {\n\tprivate _mouseDown: boolean = false;\n\tprivate _domEvents: any;\n\tprivate _originPosition: string;\n\tprivate _gantt: any;\n\tprivate _restoreOriginPosition: () => void;\n\tconstructor(gantt: any) {\n\t\tthis._gantt = gantt;\n\t\tthis._domEvents = gantt._createDomEventScope();\n\t}\n\n\tattach(selectedRegion: SelectedRegion, useKey?: \"shiftKey\" | \"ctrlKey\" | \"altKey\", ignore?: any): void {\n\t\tconst gantt = this._gantt;\n\t\tconst _target = selectedRegion.getViewPort();\n\t\tthis._originPosition = global.getComputedStyle(_target).display;\n\t\tthis._restoreOriginPosition = () => {\n\t\t\t_target.style.position = this._originPosition;\n\t\t};\n\t\tif (this._originPosition === \"static\") {\n\t\t\t_target.style.position = \"relative\";\n\t\t}\n\t\tconst state = gantt.$services.getService(\"state\");\n\t\tstate.registerProvider(\"clickDrag\", () => {\n\t\t\tconst result = { autoscroll: false };\n\t\t\treturn result;\n\t\t});\n\n\n\t\tlet scheduledDndCoordinates = null;\n\t\tconst startDragAndDrop = () => {\n\t\t\tif (!scheduledDndCoordinates) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._mouseDown = true;\n\t\t\tselectedRegion.setStart(gantt.copy(scheduledDndCoordinates));\n\t\t\tselectedRegion.setPosition(gantt.copy(scheduledDndCoordinates));\n\t\t\tselectedRegion.setEnd(gantt.copy(scheduledDndCoordinates));\n\t\t\tscheduledDndCoordinates = null;\n\t\t};\n\n\t\tthis._domEvents.attach(_target, \"mousedown\", (event) => {\n\t\t\tscheduledDndCoordinates = null;\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\n\t\t\tif (ignore !== undefined) {\n\t\t\t\tif (ignore instanceof Array) {\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\n\t\t\t\t} else {\n\t\t\t\t\tfilterTargets = ignore;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (filterTargets) {\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.registerProvider(\"clickDrag\", () => {\n\t\t\t\tconst result = { autoscroll: this._mouseDown };\n\t\t\t\treturn result;\n\t\t\t});\n\n\t\t\tif (useKey && event[useKey] !== true) { return; }\n\t\t\tscheduledDndCoordinates = this._getCoordinates(event, selectedRegion);\n\t\t});\n\t\tconst eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\n\t\tthis._domEvents.attach(eventElement, \"mouseup\", (event) => {\n\t\t\tscheduledDndCoordinates = null;\n\t\t\tif (useKey && event[useKey] !== true) { return; }\n\t\t\tif (this._mouseDown === true) {\n\t\t\t\tthis._mouseDown = false;\n\t\t\t\tconst coordinates = this._getCoordinates(event, selectedRegion);\n\t\t\t\tselectedRegion.dragEnd(coordinates);\n\t\t\t}\n\t\t});\n\t\tthis._domEvents.attach(_target, \"mousemove\", (event) => {\n\t\t\tif (useKey && event[useKey] !== true) { return; }\n\t\t\t// GS-854. If we don't have useKey for the click_drag extension,\n\t\t\t// check the drag_timeline to not simultaneously use both extensions\n\t\t\tconst dragTimeline = this._gantt.ext.clickDrag;\n\t\t\tconst dragTimelineUseKey = (this._gantt.config.drag_timeline || {}).useKey;\n\t\t\tif (dragTimeline && dragTimelineUseKey) {\n\t\t\t\tif (!useKey && event[dragTimelineUseKey]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet coordinates = null;\n\t\t\tif(!this._mouseDown && scheduledDndCoordinates){\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\n\t\t\t\tif(Math.abs(scheduledDndCoordinates.relative.left - coordinates.relative.left) > 5){\n\t\t\t\t\t// add small threshold not to start dnd on simple click\n\t\t\t\t\tstartDragAndDrop();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._mouseDown === true) {\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\n\t\t\t\tselectedRegion.setEnd(coordinates);\n\t\t\t\tselectedRegion.render();\n\t\t\t}\n\t\t});\n\t}\n\n\tdetach(): void {\n\t\tconst gantt = this._gantt;\n\t\tthis._domEvents.detachAll();\n\t\tif(this._restoreOriginPosition){\n\t\t\tthis._restoreOriginPosition();\n\t\t}\n\n\t\tconst state = gantt.$services.getService(\"state\");\n\t\tstate.unregisterProvider(\"clickDrag\");\n\t}\n\n\tdestructor(): void {\n\t\tthis.detach();\n\t}\n\n\tprivate _getCoordinates(event: MouseEvent, selectedRegion: SelectedRegion) {\n\t\tconst viewPort = selectedRegion.getViewPort();\n\t\tconst viewPortBounds = viewPort.getBoundingClientRect();\n\t\tconst { clientX, clientY } = event;\n\t\tconst result = {\n\t\t\tabsolute: {\n\t\t\t\tleft: clientX,\n\t\t\t\ttop: clientY\n\t\t\t},\n\t\t\trelative: {\n\t\t\t\tleft: clientX - viewPortBounds.left + viewPort.scrollLeft,\n\t\t\t\ttop: clientY - viewPortBounds.top + viewPort.scrollTop\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n}","var EventHost = function(){\n\tthis._silent_mode = false;\n\tthis.listeners = {};\n};\n\nEventHost.prototype = {\n\t_silentStart: function() {\n\t\tthis._silent_mode = true;\n\t},\n\t_silentEnd: function() {\n\t\tthis._silent_mode = false;\n\t}\n};\n\nvar\tcreateEventStorage = function(obj) {\n\tvar handlers = {};\n\tvar index = 0;\n\tvar eventStorage = function(){\n\t\tvar combinedResult = true;\n\t\tfor(var i in handlers){\n\t\t\tvar handlerResult = handlers[i].apply(obj, arguments);\n\t\t\tcombinedResult=combinedResult && handlerResult;\n\t\t}\n\t\treturn combinedResult;\n\t};\n\teventStorage.addEvent=function(handler, settings){\n\t\tif (typeof (handler) == \"function\"){\n\t\t\tvar handlerId;\n\t\t\tif(settings && settings.id){\n\t\t\t\thandlerId = settings.id;\n\t\t\t}else{\n\t\t\t\thandlerId = index;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tif(settings && settings.once){\n\t\t\t\tvar originalHandler = handler;\n\t\t\t\thandler = function(){\n\t\t\t\t\toriginalHandler();\n\t\t\t\t\teventStorage.removeEvent(handlerId);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\thandlers[handlerId] = handler;\n\t\t\treturn handlerId;\n\t\t}\n\t\treturn false;\n\t};\n\teventStorage.removeEvent=function(id){\n\t\tdelete handlers[id];\n\t};\n\n\teventStorage.clear = function(){\n\t\thandlers = {};\n\t};\n\n\treturn eventStorage;\n};\n\nfunction makeEventable(obj){\n\n\tvar eventHost = new EventHost();\n\tobj.attachEvent=function(eventName, handler, settings){\n\t\teventName = 'ev_'+eventName.toLowerCase();\n\t\tif (!eventHost.listeners[eventName]){\n\t\t\teventHost.listeners[eventName] = createEventStorage(this);\n\t\t}\n\n\t\tif(settings && settings.thisObject){\n\t\t\thandler = handler.bind(settings.thisObject);\n\t\t}\n\n\t\tvar innerId = eventHost.listeners[eventName].addEvent(handler, settings);\n\n\t\tvar handlerId = (eventName+':'+innerId); //return ID (ev_eventname:1)\n\t\tif(settings && settings.id){\n\t\t\thandlerId = settings.id;\n\t\t}\n\t\treturn handlerId;\n\t};\n\n\tobj.attachAll = function(callback){\n\t\tthis.attachEvent('listen_all', callback);\n\t};\n\n\tobj.callEvent=function(name, eventArguments){\n\t\tif (eventHost._silent_mode) return true;\n\n\t\tvar handlerName = 'ev_'+name.toLowerCase();\n\n\t\tvar listeners = eventHost.listeners;\n\t\tif (listeners['ev_listen_all']){\n\t\t\tlisteners['ev_listen_all'].apply(this, [name].concat(eventArguments));\n\t\t}\n\n\t\tif (listeners[handlerName])\n\t\t\treturn listeners[handlerName].apply(this, eventArguments);\n\t\treturn true;\n\t};\n\n\tobj.checkEvent=function(name){\n\t\tvar listeners = eventHost.listeners;\n\t\treturn (!!listeners['ev_'+name.toLowerCase()]);\n\t};\n\n\tobj.detachEvent=function(id){\n\t\tif (id){\n\t\t\tvar listeners = eventHost.listeners;\n\t\t\tfor(var i in listeners){\n\t\t\t\tlisteners[i].removeEvent(id); //remove event\n\t\t\t}\n\n\t\t\tvar list = id.split(':');//get EventName and ID\n\t\t\tvar listeners = eventHost.listeners;\n\t\t\tif(list.length === 2){\n\t\t\t\tvar eventName = list[0];\n\t\t\t\tvar eventId = list[1];\n\t\t\t\tif(listeners[eventName]){\n\t\t\t\t\tlisteners[eventName].removeEvent(eventId); //remove event\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tobj.detachAllEvents = function(){\n\t\tfor (var name in eventHost.listeners) {\n\t\t\teventHost.listeners[name].clear();\n\t\t}\n\t};\n\n}\n\nexport default makeEventable;","import eventable from \"../../utils/eventable\";\nimport { isEventable } from \"../../utils/helpers\";\n\nexport interface ISelectedRegionConfig {\n\tclassName?: string;\n\trender?: (startPoint: IPoint, endPoint: IPoint) => HTMLElement;\n\tviewPort?: HTMLElement;\n\tuseRequestAnimationFrame: boolean;\n\tcallback?: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\n\tsingleRow: boolean;\n}\n\ninterface ICoordinates {\n\tleft: number;\n\ttop: number;\n}\n\nexport interface IPoint {\n\tabsolute: ICoordinates;\n\trelative: ICoordinates;\n}\n\nexport class SelectedRegion {\n\trender: () => void;\n\tprivate _viewPort: HTMLElement & eventable;\n\tprivate _el: HTMLElement = document.createElement(\"div\");\n\tprivate _callback: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\n\tprivate _startPoint: IPoint;\n\tprivate _endPoint: IPoint;\n\tprivate _positionPoint: IPoint;\n\tprivate _useRequestAnimationFrame: boolean;\n\tprivate _startDate: Date;\n\tprivate _endDate: Date;\n\tprivate _singleRow: boolean;\n\tprivate _gantt: any;\n\tprivate _view: any;\n\n\tconstructor(config: ISelectedRegionConfig, gantt: any, view: any) {\n\t\tthis._gantt = gantt;\n\t\tthis._view = view;\n\t\tthis._viewPort = config.viewPort;\n\t\tthis._el.classList.add(config.className);\n\t\tif (typeof config.callback === \"function\") {\n\t\t\tthis._callback = config.callback;\n\t\t}\n\n\t\tthis.render = () => {\n\t\t\tlet node;\n\t\t\tif(config.render){\n\t\t\t\tnode = config.render(this._startPoint, this._endPoint);\n\t\t\t}else{\n\t\t\t\tnode = this.defaultRender(this._startPoint, this._endPoint);\n\t\t\t}\n\n\t\t\tif(node !== this._el){\n\t\t\t\tif(this._el && this._el.parentNode){\n\t\t\t\t\tthis._el.parentNode.removeChild(this._el);\n\t\t\t\t}\n\t\t\t\tthis._el = node;\n\t\t\t}\n\n\t\t\tif (config.className !== \"\") {\n\t\t\t\tthis._el.classList.add(config.className);\n\t\t\t}\n\t\t\tthis.draw();\n\t\t};\n\n\t\tif (!isEventable(this._viewPort)) {\n\t\t\teventable(this._viewPort);\n\t\t}\n\t\tthis._singleRow = config.singleRow;\n\t\tthis._useRequestAnimationFrame = config.useRequestAnimationFrame;\n\t}\n\n\tdefaultRender = (start: IPoint, end: IPoint) => {\n\t\tif(!this._el){\n\t\t\tthis._el = document.createElement(\"div\");\n\t\t}\n\t\tconst node = this._el;\n\t\t// const gantt = this._gantt;\n\n\t\tconst top = Math.min(start.relative.top, end.relative.top);\n\t\tconst bottom = Math.max(start.relative.top, end.relative.top);\n\t\tconst left = Math.min(start.relative.left, end.relative.left);\n\t\tconst right = Math.max(start.relative.left, end.relative.left);\n\n\t\tif (this._singleRow) {\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\n\t\t\tnode.style.height = pos.height + \"px\";\n\t\t\tnode.style.top = pos.top + \"px\";\n\t\t} else {\n\t\t\tnode.style.height = Math.abs(bottom - top) + \"px\";\n\t\t\tnode.style.top = top + \"px\";\n\t\t}\n\t\tnode.style.width = Math.abs(right - left) + \"px\";\n\t\tnode.style.left = left + \"px\";\n\t\treturn node;\n\t};\n\n\tdraw() {\n\t\tif (this._useRequestAnimationFrame) {\n\t\t\treturn requestAnimationFrame(() => {\n\t\t\t\tthis._viewPort.appendChild(this.getElement());\n\t\t\t});\n\t\t} else {\n\t\t\tthis._viewPort.appendChild(this.getElement());\n\t\t}\n\t}\n\n\tclear() {\n\t\tif (this._useRequestAnimationFrame) {\n\t\t\treturn requestAnimationFrame(() => {\n\t\t\t\tif (!this._el.parentNode) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._viewPort.removeChild(this._el);\n\t\t\t});\n\t\t} else {\n\t\t\tif (!this._el.parentNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._viewPort.removeChild(this._el);\n\t\t}\n\t}\n\n\tgetElement() {\n\t\treturn this._el;\n\t}\n\n\tgetViewPort() {\n\t\treturn this._viewPort;\n\t}\n\n\tsetStart(startPoint: IPoint) {\n\t\tconst gantt = this._gantt;\n\t\tthis._startPoint = startPoint;\n\t\tthis._startDate = gantt.dateFromPos(this._startPoint.relative.left);\n\t\tthis._viewPort.callEvent(\"onBeforeDrag\", [this._startPoint]);\n\t}\n\n\tsetEnd(endPoint: IPoint) {\n\t\tconst gantt = this._gantt;\n\t\tthis._endPoint = endPoint;\n\t\tif (this._singleRow) {\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\n\t\t\tthis._endPoint.relative.top = pos.top;\n\t\t}\n\t\tthis._endDate = gantt.dateFromPos(this._endPoint.relative.left);\n\t\tif (this._startPoint.relative.left > this._endPoint.relative.left) {\n\t\t\tthis._positionPoint = {\n\t\t\t\trelative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top },\n\t\t\t\tabsolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top }\n\t\t\t};\n\t\t}\n\t\tif (this._startPoint.relative.top > this._endPoint.relative.top) {\n\t\t\tthis._positionPoint = {\n\t\t\t\trelative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top },\n\t\t\t\tabsolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top }\n\t\t\t};\n\t\t}\n\n\n\t\tthis._viewPort.callEvent(\"onDrag\", [this._startPoint, this._endPoint]);\n\t}\n\n\tsetPosition(positionPoint: IPoint) {\n\t\tthis._positionPoint = positionPoint;\n\t}\n\n\tdragEnd(endPoint: IPoint) {\n\t\tconst gantt = this._gantt;\n\t\tif(endPoint.relative.left < 0){\n\t\t\tendPoint.relative.left = 0;\n\t\t}\n\t\tthis._viewPort.callEvent(\"onBeforeDragEnd\", [this._startPoint, endPoint]);\n\t\tthis.setEnd(endPoint);\n\t\t// GS-1422. The endDate can be null if we drag the mouse outside the Gantt container\n\t\tthis._endDate = this._endDate || gantt.getState().max_date;\n\n\t\tif (this._startDate.valueOf() > this._endDate.valueOf()) {\n\t\t\t[ this._startDate, this._endDate ] = [ this._endDate, this._startDate ];\n\t\t}\n\t\tthis.clear();\n\t\tconst tasksByTime = gantt.getTaskByTime(this._startDate, this._endDate);\n\t\tconst tasksByIndex = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top);\n\n\t\tthis._viewPort.callEvent(\"onDragEnd\", [this._startPoint, this._endPoint]);\n\t\tif (this._callback) {\n\t\t\tthis._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, tasksByTime, tasksByIndex);\n\t\t}\n\t}\n\n\tgetInBounds() {\n\t\treturn this._singleRow;\n\t}\n\n\tprivate _getTasksByTop(start: number, end:number) {\n\t\tconst gantt = this._gantt;\n\t\tlet startValue = start;\n\t\tlet endValue = end;\n\t\tif (start > end) {\n\t\t\tstartValue = end;\n\t\t\tendValue = start;\n\t\t}\n\t\tconst startIndex = this._getTaskPositionByTop(startValue).index;\n\t\tconst endIndex = this._getTaskPositionByTop(endValue).index;\n\t\tconst result = [];\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tconst task = gantt.getTaskByIndex(i);\n\t\t\tif (task) {\n\t\t\t\tresult.push(gantt.getTaskByIndex(i));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _getTaskPositionByTop(top: number){\n\t\tconst gantt = this._gantt;\n\t\tconst view = this._view;\n\t\tconst index = view.getItemIndexByTopPosition(top);\n\t\tconst task = gantt.getTaskByIndex(index);\n\t\tif(task){\n\t\t\tconst height = view.getItemHeight(task.id);\n\t\t\tconst itemTop = view.getItemTop(task.id);\n\t\t\treturn {\n\t\t\t\ttop: itemTop || 0,\n\t\t\t\theight: height || 0,\n\t\t\t\tindex\n\t\t\t};\n\t\t} else {\n\t\t\tconst dataHeight = view.getTotalHeight();\n\t\t\treturn {\n\t\t\t\ttop: top > dataHeight ? dataHeight : 0,\n\t\t\t\theight: gantt.config.row_height,\n\t\t\t\tindex: top > dataHeight ? gantt.getTaskCount() : 0\n\t\t\t};\n\t\t}\n\t}\n}","interface IPoint {\n\tx: number;\n\ty: number;\n}\n\nexport class EventsManager {\n\tstatic create(gantt: any) {\n\t\treturn new EventsManager(gantt);\n\t}\n\tprivate _mouseDown: boolean = false;\n\tprivate _startPoint: IPoint;\n\tprivate _scrollState: IPoint;\n\tprivate _originAutoscroll: boolean;\n\tprivate _domEvents: any;\n\tprivate _timeline: any;\n\tprivate _gantt: any;\n\tprivate _trace: IPoint[];\n\tprivate _originalReadonly: boolean;\n\n\tconstructor(gantt: any) {\n\t\tthis._gantt = gantt;\n\t\tthis._domEvents = gantt._createDomEventScope();\n\t\tthis._trace = [];\n\t}\n\n\tdestructor() {\n\t\tthis._domEvents.detachAll();\n\t}\n\n\tattach(timeline: any): void {\n\t\tthis._timeline = timeline;\n\t\tconst gantt = this._gantt;\n\t\tthis._domEvents.attach(timeline.$task, \"mousedown\", (event) => {\n\t\t\tif (!gantt.config.drag_timeline) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { useKey,ignore, enabled } = gantt.config.drag_timeline;\n\t\t\tif(enabled === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\n\t\t\tif(ignore !== undefined) {\n\t\t\t\tif(ignore instanceof Array){\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\n\t\t\t\t} else {\n\t\t\t\t\tfilterTargets = ignore;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (filterTargets) {\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (useKey && event[useKey] !== true) { return; }\n\n\t\t\tthis._startDrag(event);\n\t\t});\n\n\t\tthis._domEvents.attach(document, \"keydown\", (event) => {\n\t\t\tif (!gantt.config.drag_timeline) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\n\t\t\tif (useKey && event[useKey] === true) {\n\t\t\t\tthis._applyDndReadyStyles();\n\t\t\t}\n\t\t});\n\t\tthis._domEvents.attach(document, \"keyup\", (event) => {\n\t\t\tif (!gantt.config.drag_timeline) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\n\t\t\tif (useKey && event[useKey] === false) {\n\t\t\t\tthis._clearDndReadyStyles();\n\t\t\t\tthis._stopDrag(event);\n\t\t\t}\n\t\t});\n\n\t\tthis._domEvents.attach(document, \"mouseup\", (event) => {\n\t\t\tthis._stopDrag(event);\n\t\t});\n\t\tthis._domEvents.attach(gantt.$root, \"mouseup\", (event) => {\n\t\t\tthis._stopDrag(event);\n\t\t});\n\t\tthis._domEvents.attach(document, \"mouseleave\", (event) => {\n\t\t\tthis._stopDrag(event);\n\t\t});\n\t\tthis._domEvents.attach(gantt.$root, \"mouseleave\", (event) => {\n\t\t\tthis._stopDrag(event);\n\t\t});\n\n\t\tthis._domEvents.attach(gantt.$root, \"mousemove\", (event) => {\n\t\t\tif (!gantt.config.drag_timeline) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\n\t\t\tif (useKey && event[useKey] !== true) { return; }\n\t\t\t// GS-854. If we don't have useKey for the drag_timeline extension,\n\t\t\t// check the click_drag to not simultaneously use both extensions\n\t\t\tconst clickDrag = this._gantt.ext.clickDrag;\n\t\t\tconst clickDragUseKey = (this._gantt.config.click_drag || {}).useKey;\n\t\t\tif (clickDrag && clickDragUseKey) {\n\t\t\t\tif (!useKey && event[clickDragUseKey]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._mouseDown === true) {\n\t\t\t\tthis._trace.push({ x: event.clientX, y: event.clientY });\n\t\t\t\tconst scrollPosition: IPoint = this._countNewScrollPosition({ x: event.clientX, y: event.clientY });\n\t\t\t\tthis._setScrollPosition(timeline, scrollPosition);\n\t\t\t\tthis._scrollState = scrollPosition;\n\t\t\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _calculateDirectionVector = () => {\n\t\tconst traceSteps = 10;\n\t\tif(this._trace.length >= traceSteps) {\n\t\t\tconst dots = this._trace.slice(this._trace.length - traceSteps);\n\n\t\t\tconst vectors = [];\n\t\t\tfor(let i = 1; i < dots.length; i++) {\n\t\t\t\tvectors.push({\n\t\t\t\t\tx: dots[i].x - dots[i - 1].x,\n\t\t\t\t\ty: dots[i].y - dots[i - 1].y\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst resultVector = {x:0, y:0};\n\n\t\t\tvectors.forEach((vector) => {\n\t\t\t\tresultVector.x += vector.x;\n\t\t\t\tresultVector.y += vector.y;\n\t\t\t});\n\n\t\t\tconst magnitude = Math.sqrt(resultVector.x*resultVector.x + resultVector.y*resultVector.y);\n\t\t\tconst angleDegrees = Math.atan2(Math.abs(resultVector.y), Math.abs(resultVector.x)) * 180 / Math.PI;\n\n\t\t\treturn {\n\t\t\t\tmagnitude,\n\t\t\t\tangleDegrees\n\t\t\t};\n\n\t\t}\n\t\treturn null;\n\t};\n\n\tprivate _applyDndReadyStyles = (): void => {\n\t\tthis._timeline.$task.classList.add(\"gantt_timeline_move_available\");\n\t};\n\n\tprivate _clearDndReadyStyles = (): void => {\n\t\tthis._timeline.$task.classList.remove(\"gantt_timeline_move_available\");\n\t};\n\n\tprivate _getScrollPosition = (timeline: any): IPoint => {\n\t\tconst gantt = this._gantt;\n\t\treturn {\n\t\t\tx: gantt.$ui.getView(timeline.$config.scrollX).getScrollState().position,\n\t\t\ty: gantt.$ui.getView(timeline.$config.scrollY).getScrollState().position\n\t\t};\n\t};\n\tprivate _countNewScrollPosition = (coords: IPoint): IPoint => {\n\t\tconst vector = this._calculateDirectionVector();\n\t\tlet shiftX = this._startPoint.x - coords.x;\n\t\tlet shiftY = this._startPoint.y - coords.y;\n\t\tif(vector){\n\t\t\tif(vector.angleDegrees < 15){\n\t\t\t\tshiftY = 0;\n\t\t\t} else if(vector.angleDegrees > 75){\n\t\t\t\tshiftX = 0;\n\t\t\t}\n\t\t}\n\n\t\tconst result = {\n\t\t\tx: this._scrollState.x + shiftX,\n\t\t\ty: this._scrollState.y + shiftY\n\t\t};\n\t\treturn result;\n\t};\n\tprivate _setScrollPosition = (timeline: any, coords: IPoint): void => {\n\t\tconst gantt = this._gantt;\n\t\trequestAnimationFrame(() => {\n\t\t\tgantt.scrollLayoutCell(timeline.$id, coords.x, coords.y);\n\t\t});\n\t};\n\tprivate _stopDrag = (event: Event): void => {\n\t\tconst gantt = this._gantt;\n\t\tthis._trace = [];\n\t\tgantt.$root.classList.remove(\"gantt_noselect\");\n\n\t\tif(this._originalReadonly !== undefined){\n\t\t\tgantt.config.readonly = this._originalReadonly;\n\t\t\tif(this._mouseDown && gantt.config.drag_timeline && gantt.config.drag_timeline.render){\n\t\t\t\tgantt.render();\n\t\t\t}\n\t\t}\n\n\t\tif(this._originAutoscroll !== undefined){\n\t\t\tgantt.config.autoscroll = this._originAutoscroll;\n\t\t}\n\n\t\tif(gantt.config.drag_timeline){\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\n\t\t\tif (useKey && event[useKey] !== true) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis._mouseDown = false;\n\t};\n\n\tprivate _startDrag = (event: any) : void => {\n\t\tconst gantt = this._gantt;\n\t\tthis._originAutoscroll = gantt.config.autoscroll;\n\t\tgantt.config.autoscroll = false;\n\n\t\tgantt.$root.classList.add(\"gantt_noselect\");\n\t\tthis._originalReadonly = gantt.config.readonly;\n\t\tgantt.config.readonly = true;\n\n\t\tif(gantt.config.drag_timeline && gantt.config.drag_timeline.render){\n\t\t\tgantt.render();\n\t\t}\n\n\t\tthis._trace = [];\n\t\tthis._mouseDown = true;\n\t\tconst { x, y } = this._getScrollPosition(this._timeline);\n\t\tthis._scrollState = { x, y };\n\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\n\t\tthis._trace.push(this._startPoint);\n\t};\n}","export default function(gantt) {\n\n\t(function () {\n\t\tvar modalsStack = [];\n\n\t\tfunction isModal() {\n\t\t\treturn !!modalsStack.length;\n\t\t}\n\n\t\tfunction afterPopup(box) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (!isModal()){\n\t\t\t\t\tif(!gantt.$destroyed){\n\t\t\t\t\t\tgantt.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 1);\n\t\t}\n\n\t\tfunction startModal(box) {\n\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\n\t\t\tgantt.event(box, \"keydown\", trapFocus);\n\t\t\tmodalsStack.push(box);\n\t\t\t//gantt.$keyboardNavigation.dispatcher.disable();\n\t\t}\n\n\t\tfunction endModal() {\n\t\t\tvar box = modalsStack.pop();\n\t\t\tif (box) {\n\t\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\n\t\t\t}\n\t\t\tafterPopup(box);\n\n\t\t}\n\n\n\t\tfunction isTopModal(box) {\n\t\t\treturn box == modalsStack[modalsStack.length - 1];\n\t\t}\n\n\t\tfunction trapFocus(event) {\n\t\t\tvar target = event.currentTarget;\n\t\t\tif (!isTopModal(target)) return;\n\n\t\t\tgantt.$keyboardNavigation.trapFocus(target, event);\n\t\t}\n\n\t\tfunction traceLightbox() {\n\t\t\tstartModal(gantt.getLightbox());\n\t\t}\n\n\t\tgantt.attachEvent(\"onLightbox\", traceLightbox);\n\t\tgantt.attachEvent(\"onAfterLightbox\", endModal);\n\t\tgantt.attachEvent(\"onLightboxChange\", function () {\n\t\t\tendModal();\n\t\t\ttraceLightbox();\n\t\t});\n\n\n\t\tgantt.attachEvent(\"onAfterQuickInfo\", function () {\n\t\t\tafterPopup();\n\t\t});\n\n\t\tgantt.attachEvent(\"onMessagePopup\", function (box) {\n\t\t\tsaveFocus();\n\t\t\tstartModal(box);\n\t\t});\n\t\tgantt.attachEvent(\"onAfterMessagePopup\", function () {\n\t\t\tendModal();\n\t\t\trestoreFocus();\n\t\t});\n\n\t\tvar focusElement = null;\n\n\t\tfunction saveFocus() {\n\t\t\tfocusElement = gantt.utils.dom.getActiveElement();\n\t\t}\n\n\t\tfunction restoreFocus() {\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (focusElement) {\n\t\t\t\t\tfocusElement.focus();\n\t\t\t\t\tfocusElement = null;\n\t\t\t\t}\n\t\t\t}, 1);\n\t\t}\n\n\t\tgantt.$keyboardNavigation.isModal = isModal;\n\n\n\t})();\n\n};","\ninterface IQuickInfoContainer{\n\tparent: HTMLElement;\n\txViewport: HTMLElement;\n\tyViewport: HTMLElement;\n}\n\nexport class QuickInfo {\n\tprivate _quickInfoTask: TaskID;\n\tprivate _quickInfoBoxId: number | string;\n\tprivate _quickInfoBox: HTMLElement;\n\tprivate _quickInfoReadonly: boolean | null;\n\tprivate _container: HTMLElement;\n\tprivate _gantt: any;\n\n\tconstructor(gantt: any) {\n\t\tthis._gantt = gantt;\n\t}\n\n\t// show at coordinates:\n\t// show(x: number, y: number)\n\t// show for a task:\n\t// show(id: TaskID)\n\tshow : {\n\t\t(x: number, y: number) : void;\n\t\t(id: TaskID) : void;\n\t} = (id: TaskID | number, y? : number) : void => {\n\t\tif (y === undefined) {\n\t\t\tthis._showForTask(id);\n\t\t} else {\n\t\t\tthis._showAtCoordinates(id as number, y);\n\t\t}\n\t};\n\n\thide = (forced?: boolean) : any => {\n\t\tconst gantt = this._gantt;\n\t\tconst qi = this._quickInfoBox;\n\t\tthis._quickInfoBoxId = 0;\n\t\tconst taskId = this._quickInfoTask;\n\t\tthis._quickInfoTask = null;\n\n\t\tif (qi && qi.parentNode){\n\n\t\t\tif (gantt.config.quick_info_detached) {\n\t\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\n\t\t\t\treturn qi.parentNode.removeChild(qi);\n\t\t\t}\n\n\t\t\tqi.className += \" gantt_qi_hidden\";\n\t\t\tif (qi.style.right === \"auto\"){\n\t\t\t\tqi.style.left = \"-350px\";\n\t\t\t} else {\n\t\t\t\tqi.style.right = \"-350px\";\n\t\t\t}\n\n\t\t\tif (forced) {\n\t\t\t\tqi.style.left = qi.style.right = \"\";\n\t\t\t\tqi.parentNode.removeChild(qi);\n\t\t\t}\n\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\n\t\t}\n\t};\n\n\tgetNode = (): HTMLElement => {\n\t\tif(this._quickInfoBox) {\n\t\t\treturn this._quickInfoBox;\n\t\t}\n\t\treturn null;\n\t};\n\n\tsetContainer = (container: string|HTMLElement): void => {\n\t\tif(container){\n\t\t\tthis._container = typeof container === \"string\" ? document.getElementById(container) : container;\n\t\t}\n\t};\n\n\tsetContent = (content?: IQuickInfoContent) => {\n\t\tconst gantt = this._gantt;\n\n\t\tconst defaultContent = {\n\t\t\ttaskId: null,\n\t\t\theader: {\n\t\t\t\ttitle: \"\",\n\t\t\t\tdate: \"\"\n\t\t\t},\n\t\t\tcontent: \"\",\n\t\t\tbuttons: gantt.config.quickinfo_buttons\n\t\t};\n\n\t\tif(!content){\n\t\t\tcontent = defaultContent;\n\t\t}\n\n\t\tif(!content.taskId){\n\t\t\tcontent.taskId = defaultContent.taskId;\n\t\t}\n\n\t\tif(!content.header){\n\t\t\tcontent.header = defaultContent.header;\n\t\t}\n\n\t\tif(!content.header.title){\n\t\t\tcontent.header.title = defaultContent.header.title;\n\t\t}\n\t\tif(!content.header.date){\n\t\t\tcontent.header.date = defaultContent.header.date;\n\t\t}\n\t\tif(!content.content){\n\t\t\tcontent.content = defaultContent.content;\n\t\t}\n\t\tif(!content.buttons){\n\t\t\tcontent.buttons = defaultContent.buttons;\n\t\t}\n\n\n\t\tlet qi = this.getNode();\n\t\tif(!qi){\n\t\t\tqi = this._createQuickInfoElement();\n\t\t}\n\n\t\tif(content.taskId){\n\t\t\tthis._quickInfoBoxId = content.taskId;\n\t\t}\n\n\t\tconst titleBox = qi.querySelector(\".gantt_cal_qi_title\") as HTMLElement;\n\t\tconst titleContent = titleBox.querySelector(\".gantt_cal_qi_tcontent\");\n\t\tconst titleDate = titleBox.querySelector(\".gantt_cal_qi_tdate\");\n\t\tconst main = qi.querySelector(\".gantt_cal_qi_content\");\n\t\tconst controls = qi.querySelector(\".gantt_cal_qi_controls\") as HTMLElement;\n\n\t\tgantt._waiAria.quickInfoHeader(qi, [content.header.title, content.header.date].join(\" \"));\n\n\t\ttitleContent.innerHTML = content.header.title;\n\t\ttitleDate.innerHTML = content.header.date;\n\n\t\tif(!content.header.title && !content.header.date){\n\t\t\ttitleBox.style.display = \"none\";\n\t\t}else{\n\t\t\ttitleBox.style.display = \"\";\n\t\t}\n\t\tmain.innerHTML = content.content;\n\n\t\tconst buttons = content.buttons;\n\t\tif(!buttons.length){\n\t\t\tcontrols.style.display = \"none\";\n\t\t}else{\n\t\t\tcontrols.style.display = \"\";\n\t\t}\n\t\tlet html = \"\";\n\t\tfor (let i = 0; i < buttons.length; i++){\n\n\t\t\tconst ariaAttr = gantt._waiAria.quickInfoButtonAttrString(gantt.locale.labels[buttons[i]]);\n\n\t\t\thtml += `